From c8495f4dec2df493669b3f9dd8adf732b219b2d1 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Mon, 12 Oct 2020 12:22:24 -0400 Subject: [PATCH 01/18] Control panel is now hosted at `/app` - Fixed browser detection redirect - Used managed routing to redirect all requests to index.html if there is no matching static file --- .../ClientApp/package.json | 4 +- .../ClientApp/public/index.html | 1 + .../Controllers/ControlPanelController.cs | 54 +++++++++++++++++++ .../Controllers/HomeController.cs | 7 ++- src/Tgstation.Server.Host/Core/Application.cs | 12 ++++- 5 files changed, 72 insertions(+), 6 deletions(-) create mode 100644 src/Tgstation.Server.Host/Controllers/ControlPanelController.cs diff --git a/src/Tgstation.Server.Host/ClientApp/package.json b/src/Tgstation.Server.Host/ClientApp/package.json index 8182c4716b..0c920caa5b 100644 --- a/src/Tgstation.Server.Host/ClientApp/package.json +++ b/src/Tgstation.Server.Host/ClientApp/package.json @@ -1,5 +1,7 @@ { "private": true, + "_comment1": "This sets PUBLIC_URL during the build", + "homepage": "/app/", "dependencies": { "react-dom": "^16.13.1", "tgstation-server-control-panel": "0.4.0" @@ -7,7 +9,7 @@ "optionalDependencies": { "fsevents": "1.2.9" }, - "_comment": "fsevent@1.2.9 is locked in to prevent broken builds on windows for v1.2.11", + "_comment2": "fsevent@1.2.9 is locked in to prevent broken builds on windows for v1.2.11", "scripts": { "msbuild": "npm run clean && react-scripts build && cp-cli node_modules/tgstation-server-control-panel/build/public/ build/ && rimraf ../wwwroot && move-cli build ../wwwroot", "clean": "rimraf build" diff --git a/src/Tgstation.Server.Host/ClientApp/public/index.html b/src/Tgstation.Server.Host/ClientApp/public/index.html index 1a8f14c1ed..a2913c7dff 100644 --- a/src/Tgstation.Server.Host/ClientApp/public/index.html +++ b/src/Tgstation.Server.Host/ClientApp/public/index.html @@ -5,6 +5,7 @@ + - - - - - - - - - - - - Tgstation Server Control Panel - - - - -
- - - - diff --git a/src/Tgstation.Server.Host/ClientApp/src/index.css b/src/Tgstation.Server.Host/ClientApp/src/index.css deleted file mode 100644 index b4cc7250b9..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/index.css +++ /dev/null @@ -1,5 +0,0 @@ -body { - margin: 0; - padding: 0; - font-family: sans-serif; -} diff --git a/src/Tgstation.Server.Host/ClientApp/src/index.tsx b/src/Tgstation.Server.Host/ClientApp/src/index.tsx deleted file mode 100644 index 37b13e4d2a..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/index.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import * as React from "react"; -import * as ReactDOM from "react-dom"; - -import ControlPanel from "tgstation-server-control-panel"; - -import registerServiceWorker from "./registerServiceWorker"; - -import "./index.css"; - -const contentElement = document.getElementById("root"); - -if (!contentElement) - throw new Error("Missing root div, cannot render app!"); - -const legacyUserLanguageKey = "userLanguage"; -const userLang = navigator.language || navigator[legacyUserLanguageKey] || "en-CA"; -const serverAddress = window.location.href; -const controlPanel = ; - -registerServiceWorker(); - -ReactDOM.render(controlPanel, contentElement); diff --git a/src/Tgstation.Server.Host/ClientApp/src/react-app-env.d.ts b/src/Tgstation.Server.Host/ClientApp/src/react-app-env.d.ts deleted file mode 100644 index 6431bc5fc6..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/react-app-env.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// diff --git a/src/Tgstation.Server.Host/ClientApp/src/registerServiceWorker.ts b/src/Tgstation.Server.Host/ClientApp/src/registerServiceWorker.ts deleted file mode 100644 index 767998e229..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/registerServiceWorker.ts +++ /dev/null @@ -1,123 +0,0 @@ -// tslint:disable:no-console -// tslint:disable:curly -// In production, we register a service worker to serve assets from local cache. - -// This lets the app load faster on subsequent visits in production, and gives -// it offline capabilities. However, it also means that developers (and users) -// will only see deployed updates on the 'N+1' visit to a page, since previously -// cached resources are updated in the background. - -// To learn more about the benefits of this model, read https://goo.gl/KwvDNy. -// This link also includes instructions on opting out of this behavior. - -const isLocalhost = Boolean( - window.location.hostname === "localhost" || - // [::1] is the IPv6 localhost address. - window.location.hostname === "[::1]" || - // 127.0.0.1/8 is considered localhost for IPv4. - window.location.hostname.match( - /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/ - ) -); - -export default function register() { - if (process.env.NODE_ENV === "production" && "serviceWorker" in navigator) { - // The URL constructor is available in all browsers that support SW. - const publicUrl = new URL( - process.env.PUBLIC_URL!, - window.location.toString() - ); - if (publicUrl.origin !== window.location.origin) { - // Our service worker won't work if PUBLIC_URL is on a different origin - // from what our page is served on. This might happen if a CDN is used to - // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374 - return; - } - - window.addEventListener("load", () => { - const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`; - - if (isLocalhost) { - // This is running on localhost. Lets check if a service worker still exists or not. - checkValidServiceWorker(swUrl); - - // Add some additional logging to localhost, pointing developers to the - // service worker/PWA documentation. - navigator.serviceWorker.ready.then(() => { - console.log( - "This web app is being served cache-first by a service worker. To learn more, visit https://goo.gl/SC7cgQ" - ); - }); - } else { - // Is not local host. Just register service worker - registerValidSW(swUrl); - } - }); - } -} - -function registerValidSW(swUrl: string) { - navigator.serviceWorker - .register(swUrl) - .then(registration => { - registration.onupdatefound = () => { - const installingWorker = registration.installing; - if (installingWorker) { - installingWorker.onstatechange = () => { - if (installingWorker.state === "installed") { - if (navigator.serviceWorker.controller) { - // At this point, the old content will have been purged and - // the fresh content will have been added to the cache. - // It's the perfect time to display a 'New content is - // available; please refresh.' message in your web app. - console.log("New content is available; please refresh."); - } else { - // At this point, everything has been precached. - // It's the perfect time to display a - // 'Content is cached for offline use.' message. - console.log("Content is cached for offline use."); - } - } - }; - } - }; - }) - .catch(error => { - console.error("Error during service worker registration:", error); - }); -} - -function checkValidServiceWorker(swUrl: string) { - // Check if the service worker can be found. If it can't reload the page. - fetch(swUrl) - .then(response => { - // Ensure service worker exists, and that we really are getting a JS file. - if ( - response.status === 404 || - response.headers.get("content-type")!.indexOf("javascript") === -1 - ) { - // No service worker found. Probably a different app. Reload the page. - navigator.serviceWorker.ready.then(registration => { - registration.unregister().then(() => { - window.location.reload(); - }); - }); - } else { - // Service worker found. Proceed as normal. - registerValidSW(swUrl); - } - }) - .catch(() => { - console.log( - "No internet connection found. App is running in offline mode." - ); - }); -} - -export function unregister() { - if ("serviceWorker" in navigator) { - navigator.serviceWorker.ready.then(registration => { - registration.unregister(); - }); - } -} diff --git a/src/Tgstation.Server.Host/ClientApp/tsconfig.json b/src/Tgstation.Server.Host/ClientApp/tsconfig.json deleted file mode 100644 index 6277cb50da..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/tsconfig.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "compilerOptions": { - "outDir": "build/dist", - "module": "esnext", - "target": "es5", - "lib": [ - "es6", - "dom" - ], - "sourceMap": true, - "allowJs": true, - "jsx": "preserve", - "moduleResolution": "node", - "forceConsistentCasingInFileNames": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noImplicitAny": true, - "importHelpers": true, - "strictNullChecks": true, - "suppressImplicitAnyIndexErrors": true, - "noUnusedLocals": true, - "skipLibCheck": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "strict": true, - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true - }, - "exclude": [ - "node_modules", - "build" - ], - "include": [ - "src" - ] -} From 5c915cb642278adea5c8748c4eb8c8681212bda3 Mon Sep 17 00:00:00 2001 From: alexkar598 <25136265+alexkar598@users.noreply.github.com> Date: Mon, 12 Oct 2020 13:57:58 -0400 Subject: [PATCH 04/18] Squashed 'src/Tgstation.Server.Host/ClientApp/' content from commit 3689ff1b8 git-subtree-dir: src/Tgstation.Server.Host/ClientApp git-subtree-split: 3689ff1b86fdb916d0d2b75da9570131ba51c89b --- .browserlistrc | 5 + .editorconfig | 8 + .eslintrc.json | 65 + .github/workflows/CI.yml | 36 + .gitignore | 34 + .idea/.gitignore | 2 + .idea/codeStyles/Project.xml | 44 + .idea/codeStyles/codeStyleConfig.xml | 5 + .idea/compiler.xml | 8 + .idea/dataSources.xml | 11 + .idea/inspectionProfiles/Eslint.xml | 1504 ++ .idea/inspectionProfiles/Project_Default.xml | 15 + .idea/jsLibraryMappings.xml | 7 + .idea/misc.xml | 6 + .idea/modules.xml | 8 + .idea/prettier.xml | 6 + .idea/statistic.xml | 12 + .idea/tgs4panel.iml | 20 + .idea/vcs.xml | 6 + .prettierrc | 10 + .vscode/extensions.json | 3 + .vscode/launch.json | 16 + .vscode/settings.json | 22 + LICENSE | 661 + README.md | 1 + package-lock.json | 15655 ++++++++++++++++ package.json | 137 + public/android-chrome-192x192.png | Bin 0 -> 14478 bytes public/android-chrome-512x512.png | Bin 0 -> 41495 bytes public/apple-touch-icon.png | Bin 0 -> 13437 bytes public/browserconfig.xml | 9 + public/favicon-16x16.png | Bin 0 -> 1316 bytes public/favicon-32x32.png | Bin 0 -> 2511 bytes public/favicon.ico | Bin 0 -> 15086 bytes public/manifest.json | 19 + public/mstile-150x150.png | Bin 0 -> 10266 bytes public/safari-pinned-tab.svg | 28 + scripts/api_download.js | 16 + scripts/generate_enums.js | 13 + scripts/msbuild.js | 9 + .../dtsgenerator/dist/core/dtsGenerator.d.ts | 22 + .../dtsgenerator/dist/core/dtsGenerator.js | 389 + .../dist/core/dtsGenerator.js.map | 1 + .../dtsgenerator/dist/core/dtsGenerator.ts | 335 + .../dtsgenerator/dist/core/jsonSchema.d.ts | 24 + .../dtsgenerator/dist/core/jsonSchema.js | 523 + .../dtsgenerator/dist/core/jsonSchema.js.map | 1 + .../dtsgenerator/dist/core/jsonSchema.ts | 560 + .../dtsgenerator/dist/core/schemaConvertor.js | 365 + .../openapi-client-axios-typegen/typegen.js | 359 + .../files/openapi-client-axios/client.js | 608 + .../openapi-client-axios/types/client.d.ts | 93 + scripts/patcher/patch.js | 4 + src/ApiClient/AdminClient.ts | 341 + src/ApiClient/InstanceClient.ts | 92 + src/ApiClient/InstanceUserClient.ts | 100 + src/ApiClient/JobsClient.ts | 150 + src/ApiClient/ServerClient.ts | 515 + src/ApiClient/UserClient.ts | 300 + src/ApiClient/generatedcode/.gitkeep | 0 src/ApiClient/models/ICredentials.ts | 4 + .../models/InternalComms/InternalError.ts | 153 + .../models/InternalComms/InternalStatus.ts | 38 + src/ApiClient/util/ConfigController.ts | 72 + src/ApiClient/util/CredentialsProvider.ts | 20 + src/ApiClient/util/JobsController.ts | 350 + src/ApiClient/util/LoginHooks.ts | 52 + src/ApiClient/util/config.ts | 71 + src/App.css | 29 + src/App.tsx | 156 + src/IAppProps.ts | 8 + src/Router.tsx | 129 + src/components/AppNavbar.tsx | 422 + src/components/utils/AccessDenied.tsx | 31 + src/components/utils/ErrorAlert.tsx | 91 + src/components/utils/ErrorBoundary.tsx | 62 + src/components/utils/JobCard.tsx | 173 + src/components/utils/JobsList.tsx | 187 + src/components/utils/Loading.tsx | 68 + src/components/utils/Reload.tsx | 46 + src/components/views/Admin/Logs.tsx | 278 + src/components/views/Admin/Update.tsx | 345 + src/components/views/Administration.tsx | 280 + src/components/views/ChangePassword.tsx | 261 + src/components/views/Configuration.tsx | 207 + src/components/views/Home.tsx | 85 + src/components/views/Instance/Jobs.tsx | 31 + src/components/views/Instance/List.tsx | 298 + src/components/views/Login.tsx | 119 + src/components/views/NotFound.tsx | 25 + src/components/views/User/Create.tsx | 277 + src/components/views/User/Edit.tsx | 575 + src/components/views/User/List.tsx | 229 + src/definitions/globals.d.ts | 4 + .../mapbox__react-click-to-select.d.ts | 1 + src/definitions/scss.d.ts | 5 + src/index.html | 51 + src/index.tsx | 30 + src/logo.svg | 1 + src/react-app-env.d.ts | 1 + src/styles/dark.scss | 349 + src/translations/ILocalization.ts | 3 + src/translations/ITranslation.ts | 8 + src/translations/ITranslationFactory.ts | 7 + src/translations/Locales.ts | 5 + src/translations/Translation.ts | 6 + src/translations/TranslationFactory.ts | 40 + src/translations/locales/en.json | 205 + src/utils/GithubClient.ts | 150 + src/utils/RouteController.ts | 131 + src/utils/delay.ts | 7 + src/utils/globalObjects.ts | 8 + src/utils/icolibrary.ts | 42 + src/utils/misc.ts | 50 + src/utils/routes.ts | 397 + tsconfig.json | 39 + webpack.common.js | 126 + webpack.dev.js | 89 + webpack.prod.js | 79 + 119 files changed, 30189 insertions(+) create mode 100644 .browserlistrc create mode 100644 .editorconfig create mode 100644 .eslintrc.json create mode 100644 .github/workflows/CI.yml create mode 100644 .gitignore create mode 100644 .idea/.gitignore create mode 100644 .idea/codeStyles/Project.xml create mode 100644 .idea/codeStyles/codeStyleConfig.xml create mode 100644 .idea/compiler.xml create mode 100644 .idea/dataSources.xml create mode 100644 .idea/inspectionProfiles/Eslint.xml create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/jsLibraryMappings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/prettier.xml create mode 100644 .idea/statistic.xml create mode 100644 .idea/tgs4panel.iml create mode 100644 .idea/vcs.xml create mode 100644 .prettierrc create mode 100644 .vscode/extensions.json create mode 100644 .vscode/launch.json create mode 100644 .vscode/settings.json create mode 100644 LICENSE create mode 100644 README.md create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/android-chrome-192x192.png create mode 100644 public/android-chrome-512x512.png create mode 100644 public/apple-touch-icon.png create mode 100644 public/browserconfig.xml create mode 100644 public/favicon-16x16.png create mode 100644 public/favicon-32x32.png create mode 100644 public/favicon.ico create mode 100644 public/manifest.json create mode 100644 public/mstile-150x150.png create mode 100644 public/safari-pinned-tab.svg create mode 100644 scripts/api_download.js create mode 100644 scripts/generate_enums.js create mode 100644 scripts/msbuild.js create mode 100644 scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/dtsGenerator.d.ts create mode 100644 scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/dtsGenerator.js create mode 100644 scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/dtsGenerator.js.map create mode 100644 scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/dtsGenerator.ts create mode 100644 scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/jsonSchema.d.ts create mode 100644 scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/jsonSchema.js create mode 100644 scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/jsonSchema.js.map create mode 100644 scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/jsonSchema.ts create mode 100644 scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/schemaConvertor.js create mode 100644 scripts/patcher/files/openapi-client-axios-typegen/typegen.js create mode 100644 scripts/patcher/files/openapi-client-axios/client.js create mode 100644 scripts/patcher/files/openapi-client-axios/types/client.d.ts create mode 100644 scripts/patcher/patch.js create mode 100644 src/ApiClient/AdminClient.ts create mode 100644 src/ApiClient/InstanceClient.ts create mode 100644 src/ApiClient/InstanceUserClient.ts create mode 100644 src/ApiClient/JobsClient.ts create mode 100644 src/ApiClient/ServerClient.ts create mode 100644 src/ApiClient/UserClient.ts create mode 100644 src/ApiClient/generatedcode/.gitkeep create mode 100644 src/ApiClient/models/ICredentials.ts create mode 100644 src/ApiClient/models/InternalComms/InternalError.ts create mode 100644 src/ApiClient/models/InternalComms/InternalStatus.ts create mode 100644 src/ApiClient/util/ConfigController.ts create mode 100644 src/ApiClient/util/CredentialsProvider.ts create mode 100644 src/ApiClient/util/JobsController.ts create mode 100644 src/ApiClient/util/LoginHooks.ts create mode 100644 src/ApiClient/util/config.ts create mode 100644 src/App.css create mode 100644 src/App.tsx create mode 100644 src/IAppProps.ts create mode 100644 src/Router.tsx create mode 100644 src/components/AppNavbar.tsx create mode 100644 src/components/utils/AccessDenied.tsx create mode 100644 src/components/utils/ErrorAlert.tsx create mode 100644 src/components/utils/ErrorBoundary.tsx create mode 100644 src/components/utils/JobCard.tsx create mode 100644 src/components/utils/JobsList.tsx create mode 100644 src/components/utils/Loading.tsx create mode 100644 src/components/utils/Reload.tsx create mode 100644 src/components/views/Admin/Logs.tsx create mode 100644 src/components/views/Admin/Update.tsx create mode 100644 src/components/views/Administration.tsx create mode 100644 src/components/views/ChangePassword.tsx create mode 100644 src/components/views/Configuration.tsx create mode 100644 src/components/views/Home.tsx create mode 100644 src/components/views/Instance/Jobs.tsx create mode 100644 src/components/views/Instance/List.tsx create mode 100644 src/components/views/Login.tsx create mode 100644 src/components/views/NotFound.tsx create mode 100644 src/components/views/User/Create.tsx create mode 100644 src/components/views/User/Edit.tsx create mode 100644 src/components/views/User/List.tsx create mode 100644 src/definitions/globals.d.ts create mode 100644 src/definitions/mapbox__react-click-to-select.d.ts create mode 100644 src/definitions/scss.d.ts create mode 100644 src/index.html create mode 100644 src/index.tsx create mode 100644 src/logo.svg create mode 100644 src/react-app-env.d.ts create mode 100644 src/styles/dark.scss create mode 100644 src/translations/ILocalization.ts create mode 100644 src/translations/ITranslation.ts create mode 100644 src/translations/ITranslationFactory.ts create mode 100644 src/translations/Locales.ts create mode 100644 src/translations/Translation.ts create mode 100644 src/translations/TranslationFactory.ts create mode 100644 src/translations/locales/en.json create mode 100644 src/utils/GithubClient.ts create mode 100644 src/utils/RouteController.ts create mode 100644 src/utils/delay.ts create mode 100644 src/utils/globalObjects.ts create mode 100644 src/utils/icolibrary.ts create mode 100644 src/utils/misc.ts create mode 100644 src/utils/routes.ts create mode 100644 tsconfig.json create mode 100644 webpack.common.js create mode 100644 webpack.dev.js create mode 100644 webpack.prod.js diff --git a/.browserlistrc b/.browserlistrc new file mode 100644 index 0000000000..85abe3f61d --- /dev/null +++ b/.browserlistrc @@ -0,0 +1,5 @@ +last 5 chrome version +last 5 firefox version +last 3 edge version +last 5 opera version +last 3 safari version \ No newline at end of file diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000000..f9366facfb --- /dev/null +++ b/.editorconfig @@ -0,0 +1,8 @@ +root = true + +[*] +indent_style = space +indent_size = 4 +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000000..5da6d41f79 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,65 @@ +{ + "env": { + "browser": true, + "es6": true + }, + "extends": [ + "eslint:recommended", + "plugin:react/recommended", + "plugin:@typescript-eslint/recommended", + "plugin:@typescript-eslint/recommended-requiring-type-checking", + "plugin:import/errors", + "plugin:import/warnings", + "plugin:import/typescript", + "plugin:import/react"], + "globals": { + "Atomics": "readonly", + "SharedArrayBuffer": "readonly" + }, + "ignorePatterns": [ + "node_modules/", + "src/ApiClient/generatedcode/", + "webpack*.js", + "scripts/patcher/", + "scripts/api_download.js", + "scripts/generate_enums.js" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaFeatures": { + "jsx": true + }, + "ecmaVersion": 2018, + "sourceType": "module", + "tsconfigRootDir": ".", + "project": ["./tsconfig.json"] + }, + "plugins": ["react", "@typescript-eslint", "prettier", "simple-import-sort"], + "rules": { + "simple-import-sort/sort": "error", + "@typescript-eslint/explicit-member-accessibility": [ + "error", + { + "accessibility": "explicit" + } + ], + "linebreak-style": "off", + "no-unused-vars": "off", + "prettier/prettier": "error", + "import/no-cycle": "error", + "@typescript-eslint/unbound-method": "off", + "@typescript-eslint/ban-ts-comment": [ + "warn", + { + "ts-expect-error": "allow-with-description" + } + ], + "@typescript-eslint/no-non-null-assertion": "off", + "@typescript-eslint/no-empty-interface": "off" + }, + "settings": { + "react": { + "version": "detect" + } + } +} diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml new file mode 100644 index 0000000000..f488ca6a62 --- /dev/null +++ b/.github/workflows/CI.yml @@ -0,0 +1,36 @@ +name: Node.js CI + +on: [push, pull_request] + +jobs: + build: + + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [12.x, 14.x] + + steps: + - uses: actions/checkout@v2 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + - run: npm ci + - run: npm run build + lint: + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [12.x, 14.x] + + steps: + - uses: actions/checkout@v2 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + - run: npm ci + - run: npm run lint diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..d7274e38c7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,34 @@ +# See https://help.github.com/ignore-files/ for more about ignoring files. + +# dependencies +/node_modules + +# testing +/coverage +/stats.json + +# production +/build +/dist + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local +/.idea/dataSources* + + +package_version.txt + +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +*.tgz + +/tgstation-server-control-panel-.*\.tgz + +#generated code +src/ApiClient/generatedcode diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000000..e7e9d11d4b --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,2 @@ +# Default ignored files +/workspace.xml diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 0000000000..33797513d8 --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000000..79ee123c2b --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000000..9736612612 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml new file mode 100644 index 0000000000..18a78734ca --- /dev/null +++ b/.idea/dataSources.xml @@ -0,0 +1,11 @@ + + + + + mariadb + true + org.mariadb.jdbc.Driver + jdbc:mariadb://localhost:3306 + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Eslint.xml b/.idea/inspectionProfiles/Eslint.xml new file mode 100644 index 0000000000..78d7bf54ee --- /dev/null +++ b/.idea/inspectionProfiles/Eslint.xml @@ -0,0 +1,1504 @@ + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000000..a66e284c7b --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,15 @@ + + + + \ No newline at end of file diff --git a/.idea/jsLibraryMappings.xml b/.idea/jsLibraryMappings.xml new file mode 100644 index 0000000000..07a456b5d8 --- /dev/null +++ b/.idea/jsLibraryMappings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000000..24eb271ab3 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000000..2ca627f5f5 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/prettier.xml b/.idea/prettier.xml new file mode 100644 index 0000000000..b0ab31a954 --- /dev/null +++ b/.idea/prettier.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/statistic.xml b/.idea/statistic.xml new file mode 100644 index 0000000000..c57e224f45 --- /dev/null +++ b/.idea/statistic.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/.idea/tgs4panel.iml b/.idea/tgs4panel.iml new file mode 100644 index 0000000000..c72b921c2a --- /dev/null +++ b/.idea/tgs4panel.iml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000000..35eb1ddfbb --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000000..7224b63429 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,10 @@ +{ + "arrowParens": "avoid", + "endOfLine": "auto", + "jsxBracketSameLine": true, + "semi": true, + "singleQuote": false, + "tabWidth": 4, + "trailingComma": "none", + "printWidth": 100 +} diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000000..400ff26bef --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["dbaeumer.vscode-eslint", "eg2.vscode-npm-script"] +} diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000000..a9449c101a --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,16 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + //this SO question can help you setup a debug environment https://stackoverflow.com/questions/48059983/react-debug-using-vscode-and-firefox-instead-of-chrome + "version": "0.2.0", + "configurations": [ + { + "type": "chrome", + "request": "launch", + "name": "Launch Chrome", + "url": "http://localhost:3000/tgstation-server-control-panel", + "webRoot": "${workspaceFolder}" + } + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000000..b43d529b52 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,22 @@ +{ + "editor.formatOnSave": true, + "files.insertFinalNewline": true, + "eslint.validate": ["typescript", "typescriptreact"], + "[javascriptreact]": { + "editor.codeActionsOnSave": { + "source.fixAll.eslint": true + } + }, + "[typescript]": { + "editor.formatOnSave": false, + "editor.codeActionsOnSave": { + "source.fixAll.eslint": true + } + }, + "[typescriptreact]": { + "editor.formatOnSave": false, + "editor.codeActionsOnSave": { + "source.fixAll.eslint": true + } + } +} diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000..dba13ed2dd --- /dev/null +++ b/LICENSE @@ -0,0 +1,661 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. diff --git a/README.md b/README.md new file mode 100644 index 0000000000..259c85a69a --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# tgstation-server-control-panel \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000000..bf95a24e3c --- /dev/null +++ b/package-lock.json @@ -0,0 +1,15655 @@ +{ + "name": "tgstation-server-control-panel", + "version": "0.4.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@anttiviljami/dtsgenerator": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@anttiviljami/dtsgenerator/-/dtsgenerator-2.5.2.tgz", + "integrity": "sha512-lpM6xpKojw2ToY5EMdhdq7ZdyiueYfTbav+Hmtof2KjFWB9po+CYTEEJqFp4/aR1Kjj43ozRfmUs/MWrrHoMaA==", + "dev": true, + "requires": { + "commander": "^5.0.0", + "cross-fetch": "^3.0.4", + "debug": "^4.1.1", + "glob": "^7.1.6", + "js-yaml": "^3.13.1", + "mkdirp": "^1.0.3", + "tslib": "^1.11.1" + }, + "dependencies": { + "commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + } + } + }, + "@apidevtools/json-schema-ref-parser": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-8.0.0.tgz", + "integrity": "sha512-n4YBtwQhdpLto1BaUCyAeflizmIbaloGShsPyRtFf5qdFJxfssj+GgLavczgKJFa3Bq+3St2CKcpRJdjtB4EBw==", + "requires": { + "@jsdevtools/ono": "^7.1.0", + "call-me-maybe": "^1.0.1", + "js-yaml": "^3.13.1" + } + }, + "@apidevtools/openapi-schemas": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@apidevtools/openapi-schemas/-/openapi-schemas-2.0.3.tgz", + "integrity": "sha512-QoPaxGXfgqgGpK1p21FJ400z56hV681a8DOcZt3J5z0WIHgFeaIZ4+6bX5ATqmOoCpRCsH4ITEwKaOyFMz7wOA==" + }, + "@apidevtools/swagger-methods": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@apidevtools/swagger-methods/-/swagger-methods-3.0.1.tgz", + "integrity": "sha512-1Vlm18XYW6Yg7uHunroXeunWz5FShPFAdxBbPy8H6niB2Elz9QQsCoYHMbcc11EL1pTxaIr9HXz2An/mHXlX1Q==" + }, + "@apidevtools/swagger-parser": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@apidevtools/swagger-parser/-/swagger-parser-9.0.1.tgz", + "integrity": "sha512-Irqybg4dQrcHhZcxJc/UM4vO7Ksoj1Id5e+K94XUOzllqX1n47HEA50EKiXTCQbykxuJ4cYGIivjx/MRSTC5OA==", + "requires": { + "@apidevtools/json-schema-ref-parser": "^8.0.0", + "@apidevtools/openapi-schemas": "^2.0.2", + "@apidevtools/swagger-methods": "^3.0.0", + "@jsdevtools/ono": "^7.1.0", + "call-me-maybe": "^1.0.1", + "openapi-types": "^1.3.5", + "z-schema": "^4.2.2" + }, + "dependencies": { + "openapi-types": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-1.3.5.tgz", + "integrity": "sha512-11oi4zYorsgvg5yBarZplAqbpev5HkuVNPlZaPTknPDzAynq+lnJdXAmruGWP0s+dNYZS7bjM+xrTpJw7184Fg==" + } + } + }, + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "@babel/compat-data": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.10.5.tgz", + "integrity": "sha512-mPVoWNzIpYJHbWje0if7Ck36bpbtTvIxOi9+6WSK9wjGEXearAqlwBoTQvVjsAY2VIwgcs8V940geY3okzRCEw==", + "requires": { + "browserslist": "^4.12.0", + "invariant": "^2.2.4", + "semver": "^5.5.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "@babel/core": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz", + "integrity": "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.9.0", + "@babel/helper-module-transforms": "^7.9.0", + "@babel/helpers": "^7.9.0", + "@babel/parser": "^7.9.0", + "@babel/template": "^7.8.6", + "@babel/traverse": "^7.9.0", + "@babel/types": "^7.9.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.13", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "json5": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.6.tgz", + "integrity": "sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ==", + "dev": true, + "requires": { + "@babel/types": "^7.9.6", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", + "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", + "requires": { + "@babel/types": "^7.10.4" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@babel/types": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@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" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@babel/types": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-builder-react-jsx": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.4.tgz", + "integrity": "sha512-5nPcIZ7+KKDxT1427oBivl9V9YTal7qk0diccnh7RrcgrT/pGFOjgGw1dgryyx1GvHEpXVfoDF6Ak3rTiWh8Rg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/types": "^7.10.4" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "dev": true + }, + "@babel/types": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-builder-react-jsx-experimental": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.10.5.tgz", + "integrity": "sha512-Buewnx6M4ttG+NLkKyt7baQn7ScC/Td+e99G914fRU8fGIUivDDgVIQeDHFa5e4CRSJQt58WpNHhsAZgtzVhsg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-module-imports": "^7.10.4", + "@babel/types": "^7.10.5" + }, + "dependencies": { + "@babel/helper-module-imports": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", + "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", + "dev": true, + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "dev": true + }, + "@babel/types": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-compilation-targets": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz", + "integrity": "sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ==", + "requires": { + "@babel/compat-data": "^7.10.4", + "browserslist": "^4.12.0", + "invariant": "^2.2.4", + "levenary": "^1.1.1", + "semver": "^5.5.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz", + "integrity": "sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A==", + "requires": { + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-member-expression-to-functions": "^7.10.5", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/generator": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.5.tgz", + "integrity": "sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==", + "requires": { + "@babel/types": "^7.10.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.5.tgz", + "integrity": "sha512-HiqJpYD5+WopCXIAbQDG0zye5XYVvcO9w/DHp5GsaGkRUaamLj2bEtu6i8rnGGprAhHM3qidCMgp71HF4endhA==", + "requires": { + "@babel/types": "^7.10.5" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", + "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-replace-supers": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", + "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", + "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@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.10.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", + "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/traverse": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz", + "integrity": "sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.10.5", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/parser": "^7.10.5", + "@babel/types": "^7.10.5", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + } + }, + "@babel/types": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.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==" + } + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz", + "integrity": "sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-regex": "^7.10.4", + "regexpu-core": "^4.7.0" + } + }, + "@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" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@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.10.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", + "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/types": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.4.tgz", + "integrity": "sha512-4K71RyRQNPRrR85sr5QY4X3VwG4wtVoXZB9+L3r1Gp38DhELyHCtovqydRi7c1Ovb17eRGiQ/FD5s8JdU0Uy5A==", + "requires": { + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/generator": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.5.tgz", + "integrity": "sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==", + "requires": { + "@babel/types": "^7.10.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", + "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@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.10.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", + "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/traverse": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz", + "integrity": "sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.10.5", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/parser": "^7.10.5", + "@babel/types": "^7.10.5", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + } + }, + "@babel/types": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.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==" + } + } + }, + "@babel/helper-function-name": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz", + "integrity": "sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.9.5" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@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" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@babel/types": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz", + "integrity": "sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-module-imports": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz", + "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-module-transforms": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz", + "integrity": "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.6", + "@babel/helper-simple-access": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/template": "^7.8.6", + "@babel/types": "^7.9.0", + "lodash": "^4.17.13" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz", + "integrity": "sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@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-regex": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", + "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", + "requires": { + "lodash": "^4.17.19" + } + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.4.tgz", + "integrity": "sha512-86Lsr6NNw3qTNl+TBcF1oRZMaVzJtbWTyTko+CQL/tvNvcGYEFKbLXDPxtW0HKk3McNOk4KzY55itGWCAGK5tg==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-wrap-function": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/generator": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.5.tgz", + "integrity": "sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==", + "requires": { + "@babel/types": "^7.10.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", + "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@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.10.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", + "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/traverse": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz", + "integrity": "sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.10.5", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/parser": "^7.10.5", + "@babel/types": "^7.10.5", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + } + }, + "@babel/types": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.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==" + } + } + }, + "@babel/helper-replace-supers": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.9.6.tgz", + "integrity": "sha512-qX+chbxkbArLyCImk3bWV+jB5gTNU/rsze+JlcF6Nf8tVTigPJSI1o1oBow/9Resa1yehUO9lIipsmu9oG4RzA==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.8.3", + "@babel/helper-optimise-call-expression": "^7.8.3", + "@babel/traverse": "^7.9.6", + "@babel/types": "^7.9.6" + } + }, + "@babel/helper-simple-access": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz", + "integrity": "sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==", + "dev": true, + "requires": { + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", + "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz", + "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==" + }, + "@babel/helper-wrap-function": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz", + "integrity": "sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug==", + "requires": { + "@babel/helper-function-name": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/generator": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.5.tgz", + "integrity": "sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==", + "requires": { + "@babel/types": "^7.10.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", + "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@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.10.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", + "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/traverse": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz", + "integrity": "sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.10.5", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/parser": "^7.10.5", + "@babel/types": "^7.10.5", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + } + }, + "@babel/types": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.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==" + } + } + }, + "@babel/helpers": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.6.tgz", + "integrity": "sha512-tI4bUbldloLcHWoRUMAj4g1bF313M/o6fBKhIsb3QnGVPwRm9JsNf/gqMkQ7zjqReABiffPV6RWj7hEglID5Iw==", + "dev": true, + "requires": { + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.9.6", + "@babel/types": "^7.9.6" + } + }, + "@babel/highlight": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", + "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.9.0", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.6.tgz", + "integrity": "sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q==", + "dev": true + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz", + "integrity": "sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.10.4", + "@babel/plugin-syntax-async-generators": "^7.8.0" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz", + "integrity": "sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz", + "integrity": "sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-dynamic-import": "^7.8.0" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz", + "integrity": "sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.0" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz", + "integrity": "sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz", + "integrity": "sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.4.tgz", + "integrity": "sha512-6vh4SqRuLLarjgeOf4EaROJAHjvu9Gl+/346PbDH9yWbJyfnJ/ah3jmYKYtswEyCoWZiidvVHjHshd4WgjB9BA==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.10.4" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz", + "integrity": "sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.4.tgz", + "integrity": "sha512-ZIhQIEeavTgouyMSdZRap4VPPHqJJ3NEs2cuHs5p0erH+iz6khB0qfgU8g7UuJkG88+fBMy23ZiU+nuHvekJeQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-optional-chaining": "^7.8.0" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz", + "integrity": "sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz", + "integrity": "sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@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.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz", + "integrity": "sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA==", + "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-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.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz", + "integrity": "sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g==", + "dev": true, + "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.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz", + "integrity": "sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.10.4.tgz", + "integrity": "sha512-oSAEz1YkBCAKr5Yiq8/BNtvSAPwkp/IyUnwZogd8p+F0RuYQQrLeRUzIQhueQTTBy/F+a40uS7OFKxnkRvmvFQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz", + "integrity": "sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz", + "integrity": "sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ==", + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.10.4" + }, + "dependencies": { + "@babel/helper-module-imports": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", + "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@babel/types": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz", + "integrity": "sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.5.tgz", + "integrity": "sha512-6Ycw3hjpQti0qssQcA6AMSFDHeNJ++R6dIMnpRqUjFeBBTmTDPa8zgF90OVfTvAo11mXZTlVUViY1g8ffrURLg==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz", + "integrity": "sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA==", + "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.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "globals": "^11.1.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/generator": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.5.tgz", + "integrity": "sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==", + "requires": { + "@babel/types": "^7.10.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.5.tgz", + "integrity": "sha512-HiqJpYD5+WopCXIAbQDG0zye5XYVvcO9w/DHp5GsaGkRUaamLj2bEtu6i8rnGGprAhHM3qidCMgp71HF4endhA==", + "requires": { + "@babel/types": "^7.10.5" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", + "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-replace-supers": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", + "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", + "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@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.10.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", + "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/traverse": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz", + "integrity": "sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.10.5", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/parser": "^7.10.5", + "@babel/types": "^7.10.5", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + } + }, + "@babel/types": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.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==" + } + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz", + "integrity": "sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz", + "integrity": "sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz", + "integrity": "sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz", + "integrity": "sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz", + "integrity": "sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw==", + "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.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz", + "integrity": "sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz", + "integrity": "sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg==", + "requires": { + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@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.10.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", + "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/types": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/plugin-transform-literals": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz", + "integrity": "sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz", + "integrity": "sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz", + "integrity": "sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw==", + "requires": { + "@babel/helper-module-transforms": "^7.10.5", + "@babel/helper-plugin-utils": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/generator": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.5.tgz", + "integrity": "sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==", + "requires": { + "@babel/types": "^7.10.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.5.tgz", + "integrity": "sha512-HiqJpYD5+WopCXIAbQDG0zye5XYVvcO9w/DHp5GsaGkRUaamLj2bEtu6i8rnGGprAhHM3qidCMgp71HF4endhA==", + "requires": { + "@babel/types": "^7.10.5" + } + }, + "@babel/helper-module-imports": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", + "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-module-transforms": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.5.tgz", + "integrity": "sha512-4P+CWMJ6/j1W915ITJaUkadLObmCRRSC234uctJfn/vHrsLNxsR8dwlcXv9ZhJWzl77awf+mWXSZEKt5t0OnlA==", + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-simple-access": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.5", + "lodash": "^4.17.19" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", + "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-replace-supers": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", + "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-simple-access": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", + "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", + "requires": { + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", + "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@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.10.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", + "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/traverse": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz", + "integrity": "sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.10.5", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/parser": "^7.10.5", + "@babel/types": "^7.10.5", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + } + }, + "@babel/types": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.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==" + } + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz", + "integrity": "sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w==", + "requires": { + "@babel/helper-module-transforms": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-simple-access": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/generator": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.5.tgz", + "integrity": "sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==", + "requires": { + "@babel/types": "^7.10.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.5.tgz", + "integrity": "sha512-HiqJpYD5+WopCXIAbQDG0zye5XYVvcO9w/DHp5GsaGkRUaamLj2bEtu6i8rnGGprAhHM3qidCMgp71HF4endhA==", + "requires": { + "@babel/types": "^7.10.5" + } + }, + "@babel/helper-module-imports": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", + "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-module-transforms": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.5.tgz", + "integrity": "sha512-4P+CWMJ6/j1W915ITJaUkadLObmCRRSC234uctJfn/vHrsLNxsR8dwlcXv9ZhJWzl77awf+mWXSZEKt5t0OnlA==", + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-simple-access": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.5", + "lodash": "^4.17.19" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", + "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-replace-supers": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", + "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-simple-access": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", + "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", + "requires": { + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", + "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@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.10.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", + "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/traverse": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz", + "integrity": "sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.10.5", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/parser": "^7.10.5", + "@babel/types": "^7.10.5", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + } + }, + "@babel/types": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.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==" + } + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz", + "integrity": "sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw==", + "requires": { + "@babel/helper-hoist-variables": "^7.10.4", + "@babel/helper-module-transforms": "^7.10.5", + "@babel/helper-plugin-utils": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/generator": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.5.tgz", + "integrity": "sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==", + "requires": { + "@babel/types": "^7.10.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.5.tgz", + "integrity": "sha512-HiqJpYD5+WopCXIAbQDG0zye5XYVvcO9w/DHp5GsaGkRUaamLj2bEtu6i8rnGGprAhHM3qidCMgp71HF4endhA==", + "requires": { + "@babel/types": "^7.10.5" + } + }, + "@babel/helper-module-imports": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", + "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-module-transforms": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.5.tgz", + "integrity": "sha512-4P+CWMJ6/j1W915ITJaUkadLObmCRRSC234uctJfn/vHrsLNxsR8dwlcXv9ZhJWzl77awf+mWXSZEKt5t0OnlA==", + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-simple-access": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.5", + "lodash": "^4.17.19" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", + "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-replace-supers": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", + "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-simple-access": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", + "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", + "requires": { + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", + "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@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.10.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", + "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/traverse": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz", + "integrity": "sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.10.5", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/parser": "^7.10.5", + "@babel/types": "^7.10.5", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + } + }, + "@babel/types": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.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==" + } + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz", + "integrity": "sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA==", + "requires": { + "@babel/helper-module-transforms": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/generator": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.5.tgz", + "integrity": "sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==", + "requires": { + "@babel/types": "^7.10.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.5.tgz", + "integrity": "sha512-HiqJpYD5+WopCXIAbQDG0zye5XYVvcO9w/DHp5GsaGkRUaamLj2bEtu6i8rnGGprAhHM3qidCMgp71HF4endhA==", + "requires": { + "@babel/types": "^7.10.5" + } + }, + "@babel/helper-module-imports": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", + "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-module-transforms": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.5.tgz", + "integrity": "sha512-4P+CWMJ6/j1W915ITJaUkadLObmCRRSC234uctJfn/vHrsLNxsR8dwlcXv9ZhJWzl77awf+mWXSZEKt5t0OnlA==", + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-simple-access": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.5", + "lodash": "^4.17.19" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", + "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-replace-supers": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", + "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-simple-access": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", + "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", + "requires": { + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", + "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@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.10.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", + "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/traverse": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz", + "integrity": "sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.10.5", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/parser": "^7.10.5", + "@babel/types": "^7.10.5", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + } + }, + "@babel/types": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.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==" + } + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz", + "integrity": "sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.10.4" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz", + "integrity": "sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz", + "integrity": "sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/generator": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.5.tgz", + "integrity": "sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==", + "requires": { + "@babel/types": "^7.10.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.5.tgz", + "integrity": "sha512-HiqJpYD5+WopCXIAbQDG0zye5XYVvcO9w/DHp5GsaGkRUaamLj2bEtu6i8rnGGprAhHM3qidCMgp71HF4endhA==", + "requires": { + "@babel/types": "^7.10.5" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", + "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-replace-supers": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", + "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", + "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@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.10.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", + "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/traverse": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz", + "integrity": "sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.10.5", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/parser": "^7.10.5", + "@babel/types": "^7.10.5", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + } + }, + "@babel/types": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.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==" + } + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz", + "integrity": "sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw==", + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@babel/types": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz", + "integrity": "sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.10.4.tgz", + "integrity": "sha512-Zd4X54Mu9SBfPGnEcaGcOrVAYOtjT2on8QZkLKEq1S/tHexG39d9XXGZv19VfRrDjPJzFmPfTAqOQS1pfFOujw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.10.4.tgz", + "integrity": "sha512-L+MfRhWjX0eI7Js093MM6MacKU4M6dnCRa/QPDwYMxjljzSCzzlzKzj9Pk4P3OtrPcxr2N3znR419nr3Xw+65A==", + "dev": true, + "requires": { + "@babel/helper-builder-react-jsx": "^7.10.4", + "@babel/helper-builder-react-jsx-experimental": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-jsx": "^7.10.4" + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.10.4.tgz", + "integrity": "sha512-RM3ZAd1sU1iQ7rI2dhrZRZGv0aqzNQMbkIUCS1txYpi9wHQ2ZHNjo5TwX+UD6pvFW4AbWqLVYvKy5qJSAyRGjQ==", + "dev": true, + "requires": { + "@babel/helper-builder-react-jsx-experimental": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-jsx": "^7.10.4" + } + }, + "@babel/plugin-transform-react-jsx-self": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.10.4.tgz", + "integrity": "sha512-yOvxY2pDiVJi0axdTWHSMi5T0DILN+H+SaeJeACHKjQLezEzhLx9nEF9xgpBLPtkZsks9cnb5P9iBEi21En3gg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-jsx": "^7.10.4" + } + }, + "@babel/plugin-transform-react-jsx-source": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.10.5.tgz", + "integrity": "sha512-wTeqHVkN1lfPLubRiZH3o73f4rfon42HpgxUSs86Nc+8QIcm/B9s8NNVXu/gwGcOyd7yDib9ikxoDLxJP0UiDA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-jsx": "^7.10.4" + } + }, + "@babel/plugin-transform-react-pure-annotations": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.10.4.tgz", + "integrity": "sha512-+njZkqcOuS8RaPakrnR9KvxjoG1ASJWpoIv/doyWngId88JoFlPlISenGXjrVacZUIALGUr6eodRs1vmPnF23A==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz", + "integrity": "sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw==", + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz", + "integrity": "sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.10.5.tgz", + "integrity": "sha512-tV4V/FjElJ9lQtyjr5xD2IFFbgY46r7EeVu5a8CpEKT5laheHKSlFeHjpkPppW3PqzGLAuv5k2qZX5LgVZIX5w==", + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "resolve": "^1.8.1", + "semver": "^5.5.1" + }, + "dependencies": { + "@babel/helper-module-imports": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", + "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@babel/types": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz", + "integrity": "sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.4.tgz", + "integrity": "sha512-1e/51G/Ni+7uH5gktbWv+eCED9pP8ZpRhZB3jOaI3mmzfvJTWHkuyYTv0Z5PYtyM+Tr2Ccr9kUdQxn60fI5WuQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz", + "integrity": "sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-regex": "^7.10.4" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz", + "integrity": "sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz", + "integrity": "sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.10.5.tgz", + "integrity": "sha512-YCyYsFrrRMZ3qR7wRwtSSJovPG5vGyG4ZdcSAivGwTfoasMp3VOB/AKhohu3dFtmB4cCDcsndCSxGtrdliCsZQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.10.5", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-typescript": "^7.10.4" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz", + "integrity": "sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz", + "integrity": "sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/preset-env": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.10.4.tgz", + "integrity": "sha512-tcmuQ6vupfMZPrLrc38d0sF2OjLT3/bZ0dry5HchNCQbrokoQi4reXqclvkkAT5b+gWc23meVWpve5P/7+w/zw==", + "requires": { + "@babel/compat-data": "^7.10.4", + "@babel/helper-compilation-targets": "^7.10.4", + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-proposal-async-generator-functions": "^7.10.4", + "@babel/plugin-proposal-class-properties": "^7.10.4", + "@babel/plugin-proposal-dynamic-import": "^7.10.4", + "@babel/plugin-proposal-json-strings": "^7.10.4", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4", + "@babel/plugin-proposal-numeric-separator": "^7.10.4", + "@babel/plugin-proposal-object-rest-spread": "^7.10.4", + "@babel/plugin-proposal-optional-catch-binding": "^7.10.4", + "@babel/plugin-proposal-optional-chaining": "^7.10.4", + "@babel/plugin-proposal-private-methods": "^7.10.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.10.4", + "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-class-properties": "^7.10.4", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-json-strings": "^7.8.0", + "@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.10.4", + "@babel/plugin-transform-arrow-functions": "^7.10.4", + "@babel/plugin-transform-async-to-generator": "^7.10.4", + "@babel/plugin-transform-block-scoped-functions": "^7.10.4", + "@babel/plugin-transform-block-scoping": "^7.10.4", + "@babel/plugin-transform-classes": "^7.10.4", + "@babel/plugin-transform-computed-properties": "^7.10.4", + "@babel/plugin-transform-destructuring": "^7.10.4", + "@babel/plugin-transform-dotall-regex": "^7.10.4", + "@babel/plugin-transform-duplicate-keys": "^7.10.4", + "@babel/plugin-transform-exponentiation-operator": "^7.10.4", + "@babel/plugin-transform-for-of": "^7.10.4", + "@babel/plugin-transform-function-name": "^7.10.4", + "@babel/plugin-transform-literals": "^7.10.4", + "@babel/plugin-transform-member-expression-literals": "^7.10.4", + "@babel/plugin-transform-modules-amd": "^7.10.4", + "@babel/plugin-transform-modules-commonjs": "^7.10.4", + "@babel/plugin-transform-modules-systemjs": "^7.10.4", + "@babel/plugin-transform-modules-umd": "^7.10.4", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.10.4", + "@babel/plugin-transform-new-target": "^7.10.4", + "@babel/plugin-transform-object-super": "^7.10.4", + "@babel/plugin-transform-parameters": "^7.10.4", + "@babel/plugin-transform-property-literals": "^7.10.4", + "@babel/plugin-transform-regenerator": "^7.10.4", + "@babel/plugin-transform-reserved-words": "^7.10.4", + "@babel/plugin-transform-shorthand-properties": "^7.10.4", + "@babel/plugin-transform-spread": "^7.10.4", + "@babel/plugin-transform-sticky-regex": "^7.10.4", + "@babel/plugin-transform-template-literals": "^7.10.4", + "@babel/plugin-transform-typeof-symbol": "^7.10.4", + "@babel/plugin-transform-unicode-escapes": "^7.10.4", + "@babel/plugin-transform-unicode-regex": "^7.10.4", + "@babel/preset-modules": "^0.1.3", + "@babel/types": "^7.10.4", + "browserslist": "^4.12.0", + "core-js-compat": "^3.6.2", + "invariant": "^2.2.2", + "levenary": "^1.1.1", + "semver": "^5.5.0" + }, + "dependencies": { + "@babel/helper-module-imports": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", + "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@babel/types": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "@babel/preset-modules": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz", + "integrity": "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==", + "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-react": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.10.4.tgz", + "integrity": "sha512-BrHp4TgOIy4M19JAfO1LhycVXOPWdDbTRep7eVyatf174Hff+6Uk53sDyajqZPu8W1qXRBiYOfIamek6jA7YVw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-transform-react-display-name": "^7.10.4", + "@babel/plugin-transform-react-jsx": "^7.10.4", + "@babel/plugin-transform-react-jsx-development": "^7.10.4", + "@babel/plugin-transform-react-jsx-self": "^7.10.4", + "@babel/plugin-transform-react-jsx-source": "^7.10.4", + "@babel/plugin-transform-react-pure-annotations": "^7.10.4" + } + }, + "@babel/preset-typescript": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.10.4.tgz", + "integrity": "sha512-SdYnvGPv+bLlwkF2VkJnaX/ni1sMNetcGI1+nThF1gyv6Ph8Qucc4ZZAjM5yZcE/AKRXIOTZz7eSRDWOEjPyRQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-transform-typescript": "^7.10.4" + } + }, + "@babel/runtime": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.6.tgz", + "integrity": "sha512-64AF1xY3OAkFHqOb9s4jpgk1Mm5vDZ4L3acHvAml+53nO1XbXLuDodsVpO4OIUsmemlUHMxNdYMNJmsvOwLrvQ==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", + "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.6", + "@babel/types": "^7.8.6" + } + }, + "@babel/traverse": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.6.tgz", + "integrity": "sha512-b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.9.6", + "@babel/helper-function-name": "^7.9.5", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/parser": "^7.9.6", + "@babel/types": "^7.9.6", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + }, + "dependencies": { + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz", + "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==", + "requires": { + "@babel/helper-validator-identifier": "^7.9.5", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "@formatjs/ecma402-abstract": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.2.1.tgz", + "integrity": "sha512-LvbwgHxprafjceDfOC7yMl4sP5al71rAWahXk3qug5bV020aCq64WjqAo+zNnkIJk8hqK2pFKnNdDsT58HZJQw==" + }, + "@formatjs/intl-datetimeformat": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@formatjs/intl-datetimeformat/-/intl-datetimeformat-2.1.3.tgz", + "integrity": "sha512-OQA2VNvmmhSCVqDH3sqGlnXj1gYCUR+4JAbRVN5xXLtK085WrbbX63XlhWn921Ab86CatQqueFF0P0y4csae0g==", + "requires": { + "@formatjs/intl-getcanonicallocales": "^1.3.0", + "@formatjs/intl-utils": "^3.8.0" + } + }, + "@formatjs/intl-displaynames": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@formatjs/intl-displaynames/-/intl-displaynames-3.1.3.tgz", + "integrity": "sha512-ljBhpPxDcl5htabLUH3jw2oN/u9uDSCvdWFf04rlBiBKEYzDpTCI8mtNSXMMCH3AdeAl00xp0e+O7fLers3LlA==", + "requires": { + "@formatjs/intl-utils": "^3.8.0" + } + }, + "@formatjs/intl-getcanonicallocales": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@formatjs/intl-getcanonicallocales/-/intl-getcanonicallocales-1.3.0.tgz", + "integrity": "sha512-9HzC7Hjr0Yx+jPQ0aYC5P5Jn/rUZaygDqMuNWgn72k6WcPftN2et1vHFIdBlosnRgWmo57+RgQvITBQi5NLgyQ==", + "requires": { + "cldr-core": "36.0.0" + } + }, + "@formatjs/intl-listformat": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@formatjs/intl-listformat/-/intl-listformat-3.1.3.tgz", + "integrity": "sha512-BPhsyjaTlnemYGsoiaCq8CCM03mmzmO52GwbPF7/QGek6mR64HtiYorq6zZNc5+HtPUGYWJovp59zmxtCFqyQw==", + "requires": { + "@formatjs/intl-utils": "^3.8.0" + } + }, + "@formatjs/intl-numberformat": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@formatjs/intl-numberformat/-/intl-numberformat-5.3.0.tgz", + "integrity": "sha512-V1TshvQNQCbQnR9GIG8ujoYAC4O8zVhedsFeJruzfX3THozK8TVAqaTLobE9SbIUgA/p41cO+rasoQLRBTis7w==", + "requires": { + "@formatjs/intl-utils": "^3.8.0" + } + }, + "@formatjs/intl-pluralrules": { + "version": "3.4.6", + "resolved": "https://registry.npmjs.org/@formatjs/intl-pluralrules/-/intl-pluralrules-3.4.6.tgz", + "integrity": "sha512-6/K0Lqlej2bYM1K3HfSNsEURHlsmWJhrE95k/hZdE4wo7k5S7Fc/QUfHlieLQvCXF77n/zVgzp/9bpgxMDxL0A==", + "requires": { + "@formatjs/ecma402-abstract": "^1.2.1" + } + }, + "@formatjs/intl-relativetimeformat": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/@formatjs/intl-relativetimeformat/-/intl-relativetimeformat-6.2.2.tgz", + "integrity": "sha512-IafCpqDA8VHi6eUhGuHq79mbl5wEt3i+fBGoLjHokkptisydJzy8jQFmp4obsR9SmU9E8NsQfzjs9YpGIFlMuQ==", + "requires": { + "@formatjs/intl-utils": "^3.8.0" + } + }, + "@formatjs/intl-utils": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@formatjs/intl-utils/-/intl-utils-3.8.0.tgz", + "integrity": "sha512-ZesVf+Z6Cm0bDzzkl5ihx/spwJCpPmP3iXK1RryCSJQcEENUcLCAjUu7GSPRVpDS2ZWa3RGSImSYH8DA9bDySA==", + "requires": { + "emojis-list": "^3.0.0" + } + }, + "@fortawesome/fontawesome-common-types": { + "version": "0.2.29", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.29.tgz", + "integrity": "sha512-cY+QfDTbZ7XVxzx7jxbC98Oxr/zc7R2QpTLqTxqlfyXDrAJjzi/xUIqAUsygELB62JIrbsWxtSRhayKFkGI7MA==" + }, + "@fortawesome/fontawesome-svg-core": { + "version": "1.2.29", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.29.tgz", + "integrity": "sha512-xmPmP2t8qrdo8RyKihTkGb09RnZoc+7HFBCnr0/6ZhStdGDSLeEd7ajV181+2W29NWIFfylO13rU+s3fpy3cnA==", + "requires": { + "@fortawesome/fontawesome-common-types": "^0.2.29" + } + }, + "@fortawesome/free-brands-svg-icons": { + "version": "5.13.1", + "resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-5.13.1.tgz", + "integrity": "sha512-dKwF+NpIV2LVCNBA7hibH53k+ChF4Wu59P2z35gu3zwRBZpmpLVhS9k1/RiSqUqkyXUQvA2rSv48GY6wp5axZQ==", + "requires": { + "@fortawesome/fontawesome-common-types": "^0.2.29" + }, + "dependencies": { + "@fortawesome/fontawesome-common-types": { + "version": "0.2.29", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.29.tgz", + "integrity": "sha512-cY+QfDTbZ7XVxzx7jxbC98Oxr/zc7R2QpTLqTxqlfyXDrAJjzi/xUIqAUsygELB62JIrbsWxtSRhayKFkGI7MA==" + } + } + }, + "@fortawesome/free-solid-svg-icons": { + "version": "5.13.1", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.13.1.tgz", + "integrity": "sha512-LQH/0L1p4+rqtoSHa9qFYR84hpuRZKqaQ41cfBQx8b68p21zoWSekTAeA54I/2x9VlCHDLFlG74Nmdg4iTPQOg==", + "requires": { + "@fortawesome/fontawesome-common-types": "^0.2.29" + } + }, + "@fortawesome/react-fontawesome": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.11.tgz", + "integrity": "sha512-sClfojasRifQKI0OPqTy8Ln8iIhnxR/Pv/hukBhWnBz9kQRmqi6JSH3nghlhAY7SUeIIM7B5/D2G8WjX0iepVg==", + "requires": { + "prop-types": "^15.7.2" + } + }, + "@hot-loader/react-dom": { + "version": "16.13.0", + "resolved": "https://registry.npmjs.org/@hot-loader/react-dom/-/react-dom-16.13.0.tgz", + "integrity": "sha512-lJZrmkucz2MrQJTQtJobx5MICXcfQvKihszqv655p557HPi0hMOWxrNpiHv3DWD8ugNWjtWcVWqRnFvwsHq1mQ==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.19.0" + } + }, + "@jsdevtools/ono": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.2.tgz", + "integrity": "sha512-qS/a24RA5FEoiJS9wiv6Pwg2c/kiUo3IVUQcfeM9JvsR6pM8Yx+yl/6xWYLckZCT5jpLNhslgjiA8p/XcGyMRQ==" + }, + "@loadable/component": { + "version": "5.13.1", + "resolved": "https://registry.npmjs.org/@loadable/component/-/component-5.13.1.tgz", + "integrity": "sha512-qTNfTv5bVfb9eTKNUOMzPweRnxzNaxCmLZEsFEMn+kxpd86iXae+IpibXFJlnb052Q4fVkcWM2tvmWLc/+HzLg==", + "requires": { + "@babel/runtime": "^7.7.7", + "hoist-non-react-statics": "^3.3.1", + "react-is": "^16.12.0" + } + }, + "@mapbox/react-click-to-select": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@mapbox/react-click-to-select/-/react-click-to-select-2.2.0.tgz", + "integrity": "sha512-L42P/vM4IP8NfvF5EEm0qRR1GjriHj+KFnuGo6U2gP1qdGFqZxj7VloHX5TGJPsQQVJH+BmjWAmF9RebeQ4ubQ==" + }, + "@nodelib/fs.scandir": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", + "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.3", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", + "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", + "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.3", + "fastq": "^1.6.0" + } + }, + "@npmcli/move-file": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.0.1.tgz", + "integrity": "sha512-Uv6h1sT+0DrblvIrolFtbvM1FgWm+/sy4B3pvLp67Zys+thcukzS5ekn7HsZFGpWP4Q3fYJCljbWQE/XivMRLw==", + "dev": true, + "requires": { + "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 + } + } + }, + "@octokit/auth-token": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.2.tgz", + "integrity": "sha512-jE/lE/IKIz2v1+/P0u4fJqv0kYwXOTujKemJMFr6FeopsxlIK3+wKDCJGnysg81XID5TgZQbIfuJ5J0lnTiuyQ==", + "requires": { + "@octokit/types": "^5.0.0" + } + }, + "@octokit/core": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.1.0.tgz", + "integrity": "sha512-yPyQSmxIXLieEIRikk2w8AEtWkFdfG/LXcw1KvEtK3iP0ENZLW/WYQmdzOKqfSaLhooz4CJ9D+WY79C8ZliACw==", + "requires": { + "@octokit/auth-token": "^2.4.0", + "@octokit/graphql": "^4.3.1", + "@octokit/request": "^5.4.0", + "@octokit/types": "^5.0.0", + "before-after-hook": "^2.1.0", + "universal-user-agent": "^5.0.0" + } + }, + "@octokit/endpoint": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.3.tgz", + "integrity": "sha512-Y900+r0gIz+cWp6ytnkibbD95ucEzDSKzlEnaWS52hbCDNcCJYO5mRmWW7HRAnDc7am+N/5Lnd8MppSaTYx1Yg==", + "requires": { + "@octokit/types": "^5.0.0", + "is-plain-object": "^3.0.0", + "universal-user-agent": "^5.0.0" + }, + "dependencies": { + "is-plain-object": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz", + "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==" + } + } + }, + "@octokit/graphql": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.5.1.tgz", + "integrity": "sha512-qgMsROG9K2KxDs12CO3bySJaYoUu2aic90qpFrv7A8sEBzZ7UFGvdgPKiLw5gOPYEYbS0Xf8Tvf84tJutHPulQ==", + "requires": { + "@octokit/request": "^5.3.0", + "@octokit/types": "^5.0.0", + "universal-user-agent": "^5.0.0" + } + }, + "@octokit/plugin-paginate-rest": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.2.3.tgz", + "integrity": "sha512-eKTs91wXnJH8Yicwa30jz6DF50kAh7vkcqCQ9D7/tvBAP5KKkg6I2nNof8Mp/65G0Arjsb4QcOJcIEQY+rK1Rg==", + "requires": { + "@octokit/types": "^5.0.0" + } + }, + "@octokit/plugin-request-log": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.0.tgz", + "integrity": "sha512-ywoxP68aOT3zHCLgWZgwUJatiENeHE7xJzYjfz8WI0goynp96wETBF+d95b8g/uL4QmS6owPVlaxiz3wyMAzcw==" + }, + "@octokit/plugin-rest-endpoint-methods": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-4.0.0.tgz", + "integrity": "sha512-emS6gysz4E9BNi9IrCl7Pm4kR+Az3MmVB0/DoDCmF4U48NbYG3weKyDlgkrz6Jbl4Mu4nDx8YWZwC4HjoTdcCA==", + "requires": { + "@octokit/types": "^5.0.0", + "deprecation": "^2.3.1" + } + }, + "@octokit/plugin-retry": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-3.0.3.tgz", + "integrity": "sha512-RFvcBg4JGyfWTWE35EIF7jf/eglIk5MuvfygzdIMLIVK3/4Ywz3X1x9Ri75nlyAmk53EpVWB4DwM/xEB1NXxXA==", + "requires": { + "@octokit/types": "^5.0.0", + "bottleneck": "^2.15.3" + } + }, + "@octokit/plugin-throttling": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-3.3.0.tgz", + "integrity": "sha512-0hMtpqTAwAvo3XkNoaPQFqX2+csfbuR0bYpruHq3anrBrhQFPt9Gn01RVqqoDla/qBYmIIY2MRirxlaLO21Apg==", + "requires": { + "@octokit/types": "^5.0.0", + "bottleneck": "^2.15.3" + } + }, + "@octokit/request": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.4.5.tgz", + "integrity": "sha512-atAs5GAGbZedvJXXdjtKljin+e2SltEs48B3naJjqWupYl2IUBbB/CJisyjbNHcKpHzb3E+OYEZ46G8eakXgQg==", + "requires": { + "@octokit/endpoint": "^6.0.1", + "@octokit/request-error": "^2.0.0", + "@octokit/types": "^5.0.0", + "deprecation": "^2.0.0", + "is-plain-object": "^3.0.0", + "node-fetch": "^2.3.0", + "once": "^1.4.0", + "universal-user-agent": "^5.0.0" + }, + "dependencies": { + "is-plain-object": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz", + "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==" + } + } + }, + "@octokit/request-error": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.0.2.tgz", + "integrity": "sha512-2BrmnvVSV1MXQvEkrb9zwzP0wXFNbPJij922kYBTLIlIafukrGOb+ABBT2+c6wZiuyWDH1K1zmjGQ0toN/wMWw==", + "requires": { + "@octokit/types": "^5.0.1", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "@octokit/rest": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.0.0.tgz", + "integrity": "sha512-4G/a42lry9NFGuuECnua1R1eoKkdBYJap97jYbWDNYBOUboWcM75GJ1VIcfvwDV/pW0lMPs7CEmhHoVrSV5shg==", + "requires": { + "@octokit/core": "^3.0.0", + "@octokit/plugin-paginate-rest": "^2.2.0", + "@octokit/plugin-request-log": "^1.0.0", + "@octokit/plugin-rest-endpoint-methods": "4.0.0" + } + }, + "@octokit/types": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-5.1.0.tgz", + "integrity": "sha512-OFxUBgrEllAbdEmWp/wNmKIu5EuumKHG4sgy56vjZ8lXPgMhF05c76hmulfOdFHHYRpPj49ygOZJ8wgVsPecuA==", + "requires": { + "@types/node": ">= 8" + } + }, + "@popperjs/core": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.4.4.tgz", + "integrity": "sha512-1oO6+dN5kdIA3sKPZhRGJTfGVP4SWV6KqlMOwry4J3HfyD68sl/3KmG7DeYUzvN+RbhXDnv/D8vNNB8168tAMg==" + }, + "@restart/context": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@restart/context/-/context-2.1.4.tgz", + "integrity": "sha512-INJYZQJP7g+IoDUh/475NlGiTeMfwTXUEr3tmRneckHIxNolGOW9CTq83S8cxq0CgJwwcMzMJFchxvlwe7Rk8Q==" + }, + "@restart/hooks": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.3.25.tgz", + "integrity": "sha512-m2v3N5pxTsIiSH74/sb1yW8D9RxkJidGW+5Mfwn/lHb2QzhZNlaU1su7abSyT9EGf0xS/0waLjrf7/XxQHUk7w==", + "requires": { + "lodash": "^4.17.15", + "lodash-es": "^4.17.15" + } + }, + "@types/anymatch": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz", + "integrity": "sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==", + "dev": true + }, + "@types/classnames": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/@types/classnames/-/classnames-2.2.10.tgz", + "integrity": "sha512-1UzDldn9GfYYEsWWnn/P4wkTlkZDH7lDb0wBMGbtIQc9zXEQq7FlKBdZUn6OBqD8sKZZ2RQO2mAjGpXiDGoRmQ==" + }, + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", + "dev": true + }, + "@types/eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", + "dev": true + }, + "@types/events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", + "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", + "dev": true + }, + "@types/glob": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", + "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", + "dev": true, + "requires": { + "@types/events": "*", + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/history": { + "version": "4.7.5", + "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.5.tgz", + "integrity": "sha512-wLD/Aq2VggCJXSjxEwrMafIP51Z+13H78nXIX0ABEuIGhmB5sNGbR113MOKo+yfw+RDo1ZU3DM6yfnnRF/+ouw==", + "dev": true + }, + "@types/hoist-non-react-statics": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", + "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", + "requires": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, + "@types/html-minifier-terser": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.0.tgz", + "integrity": "sha512-iYCgjm1dGPRuo12+BStjd1HiVQqhlRhWDOQigNxn023HcjnhsiFz9pc6CzJj4HwDCSQca9bxTL4PxJDbkdm3PA==", + "dev": true + }, + "@types/invariant": { + "version": "2.2.33", + "resolved": "https://registry.npmjs.org/@types/invariant/-/invariant-2.2.33.tgz", + "integrity": "sha512-/jUNmS8d4bCKdqslfxW6dg/9Gksfzxz67IYfqApHn+HvHlMVXwYv2zpTDnS/yaK9BB0i0GlBTaYci0EFE62Hmw==" + }, + "@types/json-schema": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.4.tgz", + "integrity": "sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==", + "dev": true + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, + "@types/loadable__component": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@types/loadable__component/-/loadable__component-5.13.0.tgz", + "integrity": "sha512-t44mJuu2DR2oP6RGXHuznAsK3eQYzwTcX76enlcwu1Uz9634VyTYNDLCl0WwTcAfCoro3142li+KKGqOMTznbw==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "dev": true + }, + "@types/node": { + "version": "12.12.42", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.42.tgz", + "integrity": "sha512-R/9QdYFLL9dE9l5cWWzWIZByVGFd7lk7JVOJ7KD+E1SJ4gni7XJRLz9QTjyYQiHIqEAgku9VgxdLjMlhhUaAFg==" + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "@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": "16.9.43", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.43.tgz", + "integrity": "sha512-PxshAFcnJqIWYpJbLPriClH53Z2WlJcVZE+NP2etUtWQs2s7yIMj3/LDKZT/5CHJ/F62iyjVCDu2H3jHEXIxSg==", + "requires": { + "@types/prop-types": "*", + "csstype": "^2.2.0" + } + }, + "@types/react-bootstrap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/react-bootstrap/-/react-bootstrap-1.0.1.tgz", + "integrity": "sha512-n68SeFrpOFWiSN2DCpyn17ZwTZzY8+mio8E9oCrl7abHytUz3r7ZYIKPxaETHYQxCi8oxF3NultpMAyBxFIjhg==", + "dev": true + }, + "@types/react-dom": { + "version": "16.9.8", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.8.tgz", + "integrity": "sha512-ykkPQ+5nFknnlU6lDd947WbQ6TE3NNzbQAkInC2EKY1qeYdTKp7onFusmYZb+ityzx2YviqT6BXSu+LyWWJwcA==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, + "@types/react-router": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.7.tgz", + "integrity": "sha512-2ouP76VQafKjtuc0ShpwUebhHwJo0G6rhahW9Pb8au3tQTjYXd2jta4wv6U2tGLR/I42yuG00+UXjNYY0dTzbg==", + "dev": true, + "requires": { + "@types/history": "*", + "@types/react": "*" + } + }, + "@types/react-router-dom": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.1.5.tgz", + "integrity": "sha512-ArBM4B1g3BWLGbaGvwBGO75GNFbLDUthrDojV2vHLih/Tq8M+tgvY1DSwkuNrPSwdp/GUL93WSEpTZs8nVyJLw==", + "dev": true, + "requires": { + "@types/history": "*", + "@types/react": "*", + "@types/react-router": "*" + } + }, + "@types/react-transition-group": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.0.tgz", + "integrity": "sha512-/QfLHGpu+2fQOqQaXh8MG9q03bFENooTb/it4jr5kKaZlDQfWvjqWZg48AwzPVMBHlRuTRAY7hRHCEOXz5kV6w==", + "requires": { + "@types/react": "*" + } + }, + "@types/source-list-map": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", + "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", + "dev": true + }, + "@types/tapable": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.5.tgz", + "integrity": "sha512-/gG2M/Imw7cQFp8PGvz/SwocNrmKFjFsm5Pb8HdbHkZ1K8pmuPzOX4VeVoiEecFCVf4CsN1r3/BRvx+6sNqwtQ==", + "dev": true + }, + "@types/uglify-js": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.9.2.tgz", + "integrity": "sha512-d6dIfpPbF+8B7WiCi2ELY7m0w1joD8cRW4ms88Emdb2w062NeEpbNCeWwVCgzLRpVG+5e74VFSg4rgJ2xXjEiQ==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@types/warning": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/warning/-/warning-3.0.0.tgz", + "integrity": "sha1-DSUBJorY+ZYrdA04fEZU9fjiPlI=" + }, + "@types/webpack": { + "version": "4.41.13", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.13.tgz", + "integrity": "sha512-RYmIHOWSxnTTa765N6jJBVE45pd2SYNblEYshVDduLw6RhocazNmRzE5/ytvBD8IkDMH6DI+bcrqxh8NILimBA==", + "dev": true, + "requires": { + "@types/anymatch": "*", + "@types/node": "*", + "@types/tapable": "*", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "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==", + "dev": true + } + } + }, + "@types/webpack-sources": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.7.tgz", + "integrity": "sha512-XyaHrJILjK1VHVC4aVlKsdNN5KBTwufMb43cQs+flGxtPAf/1Qwl8+Q0tp5BwEGaI8D6XT1L+9bSWXckgkjTLw==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@typescript-eslint/eslint-plugin": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.6.1.tgz", + "integrity": "sha512-06lfjo76naNeOMDl+mWG9Fh/a0UHKLGhin+mGaIw72FUMbMGBkdi/FEJmgEDzh4eE73KIYzHWvOCYJ0ak7nrJQ==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "3.6.1", + "debug": "^4.1.1", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.0.0", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + }, + "dependencies": { + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + } + } + }, + "@typescript-eslint/experimental-utils": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.6.1.tgz", + "integrity": "sha512-oS+hihzQE5M84ewXrTlVx7eTgc52eu+sVmG7ayLfOhyZmJ8Unvf3osyFQNADHP26yoThFfbxcibbO0d2FjnYhg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/types": "3.6.1", + "@typescript-eslint/typescript-estree": "3.6.1", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-3.6.1.tgz", + "integrity": "sha512-SLihQU8RMe77YJ/jGTqOt0lMq7k3hlPVfp7v/cxMnXA9T0bQYoMDfTsNgHXpwSJM1Iq2aAJ8WqekxUwGv5F67Q==", + "dev": true, + "requires": { + "@types/eslint-visitor-keys": "^1.0.0", + "@typescript-eslint/experimental-utils": "3.6.1", + "@typescript-eslint/types": "3.6.1", + "@typescript-eslint/typescript-estree": "3.6.1", + "eslint-visitor-keys": "^1.1.0" + } + }, + "@typescript-eslint/types": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.6.1.tgz", + "integrity": "sha512-NPxd5yXG63gx57WDTW1rp0cF3XlNuuFFB5G+Kc48zZ+51ZnQn9yjDEsjTPQ+aWM+V+Z0I4kuTFKjKvgcT1F7xQ==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.6.1.tgz", + "integrity": "sha512-G4XRe/ZbCZkL1fy09DPN3U0mR6SayIv1zSeBNquRFRk7CnVLgkC2ZPj8llEMJg5Y8dJ3T76SvTGtceytniaztQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "3.6.1", + "@typescript-eslint/visitor-keys": "3.6.1", + "debug": "^4.1.1", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + }, + "dependencies": { + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-3.6.1.tgz", + "integrity": "sha512-qC8Olwz5ZyMTZrh4Wl3K4U6tfms0R/mzU4/5W3XeUZptVraGVmbptJbn6h2Ey6Rb3hOs3zWoAUebZk8t47KGiQ==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "dev": true, + "requires": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", + "dev": true + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "dev": true, + "requires": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", + "dev": true + }, + "@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "abab": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz", + "integrity": "sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.3.1.tgz", + "integrity": "sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==", + "dev": true + }, + "acorn-jsx": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", + "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", + "dev": true + }, + "aggregate-error": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz", + "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", + "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", + "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.4.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", + "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==" + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "dev": true + }, + "ansi-diff-stream": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ansi-diff-stream/-/ansi-diff-stream-1.2.1.tgz", + "integrity": "sha512-PaKs34INoKpTzcjyKd2GM/CCEeTyDgWKuHSgF0z7ywjpbBFj/pzQf/30v+TR6VBBLia6Mso+W2ygU22ljqbi6A==", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0", + "buffer-from": "^1.0.0", + "through2": "^2.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=", + "dev": true + } + } + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true + }, + "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 + }, + "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" + } + }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "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=", + "dev": true + }, + "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==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "array-includes": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", + "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0", + "is-string": "^1.0.5" + } + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "array.prototype.flat": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz", + "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, + "array.prototype.flatmap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.3.tgz", + "integrity": "sha512-OOEk+lkePcg+ODXIpvuU9PAryCikCJyo7GlDG1upleEpQRx6mzL9puEBkozQ5iAx20KV0l3DbyQwqciJtqe5Pg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1" + } + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "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.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "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.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "async-foreach": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", + "dev": true + }, + "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==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "autoprefixer": { + "version": "9.8.5", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.5.tgz", + "integrity": "sha512-C2p5KkumJlsTHoNv9w31NrBRgXhf6eCMteJuHZi2xhkgC+5Vm40MEtCKPhc0qdgAOhox0YPy1SQHTAky05UoKg==", + "dev": true, + "requires": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001097", + "colorette": "^1.2.0", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "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" + } + }, + "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" + } + } + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz", + "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==", + "dev": true + }, + "axios": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", + "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==", + "requires": { + "follow-redirects": "1.5.10" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "follow-redirects": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", + "requires": { + "debug": "=3.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "babel-loader": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", + "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", + "requires": { + "find-cache-dir": "^2.1.0", + "loader-utils": "^1.4.0", + "mkdirp": "^0.5.3", + "pify": "^4.0.1", + "schema-utils": "^2.6.5" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + } + } + }, + "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" + } + }, + "babel-timing": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/babel-timing/-/babel-timing-0.8.0.tgz", + "integrity": "sha512-cffR8/GnYyL+Zu3PiJjPJ5MvairqaktH0a5AMfNT1MHh5yAxGlUXVatlCtUf7dl5st+98Z+KJpHm4TYopNELNw==", + "dev": true, + "requires": { + "@babel/core": "^7.4.3", + "ansi-diff-stream": "^1.2.1", + "babel-loader": "^8.0.6", + "cli-table3": "^0.5.1", + "colors": "^1.3.3", + "commander": "^2.20.0", + "find-babel-config": "^1.2.0", + "find-cache-dir": "^3.0.0", + "glob": "^7.1.3", + "lodash.chunk": "^4.2.0", + "lodash.defaults": "^4.2.0", + "lodash.mergewith": "^4.6.1", + "minimatch": "^3.0.4", + "multimatch": "^4.0.0", + "reduce-flatten": "^2.0.0", + "rimraf": "^2.6.3", + "webpack": "^4.32.2" + }, + "dependencies": { + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "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==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "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": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "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 + }, + "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==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + } + } + }, + "bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "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=", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "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==", + "dev": true + } + } + }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "bath-es5": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/bath-es5/-/bath-es5-3.0.3.tgz", + "integrity": "sha512-PdCioDToH3t84lP40kUFCKWCOCH389Dl1kbC8FGoqOwamxsmqxxnJSXdkTOsPoNHXjem4+sJ+bbNoQm5zeCqxg==" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "before-after-hook": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.1.0.tgz", + "integrity": "sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A==" + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "dev": true, + "requires": { + "inherits": "~2.0.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 + }, + "bn.js": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", + "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==", + "dev": true + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + } + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "requires": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "bootstrap": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.5.0.tgz", + "integrity": "sha512-Z93QoXvodoVslA+PWNdk23Hze4RBYIkpb5h8I2HY2Tu2h7A0LpAgLcyrhrSUyo2/Oxm2l1fRZPs1e5hnxnliXA==" + }, + "bottleneck": { + "version": "2.19.5", + "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", + "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "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 + }, + "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.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } + } + }, + "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": { + "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==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "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.13.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.13.0.tgz", + "integrity": "sha512-MINatJ5ZNrLnQ6blGvePd/QOz9Xtu+Ne+x29iQSCHfkU5BugKVJwZKn/iiL8UbpIpa3JhviKjz+XxMo0m2caFQ==", + "requires": { + "caniuse-lite": "^1.0.30001093", + "electron-to-chromium": "^1.3.488", + "escalade": "^3.0.1", + "node-releases": "^1.1.58" + } + }, + "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-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "buffer-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/buffer-json/-/buffer-json-2.0.0.tgz", + "integrity": "sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw==", + "dev": true + }, + "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 + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "cacache": { + "version": "15.0.5", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.5.tgz", + "integrity": "sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A==", + "dev": true, + "requires": { + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.0", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "dependencies": { + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "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==", + "dev": true, + "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": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "cache-loader": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cache-loader/-/cache-loader-4.1.0.tgz", + "integrity": "sha512-ftOayxve0PwKzBF/GLsZNC9fJBXl8lkZE3TOsjkboHfVHVkL39iUEs1FO07A33mizmci5Dudt38UZrrYXDtbhw==", + "dev": true, + "requires": { + "buffer-json": "^2.0.0", + "find-cache-dir": "^3.0.0", + "loader-utils": "^1.2.3", + "mkdirp": "^0.5.1", + "neo-async": "^2.6.1", + "schema-utils": "^2.0.0" + }, + "dependencies": { + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "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==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "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": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "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 + }, + "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==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + } + } + }, + "call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=" + }, + "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==", + "dev": true + }, + "camel-case": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.1.tgz", + "integrity": "sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q==", + "dev": true, + "requires": { + "pascal-case": "^3.1.1", + "tslib": "^1.10.0" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + } + } + }, + "caniuse-lite": { + "version": "1.0.30001100", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001100.tgz", + "integrity": "sha512-0eYdp1+wFCnMlCj2oudciuQn2B9xAFq3WpgpcBIZTxk/1HNA/O2YA7rpeYhnOqsqAJq1AHUgx6i1jtafg7m2zA==" + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "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" + } + }, + "character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" + }, + "character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==" + }, + "character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" + }, + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=" + }, + "chokidar": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.0.tgz", + "integrity": "sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.4.0" + }, + "dependencies": { + "binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "readdirp": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", + "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + } + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "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" + } + }, + "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==", + "dev": true, + "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=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "classnames": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", + "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" + }, + "cldr-core": { + "version": "36.0.0", + "resolved": "https://registry.npmjs.org/cldr-core/-/cldr-core-36.0.0.tgz", + "integrity": "sha512-QLnAjt20rZe38c8h8OJ9jPND+O4o5O8Nw0TK/P3KpNn1cmOhMu0rk6Kc3ap96c5OStQ9gAngs9+Be2sum26NOw==" + }, + "clean-css": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", + "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", + "dev": true, + "requires": { + "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==", + "dev": true + } + } + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, + "clean-webpack-plugin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-3.0.0.tgz", + "integrity": "sha512-MciirUH5r+cYLGCOL5JX/ZLzOZbVr1ot3Fw+KcvbhUb6PM+yycqd9ZhIlcigQ5gl+XhppNmw3bEFuaaMNyLj3A==", + "dev": true, + "requires": { + "@types/webpack": "^4.4.31", + "del": "^4.1.1" + } + }, + "cli-source-preview": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/cli-source-preview/-/cli-source-preview-1.1.0.tgz", + "integrity": "sha1-BTA6sSeakJPq0aODez7iMfMAZUQ=", + "dev": true, + "requires": { + "chalk": "^1.1.3" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "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=", + "dev": true, + "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=", + "dev": true + } + } + }, + "cli-table3": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", + "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", + "dev": true, + "requires": { + "colors": "^1.1.2", + "object-assign": "^4.1.0", + "string-width": "^2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "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": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "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=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "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" + }, + "dependencies": { + "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" + } + } + } + }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=" + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "dependencies": { + "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==", + "dev": true + } + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "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=", + "dev": true + }, + "collapse-white-space": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", + "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==" + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "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=" + }, + "colorette": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", + "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", + "dev": true + }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true + }, + "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 + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "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 + }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "copy-webpack-plugin": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.0.3.tgz", + "integrity": "sha512-q5m6Vz4elsuyVEIUXr7wJdIdePWTubsqVbEMvf1WQnHGv0Q+9yPRu7MtYFPt+GBOXRav9lvIINifTQ1vSCs+eA==", + "dev": true, + "requires": { + "cacache": "^15.0.4", + "fast-glob": "^3.2.4", + "find-cache-dir": "^3.3.1", + "glob-parent": "^5.1.1", + "globby": "^11.0.1", + "loader-utils": "^2.0.0", + "normalize-path": "^3.0.0", + "p-limit": "^3.0.1", + "schema-utils": "^2.7.0", + "serialize-javascript": "^4.0.0", + "webpack-sources": "^1.4.3" + }, + "dependencies": { + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "json5": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "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" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "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==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "p-limit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz", + "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==", + "dev": true, + "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==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + }, + "dependencies": { + "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-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 + }, + "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==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + } + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + } + } + }, + "core-js-compat": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", + "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", + "requires": { + "browserslist": "^4.8.5", + "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=", + "dev": true + }, + "cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/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" + }, + "dependencies": { + "parse-json": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz", + "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1", + "lines-and-columns": "^1.1.6" + } + } + } + }, + "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.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "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" + } + }, + "cross-conf-env": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/cross-conf-env/-/cross-conf-env-1.1.2.tgz", + "integrity": "sha1-7dlr//SOTO2w90HMpSeI9ks65kA=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1" + } + }, + "cross-fetch": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.0.6.tgz", + "integrity": "sha512-KBPUbqgFjzWlVcURG+Svp9TlhA5uliYtiNx/0r8nv0pdypeQCRJ9IaSIc3q/x3q8t3F75cHuwxVql1HFGHCNJQ==", + "dev": true, + "requires": { + "node-fetch": "2.6.1" + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" + }, + "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" + } + }, + "css-loader": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz", + "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "cssesc": "^3.0.0", + "icss-utils": "^4.1.1", + "loader-utils": "^1.2.3", + "normalize-path": "^3.0.0", + "postcss": "^7.0.32", + "postcss-modules-extract-imports": "^2.0.0", + "postcss-modules-local-by-default": "^3.0.2", + "postcss-modules-scope": "^2.2.0", + "postcss-modules-values": "^3.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^2.7.0", + "semver": "^6.3.0" + }, + "dependencies": { + "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" + } + }, + "schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + } + }, + "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" + } + } + } + }, + "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 + }, + "csstype": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.11.tgz", + "integrity": "sha512-l8YyEC9NBkSm783PFTvh0FmJy7s5pFKrDp49ZL7zBGX3fWkO+N4EEyan1qqp8cwPLDcD0OSdyY6hAMoxp34JFw==" + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "^1.0.1" + } + }, + "cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", + "dev": true + }, + "dag-map": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/dag-map/-/dag-map-1.0.2.tgz", + "integrity": "sha1-6DefBBAA7VYfxRVHXB7SyF7s6Nc=" + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "requires": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + } + }, + "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" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "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-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "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=", + "dev": true + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, + "default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "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==", + "dev": true + } + } + }, + "del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + }, + "dependencies": { + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" + }, + "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" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "dev": true + }, + "detect-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", + "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", + "dev": true + }, + "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.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "dns-packet": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", + "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "dev": true, + "requires": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "requires": { + "buffer-indexof": "^1.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "requires": { + "utila": "~0.4" + } + }, + "dom-helpers": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.1.4.tgz", + "integrity": "sha512-TjMyeVUvNEnOnhzs6uAn9Ya47GmMo3qq7m+Lr/3ON0Rs5kHvb8I+SQYjLUSYn7qhEm0QjW0yrBkvz9yOrwwz1A==", + "requires": { + "@babel/runtime": "^7.8.7", + "csstype": "^2.6.7" + } + }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", + "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==" + } + } + }, + "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 + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "dot-case": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.3.tgz", + "integrity": "sha512-7hwEmg6RiSQfm/GwPL4AAWXKy3YNNZA3oFv2Pdiey0mwkRCPZ9x6SZbkLcn8Ma5PYeVokzoD4Twv2n7LKp5WeA==", + "dev": true, + "requires": { + "no-case": "^3.0.3", + "tslib": "^1.10.0" + } + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.497", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.497.tgz", + "integrity": "sha512-sPdW5bUDZwiFtoonuZCUwRGzsZmKzcLM0bMVhp6SMCfUG+B3faENLx3cE+o+K0Jl+MPuNA9s9cScyFjOlixZpQ==" + }, + "elliptic": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", + "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", + "dev": true, + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } + } + }, + "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 + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "end-of-stream": { + "version": "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" + } + }, + "enhanced-resolve": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz", + "integrity": "sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "dependencies": { + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + } + } + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + }, + "dependencies": { + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + } + } + }, + "entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", + "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==" + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "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" + } + }, + "es-abstract": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", + "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + }, + "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==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escalade": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.0.2.tgz", + "integrity": "sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ==" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "eslint": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.4.0.tgz", + "integrity": "sha512-gU+lxhlPHu45H3JkEGgYhWhkR9wLHHEXC9FbWFnTlEkbKyZKWgWRLgf61E8zWmBuI6g5xKBph9ltg3NtZMVF8g==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.0", + "eslint-utils": "^2.0.0", + "eslint-visitor-keys": "^1.2.0", + "espree": "^7.1.0", + "esquery": "^1.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.14", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "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" + } + }, + "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==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "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 + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "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==", + "dev": true, + "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==", + "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.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "eslint-config-prettier": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.11.0.tgz", + "integrity": "sha512-oB8cpLWSAjOVFEJhhyMZh6NOEOtBVziaqdDQ86+qhDHFbZXoRTM7pNSvFRfW/W/L/LrQ38C99J5CGuRBBzBsdA==", + "dev": true, + "requires": { + "get-stdin": "^6.0.0" + } + }, + "eslint-import-resolver-node": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", + "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "resolve": "^1.13.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "eslint-module-utils": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", + "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "pkg-dir": "^2.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + } + } + }, + "eslint-plugin-import": { + "version": "2.22.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.0.tgz", + "integrity": "sha512-66Fpf1Ln6aIS5Gr/55ts19eUuoDhAbZgnr6UxK5hbDx6l/QgQgx61AePq+BV4PP2uXQFClgMVzep5zZ94qqsxg==", + "dev": true, + "requires": { + "array-includes": "^3.1.1", + "array.prototype.flat": "^1.2.3", + "contains-path": "^0.1.0", + "debug": "^2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.3", + "eslint-module-utils": "^2.6.0", + "has": "^1.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.1", + "read-pkg-up": "^2.0.0", + "resolve": "^1.17.0", + "tsconfig-paths": "^3.9.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "^2.0.0" + } + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, + "eslint-plugin-prettier": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.4.tgz", + "integrity": "sha512-jZDa8z76klRqo+TdGDTFJSavwbnWK2ZpqGKNZ+VvweMW516pDUMmQ2koXvxEE4JhzNvTv+radye/bWGBmA6jmg==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, + "eslint-plugin-react": { + "version": "7.20.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.20.3.tgz", + "integrity": "sha512-txbo090buDeyV0ugF3YMWrzLIUqpYTsWSDZV9xLSmExE1P/Kmgg9++PD931r+KEWS66O1c9R4srLVVHmeHpoAg==", + "dev": true, + "requires": { + "array-includes": "^3.1.1", + "array.prototype.flatmap": "^1.2.3", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.4.1", + "object.entries": "^1.1.2", + "object.fromentries": "^2.0.2", + "object.values": "^1.1.1", + "prop-types": "^15.7.2", + "resolve": "^1.17.0", + "string.prototype.matchall": "^4.0.2" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + } + } + }, + "eslint-plugin-simple-import-sort": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-5.0.3.tgz", + "integrity": "sha512-1rf3AWiHeWNCQdAq0iXNnlccnH1UDnelGgrPbjBBHE8d2hXVtOudcmy0vTF4hri3iJ0MKz8jBhmH6lJ0ZWZLHQ==", + "dev": true + }, + "eslint-scope": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", + "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + }, + "espree": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.1.0.tgz", + "integrity": "sha512-dcorZSyfmm4WTuTnE5Y7MEN1DyoPYy1ZR783QW1FJoenn7RailyWFsq/UL6ZAAA7uXurN9FIpYyUs3OfiIW+Qw==", + "dev": true, + "requires": { + "acorn": "^7.2.0", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.2.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "esquery": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", + "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz", + "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", + "dev": true + }, + "events": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", + "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", + "dev": true + }, + "eventsource": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", + "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", + "dev": true, + "requires": { + "original": "^1.0.0" + } + }, + "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" + } + }, + "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" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "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==", + "dev": true, + "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=", + "dev": true, + "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=", + "dev": true, + "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=", + "dev": true + } + } + }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "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=", + "dev": true, + "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==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "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=", + "dev": true, + "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=", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "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==", + "dev": true + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "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==" + }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "fast-glob": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", + "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/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.npmjs.org/fast-memoize/-/fast-memoize-2.5.2.tgz", + "integrity": "sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==" + }, + "fast-sass-loader": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/fast-sass-loader/-/fast-sass-loader-1.5.0.tgz", + "integrity": "sha512-3K4/xG/sm0MqdjrOBKZhnOrrQ3TWMsdvqjxI4ZN0FlVwImNqChYHFUChpyQ9ecQsXS0pytOMEa5H+MDfatPqBA==", + "dev": true, + "requires": { + "async": "^2.0.1", + "cli-source-preview": "^1.0.0", + "co": "^4.6.0", + "fs-extra": "3.x", + "loader-utils": "^1.1.0" + }, + "dependencies": { + "fs-extra": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", + "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^3.0.0", + "universalify": "^0.1.0" + } + }, + "jsonfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", + "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + } + } + }, + "fastq": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz", + "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "figgy-pudding": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", + "dev": true + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "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==", + "dev": true, + "optional": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + }, + "dependencies": { + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "find-babel-config": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-1.2.0.tgz", + "integrity": "sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==", + "dev": true, + "requires": { + "json5": "^0.5.1", + "path-exists": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + } + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "findup-sync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "dev": true, + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "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=", + "dev": true, + "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=", + "dev": true, + "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=", + "dev": true, + "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=", + "dev": true, + "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=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "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==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "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" + } + } + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "dependencies": { + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "follow-redirects": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.12.1.tgz", + "integrity": "sha512-tmRv0AVuR7ZyouUHLeNSiO6pqulF7dYa3s19c6t+wz9LD69/uSzdMxJ2S91nTI9U3rt/IldxpzMOFejp6f0hjg==", + "dev": true + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "fork-ts-checker-webpack-plugin": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-5.0.7.tgz", + "integrity": "sha512-X7zHKTx4is5YSKa9bDiXGzv8v5K3bsUrZlZgr3F8DeCVsb3oik/+0Mo+K138Sdjh4mpzoHcuUgsrIgZeLIXovw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "chalk": "^2.4.1", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "1.0.0", + "semver": "^5.6.0", + "tapable": "^1.0.0" + }, + "dependencies": { + "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" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "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==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + } + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "fs-monkey": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.1.tgz", + "integrity": "sha512-fcSa+wyTqZa46iWweI7/ZiUfegOZl0SG8+dltIwFXo7+zYU9J9kpS3NB6pZcSlJdhvIwp81Adx2XhZorncxiaA==", + "dev": true + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + }, + "fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "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=", + "dev": true, + "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=", + "dev": true, + "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=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "dev": true, + "requires": { + "globule": "^1.0.0" + } + }, + "gensync": { + "version": "1.0.0-beta.1", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", + "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", + "dev": true + }, + "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==", + "dev": true + }, + "get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "dev": true + }, + "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=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "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.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "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" + } + }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "requires": { + "global-prefix": "^3.0.0" + }, + "dependencies": { + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.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==", + "dev": true + } + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "globby": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", + "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "dependencies": { + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + } + } + }, + "globule": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.1.tgz", + "integrity": "sha512-OVyWOHgw29yosRHCHo7NncwR1hW5ew0W/UrvtwvjefVJeQ26q4/8r8FmPsSF1hJ93IgWkyv16pCTz6WblMzm/g==", + "dev": true, + "requires": { + "glob": "~7.1.1", + "lodash": "~4.17.12", + "minimatch": "~3.0.2" + } + }, + "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==" + }, + "handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "dev": true, + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "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=", + "dev": true, + "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=", + "dev": true + } + } + }, + "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==" + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "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=", + "dev": true, + "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=", + "dev": true, + "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=", + "dev": true, + "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=", + "dev": true, + "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": { + "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==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "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" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "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" + } + }, + "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" + } + }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "requires": { + "parse-passwd": "^1.0.0" + } + }, + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "dev": true + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "html-entities": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz", + "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==", + "dev": true + }, + "html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", + "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", + "dev": true, + "requires": { + "camel-case": "^4.1.1", + "clean-css": "^4.2.3", + "commander": "^4.1.1", + "he": "^1.2.0", + "param-case": "^3.0.3", + "relateurl": "^0.2.7", + "terser": "^4.6.3" + }, + "dependencies": { + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true + } + } + }, + "html-to-react": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/html-to-react/-/html-to-react-1.4.3.tgz", + "integrity": "sha512-txe09A3vxW8yEZGJXJ1is5gGDfBEVACmZDSgwDyH5EsfRdOubBwBCg63ZThZP0xBn0UE4FyvMXZXmohusCxDcg==", + "requires": { + "domhandler": "^3.0", + "htmlparser2": "^4.1.0", + "lodash.camelcase": "^4.3.0", + "ramda": "^0.27" + }, + "dependencies": { + "domelementtype": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", + "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==" + }, + "domhandler": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.0.0.tgz", + "integrity": "sha512-eKLdI5v9m67kbXQbJSNn1zjh0SDzvzWVWtX+qEI3eMjZw8daH9k8rlj1FZY9memPwjiskQFbe7vHVVJIAqoEhw==", + "requires": { + "domelementtype": "^2.0.1" + } + }, + "domutils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.1.0.tgz", + "integrity": "sha512-CD9M0Dm1iaHfQ1R/TI+z3/JWp/pgub0j4jIQKH89ARR4ATAV2nbaOQS5XxU9maJP5jHaPdDDQSEHuE2UmpUTKg==", + "requires": { + "dom-serializer": "^0.2.1", + "domelementtype": "^2.0.1", + "domhandler": "^3.0.0" + } + }, + "htmlparser2": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", + "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^3.0.0", + "domutils": "^2.0.0", + "entities": "^2.0.0" + } + } + } + }, + "html-webpack-plugin": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.3.0.tgz", + "integrity": "sha512-C0fzKN8yQoVLTelcJxZfJCE+aAvQiY2VUf3UuKrR4a9k5UMWYOtpDLsaXwATbcVCnI05hUS7L9ULQHWLZhyi3w==", + "dev": true, + "requires": { + "@types/html-minifier-terser": "^5.0.0", + "@types/tapable": "^1.0.5", + "@types/webpack": "^4.41.8", + "html-minifier-terser": "^5.0.1", + "loader-utils": "^1.2.3", + "lodash": "^4.17.15", + "pretty-error": "^2.1.1", + "tapable": "^1.1.3", + "util.promisify": "1.0.0" + }, + "dependencies": { + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + } + } + }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "dev": true, + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "dev": true, + "requires": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "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=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "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": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "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=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "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=", + "dev": true, + "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=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "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=", + "dev": true, + "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=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "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==", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "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=", + "dev": true, + "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=", + "dev": true, + "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=", + "dev": true, + "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=", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "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=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "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==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "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 + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-utils": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", + "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", + "dev": true, + "requires": { + "postcss": "^7.0.14" + } + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "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": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "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": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "in-publish": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.1.tgz", + "integrity": "sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ==", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "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==" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "dev": true, + "requires": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + } + }, + "internal-slot": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.2.tgz", + "integrity": "sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g==", + "dev": true, + "requires": { + "es-abstract": "^1.17.0-next.1", + "has": "^1.0.3", + "side-channel": "^1.0.2" + } + }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true + }, + "intl-format-cache": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/intl-format-cache/-/intl-format-cache-4.3.0.tgz", + "integrity": "sha512-kGumT8fncIYMXb+YiWJKJ0t8n1tjSGrysZ+IFvXJc8oGT9U9PzH8DY2pFd0OY8L8RId6uNk2AiAFGP6bBHFSTg==" + }, + "intl-messageformat": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-9.1.3.tgz", + "integrity": "sha512-QeTdl9pSPc4uIRJ00w8QcozS+m5wupbSV6lduIIanMcoHJjkcUfTwWdvJGDI6xFG00f2x1c2AvnfCBkYn2H/Gw==", + "requires": { + "intl-format-cache": "^4.3.0", + "intl-messageformat-parser": "^5.3.3" + } + }, + "intl-messageformat-parser": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/intl-messageformat-parser/-/intl-messageformat-parser-5.3.3.tgz", + "integrity": "sha512-IJmTPjLk3lOg6NlpJs/eQOKSDWbHNsyWmlMcctLIZuQyyTPuASSZbi9XkXzmnVLijXt4/SeWIYIIon616kYqyQ==", + "requires": { + "@formatjs/intl-numberformat": "^5.3.0" + } + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "requires": { + "loose-envify": "^1.0.0" + } + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + }, + "is-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=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" + }, + "is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "requires": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + } + }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", + "dev": true + }, + "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-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "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.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", + "dev": true + }, + "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=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true + }, + "is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "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==", + "dev": true + } + } + }, + "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-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-finite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "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 + }, + "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==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" + }, + "is-invalid-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-invalid-path/-/is-invalid-path-0.1.0.tgz", + "integrity": "sha1-MHqFWzzxqTi0TqcNLGEQYFNxTzQ=", + "requires": { + "is-glob": "^2.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true + }, + "is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "dev": true, + "requires": { + "is-path-inside": "^2.1.0" + } + }, + "is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "dev": true, + "requires": { + "path-is-inside": "^1.0.2" + } + }, + "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=" + }, + "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==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "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.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-valid-path": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-valid-path/-/is-valid-path-0.1.1.tgz", + "integrity": "sha1-EQ+f90w39mPh7HkV60UfLbk6yd8=", + "requires": { + "is-invalid-path": "^0.1.0" + } + }, + "is-whitespace-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", + "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==" + }, + "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==", + "dev": true + }, + "is-word-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", + "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==" + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "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.npmjs.org/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=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "jest-worker": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.1.0.tgz", + "integrity": "sha512-Z9P5pZ6UC+kakMbNJn+tA2RdVdNX5WH1x+5UCBZ9MxIK24pjYtFt96fK+UwBTrjLYm232g1xz0L3eTh51OW+yQ==", + "dev": true, + "requires": { + "merge-stream": "^2.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==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jquery": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.1.tgz", + "integrity": "sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg==" + }, + "js-base64": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.2.tgz", + "integrity": "sha512-Vg8czh0Q7sFBSUMWWArX/miJeBWYBPpdU/3M/DKSaekLMqrqVPaedp+5mZhie/r0lgrcaYBfwXatEew6gwgiQQ==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "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-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-deref-sync": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/json-schema-deref-sync/-/json-schema-deref-sync-0.13.0.tgz", + "integrity": "sha512-YBOEogm5w9Op337yb6pAT6ZXDqlxAsQCanM3grid8lMWNxRJO/zWEJi3ZzqDL8boWfwhTFym5EFrNgWwpqcBRg==", + "requires": { + "clone": "^2.1.2", + "dag-map": "~1.0.0", + "is-valid-path": "^0.1.1", + "lodash": "^4.17.13", + "md5": "~2.2.0", + "memory-cache": "~0.2.0", + "traverse": "~0.6.6", + "valid-url": "~1.0.9" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "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=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json3": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, + "jsonfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", + "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^1.0.0" + } + }, + "jsonschema": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.4.tgz", + "integrity": "sha512-lz1nOH69GbsVHeVgEdvyavc/33oymY1AZwtePMiMj4HZPMbP5OIKK3zT9INMWjwua/V4Z4yq7wSlBbSG+g4AEw==" + }, + "jsonschema-draft4": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jsonschema-draft4/-/jsonschema-draft4-1.0.0.tgz", + "integrity": "sha1-8K8gBQVPDwrefqIRhhS2ncUS2GU=" + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "jsx-ast-utils": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz", + "integrity": "sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w==", + "dev": true, + "requires": { + "array-includes": "^3.1.1", + "object.assign": "^4.1.0" + } + }, + "killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "klona": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/klona/-/klona-1.1.2.tgz", + "integrity": "sha512-xf88rTeHiXk+XE2Vhi6yj8Wm3gMZrygGdKjJqN8HkV+PwF/t50/LdAKHoHpPcxFAlmQszTZ1CugrK25S7qDRLA==", + "dev": true + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" + }, + "levenary": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", + "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", + "requires": { + "leven": "^3.1.0" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "dev": true + }, + "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==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" + }, + "lodash-es": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.15.tgz", + "integrity": "sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ==" + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" + }, + "lodash.chunk": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.chunk/-/lodash.chunk-4.2.0.tgz", + "integrity": "sha1-ZuXOH3btJ7QwPYxlEujRIW6BBrw=", + "dev": true + }, + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", + "dev": true + }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" + }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" + }, + "lodash.mergewith": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", + "dev": true + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "loglevel": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.8.tgz", + "integrity": "sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA==", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "lower-case": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.1.tgz", + "integrity": "sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ==", + "dev": true, + "requires": { + "tslib": "^1.10.0" + } + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "macos-release": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.4.0.tgz", + "integrity": "sha512-ko6deozZYiAkqa/0gmcsz+p4jSy3gY7/ZsCEokPaYd8k+6/aXGkiTgr61+Owup7Sf+xjqW8u2ElhoM9SEcEfuA==" + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "markdown-escapes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", + "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==" + }, + "md5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", + "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=", + "requires": { + "charenc": "~0.0.1", + "crypt": "~0.0.1", + "is-buffer": "~1.1.1" + } + }, + "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" + } + }, + "mdast-add-list-metadata": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdast-add-list-metadata/-/mdast-add-list-metadata-1.0.1.tgz", + "integrity": "sha512-fB/VP4MJ0LaRsog7hGPxgOrSL3gE/2uEdZyDuSEnKCv/8IkYHiDkIQSbChiJoHyxZZXZ9bzckyRk+vNxFzh8rA==", + "requires": { + "unist-util-visit-parents": "1.1.2" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "memfs": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.2.0.tgz", + "integrity": "sha512-f/xxz2TpdKv6uDn6GtHee8ivFyxwxmPuXatBb1FBwxYNuVpbM3k/Y1Z+vC0mH/dIXXrukYfe3qe5J32Dfjg93A==", + "dev": true, + "requires": { + "fs-monkey": "1.0.1" + } + }, + "memory-cache": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/memory-cache/-/memory-cache-0.2.0.tgz", + "integrity": "sha1-eJCwHVLADI68nVM+H46xfjA0hxo=" + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "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.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } + } + }, + "mime": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.5.tgz", + "integrity": "sha512-3hQhEUF027BuxZjQA3s7rIv/7VCQPa27hN9u9g87sEkWaKwQPuXOkVKtOeiyUrnWqTDiOs8Ed2rwg733mB0R5w==", + "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==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "mime-db": "1.44.0" + } + }, + "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.0", + "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.0.tgz", + "integrity": "sha512-b0TytUgFSbgFJGzJqXPKCFCBWigAjpjo+Fl7Vf7ZbKRDptszpppKxXH6DRXEABZ/gcEQczeb0iZ7JvL8e8jjCA==", + "requires": { + "@babel/runtime": "^7.5.5", + "tiny-warning": "^1.0.3" + } + }, + "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.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "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==" + }, + "minipass": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", + "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + }, + "dependencies": { + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.3.tgz", + "integrity": "sha512-cFOknTvng5vqnwOpDsZTWhNll6Jf8o2x+/diplafmxpuIymAjzoOolZG0VvQf3V2HgqzJNhnuKHYp2BqDgz8IQ==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minizlib": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.0.tgz", + "integrity": "sha512-EzTZN/fjSvifSX0SlqUERCN39o6T40AMarPbv0MrarSFtIITCBh7bi+dU8nxGFHuqs9jdIAeoYoKuQAAASsPPA==", + "dev": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "dependencies": { + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "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==", + "dev": true, + "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" + } + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "requires": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "multimatch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz", + "integrity": "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==", + "dev": true, + "requires": { + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true + } + } + }, + "nan": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", + "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==", + "dev": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "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" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "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==", + "dev": true + } + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "no-case": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.3.tgz", + "integrity": "sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw==", + "dev": true, + "requires": { + "lower-case": "^2.0.1", + "tslib": "^1.10.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-forge": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz", + "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==", + "dev": true + }, + "node-gyp": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", + "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", + "dev": true, + "requires": { + "fstream": "^1.0.0", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2 || 3 || 4", + "osenv": "0", + "request": "^2.87.0", + "rimraf": "2", + "semver": "~5.3.0", + "tar": "^2.0.0", + "which": "1" + }, + "dependencies": { + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true + }, + "tar": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", + "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", + "dev": true, + "requires": { + "block-stream": "*", + "fstream": "^1.0.12", + "inherits": "2" + } + } + } + }, + "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": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, + "node-releases": { + "version": "1.1.59", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.59.tgz", + "integrity": "sha512-H3JrdUczbdiwxN5FuJPyCHnGHIFqQ0wWxo+9j1kAXAzqNMAHlo+4I/sYYxpyK0irQ73HgdiyzD32oqQDcU2Osw==" + }, + "node-sass": { + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.14.1.tgz", + "integrity": "sha512-sjCuOlvGyCJS40R8BscF5vhVlQjNN069NtQ1gSxyK1u9iqvn6tf7O1R4GNowVZfiZUCRt5MmMs1xd+4V/7Yr0g==", + "dev": true, + "requires": { + "async-foreach": "^0.1.3", + "chalk": "^1.1.1", + "cross-spawn": "^3.0.0", + "gaze": "^1.0.0", + "get-stdin": "^4.0.1", + "glob": "^7.0.3", + "in-publish": "^2.0.0", + "lodash": "^4.17.15", + "meow": "^3.7.0", + "mkdirp": "^0.5.1", + "nan": "^2.13.2", + "node-gyp": "^3.8.0", + "npmlog": "^4.0.0", + "request": "^2.88.0", + "sass-graph": "2.2.5", + "stdout-stream": "^1.4.0", + "true-case-path": "^1.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "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" + } + }, + "cross-spawn": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", + "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "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=", + "dev": true + } + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "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" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "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 + }, + "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" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "requires": { + "boolbase": "~1.0.0" + } + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "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=", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/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=", + "dev": true, + "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=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", + "dev": true + }, + "object-is": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz", + "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "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=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.entries": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.2.tgz", + "integrity": "sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5", + "has": "^1.0.3" + } + }, + "object.fromentries": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.2.tgz", + "integrity": "sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", + "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "object.values": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", + "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "openapi-client-axios": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/openapi-client-axios/-/openapi-client-axios-3.4.1.tgz", + "integrity": "sha512-Ik3+4WB1ZK/JSN3/014wPt/XtLcCpv7knI9yApvZn0QOQ+gmxdEVQcYTEPQ5o9rlq5KGA73IygkTUuzg+42L3A==", + "requires": { + "axios": "^0.19.0", + "bath-es5": "^3.0.3", + "json-schema-deref-sync": "^0.13.0", + "lodash": "^4.17.15", + "openapi-schema-validation": "^0.4.2", + "openapi-types": "^1.3.4", + "query-string": "^6.5.0", + "swagger-parser": "^9.0.1" + }, + "dependencies": { + "openapi-types": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-1.3.5.tgz", + "integrity": "sha512-11oi4zYorsgvg5yBarZplAqbpev5HkuVNPlZaPTknPDzAynq+lnJdXAmruGWP0s+dNYZS7bjM+xrTpJw7184Fg==" + } + } + }, + "openapi-client-axios-typegen": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/openapi-client-axios-typegen/-/openapi-client-axios-typegen-1.1.0.tgz", + "integrity": "sha512-S/UfYwi1lgbcN/hubLiMHY9Gn2UXwJqxq5kLzErMTQDhXlsRWrHc1ldXA9VnsecYURt7sVlM8F3lPLjNr2AkJw==", + "dev": true, + "requires": { + "@anttiviljami/dtsgenerator": "^2.0.7", + "indent-string": "^4.0.0", + "openapi-client-axios": "*", + "swagger-parser": "^9.0.1", + "yargs": "^13.2.2" + } + }, + "openapi-schema-validation": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/openapi-schema-validation/-/openapi-schema-validation-0.4.2.tgz", + "integrity": "sha512-K8LqLpkUf2S04p2Nphq9L+3bGFh/kJypxIG2NVGKX0ffzT4NQI9HirhiY6Iurfej9lCu7y4Ndm4tv+lm86Ck7w==", + "requires": { + "jsonschema": "1.2.4", + "jsonschema-draft4": "^1.0.0", + "swagger-schema-official": "2.0.0-bab6bed" + } + }, + "opn": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "dev": true, + "requires": { + "url-parse": "^1.4.3" + } + }, + "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-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-name": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-3.1.0.tgz", + "integrity": "sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg==", + "requires": { + "macos-release": "^2.2.0", + "windows-release": "^3.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=", + "dev": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "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": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "dev": true, + "requires": { + "retry": "^0.12.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "dev": true, + "requires": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "param-case": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.3.tgz", + "integrity": "sha512-VWBVyimc1+QrzappRs7waeN2YmoZFCGXWASRYX1/rGHtXqEcrGEIDm+jqIwFa2fRXNgQEwrxaYuIrX0WcAguTA==", + "dev": true, + "requires": { + "dot-case": "^3.0.3", + "tslib": "^1.10.0" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "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-entities": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.2.tgz", + "integrity": "sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==", + "requires": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascal-case": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.1.tgz", + "integrity": "sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA==", + "dev": true, + "requires": { + "no-case": "^3.0.3", + "tslib": "^1.10.0" + } + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "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-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "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=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "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==" + }, + "path-to-regexp": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.1.0.tgz", + "integrity": "sha512-h9DqehX3zZZDCEm+xbfU0ZmwCGFCAAraPJWMXJ4+v32NjZJilVg3k1TcKsRgIb8IQ/izZSaydDc1OhJCZvs2Dw==" + }, + "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 + }, + "pbkdf2": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", + "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", + "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" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "requires": { + "find-up": "^3.0.0" + }, + "dependencies": { + "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" + } + }, + "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" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "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==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "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==" + } + } + }, + "popper.js": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", + "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==" + }, + "portfinder": { + "version": "1.0.26", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.26.tgz", + "integrity": "sha512-Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ==", + "dev": true, + "requires": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.1" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "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=", + "dev": true + }, + "postcss": { + "version": "7.0.28", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.28.tgz", + "integrity": "sha512-YU6nVhyWIsVtlNlnAj1fHTsUKW5qxm3KEgzq2Jj6KTEFOTK8QWR12eIDvrlWhiSTK8WIBFTBhOJV4DY6dUuEbw==", + "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-load-config": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.0.tgz", + "integrity": "sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.0", + "import-cwd": "^2.0.0" + }, + "dependencies": { + "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" + } + }, + "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" + } + }, + "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" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + } + } + }, + "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" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss-modules-extract-imports": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", + "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", + "dev": true, + "requires": { + "postcss": "^7.0.5" + } + }, + "postcss-modules-local-by-default": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz", + "integrity": "sha512-jM/V8eqM4oJ/22j0gx4jrp63GSvDH6v86OqyTHHUvk4/k1vceipZsaymiZ5PvocqZOl5SFHiFJqjs3la0wnfIQ==", + "dev": true, + "requires": { + "icss-utils": "^4.1.1", + "postcss": "^7.0.16", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.0" + } + }, + "postcss-modules-scope": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", + "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", + "dev": true, + "requires": { + "postcss": "^7.0.6", + "postcss-selector-parser": "^6.0.0" + } + }, + "postcss-modules-values": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", + "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", + "dev": true, + "requires": { + "icss-utils": "^4.0.0", + "postcss": "^7.0.6" + } + }, + "postcss-selector-parser": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", + "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "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 + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prettier": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.0.5.tgz", + "integrity": "sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg==", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, + "pretty-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", + "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", + "dev": true, + "requires": { + "renderkid": "^2.0.1", + "utila": "~0.4" + } + }, + "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 + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/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" + } + }, + "prop-types-extra": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/prop-types-extra/-/prop-types-extra-1.1.1.tgz", + "integrity": "sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew==", + "requires": { + "react-is": "^16.3.2", + "warning": "^4.0.0" + } + }, + "proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "dev": true, + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "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.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "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" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "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==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "query-string": { + "version": "6.12.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.12.1.tgz", + "integrity": "sha512-OHj+zzfRMyj3rmo/6G8a5Ifvw3AleL/EbcHMD27YA31Q+cO5lfmQxECkImuNVjcskLcvBRVHNAB3w6udMs1eAA==", + "requires": { + "decode-uri-component": "^0.2.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.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 + }, + "querystringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", + "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==", + "dev": true + }, + "ramda": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.0.tgz", + "integrity": "sha512-pVzZdDpWwWqEVVLshWUHjNwuVP7SfcmPraYuqocJp1yo2U1R7P+5QAfDhdItkuoGqIBnBYrtPp7rEPqDn9HlZA==" + }, + "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" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + } + } + }, + "re-resizable": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/re-resizable/-/re-resizable-6.3.2.tgz", + "integrity": "sha512-ngxe4XBSb46vfwXjAwpURacVDig/pPt1kHRhcKlRRIoGICmo4aQHr725jurezepp1pm5jSC6iQhyLYfx3zOC3w==", + "requires": { + "fast-memoize": "^2.5.1" + } + }, + "react": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz", + "integrity": "sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2" + } + }, + "react-bootstrap": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-1.3.0.tgz", + "integrity": "sha512-GYj0c6FO9mx7DaO8Xyz2zs0IcQ6CGCtM3O6/feIoCaG4N8B0+l4eqL7stlMcLpqO4d8NG2PoMO/AbUOD+MO7mg==", + "requires": { + "@babel/runtime": "^7.4.2", + "@restart/context": "^2.1.4", + "@restart/hooks": "^0.3.21", + "@types/classnames": "^2.2.10", + "@types/invariant": "^2.2.33", + "@types/prop-types": "^15.7.3", + "@types/react": "^16.9.35", + "@types/react-transition-group": "^4.4.0", + "@types/warning": "^3.0.0", + "classnames": "^2.2.6", + "dom-helpers": "^5.1.2", + "invariant": "^2.2.4", + "prop-types": "^15.7.2", + "prop-types-extra": "^1.1.0", + "react-overlays": "^4.1.0", + "react-transition-group": "^4.4.1", + "uncontrollable": "^7.0.0", + "warning": "^4.0.3" + } + }, + "react-dom": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.13.1.tgz", + "integrity": "sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag==", + "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.npmjs.org/react-draggable/-/react-draggable-4.4.3.tgz", + "integrity": "sha512-jV4TE59MBuWm7gb6Ns3Q1mxX8Azffb7oTtDtBgFkxRvhDp38YAARmRplrj0+XGkhOJB5XziArX+4HUUABtyZ0w==", + "requires": { + "classnames": "^2.2.5", + "prop-types": "^15.6.0" + } + }, + "react-hot-loader": { + "version": "4.12.21", + "resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-4.12.21.tgz", + "integrity": "sha512-Ynxa6ROfWUeKWsTHxsrL2KMzujxJVPjs385lmB2t5cHUxdoRPGind9F00tOkdc1l5WBleOF4XEAMILY1KPIIDA==", + "requires": { + "fast-levenshtein": "^2.0.6", + "global": "^4.3.0", + "hoist-non-react-statics": "^3.3.0", + "loader-utils": "^1.1.0", + "prop-types": "^15.6.1", + "react-lifecycles-compat": "^3.0.4", + "shallowequal": "^1.1.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==" + } + } + }, + "react-intl": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/react-intl/-/react-intl-5.3.0.tgz", + "integrity": "sha512-9gdhFpfqeqniFZDUKFyzdPymGdxA2X/I9n7D5F//LVWOSpuBK++1tj48IE5J+AzFygg+UXHB2fzZu0IR7hQDrg==", + "requires": { + "@formatjs/intl-datetimeformat": "^2.1.3", + "@formatjs/intl-displaynames": "^3.1.3", + "@formatjs/intl-listformat": "^3.1.3", + "@formatjs/intl-numberformat": "^5.3.0", + "@formatjs/intl-relativetimeformat": "^6.2.2", + "@formatjs/intl-utils": "^3.8.0", + "@types/hoist-non-react-statics": "^3.3.1", + "hoist-non-react-statics": "^3.3.2", + "intl-format-cache": "^4.3.0", + "intl-messageformat": "^9.1.3", + "intl-messageformat-parser": "^5.3.3", + "shallow-equal": "^1.2.1" + } + }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + }, + "react-markdown": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-4.3.1.tgz", + "integrity": "sha512-HQlWFTbDxTtNY6bjgp3C3uv1h2xcjCSi1zAEzfBW9OwJJvENSYiLXWNXN5hHLsoqai7RnZiiHzcnWdXk2Splzw==", + "requires": { + "html-to-react": "^1.3.4", + "mdast-add-list-metadata": "1.0.1", + "prop-types": "^15.7.2", + "react-is": "^16.8.6", + "remark-parse": "^5.0.0", + "unified": "^6.1.5", + "unist-util-visit": "^1.3.0", + "xtend": "^4.0.1" + } + }, + "react-overlays": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/react-overlays/-/react-overlays-4.1.0.tgz", + "integrity": "sha512-vdRpnKe0ckWOOD9uWdqykLUPHLPndIiUV7XfEKsi5008xiyHCfL8bxsx4LbMrfnxW1LzRthLyfy50XYRFNQqqw==", + "requires": { + "@babel/runtime": "^7.4.5", + "@popperjs/core": "^2.0.0", + "@restart/hooks": "^0.3.12", + "@types/warning": "^3.0.0", + "dom-helpers": "^5.1.0", + "prop-types": "^15.7.2", + "uncontrollable": "^7.0.0", + "warning": "^4.0.3" + } + }, + "react-rnd": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/react-rnd/-/react-rnd-10.2.2.tgz", + "integrity": "sha512-UoQnNehseKEspimfPFaO0gN0vSVJ8uCZeG39nCibUVyGTjZ5d+bnY/zHEp9SObHQ9tKW4vFSa9+8Mf7QZrQrUw==", + "requires": { + "re-resizable": "6.3.2", + "react-draggable": "4.4.3", + "tslib": "2.0.0" + }, + "dependencies": { + "tslib": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.0.tgz", + "integrity": "sha512-lTqkx847PI7xEDYJntxZH89L2/aXInsyF2luSafe/+0fHOMjlBNXdH6th7f70qxLDhul7KZK0zC8V5ZIyHl0/g==" + } + } + }, + "react-router": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/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.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "requires": { + "isarray": "0.0.1" + } + } + } + }, + "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-transition-group": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.1.tgz", + "integrity": "sha512-Djqr7OQ2aPUiYurhPalTrVy9ddmFCCzwhqQmtN+J3+3DzLO209Fdr70QrN8Z3DsglWql6iY1lDWAfpFiBtuKGw==", + "requires": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + }, + "dependencies": { + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + } + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + } + } + }, + "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": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + } + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "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=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "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": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "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=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "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=", + "dev": true, + "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=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "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=", + "dev": true, + "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=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "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==", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "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=", + "dev": true, + "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=", + "dev": true, + "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=", + "dev": true, + "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=", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "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=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "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==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + }, + "dependencies": { + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + } + } + }, + "reduce-flatten": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", + "dev": true + }, + "regenerate": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", + "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==" + }, + "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.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", + "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==" + }, + "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" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexp.prototype.flags": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", + "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true + }, + "regexpu-core": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", + "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", + "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=" + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true + }, + "remark-parse": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-5.0.0.tgz", + "integrity": "sha512-b3iXszZLH1TLoyUzrATcTQUZrwNl1rE70rVdSruJFlDaJ9z5aMkhrG43Pp68OgfHndL/ADz6V69Zow8cTQu+JA==", + "requires": { + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^1.1.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^1.0.0", + "vfile-location": "^2.0.0", + "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=", + "dev": true + }, + "renderkid": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz", + "integrity": "sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==", + "dev": true, + "requires": { + "css-select": "^1.1.0", + "dom-converter": "^0.2", + "htmlparser2": "^3.3.0", + "strip-ansi": "^3.0.0", + "utila": "^0.4.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dev": true, + "requires": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "dev": true + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "^1.0.0" + } + }, + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=" + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, + "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" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "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 + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "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 + } + } + }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "dependencies": { + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + } + } + }, + "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 + }, + "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=", + "dev": true + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "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" + } + }, + "run-parallel": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", + "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", + "dev": true + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "^1.1.1" + } + }, + "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==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sass": { + "version": "1.26.10", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.26.10.tgz", + "integrity": "sha512-bzN0uvmzfsTvjz0qwccN1sPm2HxxpNI/Xa+7PlUEMS+nQvbyuEK7Y0qFqxlPHhiNHb1Ze8WQJtU31olMObkAMw==", + "dev": true, + "requires": { + "chokidar": ">=2.0.0 <4.0.0" + } + }, + "sass-graph": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.5.tgz", + "integrity": "sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag==", + "dev": true, + "requires": { + "glob": "^7.0.0", + "lodash": "^4.0.0", + "scss-tokenizer": "^0.2.3", + "yargs": "^13.3.2" + } + }, + "sass-loader": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-9.0.2.tgz", + "integrity": "sha512-nphcum3jNI442njnrZ5wJgSNX5lfEOHOKHCLf+PrTIaleploKqAMUuT9CVKjf+lyi6c2MCGPHh1vb9nGsjnZJA==", + "dev": true, + "requires": { + "klona": "^1.1.1", + "loader-utils": "^2.0.0", + "neo-async": "^2.6.1", + "schema-utils": "^2.7.0", + "semver": "^7.3.2" + }, + "dependencies": { + "json5": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "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" + } + }, + "schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + } + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + } + } + }, + "scheduler": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", + "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "schema-utils": { + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.6.tgz", + "integrity": "sha512-wHutF/WPSbIi9x6ctjGGk2Hvl0VOz5l3EKEuKbjPlB30mKZUzb9A5k9yEXRX3pwyqVLPvpfZZEllaFq/M718hA==", + "requires": { + "ajv": "^6.12.0", + "ajv-keywords": "^3.4.1" + } + }, + "scss-tokenizer": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", + "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "dev": true, + "requires": { + "js-base64": "^2.1.8", + "source-map": "^0.4.2" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "selfsigned": { + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz", + "integrity": "sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==", + "dev": true, + "requires": { + "node-forge": "0.9.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^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=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + }, + "dependencies": { + "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==", + "dev": true + } + } + }, + "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": "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=" + }, + "side-channel": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.2.tgz", + "integrity": "sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA==", + "dev": true, + "requires": { + "es-abstract": "^1.17.0-next.1", + "object-inspect": "^1.7.0" + } + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + } + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "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==", + "dev": true, + "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=", + "dev": true, + "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=", + "dev": true, + "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=", + "dev": true + } + } + }, + "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==", + "dev": true, + "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=", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "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==", + "dev": true + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + } + }, + "sockjs": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz", + "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==", + "dev": true, + "requires": { + "faye-websocket": "^0.10.0", + "uuid": "^3.4.0", + "websocket-driver": "0.6.5" + } + }, + "sockjs-client": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", + "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", + "dev": true, + "requires": { + "debug": "^3.2.5", + "eventsource": "^1.0.7", + "faye-websocket": "~0.11.1", + "inherits": "^2.0.3", + "json3": "^3.3.2", + "url-parse": "^1.4.3" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + } + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "source-map-loader": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-1.0.1.tgz", + "integrity": "sha512-DE4CJyfCVoxFLsHyuVE9Sjcib8cs5qdmOq3wcev1Un/r6F2AfQJDhag4rzpPPA48A2QZyV3CTbc+NGoFMfKIOQ==", + "dev": true, + "requires": { + "data-urls": "^2.0.0", + "iconv-lite": "^0.5.1", + "loader-utils": "^2.0.0", + "schema-utils": "^2.6.6", + "source-map": "^0.6.0" + }, + "dependencies": { + "iconv-lite": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.2.tgz", + "integrity": "sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "json5": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "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" + } + }, + "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 + } + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true + } + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "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.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", + "dev": true + }, + "spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + }, + "dependencies": { + "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==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "speed-measure-webpack-plugin": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.3.3.tgz", + "integrity": "sha512-2ljD4Ch/rz2zG3HsLsnPfp23osuPBS0qPuz9sGpkNXTN1Ic4M+W9xB8l8rS8ob2cO4b1L+WTJw/0AJwWYVgcxQ==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + } + }, + "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==" + }, + "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==", + "dev": true, + "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.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "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" + } + }, + "ssri": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.0.tgz", + "integrity": "sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA==", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "state-toggle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", + "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==" + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "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=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "stdout-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", + "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", + "dev": true, + "requires": { + "readable-stream": "^2.0.1" + } + }, + "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" + } + }, + "stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.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" + } + }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true + }, + "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=" + }, + "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" + } + }, + "string.prototype.matchall": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz", + "integrity": "sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0", + "has-symbols": "^1.0.1", + "internal-slot": "^1.0.2", + "regexp.prototype.flags": "^1.3.0", + "side-channel": "^1.0.2" + } + }, + "string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "string.prototype.trimleft": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz", + "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5", + "string.prototype.trimstart": "^1.0.0" + } + }, + "string.prototype.trimright": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz", + "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5", + "string.prototype.trimend": "^1.0.0" + } + }, + "string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "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" + } + }, + "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" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1" + }, + "dependencies": { + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + } + } + }, + "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 + }, + "style-loader": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.2.1.tgz", + "integrity": "sha512-ByHSTQvHLkWE9Ir5+lGbVOXhxX10fbprhLvdg96wedFZb4NDekDPxVKv5Fwmio+QcMlkkNfuK+5W1peQ5CUhZg==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^2.6.6" + }, + "dependencies": { + "json5": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "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" + } + } + } + }, + "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" + } + }, + "svg-loader": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/svg-loader/-/svg-loader-0.0.2.tgz", + "integrity": "sha1-YBqy/aodra48qZdbVQ3pKgfh2Ss=", + "dev": true + }, + "swagger-parser": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/swagger-parser/-/swagger-parser-9.0.1.tgz", + "integrity": "sha512-oxOHUaeNetO9ChhTJm2fD+48DbGbLD09ZEOwPOWEqcW8J6zmjWxutXtSuOiXsoRgDWvORYlImbwM21Pn+EiuvQ==", + "requires": { + "@apidevtools/swagger-parser": "9.0.1" + } + }, + "swagger-schema-official": { + "version": "2.0.0-bab6bed", + "resolved": "https://registry.npmjs.org/swagger-schema-official/-/swagger-schema-official-2.0.0-bab6bed.tgz", + "integrity": "sha1-cAcEaNbSl3ylI3suUZyn0Gouo/0=" + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + } + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true + }, + "tar": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.2.tgz", + "integrity": "sha512-Glo3jkRtPcvpDlAs/0+hozav78yoXKFr+c4wgw62NNMO3oo4AaJdCo21Uu7lcwr55h39W2XD1LMERc64wtbItg==", + "dev": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.0", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "terser": { + "version": "4.6.13", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.13.tgz", + "integrity": "sha512-wMvqukYgVpQlymbnNbabVZbtM6PN63AzqexpwJL8tbh/mRT9LE5o+ruVduAGL7D6Fpjl+Q+06U5I9Ul82odAhw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "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 + } + } + }, + "terser-webpack-plugin": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-3.0.6.tgz", + "integrity": "sha512-z3HLOOPUHkCNGkeEHqqiMAIy1pjpHwS1o+i6Zn0Ws3EAvHJj46737efNNEvJ0Vx9BdDQM83d56qySDJOSORA0A==", + "dev": true, + "requires": { + "cacache": "^15.0.4", + "find-cache-dir": "^3.3.1", + "jest-worker": "^26.0.0", + "p-limit": "^3.0.1", + "schema-utils": "^2.6.6", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.8.0", + "webpack-sources": "^1.4.3" + }, + "dependencies": { + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "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==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "p-limit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz", + "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==", + "dev": true, + "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==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + }, + "dependencies": { + "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-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 + }, + "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==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + } + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "timers-browserify": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", + "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", + "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-typed-emitter": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/tiny-typed-emitter/-/tiny-typed-emitter-2.0.2.tgz", + "integrity": "sha512-mTodzBLyisJpj8tQuXOowrYHIW8548XqJHEJdqo4vw1QMV7ZOZYDZKk75/5VkYMTJTvDlUpDtJUHjOowAvs0wA==", + "dev": true + }, + "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==" + }, + "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.npmjs.org/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=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "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": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + } + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "tr46": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", + "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } + }, + "traverse": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", + "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=" + }, + "trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "trim-trailing-lines": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.3.tgz", + "integrity": "sha512-4ku0mmjXifQcTVfYDfR5lpgV7zVqPg6zV9rdZmwOPqq0+Zq19xDqEgagqVbc4pOOShbncuAOIs59R3+3gcF3ZA==" + }, + "trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==" + }, + "true-case-path": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", + "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", + "dev": true, + "requires": { + "glob": "^7.1.2" + } + }, + "tsconfig-paths": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", + "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, + "tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==", + "dev": true + }, + "tsutils": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", + "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "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.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "typescript": { + "version": "3.9.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.6.tgz", + "integrity": "sha512-Pspx3oKAPJtjNwE92YS05HQoY7z2SFyOpHo9MqJor3BXAGNaPUs83CuVp9VISFkSjyRfiTpmKuAYGJB7S7hOxw==", + "dev": true + }, + "uncontrollable": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-7.1.1.tgz", + "integrity": "sha512-EcPYhot3uWTS3w00R32R2+vS8Vr53tttrvMj/yA1uYRhf8hbTG2GyugGqWDY0qIskxn0uTTojVd6wPYW9ZEf8Q==", + "requires": { + "@babel/runtime": "^7.6.3", + "@types/react": "^16.9.11", + "invariant": "^2.2.4", + "react-lifecycles-compat": "^3.0.4" + } + }, + "unherit": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", + "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", + "requires": { + "inherits": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "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==" + }, + "unified": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-6.2.0.tgz", + "integrity": "sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA==", + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^1.1.0", + "trough": "^1.0.0", + "vfile": "^2.0.0", + "x-is-string": "^0.1.0" + } + }, + "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==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "unist-util-is": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", + "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==" + }, + "unist-util-remove-position": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz", + "integrity": "sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==", + "requires": { + "unist-util-visit": "^1.1.0" + } + }, + "unist-util-stringify-position": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", + "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==" + }, + "unist-util-visit": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", + "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "requires": { + "unist-util-visit-parents": "^2.0.0" + }, + "dependencies": { + "unist-util-visit-parents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", + "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", + "requires": { + "unist-util-is": "^3.0.0" + } + } + } + }, + "unist-util-visit-parents": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-1.1.2.tgz", + "integrity": "sha512-yvo+MMLjEwdc3RhhPYSximset7rwjMrdt9E41Smmvg25UQIenzrN83cRnF1JMzoMi9zZOQeYXHSDf7p+IQkW3Q==" + }, + "universal-user-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-5.0.0.tgz", + "integrity": "sha512-B5TPtzZleXyPrUMKCpEHFmVhMN6EhmJYjG5PQna9s7mXeSqGTLap4OpqLl5FCEFUI3UBmllkETwKf/db66Y54Q==", + "requires": { + "os-name": "^3.1.0" + } + }, + "universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "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=", + "dev": true, + "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=", + "dev": true, + "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=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "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=", + "dev": true + }, + "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 + } + } + }, + "url-parse": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", + "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "dev": true, + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "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.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", + "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", + "dev": true + }, + "valid-url": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", + "integrity": "sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA=" + }, + "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" + } + }, + "validator": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-12.2.0.tgz", + "integrity": "sha512-jJfE/DW6tIK1Ek8nCfNFqt8Wb3nzMoAbocBF6/Icgg1ZFSBpObdnwVY2jQj6qUqzhx5jc71fpvBWyLGO7Xl+nQ==" + }, + "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==" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "vfile": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-2.3.0.tgz", + "integrity": "sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==", + "requires": { + "is-buffer": "^1.1.4", + "replace-ext": "1.0.0", + "unist-util-stringify-position": "^1.0.0", + "vfile-message": "^1.0.0" + } + }, + "vfile-location": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.6.tgz", + "integrity": "sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==" + }, + "vfile-message": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz", + "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==", + "requires": { + "unist-util-stringify-position": "^1.1.1" + } + }, + "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 + }, + "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" + } + }, + "watchpack": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz", + "integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==", + "dev": true, + "requires": { + "chokidar": "^3.4.1", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.0" + }, + "dependencies": { + "binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "dev": true, + "optional": true + }, + "chokidar": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.2.tgz", + "integrity": "sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A==", + "dev": true, + "optional": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.4.0" + } + }, + "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==", + "dev": true, + "optional": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "readdirp": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", + "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", + "dev": true, + "optional": true, + "requires": { + "picomatch": "^2.2.1" + } + } + } + }, + "watchpack-chokidar2": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz", + "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==", + "dev": true, + "optional": true, + "requires": { + "chokidar": "^2.1.8" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "optional": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "optional": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "optional": true, + "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=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "optional": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "optional": true, + "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=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "optional": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "optional": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "optional": true, + "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=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "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==", + "dev": true, + "optional": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "optional": true, + "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" + } + } + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true + }, + "webpack": { + "version": "4.44.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.1.tgz", + "integrity": "sha512-4UOGAohv/VGUNQJstzEywwNxqX417FnjZgZJpJQegddzPmTvph37eBIRbRTfdySXzVtJXLJfbMN3mMYhM6GdmQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.3.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.3", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.7.4", + "webpack-sources": "^1.4.1" + }, + "dependencies": { + "acorn": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", + "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "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=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "enhanced-resolve": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", + "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "dependencies": { + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + } + } + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "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=", + "dev": true, + "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=", + "dev": true, + "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=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "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==", + "dev": true + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "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" + } + }, + "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" + } + }, + "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 + }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "terser-webpack-plugin": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "dev": true, + "requires": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "webpack-cli": { + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.12.tgz", + "integrity": "sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "cross-spawn": "^6.0.5", + "enhanced-resolve": "^4.1.1", + "findup-sync": "^3.0.0", + "global-modules": "^2.0.0", + "import-local": "^2.0.0", + "interpret": "^1.4.0", + "loader-utils": "^1.4.0", + "supports-color": "^6.1.0", + "v8-compile-cache": "^2.1.1", + "yargs": "^13.3.2" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "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" + } + }, + "v8-compile-cache": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", + "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", + "dev": true + } + } + }, + "webpack-dev-middleware": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", + "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", + "dev": true, + "requires": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + } + }, + "webpack-dev-server": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz", + "integrity": "sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==", + "dev": true, + "requires": { + "ansi-html": "0.0.7", + "bonjour": "^3.5.0", + "chokidar": "^2.1.8", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.3.1", + "http-proxy-middleware": "0.19.1", + "import-local": "^2.0.0", + "internal-ip": "^4.3.0", + "ip": "^1.1.5", + "is-absolute-url": "^3.0.3", + "killable": "^1.0.1", + "loglevel": "^1.6.8", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.26", + "schema-utils": "^1.0.0", + "selfsigned": "^1.10.7", + "semver": "^6.3.0", + "serve-index": "^1.9.1", + "sockjs": "0.3.20", + "sockjs-client": "1.4.0", + "spdy": "^4.0.2", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.2", + "webpack-log": "^2.0.0", + "ws": "^6.2.1", + "yargs": "^13.3.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "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=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "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==", + "dev": true, + "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=", + "dev": true, + "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=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "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=", + "dev": true, + "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=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "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=", + "dev": true, + "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=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "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==", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "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=", + "dev": true, + "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=", + "dev": true, + "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=", + "dev": true, + "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=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "dev": true + }, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "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=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "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==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "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" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^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==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "ws": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + } + } + }, + "webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "dev": true, + "requires": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + } + }, + "webpack-merge": { + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.0.9.tgz", + "integrity": "sha512-P4teh6O26xIDPugOGX61wPxaeP918QOMjmzhu54zTVcLtOS28ffPWtnv+ilt3wscwBUCL2WNMnh97XkrKqt9Fw==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + } + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "requires": { + "source-list-map": "^2.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==", + "dev": true + } + } + }, + "websocket-driver": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", + "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", + "dev": true, + "requires": { + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", + "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", + "dev": true + }, + "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==", + "dev": true + }, + "whatwg-url": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.1.0.tgz", + "integrity": "sha512-vEIkwNi9Hqt4TV9RdnaBPNt+E2Sgmo3gePebCRgZ1R7g6d23+53zCTnuB0amKI4AXq6VM8jj2DUAa0S1vjJxkw==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^2.0.2", + "webidl-conversions": "^5.0.0" + } + }, + "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" + } + }, + "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 + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "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": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "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=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true + }, + "windows-release": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-3.3.1.tgz", + "integrity": "sha512-Pngk/RDCaI/DkuHPlGTdIkDiTAnAkyMjoQMZqRsxydNl1qGXNIoZrB7RK8g53F2tEgQBMqQJHQdYZuQEEAu54A==", + "requires": { + "execa": "^1.0.0" + } + }, + "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==", + "dev": true + }, + "worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "dev": true, + "requires": { + "errno": "~0.1.7" + } + }, + "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" + }, + "dependencies": { + "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" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, + "x-is-string": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz", + "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yaml": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", + "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", + "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" + }, + "dependencies": { + "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 + }, + "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-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-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 + }, + "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" + } + } + } + }, + "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" + } + }, + "z-schema": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-4.2.3.tgz", + "integrity": "sha512-zkvK/9TC6p38IwcrbnT3ul9in1UX4cm1y/VZSs4GHKIiDCrlafc+YQBgQBUdDXLAoZHf2qvQ7gJJOo6yT1LH6A==", + "requires": { + "commander": "^2.7.1", + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0", + "validator": "^12.0.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000000..f1deb061e0 --- /dev/null +++ b/package.json @@ -0,0 +1,137 @@ +{ + "name": "tgstation-server-control-panel", + "version": "1.0.1", + "private": true, + "homepage": "https://tgstation.github.io/tgstation-server-control-panel", + "repository": "github:tgstation/tgstation-server-control-panel", + "bugs": { + "url": "https://github.com/tgstation/tgstation-server-control-panel/issues" + }, + "license": "AGPL-3.0-or-later", + "author": { + "name": "Cyberboss" + }, + "main": "build/lib/App.js", + "types": "build/lib/App.d.ts", + "dependencies": { + "@babel/plugin-transform-runtime": "^7.10.5", + "@babel/preset-env": "^7.10.4", + "@formatjs/intl-pluralrules": "^3.4.6", + "@fortawesome/fontawesome-svg-core": "^1.2.29", + "@fortawesome/free-brands-svg-icons": "^5.13.1", + "@fortawesome/free-solid-svg-icons": "^5.13.1", + "@fortawesome/react-fontawesome": "^0.1.11", + "@hot-loader/react-dom": "^16.13.0", + "@loadable/component": "^5.13.1", + "@mapbox/react-click-to-select": "^2.2.0", + "@octokit/plugin-paginate-rest": "^2.2.3", + "@octokit/plugin-retry": "^3.0.3", + "@octokit/plugin-throttling": "^3.3.0", + "@octokit/request-error": "^2.0.2", + "@octokit/rest": "^18.0.0", + "@octokit/types": "^5.1.0", + "axios": "^0.19.2", + "babel-loader": "^8.1.0", + "bootstrap": "^4.5.0", + "fs-extra": "^9.0.1", + "jquery": "^3.5.1", + "openapi-client-axios": "3.4.1", + "path-to-regexp": "^6.1.0", + "popper.js": "^1.16.1", + "react": "^16.13.1", + "react-bootstrap": "^1.3.0", + "react-hot-loader": "^4.12.21", + "react-intl": "^5.3.0", + "react-markdown": "^4.3.1", + "react-rnd": "^10.2.2", + "react-router-dom": "^5.2.0", + "react-transition-group": "^4.4.1" + }, + "scripts": { + "generate_api": "npm run patch && npm run download_api && npm run generate_enums && npm run typegen", + "postinstall": "npm run generate_api", + "start": "npx webpack-dev-server --config webpack.dev.js", + "build": "npx webpack --config webpack.prod.js", + "msbuild": "npm run build && node scripts/msbuild.js", + "build-dev": "npx webpack --config webpack.dev.js", + "lint": "eslint ./src --max-warnings=0", + "lint-fix": "eslint --fix ./src --max-warnings=0", + "patch": "node scripts/patcher/patch.js", + "download_api": "node scripts/api_download.js", + "generate_enums": "node scripts/generate_enums.js > src/ApiClient/generatedcode/_enums.ts", + "typegen": "npx typegen src/ApiClient/generatedcode/swagger.json > src/ApiClient/generatedcode/_generated.d.ts" + }, + "devDependencies": { + "@babel/plugin-proposal-class-properties": "^7.10.4", + "@babel/preset-react": "^7.10.4", + "@babel/preset-typescript": "^7.10.4", + "@types/loadable__component": "^5.13.0", + "@types/react": "^16.9.43", + "@types/react-bootstrap": "^1.0.1", + "@types/react-dom": "^16.9.8", + "@types/react-router-dom": "^5.1.5", + "@types/react-transition-group": "^4.4.0", + "@typescript-eslint/eslint-plugin": "^3.6.1", + "@typescript-eslint/parser": "^3.6.1", + "autoprefixer": "^9.8.5", + "babel-timing": "^0.8.0", + "cache-loader": "^4.1.0", + "clean-webpack-plugin": "^3.0.0", + "copy-webpack-plugin": "^6.0.3", + "cross-conf-env": "^1.1.2", + "css-loader": "^3.6.0", + "eslint": "^7.4.0", + "eslint-config-prettier": "^6.10.1", + "eslint-plugin-import": "^2.22.0", + "eslint-plugin-prettier": "^3.1.4", + "eslint-plugin-react": "^7.20.3", + "eslint-plugin-simple-import-sort": "^5.0.3", + "fast-sass-loader": "^1.5.0", + "follow-redirects": "^1.12.1", + "fork-ts-checker-webpack-plugin": "^5.0.7", + "html-webpack-plugin": "^4.3.0", + "node-sass": "^4.14.1", + "openapi-client-axios-typegen": "1.1.0", + "postcss-loader": "^3.0.0", + "prettier": "^2.0.4", + "react-dom": "^16.13.1", + "regenerator-runtime": "^0.13.5", + "sass": "^1.26.10", + "sass-loader": "^9.0.2", + "source-map-loader": "^1.0.1", + "speed-measure-webpack-plugin": "^1.3.3", + "style-loader": "^1.2.1", + "svg-loader": "0.0.2", + "terser-webpack-plugin": "^3.0.6", + "tiny-typed-emitter": "^2.0.2", + "typescript": "^3.9.6", + "webpack": "^4.43.0", + "webpack-cli": "^3.3.12", + "webpack-dev-server": "^3.11.0", + "webpack-merge": "^5.0.9" + }, + "tgs_api_version": "7.3.2", + "files": [ + "build/lib", + "build/public" + ], + "eslintConfig": { + "extends": "react-app" + }, + "browserslist": { + "production": [ + "last 5 chrome version", + "last 5 firefox version", + "last 3 edge version", + "last 2 ie version", + "last 5 opera version", + "last 3 safari version" + ] + }, + "sideEffects": [ + "@formatjs/intl-relativetimeformat/polyfill", + "@formatjs/intl-relativetimeformat/locale-data/en", + "@formatjs/intl-pluralrules/polyfill", + "@formatjs/intl-pluralrules/locale-data/en" + ] +} diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..8e0873b04dbc1d269fd57b74bc69dbd0a8a3578c GIT binary patch literal 14478 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 z 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 literal 0 HcmV?d00001 diff --git a/public/android-chrome-512x512.png b/public/android-chrome-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..8f0cc45fe80e70e74cb56645f99e2bc27d06120d GIT binary patch literal 41495 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­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�{{5 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 literal 0 HcmV?d00001 diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..efdd41fde9ec8ea8ac89ca973bc5dc186db7252c GIT binary patch literal 13437 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 literal 0 HcmV?d00001 diff --git a/public/browserconfig.xml b/public/browserconfig.xml new file mode 100644 index 0000000000..b3930d0f04 --- /dev/null +++ b/public/browserconfig.xml @@ -0,0 +1,9 @@ + + + + + + #da532c + + + diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..8eab43dd173da509e50178451dcce865479f9275 GIT binary patch literal 1316 zcmZ`&Yfutc6uyWLgh+=X~Ee_uPWekU%Wj z9t{A%GJ_Z#C~;pW3JF&iqE#3arb&KmKLBnQVV2{~piU43ao7N4Z2}-SAAluzlsg4L z1_^*^J^=I*0BogYjr)B7Fxe9t%ng7BRA%&ccAQnxjBsVeCzS6WE(8EkS=VysK_|3Y zSy?H*e7*ceeRN7ze0r`&K!hhVI`2YdL3xe&n(r)aT}&)(keIce0o?GU!|wiJZoBqV z19cHE`PTS~Qd`u&G@GqW8}d;hGi z^9_wZoPWBZ?U7DDl6|}w!nLZ@ZI3mvk{p1rzu9oVw($YLZH9zvn;z7+DB%X!c{Dxj zXi=%rPTM1rkLX9ohsP$qPt74Rcy-MW@3bl*RmsmMAj+HR_vyz9c_KOF0prJrvp0IN zjuw`*tF`4-wfSetoV-K!@g=IR?&kJRj^GfCEzUW9sR@2BXl8bPW_Iqw+`Q(Q?rHA;q$kTOf|0K&8oT?SKY6Bmr0J=-+dBSws;Rv* zHZ`a8ubL`F`AXu3T3@N(RHylF=9;l3Q)@ zz1ynV5hh^sCCH5wm{*cKf6-uAG%Rt1GThc3!F zCo5LWO*%X@GA2Fx`}pLP(YX9u@uf9xyPB1qpT8`&s=AzfLSTJ@4@eN}$?z?DbVCr* zJ2c*mK)qIbFC+i-liq=s6R+>yR~4MU9DE=(yWp&DXkn1B>+hR8zs?+AF=RCAuR8FSj4?Eg)*IX0 zW@Uc+4hq+%v|-FGupFB1ZwN6M!#qFC)6ha~&%srskueG)P@FsT;#dmPWUJdK)~*90 zA%55!$iQqIP_{wELdIkVSWK8&n|j&Z^i#oafIu=Ceq4O7fDb#~lDS31wA*Bk;-5cP z91+Up@b-rb5c5&}R7yQrQLCuSkbN4&;|I5Y#HOYFy?{ZVJb^8w-NQE&vRSMywd>aO zs;czhCk=KQVsi4kX$Sj@r7_X^A!0TDhL}!oYRtCZn{8a$99&l~xFs*4WTJ!k({*n> z6Y2DAv?fiduZ0syKC*0vi5rEE>P)qU6>^pZM9LE4WkR|jO$Y@blgK0@ zi9+1w#U)YbR4ScJbtRGMBvRUu`Zxb_5K9t7iJAZJfON*jK!=DdZlsJ8FDFRTB#ELF zAwiZY6%s^JnE-$zWv>=ip$_p}T-5uzG|Wj3KssXF1sEGgo4v)~AZ-YYTuOTa(ow-B nbPe`(C^gD;N{g=Cpvx?GFl}osTkxlzgAjlj5W=YO=O6nAV?8?7 literal 0 HcmV?d00001 diff --git a/public/favicon-32x32.png b/public/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..6e8aa69005045abe293cc4b39f1cd017659c0958 GIT binary patch literal 2511 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 WL;$~Qq@K^P0FWjq#GgjqN&f&UHjM57 literal 0 HcmV?d00001 diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..604f8ae0911890091b10763a20e54adb70226fa8 GIT binary patch literal 15086 zcmeHO2YgQF+dhfJuDw@c$4G>TO>7c-G`5l`O<@)ATp-}n2T-|xK7InQ~%L!2v(u7k?(Q0LXKiI+O)IBq znzQqZ=M0*58D$xe^L6m(4TZyIj7-C9`RsA8DHXheM%lN(z0X<*e$Ge#GEz%|iF@*(`^D+a<$#x4z+3 zBGdT7>9l;dTmE}*Jn|(g>FMm)!6UDI3-?@F1I%xAmrPoDkGzf@K51O>$j?jW#yos* zPxSQo(L>p^W^rt{meo#qI;ZI7l2I$qHl=cDKIo%4`s#>2%lsQ(P$a#UyL|)CLo0un zA*+9y9sQrVlOq>QANOqLgyD~VoINoj^vWfj?0EV0ze8lnyeW}0CJcKtfBM*GKYc$r za@FEl(W`%&BVC$TJzXr5_P#lcy;q5hU;VOjQ9Rn-wP44l)l%C%`>agb`#bNh*|n-8 z`?tUK)}1aupfQi$3DvAprvnK-DUIXV+YmPv9Yo8{Ml1^`s9(i zc+WC(x_K>Bu7zF^yimnak&&qT*l1&J%Ly|H& zDPsm%>a&gMnuPoBza1r~js?lurSqcedE{PRB8yfrv!*3~+waJ3ucdU&X6MzQg7c4~ z2X(r=f6o>PfBsC-$DgA?du7JgL*?GxTXOHtO-0X~$s@^UWI*S}Qn^T4DVN_-Je?iH z+cU2$Uo>4VUpgmuZ{3i)x6Rj0xq1C>2|lm~`=^&|-?&oUk01K!y~dRbE_cgeUpJ?N zmikS;qinup`I}TNybALgcI;pP=zea{t=}9)`NA3F^+);Ee}H&8IY@#tijU#b-S$S<+`8r z-qF)8jLSOabTDv-)N;=@HnH@x?!kRK%w4Ga$jAsG|Cug%`Nn_MUpn`@fOjte z{ZI{Go9voZE3$;V*qoj{dm`OGuCC^e<8tm2GyieuU%yP9XEXhlGg3&d44O;N*0s-(Cz{j4u=~=XVL2&>x&OE6fBY~^26b&30{zJ2 zRrEvm&Csx7{IEGel{e--sph|0@eG_(!G4unH~vv$QO>vX_E5TzH6fH2;B!wg zhn>y)$T_8!5qi@h%6IGZ1iB1#&NwnPDd^`p>eQs7&|bI?9V8n3jVUN#n^Y>CS_XD$ zA`kA}u_i~zr#d&Qe5O!ZEvNns(9u$~s8M{~`QMMntAG4(pj0oJ$=ElfJt^q7mTmgL zq#v?YUBB)6RWCO3kiRZSJ0Fi-Iqfu<)Gt$+JX(u+Q~kq@iZ52{r#{iNYGKG@i$0;#K|R%fQ0Lp=|AZA2OwOsa0>k^X35|H6Z|QBR zOHg0ac|XT|*ZpHnxBkpAYPe>B?tefZUghLZunq12Lvl@!cof2Bs|IZ2Nt}jw2;8{| z{2;9{_eo7ZZ5+jOT+%7KjnA9cEwv^?ewg`nBrv0fw&({>{)95ly5UynU6l%_c`x(N z`L6GoM}GbJKXQ2gE?G45EA=hJgscq9SMJZGoPTTm zlX?pFx#FwVbezPV@+qHhwhj92np7#Y^z7-Q*3Hy&bW{{}BS};l``Uqy2hCuqk&E;xAPb7+Gx zLrxz*WYET&V~6(1gfDuF|KQHFg#>!GES~d?QHQoL%dmz5>_X~#H~Et zTg>`8ZFgcoOaMTHIuLZ<6K*-Qn#pX;yEXlMh8^Yv>}q51{@toC$Yt5S!P2iPc+Jli z@IRh&?iccn#3atg*I)FKkiX8W>c5{jEX}-J_5g1$k`RrrD+5Mf7xF*}nI z(hj?N`C`Hs^m6zlh%+h7mN+2!Ezc0oYiTgvn>B1i;CtszlYOUiXh9+Beh%1u6pE(&U+cvC_xl{ckfxQQn z$og)3NB=I@?Do0bvTJp*m;JD&^I>D`8{Vh&HOLxFZ9H|!7MTf_6Z?dHeX~omD*J&$ zEUH{I?O?YYcHXYp?DOj5Cvk35^E=4rJUQhW25ZZx=x7y(Y`e&zJqKFgrB>p(c%BV4KO{Y zMwJV0*tq(~*o$XR$@&!wW5*5Yeiv9{0I;TU@K=rop0f)&OY>t{^+C;=^q(PmmsQV$%{2|a_Ia8YUGLIcC!slowOCFY9<>8v<#PTprOK;9Y z0N(LA001y^eiVM9nR{8~PMU^p(2?yN-D3bv3t^t(Wgft1D4=>C!e`Taz1{0_TkUkZ zbh=~N|LB+BBYeh>k^6&L@>$RIc|pU`EH^HHINA7o;;|*?O!L{2GfvAHS9M%QoK^-r z{2xhKlWA!iS1Hn_X|XgYcjM~C^!eU_A9%cbo|MHv$1C>(d_`G+Lr+|~U>Zz`GqIdYCd&3b+tw=^?@Paq z0=-!v|CP_QVWs>EgP{FqPJCvZ!iH5p%3l}%h(%mhXrFfVrT{<5VQW5srPhaD6jvcq z;~!J816d^+ZrE! z$hK%}D9*HBk01UGdThl&C@1Tip23V0s}7%9QKkq4vF{<{T4`CVh=HD^kNYBbfDW@(-?Oay&(+HU zpPTZzlZMys|M8z2yu!kNEa#v6pYe-&dj9+=<07|WTxi)w0`K#gN1Vo-h}{6+mNJN? zqAXubF3_f#($+NyS|G5CH3w<(XDGm=ToLHN2;sJAF)*Q~nay zqKpjMw>_e7d++(M?Gu#2P!3YIs8M3T-fin2^V@$}u}HO39a;U*Kabc90S>EZwR)`{ z!+_7OT0C1}YTyaaTGe$Q2EFukF_)GlC$^@ev5wbjPPRod^4}2*yqVr zeCN@i0MtFIbO7oBCy(rB9Js>uc;=yx?!}zPiES`e-|7Y!$AB{@f>kUk@tA!(Ef?dL zD2EwW*Tc7_!iPEMjK5+W4P$Frhi&NZ;~r)rZ-?9+VKt1+M|@Lh_(X0~Z($6CIdL7S zPf+jVJul8P`MVigWt+%|2;~RCJUoC8%#b%W2Y&GazU1VvYkU#6Fcb5(6SQ2peDUl{ zAj?cp0{2+E82E~=LVwtey*|5n^fc%emD6A4RFhq0w&M@ zo}{mvM0<(&+Zpfz;07;359TWbJeyYl5EFl_D|22UrgC#xI1m|Lz&^ZqDF`DVnMgzEeJ76|;Eld)+G>8Cnz+M{bNR+UR~7H2twTSl?*9aDygIOJ^Rm{TfcV|ibEk~% zj{SRrIv(%?*@1Bh-Bckm^g8$6puM21HlPA%ijeewa z)5=QMq0YG-`0sScVe((vI+rhyNu&H4!hWsD0C;+&(!l&TltbqSR9Hm{( z`M!BQ6moQ@(iv!LQhxIPLi8i@9{&Y6G19L?WzN5zrjH-u3)vQFk+sK_tfQ@ibyju< z*PSvOYacap;)r&7J3a5%s8SBB@6r>&`!8ZIL{X36-X&hc95OHJ_v42y{knF^^3F}G z=GNPpb1-$s`kwi6L${j&y(bKM+aIvo&me{|Z2j^Db9^e~&jaNyj(%lsuiv+<hH}t8B?^EriEc9L(q8uF) literal 0 HcmV?d00001 diff --git a/public/manifest.json b/public/manifest.json new file mode 100644 index 0000000000..cfef1e2984 --- /dev/null +++ b/public/manifest.json @@ -0,0 +1,19 @@ +{ + "name": "Tgstation Server Control Panel", + "short_name": "TGS Control Panel", + "icons": [ + { + "src": "/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "standalone" +} diff --git a/public/mstile-150x150.png b/public/mstile-150x150.png new file mode 100644 index 0000000000000000000000000000000000000000..1aebfaac82965a163d08cfe53d11e9ad70cc7036 GIT binary patch literal 10266 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 + + + +Created by potrace 1.11, written by Peter Selinger 2001-2013 + + + + + diff --git a/scripts/api_download.js b/scripts/api_download.js new file mode 100644 index 0000000000..09712cf8da --- /dev/null +++ b/scripts/api_download.js @@ -0,0 +1,16 @@ +const { https } = require("follow-redirects"); +const fs = require("fs"); +const path = require("path"); +const pkg = require("../package.json"); + +const file = fs.createWriteStream( + path.resolve(__dirname, "..", "src", "ApiClient", "generatedcode", "swagger.json") +); +https.get( + "https://github.com/tgstation/tgstation-server/releases/download/api-v" + + pkg.tgs_api_version + + "/swagger.json", + function (response) { + response.pipe(file); + } +); diff --git a/scripts/generate_enums.js b/scripts/generate_enums.js new file mode 100644 index 0000000000..d4f1b25106 --- /dev/null +++ b/scripts/generate_enums.js @@ -0,0 +1,13 @@ +const swagger = require("../src/ApiClient/generatedcode/swagger.json"); + +for (const [name, schema] of Object.entries(swagger.components.schemas)) { + if (!("enum" in schema)) continue; //skip if true + + console.log(`export enum ${name} {`); //outputs text + for (let i = 0; i < schema.enum.length; i++) { + const name = schema["x-enum-varnames"][i]; //sets the name + const value = schema["enum"][i]; //sets the value + console.log(` ${name} = ${value}${i < schema.enum.length - 1 ? "," : ""}`); //outputs to console + } + console.log(`}\n`); //creates a newline +} diff --git a/scripts/msbuild.js b/scripts/msbuild.js new file mode 100644 index 0000000000..8668e56f0c --- /dev/null +++ b/scripts/msbuild.js @@ -0,0 +1,9 @@ +const fs = require("fs-extra"); + +const destination = "../wwwroot"; + +//Removes the directory +// noinspection JSUnresolvedFunction //function does exist +fs.removeSync(destination); +//Moves the dist folder to the web root +fs.moveSync("./dist", destination); diff --git a/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/dtsGenerator.d.ts b/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/dtsGenerator.d.ts new file mode 100644 index 0000000000..248bfc1fa5 --- /dev/null +++ b/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/dtsGenerator.d.ts @@ -0,0 +1,22 @@ +import ReferenceResolver from "./referenceResolver"; +import SchemaConvertor from "./schemaConvertor"; +export default class DtsGenerator { + private resolver; + private convertor; + private currentSchema; + constructor(resolver: ReferenceResolver, convertor: SchemaConvertor); + generate(): Promise; + private walk; + private walkSchema; + private normalizeContent; + private normalizeSchemaContent; + private generateDeclareType; + private generateAnyTypeModel; + private generateTypeCollection; + private generateProperties; + private generateTypeProperty; + private generateArrayedType; + private generateArrayTypeProperty; + private generateType; + private generateTypeName; +} diff --git a/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/dtsGenerator.js b/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/dtsGenerator.js new file mode 100644 index 0000000000..0026e4e64e --- /dev/null +++ b/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/dtsGenerator.js @@ -0,0 +1,389 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var debug_1 = tslib_1.__importDefault(require("debug")); +var jsonPointer_1 = require("../jsonPointer"); +var jsonSchema_1 = require("./jsonSchema"); +var utils = tslib_1.__importStar(require("./utils")); +var debug = debug_1.default("dtsgen"); +var typeMarker = Symbol(); +var DtsGenerator = (function () { + function DtsGenerator(resolver, convertor) { + this.resolver = resolver; + this.convertor = convertor; + } + DtsGenerator.prototype.generate = function () { + return tslib_1.__awaiter(this, void 0, void 0, function () { + var map, result; + return tslib_1.__generator(this, function (_a) { + switch (_a.label) { + case 0: + debug("generate type definition files."); + return [4, this.resolver.resolve()]; + case 1: + _a.sent(); + map = this.convertor.buildSchemaMergedMap( + this.resolver.getAllRegisteredSchema(), + typeMarker + ); + this.convertor.start(); + this.walk(map); + result = this.convertor.end(); + return [2, result]; + } + }); + }); + }; + DtsGenerator.prototype.walk = function (map) { + var e_1, _a; + var keys = Object.keys(map).sort(); + try { + for ( + var keys_1 = tslib_1.__values(keys), keys_1_1 = keys_1.next(); + !keys_1_1.done; + keys_1_1 = keys_1.next() + ) { + var key = keys_1_1.value; + var value = map[key]; + if (value.hasOwnProperty(typeMarker)) { + var schema = value[typeMarker]; + debug( + " walk doProcess: key=" + key + " schemaId=" + schema.id.getAbsoluteId() + ); + this.walkSchema(schema); + delete value[typeMarker]; + } + if (typeof value === "object" && Object.keys(value).length > 0) { + this.convertor.startNest(key); + this.walk(value); + this.convertor.endNest(); + } + } + } catch (e_1_1) { + e_1 = { error: e_1_1 }; + } finally { + try { + if (keys_1_1 && !keys_1_1.done && (_a = keys_1.return)) _a.call(keys_1); + } finally { + if (e_1) throw e_1.error; + } + } + }; + DtsGenerator.prototype.walkSchema = function (schema) { + var normalized = this.normalizeContent(schema); + this.currentSchema = normalized; + this.convertor.outputComments(normalized); + var type = normalized.content.type; + switch (type) { + case "any": + return this.generateAnyTypeModel(normalized); + case "array": + return this.generateTypeCollection(normalized); + case "object": + default: + return this.generateDeclareType(normalized); + } + }; + DtsGenerator.prototype.normalizeContent = function (schema, pointer) { + if (pointer != null) { + schema = jsonSchema_1.getSubSchema(schema, pointer); + } + var content = this.normalizeSchemaContent(schema.content); + return Object.assign({}, schema, { content: content }); + }; + DtsGenerator.prototype.normalizeSchemaContent = function (content) { + var e_2, _a; + if (typeof content === "boolean") { + content = content ? {} : { not: {} }; + } else { + if (content.allOf) { + var work = content; + try { + for ( + var _b = tslib_1.__values(content.allOf), _c = _b.next(); + !_c.done; + _c = _b.next() + ) { + var sub = _c.value; + if (typeof sub === "object" && sub.$ref && false) { + var ref = this.resolver.dereference(sub.$ref); + var normalized = this.normalizeContent(ref).content; + utils.mergeSchema(work, normalized); + } else if (typeof sub === "object") { + var normalized = this.normalizeSchemaContent(sub); + utils.mergeSchema(work, normalized); + } else { + utils.mergeSchema(work, sub); + } + } + } catch (e_2_1) { + e_2 = { error: e_2_1 }; + } finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } finally { + if (e_2) throw e_2.error; + } + } + delete content.allOf; + content = work; + } + if ( + content.type === undefined && + (content.properties || content.additionalProperties) + ) { + content.type = "object"; + } + if (content.nullable) { + var type = content.type; + if (type == null) { + content.type = "null"; + } else if (!Array.isArray(type)) { + content.type = [type, "null"]; + } else { + type.push("null"); + } + } + var types = content.type; + if (Array.isArray(types)) { + var reduced = utils.reduceTypes(types); + content.type = reduced.length === 1 ? reduced[0] : reduced; + } + } + return content; + }; + DtsGenerator.prototype.generateDeclareType = function (schema) { + var content = schema.content; + if ( + content.$ref || + content.oneOf || + content.anyOf || + content.enum || + "const" in content || + content.type !== "object" + ) { + this.convertor.outputExportType(schema.id); + this.generateTypeProperty(schema, true); + } else { + this.convertor.startInterfaceNest(schema.id); + this.generateProperties(schema); + this.convertor.endInterfaceNest(); + } + }; + DtsGenerator.prototype.generateAnyTypeModel = function (schema) { + this.convertor.startInterfaceNest(schema.id); + this.convertor.outputRawValue("[name: string]: any; // any", true); + this.convertor.endInterfaceNest(); + }; + DtsGenerator.prototype.generateTypeCollection = function (schema) { + this.convertor.outputExportType(schema.id); + this.generateArrayTypeProperty(schema, true); + }; + DtsGenerator.prototype.generateProperties = function (baseSchema) { + var e_3, _a; + var content = baseSchema.content; + if (content.additionalProperties) { + this.convertor.outputRawValue("[name: string]: "); + var schema = this.normalizeContent(baseSchema, "/additionalProperties"); + if (content.additionalProperties === true) { + this.convertor.outputStringTypeName(schema, "any", true); + } else { + this.generateTypeProperty(schema, true); + } + } + if (content.properties) { + try { + for ( + var _b = tslib_1.__values(Object.keys(content.properties)), _c = _b.next(); + !_c.done; + _c = _b.next() + ) { + var propertyName = _c.value; + var schema = this.normalizeContent( + baseSchema, + "/properties/" + jsonPointer_1.tilde(propertyName) + ); + this.convertor.outputComments(schema); + this.convertor.outputPropertyAttribute(schema); + this.convertor.outputPropertyName( + schema, + propertyName, + !!schema.content.nullable + ); + this.generateTypeProperty(schema); + } + } catch (e_3_1) { + e_3 = { error: e_3_1 }; + } finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } finally { + if (e_3) throw e_3.error; + } + } + } + }; + DtsGenerator.prototype.generateTypeProperty = function (schema, terminate) { + var _this = this; + if (terminate === void 0) { + terminate = true; + } + var content = schema.content; + if (content.$ref) { + var ref = this.resolver.dereference(content.$ref); + if (ref.id == null) { + throw new Error("target referenced id is nothing: " + content.$ref); + } + var refSchema = this.normalizeContent(ref); + return this.convertor.outputTypeIdName( + refSchema, + this.currentSchema, + terminate, + !!content.nullable + ); + } + if (content.anyOf || content.oneOf) { + this.generateArrayedType(schema, content.anyOf, "/anyOf/", terminate); + this.generateArrayedType(schema, content.oneOf, "/oneOf/", terminate); + return; + } + if (content.enum) { + this.convertor.outputArrayedType( + schema, + content.enum, + function (value) { + if (content.type === "integer" || content.type === "number") { + _this.convertor.outputRawValue("" + value); + } else { + _this.convertor.outputRawValue('"' + value + '"'); + } + }, + terminate + ); + } else if ("const" in content) { + var value = content.const; + if (content.type === "integer" || content.type === "number") { + this.convertor.outputStringTypeName(schema, "" + value, terminate); + } else { + this.convertor.outputStringTypeName(schema, '"' + value + '"', terminate); + } + } else { + this.generateType(schema, terminate); + } + }; + DtsGenerator.prototype.generateArrayedType = function (baseSchema, contents, path, terminate) { + var _this = this; + if (contents) { + this.convertor.outputArrayedType( + baseSchema, + contents, + function (_content, index) { + var schema = _this.normalizeContent(baseSchema, path + index); + if (schema.id.isEmpty()) { + _this.generateTypeProperty(schema, false); + } else { + _this.convertor.outputTypeIdName(schema, _this.currentSchema, false); + } + }, + terminate + ); + } + }; + DtsGenerator.prototype.generateArrayTypeProperty = function (schema, terminate) { + if (terminate === void 0) { + terminate = true; + } + var items = schema.content.items; + var minItems = schema.content.minItems; + var maxItems = schema.content.maxItems; + if (items == null) { + this.convertor.outputStringTypeName(schema, "any[]", terminate); + } else if (!Array.isArray(items)) { + this.generateTypeProperty(this.normalizeContent(schema, "/items"), false); + this.convertor.outputStringTypeName(schema, "[]", terminate); + } else if (items.length === 0 && minItems === undefined && maxItems === undefined) { + this.convertor.outputStringTypeName(schema, "any[]", terminate); + } else if (minItems != null && maxItems != null && maxItems < minItems) { + this.convertor.outputStringTypeName(schema, "never", terminate); + } else { + this.convertor.outputRawValue("["); + var itemCount = Math.max(minItems || 0, maxItems || 0, items.length); + if (maxItems != null) { + itemCount = Math.min(itemCount, maxItems); + } + for (var i = 0; i < itemCount; i++) { + if (i > 0) { + this.convertor.outputRawValue(", "); + } + if (i < items.length) { + var type = this.normalizeContent(schema, "/items/" + i); + if (type.id.isEmpty()) { + this.generateTypeProperty(type, false); + } else { + this.convertor.outputTypeIdName(type, this.currentSchema, false); + } + } else { + this.convertor.outputStringTypeName(schema, "any", false, false); + } + if (minItems == null || i >= minItems) { + this.convertor.outputRawValue("?"); + } + } + if (maxItems == null) { + if (itemCount > 0) { + this.convertor.outputRawValue(", "); + } + this.convertor.outputStringTypeName(schema, "...any[]", false, false); + } + this.convertor.outputRawValue("]"); + this.convertor.outputStringTypeName(schema, "", terminate); + } + }; + DtsGenerator.prototype.generateType = function (schema, terminate, outputOptional) { + var _this = this; + if (outputOptional === void 0) { + outputOptional = true; + } + var type = schema.content.type; + if (type == null) { + this.convertor.outputPrimitiveTypeName(schema, "void", terminate, outputOptional); + } else if (typeof type === "string") { + this.generateTypeName(schema, type, terminate, outputOptional); + } else { + var types = utils.reduceTypes(type); + if (types.length <= 1) { + schema.content.type = types[0]; + this.generateType(schema, terminate, outputOptional); + } else { + this.convertor.outputArrayedType( + schema, + types, + function (t) { + _this.generateTypeName(schema, t, false, false); + }, + terminate + ); + } + } + }; + DtsGenerator.prototype.generateTypeName = function (schema, type, terminate, outputOptional) { + if (outputOptional === void 0) { + outputOptional = true; + } + var tsType = utils.toTSType(type, schema.content); + if (tsType) { + this.convertor.outputPrimitiveTypeName(schema, tsType, terminate, outputOptional); + } else if (type === "object") { + this.convertor.startTypeNest(); + this.generateProperties(schema); + this.convertor.endTypeNest(terminate); + } else if (type === "array") { + this.generateArrayTypeProperty(schema, terminate); + } else { + throw new Error("unknown type: " + type); + } + }; + return DtsGenerator; +})(); +exports.default = DtsGenerator; +//# sourceMappingURL=dtsGenerator.js.map diff --git a/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/dtsGenerator.js.map b/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/dtsGenerator.js.map new file mode 100644 index 0000000000..d385339a94 --- /dev/null +++ b/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/dtsGenerator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dtsGenerator.js","sourceRoot":"","sources":["../../src/core/dtsGenerator.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/dtsGenerator.ts b/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/dtsGenerator.ts new file mode 100644 index 0000000000..7845c38633 --- /dev/null +++ b/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/dtsGenerator.ts @@ -0,0 +1,335 @@ +import Debug from "debug"; +import { tilde } from "../jsonPointer"; +import { getSubSchema, JsonSchema, NormalizedSchema, Schema } from "./jsonSchema"; +import ReferenceResolver from "./referenceResolver"; +import SchemaConvertor from "./schemaConvertor"; +import * as utils from "./utils"; + +const debug = Debug("dtsgen"); +const typeMarker = Symbol(); + +export default class DtsGenerator { + private currentSchema!: NormalizedSchema; + + constructor(private resolver: ReferenceResolver, private convertor: SchemaConvertor) {} + + public async generate(): Promise { + debug("generate type definition files."); + await this.resolver.resolve(); + + const map = this.convertor.buildSchemaMergedMap( + this.resolver.getAllRegisteredSchema(), + typeMarker + ); + this.convertor.start(); + this.walk(map); + const result = this.convertor.end(); + + return result; + } + + private walk(map: any): void { + const keys = Object.keys(map).sort(); + for (const key of keys) { + const value = map[key]; + if (value.hasOwnProperty(typeMarker)) { + const schema = value[typeMarker] as Schema; + debug(` walk doProcess: key=${key} schemaId=${schema.id.getAbsoluteId()}`); + this.walkSchema(schema); + delete value[typeMarker]; + } + if (typeof value === "object" && Object.keys(value).length > 0) { + this.convertor.startNest(key); + this.walk(value); + this.convertor.endNest(); + } + } + } + + private walkSchema(schema: Schema): void { + const normalized = this.normalizeContent(schema); + this.currentSchema = normalized; + this.convertor.outputComments(normalized); + + const type = normalized.content.type; + switch (type) { + case "any": + return this.generateAnyTypeModel(normalized); + case "array": + return this.generateTypeCollection(normalized); + case "object": + default: + return this.generateDeclareType(normalized); + } + } + + private normalizeContent(schema: Schema, pointer?: string): NormalizedSchema { + if (pointer != null) { + schema = getSubSchema(schema, pointer); + } + const content = this.normalizeSchemaContent(schema.content); + return Object.assign({}, schema, { content }); + } + + private normalizeSchemaContent(content: any): any { + if (typeof content === "boolean") { + content = content ? {} : { not: {} }; + } else { + if (content.allOf) { + const work = content; + for (const sub of content.allOf) { + if (typeof sub === "object" && sub.$ref && false) { + const ref = this.resolver.dereference(sub.$ref); + const normalized = this.normalizeContent(ref).content; + utils.mergeSchema(work, normalized); + } else if (typeof sub === "object") { + const normalized = this.normalizeSchemaContent(sub); + utils.mergeSchema(work, normalized); + } else { + utils.mergeSchema(work, sub); + } + } + delete content.allOf; + content = work; + } + if ( + content.type === undefined && + (content.properties || content.additionalProperties) + ) { + content.type = "object"; + } + if (content.nullable) { + const type = content.type; + if (type == null) { + content.type = "null"; + } else if (!Array.isArray(type)) { + content.type = [type, "null"]; + } else { + type.push("null"); + } + } + const types = content.type; + if (Array.isArray(types)) { + const reduced = utils.reduceTypes(types); + content.type = reduced.length === 1 ? reduced[0] : reduced; + } + } + return content; + } + private generateDeclareType(schema: NormalizedSchema): void { + const content = schema.content; + if ( + content.$ref || + content.oneOf || + content.anyOf || + content.enum || + "const" in content || + content.type !== "object" + ) { + this.convertor.outputExportType(schema.id); + this.generateTypeProperty(schema, true); + } else { + this.convertor.startInterfaceNest(schema.id); + this.generateProperties(schema); + this.convertor.endInterfaceNest(); + } + } + + private generateAnyTypeModel(schema: NormalizedSchema): void { + this.convertor.startInterfaceNest(schema.id); + this.convertor.outputRawValue("[name: string]: any; // any", true); + this.convertor.endInterfaceNest(); + } + + private generateTypeCollection(schema: NormalizedSchema): void { + this.convertor.outputExportType(schema.id); + this.generateArrayTypeProperty(schema, true); + } + + private generateProperties(baseSchema: NormalizedSchema): void { + const content = baseSchema.content; + if (content.additionalProperties) { + this.convertor.outputRawValue("[name: string]: "); + const schema = this.normalizeContent(baseSchema, "/additionalProperties"); + if (content.additionalProperties === true) { + this.convertor.outputStringTypeName(schema, "any", true); + } else { + this.generateTypeProperty(schema, true); + } + } + if (content.properties) { + for (const propertyName of Object.keys(content.properties)) { + const schema = this.normalizeContent( + baseSchema, + "/properties/" + tilde(propertyName) + ); + this.convertor.outputComments(schema); + this.convertor.outputPropertyAttribute(schema); + this.convertor.outputPropertyName(schema, propertyName, !!schema.content.nullable); + this.generateTypeProperty(schema); + } + } + } + private generateTypeProperty(schema: NormalizedSchema, terminate = true): void { + const content = schema.content; + if (content.$ref) { + const ref = this.resolver.dereference(content.$ref); + if (ref.id == null) { + throw new Error("target referenced id is nothing: " + content.$ref); + } + const refSchema = this.normalizeContent(ref); + return this.convertor.outputTypeIdName( + refSchema, + this.currentSchema, + terminate, + !!content.nullable + ); + } + if (content.anyOf || content.oneOf) { + this.generateArrayedType(schema, content.anyOf, "/anyOf/", terminate); + this.generateArrayedType(schema, content.oneOf, "/oneOf/", terminate); + return; + } + if (content.enum) { + this.convertor.outputArrayedType( + schema, + content.enum, + value => { + if (content.type === "integer" || content.type === "number") { + this.convertor.outputRawValue("" + value); + } else { + this.convertor.outputRawValue(`"${value}"`); + } + }, + terminate + ); + } else if ("const" in content) { + const value = content.const; + if (content.type === "integer" || content.type === "number") { + this.convertor.outputStringTypeName(schema, "" + value, terminate); + } else { + this.convertor.outputStringTypeName(schema, `"${value}"`, terminate); + } + } else { + this.generateType(schema, terminate); + } + } + private generateArrayedType( + baseSchema: NormalizedSchema, + contents: JsonSchema[] | undefined, + path: string, + terminate: boolean + ): void { + if (contents) { + this.convertor.outputArrayedType( + baseSchema, + contents, + (_content, index) => { + const schema = this.normalizeContent(baseSchema, path + index); + if (schema.id.isEmpty()) { + this.generateTypeProperty(schema, false); + } else { + this.convertor.outputTypeIdName(schema, this.currentSchema, false); + } + }, + terminate + ); + } + } + + private generateArrayTypeProperty(schema: NormalizedSchema, terminate = true): void { + const items = schema.content.items; + const minItems = schema.content.minItems; + const maxItems = schema.content.maxItems; + if (items == null) { + this.convertor.outputStringTypeName(schema, "any[]", terminate); + } else if (!Array.isArray(items)) { + this.generateTypeProperty(this.normalizeContent(schema, "/items"), false); + this.convertor.outputStringTypeName(schema, "[]", terminate); + } else if (items.length === 0 && minItems === undefined && maxItems === undefined) { + this.convertor.outputStringTypeName(schema, "any[]", terminate); + } else if (minItems != null && maxItems != null && maxItems < minItems) { + this.convertor.outputStringTypeName(schema, "never", terminate); + } else { + this.convertor.outputRawValue("["); + let itemCount = Math.max(minItems || 0, maxItems || 0, items.length); + if (maxItems != null) { + itemCount = Math.min(itemCount, maxItems); + } + for (let i = 0; i < itemCount; i++) { + if (i > 0) { + this.convertor.outputRawValue(", "); + } + if (i < items.length) { + const type = this.normalizeContent(schema, "/items/" + i); + if (type.id.isEmpty()) { + this.generateTypeProperty(type, false); + } else { + this.convertor.outputTypeIdName(type, this.currentSchema, false); + } + } else { + this.convertor.outputStringTypeName(schema, "any", false, false); + } + if (minItems == null || i >= minItems) { + this.convertor.outputRawValue("?"); + } + } + if (maxItems == null) { + if (itemCount > 0) { + this.convertor.outputRawValue(", "); + } + this.convertor.outputStringTypeName(schema, "...any[]", false, false); + } + this.convertor.outputRawValue("]"); + + this.convertor.outputStringTypeName(schema, "", terminate); + } + } + + private generateType( + schema: NormalizedSchema, + terminate: boolean, + outputOptional = true + ): void { + const type = schema.content.type; + if (type == null) { + this.convertor.outputPrimitiveTypeName(schema, "void", terminate, outputOptional); + } else if (typeof type === "string") { + this.generateTypeName(schema, type, terminate, outputOptional); + } else { + const types = utils.reduceTypes(type); + if (types.length <= 1) { + schema.content.type = types[0]; + this.generateType(schema, terminate, outputOptional); + } else { + this.convertor.outputArrayedType( + schema, + types, + t => { + this.generateTypeName(schema, t, false, false); + }, + terminate + ); + } + } + } + private generateTypeName( + schema: NormalizedSchema, + type: string, + terminate: boolean, + outputOptional = true + ): void { + const tsType = utils.toTSType(type, schema.content); + if (tsType) { + this.convertor.outputPrimitiveTypeName(schema, tsType, terminate, outputOptional); + } else if (type === "object") { + this.convertor.startTypeNest(); + this.generateProperties(schema); + this.convertor.endTypeNest(terminate); + } else if (type === "array") { + this.generateArrayTypeProperty(schema, terminate); + } else { + throw new Error("unknown type: " + type); + } + } +} diff --git a/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/jsonSchema.d.ts b/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/jsonSchema.d.ts new file mode 100644 index 0000000000..d17eb91e55 --- /dev/null +++ b/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/jsonSchema.d.ts @@ -0,0 +1,24 @@ +import SchemaId from "./schemaId"; +export declare type JsonSchema = JsonSchemaOrg.Draft04.Schema | JsonSchemaOrg.Draft07.Schema; +export declare type JsonSchemaObject = + | JsonSchemaOrg.Draft04.Schema + | JsonSchemaOrg.Draft07.SchemaObject; +export declare type SchemaType = "Draft04" | "Draft07"; +export interface Schema { + type: SchemaType; + openApiVersion?: 2 | 3; + id: SchemaId; + content: JsonSchema; + rootSchema?: Schema; +} +export interface NormalizedSchema extends Schema { + content: JsonSchemaObject; +} +export declare function parseSchema(content: any, url?: string): Schema; +export declare function getSubSchema(rootSchema: Schema, pointer: string, id?: SchemaId): Schema; +export declare function getId(type: SchemaType, content: any): string | undefined; +export declare function searchAllSubSchema( + schema: Schema, + onFoundSchema: (subSchema: Schema) => void, + onFoundReference: (refId: SchemaId) => void +): void; diff --git a/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/jsonSchema.js b/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/jsonSchema.js new file mode 100644 index 0000000000..a8585a5683 --- /dev/null +++ b/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/jsonSchema.js @@ -0,0 +1,523 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.searchAllSubSchema = exports.getId = exports.getSubSchema = exports.parseSchema = void 0; +var tslib_1 = require("tslib"); +var JsonPointer = tslib_1.__importStar(require("../jsonPointer")); +var schemaId_1 = tslib_1.__importDefault(require("./schemaId")); +function parseSchema(content, url) { + var _a = selectSchemaType(content), + type = _a.type, + openApiVersion = _a.openApiVersion; + if (url != null) { + setId(type, content, url); + } + var id = getId(type, content); + return { + type: type, + openApiVersion: openApiVersion, + id: id ? new schemaId_1.default(id) : schemaId_1.default.empty, + content: content + }; +} +exports.parseSchema = parseSchema; +function getSubSchema(rootSchema, pointer, id) { + var content = JsonPointer.get(rootSchema.content, JsonPointer.parse(pointer)); + if (id == null) { + var subId = getId(rootSchema.type, content); + var getParentIds_1 = function (s, result) { + result.push(s.id.getAbsoluteId()); + return s.rootSchema == null ? result : getParentIds_1(s.rootSchema, result); + }; + if (subId) { + id = new schemaId_1.default(subId, getParentIds_1(rootSchema, [])); + } else { + id = new schemaId_1.default(pointer, getParentIds_1(rootSchema, [])); + } + } + return { + type: rootSchema.type, + id: id, + content: content, + rootSchema: rootSchema + }; +} +exports.getSubSchema = getSubSchema; +function getId(type, content) { + return content[getIdPropertyName(type)]; +} +exports.getId = getId; +function setId(type, content, id) { + var key = getIdPropertyName(type); + if (content[key] == null) { + content[key] = id; + } +} +function getIdPropertyName(type) { + switch (type) { + case "Draft04": + return "id"; + case "Draft07": + return "$id"; + } +} +function searchAllSubSchema(schema, onFoundSchema, onFoundReference) { + var walkArray = function (array, paths, parentIds) { + if (array == null) { + return; + } + array.forEach(function (item, index) { + walk(item, paths.concat(index.toString()), parentIds); + }); + }; + var walkObject = function (obj, paths, parentIds) { + if (obj == null) { + return; + } + Object.keys(obj).forEach(function (key) { + var sub = obj[key]; + if (sub != null) { + walk(sub, paths.concat(key), parentIds); + } + }); + }; + var walkMaybeArray = function (item, paths, parentIds) { + if (Array.isArray(item)) { + walkArray(item, paths, parentIds); + } else { + walk(item, paths, parentIds); + } + }; + var walk = function (s, paths, parentIds) { + if (s == null || typeof s !== "object") { + return; + } + var id = getId(schema.type, s); + if (id && typeof id === "string") { + var schemaId = new schemaId_1.default(id, parentIds); + var subSchema = { + type: schema.type, + id: schemaId, + content: s, + rootSchema: schema + }; + onFoundSchema(subSchema); + parentIds = parentIds.concat([schemaId.getAbsoluteId()]); + } + if (typeof s.$ref === "string") { + var schemaId = new schemaId_1.default(s.$ref, parentIds); + s.$ref = schemaId.getAbsoluteId(); + onFoundReference(schemaId); + } + walkArray(s.allOf, paths.concat("allOf"), parentIds); + walkArray(s.anyOf, paths.concat("anyOf"), parentIds); + walkArray(s.oneOf, paths.concat("oneOf"), parentIds); + walk(s.not, paths.concat("not"), parentIds); + walkMaybeArray(s.items, paths.concat("items"), parentIds); + walk(s.additionalItems, paths.concat("additionalItems"), parentIds); + walk(s.additionalProperties, paths.concat("additionalProperties"), parentIds); + walkObject(s.definitions, paths.concat("definitions"), parentIds); + walkObject(s.properties, paths.concat("properties"), parentIds); + walkObject(s.patternProperties, paths.concat("patternProperties"), parentIds); + walkMaybeArray(s.dependencies, paths.concat("dependencies"), parentIds); + if (schema.type === "Draft07") { + if ("propertyNames" in s) { + walk(s.propertyNames, paths.concat("propertyNames"), parentIds); + walk(s.contains, paths.concat("contains"), parentIds); + walk(s.if, paths.concat("if"), parentIds); + walk(s.then, paths.concat("then"), parentIds); + walk(s.else, paths.concat("else"), parentIds); + } + } + }; + function searchOpenApiSubSchema(openApi) { + function createId(paths) { + return "#/" + paths.map(convertKeyToTypeName).join("/"); + } + function convertKeyToTypeName(key) { + key = key.replace(/\/(.)/g, function (_match, p1) { + return p1.toUpperCase(); + }); + return key + .replace(/}/g, "") + .replace(/{/g, "$") + .replace(/^\//, "") + .replace(/[^0-9A-Za-z_$]+/g, "_"); + } + function setSubIdToAnyObject(f, obj, keys) { + if (obj == null) { + return; + } + Object.keys(obj).forEach(function (key) { + var item = obj[key]; + f(item, keys.concat(convertKeyToTypeName(key))); + }); + } + var setSubIdToParameterObject = function (obj, keys) { + return setSubIdToAnyObject(setSubIdToParameter, obj, keys); + }; + function setSubIdToParameter(param, keys) { + if ("schema" in param) { + setSubId(param.schema, keys.concat(param.name)); + } + } + var setSubIdToParameterObjectNoName = function (obj, keys) { + return setSubIdToAnyObject(setSubIdToParameterNoName, obj, keys); + }; + function setSubIdToParameterNoName(param, keys) { + if ("schema" in param) { + setSubId(param.schema, keys); + } + } + function setSubIdToParameters(array, keys) { + if (array == null) { + return; + } + var params = new Map(); + var refs = new Map(); + array.forEach(function (item) { + var _a, _b, _c; + if ("schema" in item) { + setSubIdToParameter(item, keys); + var work = params.get(item.in); + if (work == null) { + work = []; + params.set(item.in, work); + } + work.push(item); + } else if ("$ref" in item) { + var result = /\/([^\/]*)$/.exec(item.$ref)[1]; + if ( + ((_a = item.$ref) === null || _a === void 0 + ? void 0 + : _a.includes("Api")) || + ((_b = item.$ref) === null || _b === void 0 + ? void 0 + : _b.includes("User-Agent")) + ) { + return; + } + setSubId(item, keys.concat(result)); + var work = void 0; + if ( + (_c = item.$ref) === null || _c === void 0 + ? void 0 + : _c.includes("Instance") + ) { + work = refs.get("header"); + if (work == null) { + work = []; + refs.set("header", work); + } + } else { + work = refs.get("path"); + if (work == null) { + work = []; + refs.set("path", work); + } + } + work.push(item); + } + }); + addParameterSchema(params, refs, keys); + } + function addParameterSchema(params, refs, keys) { + var e_1, _a, e_2, _b; + try { + for ( + var params_1 = tslib_1.__values(params), params_1_1 = params_1.next(); + !params_1_1.done; + params_1_1 = params_1.next() + ) { + var _c = tslib_1.__read(params_1_1.value, 2), + key = _c[0], + param = _c[1]; + var _d = tslib_1.__read(buildParameterSchema(key, param, keys), 2), + paths = _d[0], + obj = _d[1]; + setSubId(obj, paths); + } + } catch (e_1_1) { + e_1 = { error: e_1_1 }; + } finally { + try { + if (params_1_1 && !params_1_1.done && (_a = params_1.return)) _a.call(params_1); + } finally { + if (e_1) throw e_1.error; + } + } + try { + for ( + var refs_1 = tslib_1.__values(refs), refs_1_1 = refs_1.next(); + !refs_1_1.done; + refs_1_1 = refs_1.next() + ) { + var _e = tslib_1.__read(refs_1_1.value, 2), + key = _e[0], + ref = _e[1]; + var _f = tslib_1.__read(buildParameterSchemaRefs(key, ref, keys), 2), + paths = _f[0], + obj = _f[1]; + setSubId(obj, paths); + } + } catch (e_2_1) { + e_2 = { error: e_2_1 }; + } finally { + try { + if (refs_1_1 && !refs_1_1.done && (_b = refs_1.return)) _b.call(refs_1); + } finally { + if (e_2) throw e_2.error; + } + } + } + function buildParameterSchema(inType, params, keys) { + var paths = keys.slice(0, keys.length - 1).concat(inType + "Parameters"); + var properties = {}; + params.forEach(function (item) { + properties[item.name] = { $ref: createId(keys.concat(item.name)) }; + }); + return [ + paths, + { + id: createId(paths), + type: "object", + properties: properties, + required: params + .filter(function (item) { + return item.required === true; + }) + .map(function (item) { + return item.name; + }) + } + ]; + } + function buildParameterSchemaRefs(inType, refs, keys) { + var paths = keys.slice(0, keys.length - 1).concat(inType + "Parameters"); + var properties = {}; + refs.forEach(function (item) { + if (item.$ref != null) { + var result = /\/([^\/]*)$/.exec(item.$ref)[1]; + properties[result] = { $ref: createId(keys.concat(result)) }; + } + }); + return [ + paths, + { + id: createId(paths), + type: "object", + properties: properties, + required: refs.map(function (item) { + return /\/([^\/]*)$/.exec(item.$ref)[1]; + }) + } + ]; + } + var setSubIdToResponsesV2 = function (responses, keys) { + return setSubIdToAnyObject(setSubIdToResponseV2, responses, keys); + }; + function setSubIdToResponseV2(response, keys) { + if (response == null) { + return; + } + if ("schema" in response) { + var s = response.schema; + if (s != null && s.type === "file") { + return; + } + setSubId(s, keys); + } + } + function setSubIdToOperationV2(ops, keys) { + if (ops == null) { + return; + } + var operationId = ops.operationId; + if (operationId) { + keys = [keys[0], convertKeyToTypeName(operationId)]; + } + setSubIdToParameters(ops.parameters, keys.concat("parameters")); + setSubIdToResponsesV2(ops.responses, keys.concat("responses")); + } + var setSubIdToPathsV2 = function (paths, keys) { + return setSubIdToAnyObject(setSubIdToPathItemV2, paths, keys); + }; + function setSubIdToPathItemV2(pathItem, keys) { + setSubIdToParameters(pathItem.parameters, keys.concat("parameters")); + setSubIdToOperationV2(pathItem.get, keys.concat("get")); + setSubIdToOperationV2(pathItem.put, keys.concat("put")); + setSubIdToOperationV2(pathItem.post, keys.concat("post")); + setSubIdToOperationV2(pathItem.delete, keys.concat("delete")); + setSubIdToOperationV2(pathItem.options, keys.concat("options")); + setSubIdToOperationV2(pathItem.head, keys.concat("head")); + setSubIdToOperationV2(pathItem.patch, keys.concat("patch")); + } + function setSubIdToMediaTypes(types, keys) { + var e_3, _a; + if (types == null) { + return; + } + try { + for ( + var _b = tslib_1.__values(Object.keys(types)), _c = _b.next(); + !_c.done; + _c = _b.next() + ) { + var mime = _c.value; + if ( + /^text\/|^(?:application\/x-www-form-urlencoded|application\/([a-z0-9-_]+\+)?json)$/.test( + mime + ) + ) { + var mt = types[mime]; + setSubId(mt.schema, keys); + } + } + } catch (e_3_1) { + e_3 = { error: e_3_1 }; + } finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } finally { + if (e_3) throw e_3.error; + } + } + } + var setSubIdToRequestBodies = function (bodys, keys) { + return setSubIdToAnyObject(setSubIdToRequestBody, bodys, keys); + }; + function setSubIdToRequestBody(body, keys) { + if (body == null) { + return; + } + if ("content" in body) { + setSubIdToMediaTypes(body.content, keys); + } else if ("$ref" in body) { + setSubId(body, keys); + } else { + setSubId({}, keys); + } + } + var setSubIdToResponsesV3 = function (responses, keys) { + return setSubIdToAnyObject(setSubIdToResponseV3, responses, keys); + }; + function setSubIdToResponseV3(response, keys) { + if (response == null) { + return; + } + if ("content" in response) { + setSubIdToMediaTypes(response.content, keys); + } else if ("$ref" in response) { + setSubId(response, keys); + } else { + setSubId({}, keys); + } + } + function setSubIdToOperationV3(ops, keys) { + if (ops == null) { + return; + } + var operationId = ops.operationId; + if (operationId) { + keys = [keys[0], convertKeyToTypeName(operationId)]; + } + setSubIdToParameters(ops.parameters, keys.concat("parameters")); + setSubIdToRequestBody(ops.requestBody, keys.concat("requestBody")); + setSubIdToResponsesV3(ops.responses, keys.concat("responses")); + } + var setSubIdToPathsV3 = function (paths, keys) { + return setSubIdToAnyObject(setSubIdToPathItemV3, paths, keys); + }; + function setSubIdToPathItemV3(pathItem, keys) { + setSubIdToParameters(pathItem.parameters, keys.concat("parameters")); + setSubIdToOperationV3(pathItem.get, keys.concat("get")); + setSubIdToOperationV3(pathItem.put, keys.concat("put")); + setSubIdToOperationV3(pathItem.post, keys.concat("post")); + setSubIdToOperationV3(pathItem.delete, keys.concat("delete")); + setSubIdToOperationV3(pathItem.options, keys.concat("options")); + setSubIdToOperationV3(pathItem.head, keys.concat("head")); + setSubIdToOperationV3(pathItem.patch, keys.concat("patch")); + setSubIdToOperationV3(pathItem.trace, keys.concat("trace")); + } + function setSubIdToObject(obj, paths) { + if (obj == null) { + return; + } + Object.keys(obj).forEach(function (key) { + var sub = obj[key]; + setSubId(sub, paths.concat(key)); + }); + } + function setSubId(s, paths) { + if (typeof s !== "object") { + return; + } + if (typeof s.$ref === "string") { + var thing = "#" + s.$ref.slice(1).split("/").map(convertKeyToTypeName).join("/"); + var schemaId = new schemaId_1.default(thing); + s.$ref = schemaId.getAbsoluteId(); + onFoundReference(schemaId); + } + var id = createId(paths); + setId(schema.type, s, id); + walk(s, paths, []); + } + if ("swagger" in openApi) { + setSubIdToObject(openApi.definitions, ["definitions"]); + setSubIdToParameterObject(openApi.parameters, ["parameters"]); + setSubIdToResponsesV2(openApi.responses, ["responses"]); + setSubIdToPathsV2(openApi.paths, ["paths"]); + } else { + if (openApi.components) { + var components = openApi.components; + setSubIdToObject(components.schemas, ["components", "schemas"]); + setSubIdToResponsesV3(components.responses, ["components", "responses"]); + setSubIdToParameterObjectNoName(components.parameters, [ + "components", + "parameters" + ]); + setSubIdToRequestBodies(components.requestBodies, ["components", "requestBodies"]); + } + if (openApi.paths) { + setSubIdToPathsV3(openApi.paths, ["paths"]); + } + } + } + if (schema.openApiVersion != null) { + var obj = schema.content; + searchOpenApiSubSchema(obj); + return; + } + walk(schema.content, ["#"], []); +} +exports.searchAllSubSchema = searchAllSubSchema; +function selectSchemaType(content) { + if (content.$schema) { + var schema = content.$schema; + var match = schema.match(/http\:\/\/json-schema\.org\/draft-(\d+)\/schema#?/); + if (match) { + var version = Number(match[1]); + if (version <= 4) { + return { type: "Draft04" }; + } else { + return { type: "Draft07" }; + } + } + } + if (content.swagger === "2.0") { + return { + type: "Draft04", + openApiVersion: 2 + }; + } + if (content.openapi) { + var openapi = content.openapi; + if (/^3\.\d+\.\d+$/.test(openapi)) { + return { + type: "Draft07", + openApiVersion: 3 + }; + } + } + return { type: "Draft04" }; +} +//# sourceMappingURL=jsonSchema.js.map diff --git a/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/jsonSchema.js.map b/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/jsonSchema.js.map new file mode 100644 index 0000000000..ee50f68d43 --- /dev/null +++ b/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/jsonSchema.js.map @@ -0,0 +1 @@ +{"version":3,"file":"jsonSchema.js","sourceRoot":"","sources":["../../src/core/jsonSchema.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/jsonSchema.ts b/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/jsonSchema.ts new file mode 100644 index 0000000000..cdd0c55907 --- /dev/null +++ b/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/jsonSchema.ts @@ -0,0 +1,560 @@ +import * as JsonPointer from "../jsonPointer"; +import SchemaId from "./schemaId"; + +export type JsonSchema = JsonSchemaOrg.Draft04.Schema | JsonSchemaOrg.Draft07.Schema; +export type JsonSchemaObject = JsonSchemaOrg.Draft04.Schema | JsonSchemaOrg.Draft07.SchemaObject; +type OpenApiSchema = SwaggerIo.V2.SchemaJson | OpenApisOrg.V3.SchemaJson; + +interface ParameterObject { + name: string; + in: string; + required?: boolean; + schema?: JsonSchemaObject; +} +type Parameter = ParameterObject | { $ref?: string }; + +export type SchemaType = "Draft04" | "Draft07"; + +export interface Schema { + type: SchemaType; + openApiVersion?: 2 | 3; + id: SchemaId; + content: JsonSchema; + rootSchema?: Schema; +} +export interface NormalizedSchema extends Schema { + content: JsonSchemaObject; +} + +export function parseSchema(content: any, url?: string): Schema { + const { type, openApiVersion } = selectSchemaType(content); + if (url != null) { + setId(type, content, url); + } + const id = getId(type, content); + return { + type, + openApiVersion, + id: id ? new SchemaId(id) : SchemaId.empty, + content + }; +} + +export function getSubSchema(rootSchema: Schema, pointer: string, id?: SchemaId): Schema { + const content = JsonPointer.get(rootSchema.content, JsonPointer.parse(pointer)); + if (id == null) { + const subId = getId(rootSchema.type, content); + const getParentIds = (s: Schema, result: string[]): string[] => { + result.push(s.id.getAbsoluteId()); + return s.rootSchema == null ? result : getParentIds(s.rootSchema, result); + }; + if (subId) { + id = new SchemaId(subId, getParentIds(rootSchema, [])); + } else { + id = new SchemaId(pointer, getParentIds(rootSchema, [])); + } + } + return { + type: rootSchema.type, + id, + content, + rootSchema + }; +} + +export function getId(type: SchemaType, content: any): string | undefined { + return content[getIdPropertyName(type)]; +} +function setId(type: SchemaType, content: any, id: string): void { + const key = getIdPropertyName(type); + if (content[key] == null) { + content[key] = id; + } +} +function getIdPropertyName(type: SchemaType): string { + switch (type) { + case "Draft04": + return "id"; + case "Draft07": + return "$id"; + } +} + +export function searchAllSubSchema( + schema: Schema, + onFoundSchema: (subSchema: Schema) => void, + onFoundReference: (refId: SchemaId) => void +): void { + const walkArray = ( + array: JsonSchema[] | undefined, + paths: string[], + parentIds: string[] + ): void => { + if (array == null) { + return; + } + array.forEach((item, index) => { + walk(item, paths.concat(index.toString()), parentIds); + }); + }; + const walkObject = ( + obj: { [name: string]: JsonSchema } | undefined, + paths: string[], + parentIds: string[] + ): void => { + if (obj == null) { + return; + } + Object.keys(obj).forEach(key => { + const sub = obj[key]; + if (sub != null) { + walk(sub, paths.concat(key), parentIds); + } + }); + }; + const walkMaybeArray = ( + item: JsonSchema | JsonSchema[] | undefined, + paths: string[], + parentIds: string[] + ): void => { + if (Array.isArray(item)) { + walkArray(item, paths, parentIds); + } else { + walk(item, paths, parentIds); + } + }; + const walk = (s: JsonSchema | undefined, paths: string[], parentIds: string[]) => { + if (s == null || typeof s !== "object") { + return; + } + + const id = getId(schema.type, s); + if (id && typeof id === "string") { + const schemaId = new SchemaId(id, parentIds); + const subSchema: Schema = { + type: schema.type, + id: schemaId, + content: s, + rootSchema: schema + }; + onFoundSchema(subSchema); + parentIds = parentIds.concat([schemaId.getAbsoluteId()]); + } + if (typeof s.$ref === "string") { + const schemaId = new SchemaId(s.$ref, parentIds); + s.$ref = schemaId.getAbsoluteId(); + onFoundReference(schemaId); + } + + walkArray(s.allOf, paths.concat("allOf"), parentIds); + walkArray(s.anyOf, paths.concat("anyOf"), parentIds); + walkArray(s.oneOf, paths.concat("oneOf"), parentIds); + walk(s.not, paths.concat("not"), parentIds); + + walkMaybeArray(s.items, paths.concat("items"), parentIds); + walk(s.additionalItems, paths.concat("additionalItems"), parentIds); + walk(s.additionalProperties, paths.concat("additionalProperties"), parentIds); + walkObject(s.definitions, paths.concat("definitions"), parentIds); + walkObject(s.properties, paths.concat("properties"), parentIds); + walkObject(s.patternProperties, paths.concat("patternProperties"), parentIds); + walkMaybeArray(s.dependencies, paths.concat("dependencies"), parentIds); + if (schema.type === "Draft07") { + if ("propertyNames" in s) { + walk(s.propertyNames, paths.concat("propertyNames"), parentIds); + walk(s.contains, paths.concat("contains"), parentIds); + walk(s.if, paths.concat("if"), parentIds); + walk(s.then, paths.concat("then"), parentIds); + walk(s.else, paths.concat("else"), parentIds); + } + } + }; + + function searchOpenApiSubSchema(openApi: OpenApiSchema): void { + function createId(paths: string[]): string { + return "#/" + paths.map(convertKeyToTypeName).join("/"); + } + function convertKeyToTypeName(key: string): string { + key = key.replace(/\/(.)/g, (_match, p1) => { + return p1.toUpperCase(); + }); + return key + .replace(/}/g, "") + .replace(/{/g, "$") + .replace(/^\//, "") + .replace(/[^0-9A-Za-z_$]+/g, "_"); + } + function setSubIdToAnyObject( + f: (t: T, keys: string[]) => void, + obj: { [key: string]: T } | undefined, + keys: string[] + ): void { + if (obj == null) { + return; + } + Object.keys(obj).forEach(key => { + const item = obj[key]; + f(item, keys.concat(convertKeyToTypeName(key))); + }); + } + + // for OpenAPI + const setSubIdToParameterObject = ( + obj: { [name: string]: Parameter } | undefined, + keys: string[] + ) => setSubIdToAnyObject(setSubIdToParameter, obj, keys); + function setSubIdToParameter(param: Parameter, keys: string[]): void { + if ("schema" in param) { + setSubId(param.schema, keys.concat(param.name)); + } + } + const setSubIdToParameterObjectNoName = ( + obj: { [name: string]: Parameter } | undefined, + keys: string[] + ) => setSubIdToAnyObject(setSubIdToParameterNoName, obj, keys); + function setSubIdToParameterNoName(param: Parameter, keys: string[]): void { + if ("schema" in param) { + setSubId(param.schema, keys); + } + } + function setSubIdToParameters(array: Parameter[] | undefined, keys: string[]): void { + if (array == null) { + return; + } + const params = new Map(); + const refs = new Map(); + array.forEach(item => { + if ("schema" in item) { + setSubIdToParameter(item, keys); + + let work = params.get(item.in); + if (work == null) { + work = []; + params.set(item.in, work); + } + work.push(item); + } else if ("$ref" in item) { + // @ts-ignore + const result = (/\/([^\/]*)$/.exec(item.$ref) as RegExpExecArray)[1]; + // item.$ref = item.$ref + "/schema"; + if (item.$ref?.includes("Api") || item.$ref?.includes("User-Agent")) { + return; + } + // @ts-ignore + setSubId(item, keys.concat(result)); + let work: { $ref?: string }[] | undefined; + if (item.$ref?.includes("Instance")) { + work = refs.get("header"); + + if (work == null) { + work = []; + refs.set("header", work); + } + } else { + work = refs.get("path"); + if (work == null) { + work = []; + refs.set("path", work); + } + } + work.push(item); + } + }); + addParameterSchema(params, refs, keys); + } + function addParameterSchema( + params: Map, + refs: Map, + keys: string[] + ): void { + for (const [key, param] of params) { + const [paths, obj] = buildParameterSchema(key, param, keys); + setSubId(obj, paths); + } + + for (const [key, ref] of refs) { + const [paths, obj] = buildParameterSchemaRefs(key, ref, keys); + setSubId(obj, paths); + } + } + function buildParameterSchema( + inType: string, + params: ParameterObject[], + keys: string[] + ): [string[], JsonSchemaObject] { + const paths = keys.slice(0, keys.length - 1).concat(inType + "Parameters"); + const properties: any = {}; + params.forEach(item => { + properties[item.name] = { $ref: createId(keys.concat(item.name)) }; + }); + return [ + paths, + { + id: createId(paths), + type: "object", + properties, + required: params.filter(item => item.required === true).map(item => item.name) + } + ]; + } + + function buildParameterSchemaRefs( + inType: string, + refs: { $ref?: string }[], + keys: string[] + ): [string[], JsonSchemaObject] { + const paths = keys.slice(0, keys.length - 1).concat(inType + "Parameters"); + const properties: any = {}; + refs.forEach(item => { + if (item.$ref != null) { + const result = (/\/([^\/]*)$/.exec(item.$ref) as RegExpExecArray)[1]; + //const ref = "#" + item.$ref.slice(1).split("/").map(convertKeyToTypeName).join("/"); + //properties[result] = {$ref: ref}; + properties[result] = { $ref: createId(keys.concat(result)) }; + } + }); + return [ + paths, + { + id: createId(paths), + type: "object", + properties, + required: refs.map( + item => (/\/([^\/]*)$/.exec(item.$ref) as RegExpExecArray)[1] + ) + } + ]; + } + + /// for OpenAPI V2 only + const setSubIdToResponsesV2 = ( + responses: SwaggerIo.V2.SchemaJson.Definitions.Responses | undefined, + keys: string[] + ) => setSubIdToAnyObject(setSubIdToResponseV2, responses, keys); + function setSubIdToResponseV2( + response: SwaggerIo.V2.SchemaJson.Definitions.ResponseValue | undefined, + keys: string[] + ): void { + if (response == null) { + return; + } + if ("schema" in response) { + const s = response.schema; + if (s != null && s.type === "file") { + return; + } + setSubId(s as JsonSchemaObject, keys); + } + } + function setSubIdToOperationV2( + ops: SwaggerIo.V2.SchemaJson.Definitions.Operation | undefined, + keys: string[] + ): void { + if (ops == null) { + return; + } + const operationId = ops.operationId; + if (operationId) { + keys = [keys[0], convertKeyToTypeName(operationId)]; + } + setSubIdToParameters(ops.parameters, keys.concat("parameters")); + setSubIdToResponsesV2(ops.responses, keys.concat("responses")); + } + const setSubIdToPathsV2 = ( + paths: SwaggerIo.V2.SchemaJson.Definitions.Paths, + keys: string[] + ) => setSubIdToAnyObject(setSubIdToPathItemV2, paths, keys); + function setSubIdToPathItemV2( + pathItem: SwaggerIo.V2.SchemaJson.Definitions.PathItem, + keys: string[] + ): void { + setSubIdToParameters(pathItem.parameters, keys.concat("parameters")); + setSubIdToOperationV2(pathItem.get, keys.concat("get")); + setSubIdToOperationV2(pathItem.put, keys.concat("put")); + setSubIdToOperationV2(pathItem.post, keys.concat("post")); + setSubIdToOperationV2(pathItem.delete, keys.concat("delete")); + setSubIdToOperationV2(pathItem.options, keys.concat("options")); + setSubIdToOperationV2(pathItem.head, keys.concat("head")); + setSubIdToOperationV2(pathItem.patch, keys.concat("patch")); + } + + /// for OpenAPI V3 only + function setSubIdToMediaTypes( + types: OpenApisOrg.V3.SchemaJson.Definitions.MediaTypes | undefined, + keys: string[] + ): void { + if (types == null) { + return; + } + for (const mime of Object.keys(types)) { + if ( + /^text\/|^(?:application\/x-www-form-urlencoded|application\/([a-z0-9-_]+\+)?json)$/.test( + mime + ) + ) { + const mt = types[mime]; + setSubId(mt.schema, keys); + } + } + } + const setSubIdToRequestBodies = ( + bodys: OpenApisOrg.V3.SchemaJson.Definitions.RequestBodiesOrReferences | undefined, + keys: string[] + ) => setSubIdToAnyObject(setSubIdToRequestBody, bodys, keys); + function setSubIdToRequestBody( + body: OpenApisOrg.V3.SchemaJson.Definitions.RequestBodyOrReference | undefined, + keys: string[] + ): void { + if (body == null) { + return; + } + if ("content" in body) { + setSubIdToMediaTypes(body.content, keys); + } else if ("$ref" in body) { + setSubId(body, keys); + } else { + setSubId({}, keys); + } + } + const setSubIdToResponsesV3 = ( + responses: OpenApisOrg.V3.SchemaJson.Definitions.ResponsesOrReferences | undefined, + keys: string[] + ) => setSubIdToAnyObject(setSubIdToResponseV3, responses, keys); + function setSubIdToResponseV3( + response: OpenApisOrg.V3.SchemaJson.Definitions.ResponseOrReference | undefined, + keys: string[] + ): void { + if (response == null) { + return; + } + if ("content" in response) { + setSubIdToMediaTypes(response.content, keys); + } else if ("$ref" in response) { + setSubId(response, keys); + } else { + setSubId({}, keys); + } + } + function setSubIdToOperationV3( + ops: OpenApisOrg.V3.SchemaJson.Definitions.Operation | undefined, + keys: string[] + ): void { + if (ops == null) { + return; + } + const operationId = ops.operationId; + if (operationId) { + keys = [keys[0], convertKeyToTypeName(operationId)]; + } + setSubIdToParameters(ops.parameters, keys.concat("parameters")); + setSubIdToRequestBody(ops.requestBody, keys.concat("requestBody")); + setSubIdToResponsesV3(ops.responses, keys.concat("responses")); + } + const setSubIdToPathsV3 = ( + paths: OpenApisOrg.V3.SchemaJson.Definitions.Paths, + keys: string[] + ) => setSubIdToAnyObject(setSubIdToPathItemV3, paths, keys); + function setSubIdToPathItemV3( + pathItem: OpenApisOrg.V3.SchemaJson.Definitions.PathItem, + keys: string[] + ): void { + setSubIdToParameters(pathItem.parameters, keys.concat("parameters")); + setSubIdToOperationV3(pathItem.get, keys.concat("get")); + setSubIdToOperationV3(pathItem.put, keys.concat("put")); + setSubIdToOperationV3(pathItem.post, keys.concat("post")); + setSubIdToOperationV3(pathItem.delete, keys.concat("delete")); + setSubIdToOperationV3(pathItem.options, keys.concat("options")); + setSubIdToOperationV3(pathItem.head, keys.concat("head")); + setSubIdToOperationV3(pathItem.patch, keys.concat("patch")); + setSubIdToOperationV3(pathItem.trace, keys.concat("trace")); + } + + function setSubIdToObject( + obj: { [name: string]: JsonSchema } | undefined, + paths: string[] + ): void { + if (obj == null) { + return; + } + Object.keys(obj).forEach(key => { + const sub = obj[key]; + setSubId(sub, paths.concat(key)); + }); + } + function setSubId(s: JsonSchema | undefined, paths: string[]): void { + if (typeof s !== "object") { + return; + } + + if (typeof s.$ref === "string") { + const thing = "#" + s.$ref.slice(1).split("/").map(convertKeyToTypeName).join("/"); + const schemaId = new SchemaId(thing); + s.$ref = schemaId.getAbsoluteId(); + onFoundReference(schemaId); + } + const id = createId(paths); + setId(schema.type, s, id); + walk(s, paths, []); + } + + if ("swagger" in openApi) { + setSubIdToObject(openApi.definitions, ["definitions"]); + setSubIdToParameterObject(openApi.parameters, ["parameters"]); + setSubIdToResponsesV2(openApi.responses, ["responses"]); + + setSubIdToPathsV2(openApi.paths, ["paths"]); + } else { + if (openApi.components) { + const components = openApi.components; + setSubIdToObject(components.schemas, ["components", "schemas"]); + setSubIdToResponsesV3(components.responses, ["components", "responses"]); + setSubIdToParameterObjectNoName(components.parameters, [ + "components", + "parameters" + ]); + setSubIdToRequestBodies(components.requestBodies, ["components", "requestBodies"]); + } + if (openApi.paths) { + setSubIdToPathsV3(openApi.paths, ["paths"]); + } + } + } + + if (schema.openApiVersion != null) { + const obj = schema.content as OpenApisOrg.V3.SchemaJson; + searchOpenApiSubSchema(obj); + return; + } + walk(schema.content, ["#"], []); +} + +function selectSchemaType(content: any): { type: SchemaType; openApiVersion?: 2 | 3 } { + if (content.$schema) { + const schema = content.$schema; + const match = schema.match(/http\:\/\/json-schema\.org\/draft-(\d+)\/schema#?/); + if (match) { + const version = Number(match[1]); + if (version <= 4) { + return { type: "Draft04" }; + } else { + return { type: "Draft07" }; + } + } + } + if (content.swagger === "2.0") { + return { + type: "Draft04", + openApiVersion: 2 + }; + } + if (content.openapi) { + const openapi = content.openapi; + if (/^3\.\d+\.\d+$/.test(openapi)) { + return { + type: "Draft07", + openApiVersion: 3 + }; + } + } + // fallback to old version JSON Schema + return { type: "Draft04" }; +} diff --git a/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/schemaConvertor.js b/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/schemaConvertor.js new file mode 100644 index 0000000000..e2bcdff8be --- /dev/null +++ b/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/schemaConvertor.js @@ -0,0 +1,365 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = require("tslib"); +var JsonPointer = tslib_1.__importStar(require("../jsonPointer")); +var typeNameConvertor_1 = require("./typeNameConvertor"); +var SchemaConvertor = (function () { + function SchemaConvertor(processor, convertor, namespaceName) { + if (convertor === void 0) { + convertor = typeNameConvertor_1.DefaultTypeNameConvertor; + } + this.processor = processor; + this.convertor = convertor; + this.exportedTypes = []; + this.replaceLevel = 0; + this.ns = + namespaceName == null + ? undefined + : namespaceName.split("/").filter(function (s) { + return s.length > 0; + }); + } + SchemaConvertor.prototype.getExports = function () { + return this.exportedTypes; + }; + SchemaConvertor.prototype.getLastTypeName = function (id) { + var names = this.convertor(id); + if (names.length > 0) { + return names[names.length - 1]; + } else { + return ""; + } + }; + SchemaConvertor.prototype.buildSchemaMergedMap = function (schemas, typeMarker) { + var e_1, _a, e_2, _b, _c; + var map = {}; + var paths = []; + var minLevel = Number.MAX_SAFE_INTEGER; + try { + for ( + var schemas_1 = tslib_1.__values(schemas), schemas_1_1 = schemas_1.next(); + !schemas_1_1.done; + schemas_1_1 = schemas_1.next() + ) { + var type = schemas_1_1.value; + var path = this.convertor(type.id); + minLevel = Math.min(minLevel, path.length); + paths.push({ path: path, type: type }); + } + } catch (e_1_1) { + e_1 = { error: e_1_1 }; + } finally { + try { + if (schemas_1_1 && !schemas_1_1.done && (_a = schemas_1.return)) _a.call(schemas_1); + } finally { + if (e_1) throw e_1.error; + } + } + this.replaceLevel = minLevel; + try { + for ( + var paths_1 = tslib_1.__values(paths), paths_1_1 = paths_1.next(); + !paths_1_1.done; + paths_1_1 = paths_1.next() + ) { + var item = paths_1_1.value; + var path = item.path; + this.replaceNamespace(path); + var parent_1 = JsonPointer.get(map, path, true); + if (parent_1 == null) { + JsonPointer.set(map, path, ((_c = {}), (_c[typeMarker] = item.type), _c)); + } else { + parent_1[typeMarker] = item.type; + } + } + } catch (e_2_1) { + e_2 = { error: e_2_1 }; + } finally { + try { + if (paths_1_1 && !paths_1_1.done && (_b = paths_1.return)) _b.call(paths_1); + } finally { + if (e_2) throw e_2.error; + } + } + if (Object.keys(map).length === 0) { + throw new Error("There is no schema in the input contents."); + } + return map; + }; + SchemaConvertor.prototype.replaceNamespace = function (paths) { + if (this.ns == null) { + return; + } + paths.splice(0, this.replaceLevel - 1); + if (this.ns.length > 0) { + paths.unshift.apply(paths, tslib_1.__spread(this.ns)); + } + }; + SchemaConvertor.prototype.start = function () { + this.processor.clear(); + }; + SchemaConvertor.prototype.end = function () { + return this.processor.toDefinition(); + }; + SchemaConvertor.prototype.startNest = function (name) { + var processor = this.processor; + if (processor.indentLevel === 0) { + processor.output("declare "); + } + processor.output("namespace ").outputType(name, true).outputLine(" {"); + processor.increaseIndent(); + }; + SchemaConvertor.prototype.endNest = function () { + var processor = this.processor; + processor.decreaseIndent(); + processor.outputLine("}"); + }; + SchemaConvertor.prototype.startInterfaceNest = function (id) { + var processor = this.processor; + if (processor.indentLevel === 0 && (this.ns == null || this.ns.length > 0)) { + processor.output("declare "); + } else { + processor.output("export "); + } + var name = this.getLastTypeName(id); + processor.output("interface ").outputType(name).output(" "); + this.startTypeNest(); + this.addExport(id); + }; + SchemaConvertor.prototype.endInterfaceNest = function () { + this.endTypeNest(false); + this.processor.outputLine(); + }; + SchemaConvertor.prototype.outputExportType = function (id) { + var processor = this.processor; + if (processor.indentLevel === 0 && (this.ns == null || this.ns.length > 0)) { + processor.output("declare "); + } else { + processor.output("export "); + } + var name = this.getLastTypeName(id); + processor.output("type ").outputType(name).output(" = "); + this.addExport(id); + }; + SchemaConvertor.prototype.startTypeNest = function () { + this.processor.outputLine("{"); + this.processor.increaseIndent(); + }; + SchemaConvertor.prototype.endTypeNest = function (terminate) { + this.processor.decreaseIndent(); + this.processor.output("}"); + if (terminate) { + this.processor.outputLine(";"); + } + }; + SchemaConvertor.prototype.outputRawValue = function (value, isEndOfLine) { + if (isEndOfLine === void 0) { + isEndOfLine = false; + } + this.processor.output(value); + if (isEndOfLine) { + this.processor.outputLine(); + } + }; + SchemaConvertor.prototype.outputComments = function (schema) { + var _a; + var content = schema.content; + var comments = []; + if ("$comment" in content) { + comments.push(content.$comment); + } + comments.push(content.title); + comments.push(content.description); + if ("example" in content || "examples" in content) { + comments.push("example:"); + if ("example" in content) { + comments.push(content.example); + } + if ("examples" in content) { + comments.push.apply(comments, tslib_1.__spread(content.examples)); + } + } + (_a = this.processor).outputJSDoc.apply(_a, tslib_1.__spread(comments)); + }; + SchemaConvertor.prototype.outputPropertyName = function (_schema, propertyName, optional) { + this.processor.outputKey(propertyName, optional).output(": "); + }; + SchemaConvertor.prototype.outputPropertyAttribute = function (schema) { + var content = schema.content; + if ("readOnly" in content && content.readOnly) { + this.processor.output("readonly "); + } + }; + SchemaConvertor.prototype.outputArrayedType = function ( + schema, + types, + output, + terminate, + outputOptional + ) { + var _this = this; + if (outputOptional === void 0) { + outputOptional = true; + } + if (!terminate) { + this.processor.output("("); + } + types.forEach(function (t, index) { + output(t, index); + if (index < types.length - 1) { + _this.processor.output(" | "); + } + }); + if (!terminate) { + this.processor.output(")"); + } + this.outputTypeNameTrailer(schema, terminate, outputOptional); + }; + SchemaConvertor.prototype.outputTypeIdName = function ( + schema, + currentSchema, + terminate, + nullable, + outputOptional + ) { + var _this = this; + if (terminate === void 0) { + terminate = true; + } + if (nullable === void 0) { + nullable = false; + } + if (outputOptional === void 0) { + outputOptional = true; + } + var typeName = this.getTypename(schema.id, currentSchema); + typeName.forEach(function (type, index) { + var isLast = index === typeName.length - 1; + _this.processor.outputType(type, isLast ? false : true); + if (!isLast) { + _this.processor.output("."); + } + }); + this.outputTypeNameTrailer(schema, terminate, outputOptional); + }; + SchemaConvertor.prototype.getTypename = function (id, baseSchema) { + var e_3, _a; + var result = this.convertor(id); + this.replaceNamespace(result); + var baseId = baseSchema.id; + if (baseId) { + var baseTypes = this.convertor(baseId).slice(0, -1); + try { + for ( + var baseTypes_1 = tslib_1.__values(baseTypes), + baseTypes_1_1 = baseTypes_1.next(); + !baseTypes_1_1.done; + baseTypes_1_1 = baseTypes_1.next() + ) { + var type = baseTypes_1_1.value; + if (result[0] === type) { + result.shift(); + } else { + break; + } + } + } catch (e_3_1) { + e_3 = { error: e_3_1 }; + } finally { + try { + if (baseTypes_1_1 && !baseTypes_1_1.done && (_a = baseTypes_1.return)) + _a.call(baseTypes_1); + } finally { + if (e_3) throw e_3.error; + } + } + if (result.length === 0) { + return [this.getLastTypeName(id)]; + } + } + return result; + }; + SchemaConvertor.prototype.outputPrimitiveTypeName = function ( + schema, + typeName, + terminate, + outputOptional + ) { + if (terminate === void 0) { + terminate = true; + } + if (outputOptional === void 0) { + outputOptional = true; + } + this.processor.outputType(typeName, true); + this.outputTypeNameTrailer(schema, terminate, outputOptional); + }; + SchemaConvertor.prototype.outputStringTypeName = function ( + schema, + typeName, + terminate, + outputOptional + ) { + if (outputOptional === void 0) { + outputOptional = true; + } + if (typeName) { + this.processor.output(typeName); + } + this.outputTypeNameTrailer(schema, terminate, outputOptional); + }; + SchemaConvertor.prototype.outputTypeNameTrailer = function ( + schema, + terminate, + outputOptional, + nullable + ) { + if (nullable === void 0) { + nullable = false; + } + + if (nullable) { + this.processor.output(" | null"); + } + if (terminate) { + this.processor.output(";"); + } + if (outputOptional) { + this.outputOptionalInformation(schema, terminate); + } + if (terminate) { + this.processor.outputLine(); + } + }; + SchemaConvertor.prototype.outputOptionalInformation = function (schema, terminate) { + var format = schema.content.format; + var pattern = schema.content.pattern; + if (!format && !pattern) { + return; + } + if (terminate) { + this.processor.output(" //"); + } else { + this.processor.output(" /*"); + } + if (format) { + this.processor.output(" ").output(format); + } + if (pattern) { + this.processor.output(" ").output(pattern); + } + if (!terminate) { + this.processor.output(" */ "); + } + }; + SchemaConvertor.prototype.addExport = function (id) { + var name = this.getLastTypeName(id); + var schemaRef = id.getJsonPointerHash(); + var names = this.convertor(id); + var path = names.join("."); + this.exportedTypes.push({ name: name, path: path, schemaRef: schemaRef }); + }; + return SchemaConvertor; +})(); +exports.default = SchemaConvertor; +//# sourceMappingURL=schemaConvertor.js.map diff --git a/scripts/patcher/files/openapi-client-axios-typegen/typegen.js b/scripts/patcher/files/openapi-client-axios-typegen/typegen.js new file mode 100644 index 0000000000..e2ea282183 --- /dev/null +++ b/scripts/patcher/files/openapi-client-axios-typegen/typegen.js @@ -0,0 +1,359 @@ +"use strict"; +var __awaiter = + (this && this.__awaiter) || + function (thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + } + function rejected(value) { + try { + step(generator["throw"](value)); + } catch (e) { + reject(e); + } + } + function step(result) { + result.done + ? resolve(result.value) + : new P(function (resolve) { + resolve(result.value); + }).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); + }; +var __generator = + (this && this.__generator) || + function (thisArg, body) { + var _ = { + label: 0, + sent: function () { + if (t[0] & 1) throw t[1]; + return t[1]; + }, + trys: [], + ops: [] + }, + f, + y, + t, + g; + return ( + (g = { next: verb(0), throw: verb(1), return: verb(2) }), + typeof Symbol === "function" && + (g[Symbol.iterator] = function () { + return this; + }), + g + ); + function verb(n) { + return function (v) { + return step([n, v]); + }; + } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) + try { + if ( + ((f = 1), + y && + (t = + op[0] & 2 + ? y["return"] + : op[0] + ? y["throw"] || ((t = y["return"]) && t.call(y), 0) + : y.next) && + !(t = t.call(y, op[1])).done) + ) + return t; + if (((y = 0), t)) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: + case 1: + t = op; + break; + case 4: + _.label++; + return { value: op[1], done: false }; + case 5: + _.label++; + y = op[1]; + op = [0]; + continue; + case 7: + op = _.ops.pop(); + _.trys.pop(); + continue; + default: + if ( + !((t = _.trys), (t = t.length > 0 && t[t.length - 1])) && + (op[0] === 6 || op[0] === 2) + ) { + _ = 0; + continue; + } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { + _.label = op[1]; + break; + } + if (op[0] === 6 && _.label < t[1]) { + _.label = t[1]; + t = op; + break; + } + if (t && _.label < t[2]) { + _.label = t[2]; + _.ops.push(op); + break; + } + if (t[2]) _.ops.pop(); + _.trys.pop(); + continue; + } + op = body.call(thisArg, _); + } catch (e) { + op = [6, e]; + y = 0; + } finally { + f = t = 0; + } + if (op[0] & 5) throw op[1]; + return { value: op[0] ? op[1] : void 0, done: true }; + } + }; +var __importDefault = + (this && this.__importDefault) || + function (mod) { + return mod && mod.__esModule ? mod : { default: mod }; + }; +var __importStar = + (this && this.__importStar) || + function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) + for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; + }; +Object.defineProperty(exports, "__esModule", { value: true }); +var lodash_1 = __importDefault(require("lodash")); +var yargs_1 = __importDefault(require("yargs")); +var indent_string_1 = __importDefault(require("indent-string")); +var __1 = __importStar(require("openapi-client-axios")); +var dtsGenerator_1 = __importDefault(require("@anttiviljami/dtsgenerator/dist/core/dtsGenerator")); +var jsonSchema_1 = require("@anttiviljami/dtsgenerator/dist/core/jsonSchema"); +var referenceResolver_1 = __importDefault( + require("@anttiviljami/dtsgenerator/dist/core/referenceResolver") +); +var schemaConvertor_1 = __importDefault( + require("@anttiviljami/dtsgenerator/dist/core/schemaConvertor") +); +var writeProcessor_1 = __importDefault( + require("@anttiviljami/dtsgenerator/dist/core/writeProcessor") +); +var typeNameConvertor_1 = require("@anttiviljami/dtsgenerator/dist/core/typeNameConvertor"); + +var swagger_parser_1 = __importDefault(require("swagger-parser")); +function main() { + return __awaiter(this, void 0, void 0, function () { + var argv, _a, imports, schemaTypes, operationTypings; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + argv = yargs_1.default + .usage("Usage: $0 [file]") + .example( + "$0 ./openapi.yml > client.d.ts", + "- generate a type definition file" + ) + .demandCommand(1).argv; + return [4 /*yield*/, generateTypesForDocument(argv._[0])]; + case 1: + (_a = _b.sent()), + (imports = _a[0]), + (schemaTypes = _a[1]), + (operationTypings = _a[2]); + console.log(imports, "\n"); + console.log(schemaTypes); + console.log(operationTypings); + return [2 /*return*/]; + } + }); + }); +} +exports.main = main; +function generateTypesForDocument(definition) { + return __awaiter(this, void 0, void 0, function () { + var api, + processor, + resolver, + convertor, + rootSchema, + generator, + schemaTypes, + exportedTypes, + operationTypings, + imports; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + api = new __1.default({ definition: definition }); + return [4 /*yield*/, api.init()]; + case 1: + _a.sent(); + processor = new writeProcessor_1.default({ + indentSize: 2, + indentChar: " " + }); + resolver = new referenceResolver_1.default(); + convertor = new schemaConvertor_1.default(processor); + return [4 /*yield*/, swagger_parser_1.default.bundle(definition)]; + case 2: + rootSchema = _a.sent(); + resolver.registerSchema(jsonSchema_1.parseSchema(rootSchema)); + generator = new dtsGenerator_1.default(resolver, convertor); + return [4 /*yield*/, generator.generate()]; + case 3: + schemaTypes = _a.sent(); + exportedTypes = convertor.getExports(); + operationTypings = generateOperationMethodTypings(api, exportedTypes); + imports = [ + "import {", + " OpenAPIClient,", + " Parameters,", + " UnknownParamsObject,", + " OperationResponse,", + " AxiosRequestConfig,", + "} from 'openapi-client-axios';" + ].join("\n"); + return [2 /*return*/, [imports, schemaTypes, operationTypings]]; + } + }); + }); +} +exports.generateTypesForDocument = generateTypesForDocument; +function generateMethodForOperation(methodName, operation, exportTypes) { + var operationId = typeNameConvertor_1.normalizeTypeName(operation.operationId), + summary = operation.summary, + description = operation.description; + // parameters arg + var parameterTypePaths = lodash_1.default + .chain([ + lodash_1.default.find(exportTypes, { + schemaRef: "#/paths/" + operationId + "/pathParameters" + }), + lodash_1.default.find(exportTypes, { + schemaRef: "#/paths/" + operationId + "/queryParameters" + }), + lodash_1.default.find(exportTypes, { + schemaRef: "#/paths/" + operationId + "/headerParameters" + }), + lodash_1.default.find(exportTypes, { + schemaRef: "#/paths/" + operationId + "/cookieParameters" + }) + ]) + .filter() + .map("path") + .value(); + var parametersType = !lodash_1.default.isEmpty(parameterTypePaths) + ? parameterTypePaths.join(" & ") + : "UnknownParamsObject"; + var parametersArg = !lodash_1.default.isEmpty(parameterTypePaths) + ? "parameters: Parameters<" + parametersType + ">" + : "parameters?: null"; + // payload arg + var requestBodyType = lodash_1.default.find(exportTypes, { + schemaRef: "#/paths/" + operationId + "/requestBody" + }); + var dataArg = requestBodyType ? "data: " + requestBodyType.path : "data?: null"; + // return type + var responseTypePaths = lodash_1.default + .chain(exportTypes) + .filter(function (_a) { + var schemaRef = _a.schemaRef; + return schemaRef.startsWith("#/paths/" + operationId + "/responses"); + }) + .map("path") + .map(function (arg) { + return arg.replace(/\.(?=\d)/, ".$"); + }) + .value(); + var responseType = !lodash_1.default.isEmpty(responseTypePaths) + ? responseTypePaths.join(" | ") + : "any"; + var returnType = "OperationResponse<" + responseType + ">"; + var operationArgs = [parametersArg, dataArg, "config?: AxiosRequestConfig"]; + var operationMethod = + typeNameConvertor_1.normalizeTypeName(methodName) + + "(\n" + + operationArgs + .map(function (arg) { + return indent_string_1.default(arg, 2); + }) + .join(",\n") + + " \n): " + + returnType; + // comment for type + var content = lodash_1.default.filter([summary, description]).join("\n\n"); + var comment = + "/**\n" + + indent_string_1.default(content === "" ? operationId : operationId + " - " + content, 1, { + indent: " * ", + includeEmptyLines: true + }) + + "\n */"; + return [comment, operationMethod].join("\n"); +} +function generateOperationMethodTypings(api, exportTypes) { + var operations = api.getOperations(); + var operationTypings = operations.map(function (op) { + return generateMethodForOperation(op.operationId, op, exportTypes); + }); + var pathOperationTypes = lodash_1.default.entries(api.definition.paths).map(function (_a) { + var path = _a[0], + pathItem = _a[1]; + var methodTypings = []; + for (var m in pathItem) { + if (pathItem[m] && lodash_1.default.includes(Object.values(__1.HttpMethod), m)) { + var method = m; + var operation = lodash_1.default.find(operations, { + path: path, + method: method + }); + methodTypings.push(generateMethodForOperation(method, operation, exportTypes)); + } + } + return ["['" + path + "']: {"] + .concat( + methodTypings.map(function (m) { + return indent_string_1.default(m, 2); + }), + ["}"] + ) + .join("\n"); + }); + return ["export interface OperationMethods {"] + .concat( + operationTypings.map(function (op) { + return indent_string_1.default(op, 2); + }), + ["}", "", "export interface PathsDictionary {"], + pathOperationTypes.map(function (p) { + return indent_string_1.default(p, 2); + }), + ["}", "", "export type Client = OpenAPIClient"] + ) + .join("\n"); +} +exports.generateOperationMethodTypings = generateOperationMethodTypings; +if (require.main === module) { + main(); +} +//# sourceMappingURL=typegen.js.map diff --git a/scripts/patcher/files/openapi-client-axios/client.js b/scripts/patcher/files/openapi-client-axios/client.js new file mode 100644 index 0000000000..6f9c141356 --- /dev/null +++ b/scripts/patcher/files/openapi-client-axios/client.js @@ -0,0 +1,608 @@ +"use strict"; +var __assign = + (this && this.__assign) || + function () { + __assign = + Object.assign || + function (t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); + }; +var __awaiter = + (this && this.__awaiter) || + function (thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + } + function rejected(value) { + try { + step(generator["throw"](value)); + } catch (e) { + reject(e); + } + } + function step(result) { + result.done + ? resolve(result.value) + : new P(function (resolve) { + resolve(result.value); + }).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); + }; +var __generator = + (this && this.__generator) || + function (thisArg, body) { + var _ = { + label: 0, + sent: function () { + if (t[0] & 1) throw t[1]; + return t[1]; + }, + trys: [], + ops: [] + }, + f, + y, + t, + g; + return ( + (g = { next: verb(0), throw: verb(1), return: verb(2) }), + typeof Symbol === "function" && + (g[Symbol.iterator] = function () { + return this; + }), + g + ); + function verb(n) { + return function (v) { + return step([n, v]); + }; + } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) + try { + if ( + ((f = 1), + y && + (t = + op[0] & 2 + ? y["return"] + : op[0] + ? y["throw"] || ((t = y["return"]) && t.call(y), 0) + : y.next) && + !(t = t.call(y, op[1])).done) + ) + return t; + if (((y = 0), t)) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: + case 1: + t = op; + break; + case 4: + _.label++; + return { value: op[1], done: false }; + case 5: + _.label++; + y = op[1]; + op = [0]; + continue; + case 7: + op = _.ops.pop(); + _.trys.pop(); + continue; + default: + if ( + !((t = _.trys), (t = t.length > 0 && t[t.length - 1])) && + (op[0] === 6 || op[0] === 2) + ) { + _ = 0; + continue; + } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { + _.label = op[1]; + break; + } + if (op[0] === 6 && _.label < t[1]) { + _.label = t[1]; + t = op; + break; + } + if (t && _.label < t[2]) { + _.label = t[2]; + _.ops.push(op); + break; + } + if (t[2]) _.ops.pop(); + _.trys.pop(); + continue; + } + op = body.call(thisArg, _); + } catch (e) { + op = [6, e]; + y = 0; + } finally { + f = t = 0; + } + if (op[0] & 5) throw op[1]; + return { value: op[0] ? op[1] : void 0, done: true }; + } + }; +var __importDefault = + (this && this.__importDefault) || + function (mod) { + return mod && mod.__esModule ? mod : { default: mod }; + }; +Object.defineProperty(exports, "__esModule", { value: true }); +var lodash_1 = __importDefault(require("lodash")); +var axios_1 = __importDefault(require("axios")); +var bath_es5_1 = __importDefault(require("bath-es5")); +var openapi_schema_validation_1 = require("openapi-schema-validation"); +var swagger_parser_1 = __importDefault(require("swagger-parser")); +var query_string_1 = __importDefault(require("query-string")); +var json_schema_deref_sync_1 = __importDefault(require("json-schema-deref-sync")); +var client_1 = require("./types/client"); +/** + * Main class and the default export of the 'openapi-client-axios' module + * + * @export + * @class OpenAPIClientAxios + */ +var OpenAPIClientAxios = /** @class */ (function () { + /** + * Creates an instance of OpenAPIClientAxios. + * + * @param opts - constructor options + * @param {Document | string} opts.definition - the OpenAPI definition, file path or Document object + * @param {boolean} opts.strict - strict mode, throw errors or warn on OpenAPI spec validation errors (default: false) + * @param {boolean} opts.validate - whether to validate the input document document (default: true) + * @param {boolean} opts.axiosConfigDefaults - default axios config for the instance + * @memberof OpenAPIClientAxios + */ + function OpenAPIClientAxios(opts) { + var _this = this; + /** + * Returns the instance of OpenAPIClient + * + * @returns + * @memberof OpenAPIClientAxios + */ + this.getClient = function () { + return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + if (!this.initalized) { + return [2 /*return*/, this.init()]; + } + return [2 /*return*/, this.instance]; + }); + }); + }; + /** + * Initalizes OpenAPIClientAxios and creates a member axios client instance + * + * The init() method should be called right after creating a new instance of OpenAPIClientAxios + * + * @returns AxiosInstance + * @memberof OpenAPIClientAxios + */ + this.init = function () { + return __awaiter(_this, void 0, void 0, function () { + var _a, _b; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + // parse the document + _a = this; + return [ + 4 /*yield*/, + swagger_parser_1.default.parse(this.inputDocument) + ]; + case 1: + // parse the document + _a.document = _c.sent(); + try { + if (this.validate) { + // validate the document + this.validateDefinition(); + } + } catch (err) { + if (this.strict) { + // in strict-mode, fail hard and re-throw the error + throw err; + } else { + // just emit a warning about the validation errors + console.warn(err); + } + } + // dereference the document into definition + _b = this; + return [ + 4 /*yield*/, + swagger_parser_1.default.dereference(this.inputDocument) + ]; + case 2: + // dereference the document into definition + _b.definition = _c.sent(); + // create axios instance + this.instance = this.createAxiosInstance(); + // we are now initalized + this.initalized = true; + return [2 /*return*/, this.instance]; + } + }); + }); + }; + /** + * Synchronous version of .init() + * + * Note: Only works when the input definition is a valid OpenAPI v3 object and doesn't contain remote $refs. + * + * @memberof OpenAPIClientAxios + */ + this.initSync = function () { + if (typeof _this.inputDocument !== "object") { + throw new Error( + ".initSync() can't be called with a non-object definition. Please use .init()" + ); + } + // set document + _this.document = _this.inputDocument; + try { + if (_this.validate) { + // validate the document + _this.validateDefinition(); + } + } catch (err) { + if (_this.strict) { + // in strict-mode, fail hard and re-throw the error + throw err; + } else { + // just emit a warning about the validation errors + console.warn(err); + } + } + // dereference the document into definition + _this.definition = json_schema_deref_sync_1.default(_this.inputDocument); + // create axios instance + _this.instance = _this.createAxiosInstance(); + // we are now initalized + _this.initalized = true; + return _this.instance; + }; + /** + * Creates a new axios instance, extends it and returns it + * + * @memberof OpenAPIClientAxios + */ + this.createAxiosInstance = function () { + // create axios instance + var instance = axios_1.default.create(_this.axiosConfigDefaults); + // set baseURL to the one found in the definition servers (if not set in axios defaults) + var baseURL = _this.getBaseURL(); + if (baseURL && !_this.axiosConfigDefaults.baseURL) { + instance.defaults.baseURL = baseURL; + } + // create methods for operationIds + var operations = _this.getOperations(); + for (var _i = 0, operations_1 = operations; _i < operations_1.length; _i++) { + var operation = operations_1[_i]; + var operationId = operation.operationId; + if (operationId) { + instance[operationId] = _this.createOperationMethod(operation); + } + } + // create paths dictionary + // Example: api.paths['/pets/{id}'].get({ id: 1 }); + instance.paths = {}; + for (var path in _this.definition.paths) { + if (_this.definition.paths[path]) { + if (!instance.paths[path]) { + instance.paths[path] = {}; + } + var methods = _this.definition.paths[path]; + for (var m in methods) { + if ( + methods[m] && + lodash_1.default.includes(Object.values(client_1.HttpMethod), m) + ) { + var method = m; + var operation = lodash_1.default.find(_this.getOperations(), { + path: path, + method: method + }); + instance.paths[path][method] = _this.createOperationMethod(operation); + } + } + } + } + // add reference to parent class instance + instance.api = _this; + return instance; + }; + /** + * Validates this.document, which is the parsed OpenAPI document. Throws an error if validation fails. + * + * @returns {Document} parsed document + * @memberof OpenAPIClientAxios + */ + this.validateDefinition = function () { + var _a = openapi_schema_validation_1.validate(_this.document, 3), + valid = _a.valid, + errors = _a.errors; + if (!valid) { + var prettyErrors = JSON.stringify(errors, null, 2); + throw new Error( + "Document is not valid OpenAPI. " + + errors.length + + " validation errors:\n" + + prettyErrors + ); + } + return _this.document; + }; + /** + * Gets the API baseurl defined in the first OpenAPI specification servers property + * + * @returns string + * @memberof OpenAPIClientAxios + */ + this.getBaseURL = function (operation) { + if (!_this.definition) { + return undefined; + } + if (operation) { + if (typeof operation === "string") { + operation = _this.getOperation(operation); + } + if (operation.servers && operation.servers[0]) { + return operation.servers[0].url; + } + } + if (_this.definition.servers && _this.definition.servers[0]) { + return _this.definition.servers[0].url; + } + return undefined; + }; + /** + * Creates an axios config object for operation + arguments + * @memberof OpenAPIClientAxios + */ + this.getAxiosConfigForOperation = function (operation, args) { + if (typeof operation === "string") { + operation = _this.getOperation(operation); + } + var request = _this.getRequestConfigForOperation(operation, args); + // construct axios request config + var axiosConfig = { + method: request.method, + url: request.path, + data: request.payload, + params: request.query, + headers: request.headers + }; + // allow overriding baseURL with operation / path specific servers + var servers = operation.servers; + if (servers && servers[0]) { + axiosConfig.baseURL = servers[0].url; + } + // allow overriding any parameters in AxiosRequestConfig + var config = args[2]; + return config ? lodash_1.default.merge(axiosConfig, config) : axiosConfig; + }; + /** + * Creates a generic request config object for operation + arguments. + * + * This function contains the logic that handles operation method parameters. + * + * @memberof OpenAPIClientAxios + */ + this.getRequestConfigForOperation = function (operation, args) { + if (typeof operation === "string") { + operation = _this.getOperation(operation); + } + var pathParams = {}; + var query = {}; + var headers = {}; + var cookies = {}; + var setRequestParam = function (name, value, type) { + switch (type) { + case client_1.ParamType.Path: + pathParams[name] = value; + break; + case client_1.ParamType.Query: + query[name] = value; + break; + case client_1.ParamType.Header: + headers[name] = value; + break; + case client_1.ParamType.Cookie: + cookies[name] = value; + break; + } + }; + var getParamType = function (paramName) { + var param = lodash_1.default.find(operation.parameters, { name: paramName }); + if (param) { + return param.in; + } + // default all params to query if operation doesn't specify param + return client_1.ParamType.Query; + }; + var getFirstOperationParam = function () { + var firstRequiredParam = lodash_1.default.find(operation.parameters, { + required: true + }); + if (firstRequiredParam) { + return firstRequiredParam; + } + var firstParam = lodash_1.default.first(operation.parameters); + if (firstParam) { + return firstParam; + } + }; + var paramsArg = args[0], + payload = args[1]; + if (lodash_1.default.isArray(paramsArg)) { + // ParamsArray + for (var _i = 0, _a = paramsArg; _i < _a.length; _i++) { + var param = _a[_i]; + setRequestParam(param.name, param.value, param.in || getParamType(param.name)); + } + } else if (typeof paramsArg === "object") { + // ParamsObject + for (var name in paramsArg) { + if (paramsArg[name] !== undefined) { + setRequestParam(name, paramsArg[name], getParamType(name)); + } + } + } else if (!lodash_1.default.isNil(paramsArg)) { + var firstParam = getFirstOperationParam(); + if (!firstParam) { + throw new Error("No parameters found for operation " + operation.operationId); + } + setRequestParam(firstParam.name, paramsArg, firstParam.in); + } + // path parameters + var pathBuilder = bath_es5_1.default(operation.path); + // make sure all path parameters are set + for (var _b = 0, _c = pathBuilder.names; _b < _c.length; _b++) { + var name = _c[_b]; + var value = pathParams[name]; + pathParams[name] = "" + value; + } + var path = pathBuilder.path(pathParams); + // query parameters + var queryString = query_string_1.default.stringify(query, { arrayFormat: "none" }); + // full url with query string + var url = + "" + _this.getBaseURL(operation) + path + (queryString ? "?" + queryString : ""); + // construct request config + var config = { + method: operation.method, + url: url, + path: path, + pathParams: pathParams, + query: query, + queryString: queryString, + headers: headers, + cookies: cookies, + payload: payload + }; + return config; + }; + /** + * Flattens operations into a simple array of Operation objects easy to work with + * + * @returns {Operation[]} + * @memberof OpenAPIBackend + */ + this.getOperations = function () { + var paths = lodash_1.default.get(_this.definition, "paths", {}); + return lodash_1.default + .chain(paths) + .entries() + .flatMap(function (_a) { + var path = _a[0], + pathObject = _a[1]; + var methods = lodash_1.default.pick( + pathObject, + lodash_1.default.values(client_1.HttpMethod) + ); + return lodash_1.default.map(lodash_1.default.entries(methods), function (_a) { + var method = _a[0], + operation = _a[1]; + operation.operationId = operation.operationId.replace( + /[^0-9A-Za-z_$]+/g, + "_" + ); + var op = __assign({}, operation, { path: path, method: method }); + if (pathObject.parameters) { + op.parameters = (op.parameters || []).concat(pathObject.parameters); + } + if (pathObject.servers) { + op.servers = (op.servers || []).concat(pathObject.servers); + } + return op; + }); + }) + .value(); + }; + /** + * Gets a single operation based on operationId + * + * @param {string} operationId + * @returns {Operation} + * @memberof OpenAPIBackend + */ + this.getOperation = function (operationId) { + return lodash_1.default.find(_this.getOperations(), { operationId: operationId }); + }; + /** + * Creates an axios method for an operation + * (...pathParams, data?, config?) => Promise + * + * @param {Operation} operation + * @memberof OpenAPIClientAxios + */ + this.createOperationMethod = function (operation) { + return function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + return __awaiter(_this, void 0, void 0, function () { + var axiosConfig; + return __generator(this, function (_a) { + axiosConfig = this.getAxiosConfigForOperation(operation, args); + // do the axios request + return [2 /*return*/, this.client.request(axiosConfig)]; + }); + }); + }; + }; + var optsWithDefaults = __assign({ validate: true, strict: false }, opts, { + axiosConfigDefaults: __assign( + { + paramsSerializer: function (params) { + return query_string_1.default.stringify(params, { arrayFormat: "none" }); + } + }, + opts.axiosConfigDefaults || {} + ) + }); + this.inputDocument = optsWithDefaults.definition; + this.strict = optsWithDefaults.strict; + this.validate = optsWithDefaults.validate; + this.axiosConfigDefaults = optsWithDefaults.axiosConfigDefaults; + } + Object.defineProperty(OpenAPIClientAxios.prototype, "client", { + /** + * Returns the instance of OpenAPIClient + * + * @readonly + * @type {OpenAPIClient} + * @memberof OpenAPIClientAxios + */ + get: function () { + return this.instance; + }, + enumerable: true, + configurable: true + }); + return OpenAPIClientAxios; +})(); +exports.OpenAPIClientAxios = OpenAPIClientAxios; +//# sourceMappingURL=client.js.map diff --git a/scripts/patcher/files/openapi-client-axios/types/client.d.ts b/scripts/patcher/files/openapi-client-axios/types/client.d.ts new file mode 100644 index 0000000000..2221e51d85 --- /dev/null +++ b/scripts/patcher/files/openapi-client-axios/types/client.d.ts @@ -0,0 +1,93 @@ +import { AxiosResponse, AxiosRequestConfig } from "axios"; +import { OpenAPIV3 } from "openapi-types"; +export * from "openapi-types"; +/** + * Type alias for OpenAPI document. We only support v3 + */ +export declare type Document = OpenAPIV3.Document; +/** + * OpenAPI allowed HTTP methods + */ +export declare enum HttpMethod { + Get = "get", + Put = "put", + Post = "post", + Patch = "patch", + Delete = "delete", + Options = "options", + Head = "head", + Trace = "trace" +} +/** + * OpenAPI parameters "in" + */ +export declare enum ParamType { + Query = "query", + Header = "header", + Path = "path", + Cookie = "cookie" +} +/** + * Operation method spec + */ +export declare type ImplicitParamValue = string | number; +export interface ExplicitParamValue { + value: string | number; + name: string; + in?: ParamType | string; +} +export declare type UnknownParamsObject = {}; +export declare type ParamsArray = ExplicitParamValue[]; +export declare type SingleParam = ImplicitParamValue; +export declare type Parameters = + | ParamsObject + | ParamsArray + | SingleParam; +export declare type RequestPayload = any; +export declare type OperationMethodArguments = [Parameters?, RequestPayload?, AxiosRequestConfig?]; +export declare type OperationResponse = Promise>; +export declare type UnknownOperationMethod = ( + parameters?: Parameters, + data?: RequestPayload, + config?: AxiosRequestConfig +) => OperationResponse; +export interface UnknownOperationMethods { + [operationId: string]: UnknownOperationMethod; +} +/** + * Generic request config object + */ +export interface RequestConfig { + method: HttpMethod; + url: string; + path: string; + pathParams: { + [key: string]: string; + }; + query: { + [key: string]: string | string[]; + }; + queryString: string; + headers: { + [header: string]: string | string[]; + }; + cookies: { + [cookie: string]: string; + }; + payload?: RequestPayload; +} +/** + * Operation object extended with path and method for easy looping + */ +export interface Operation extends OpenAPIV3.OperationObject { + path: string; + method: HttpMethod; +} +/** + * A dictionary of paths and their methods + */ +export interface UnknownPathsDictionary { + [path: string]: { + [method in HttpMethod]?: UnknownOperationMethod; + }; +} diff --git a/scripts/patcher/patch.js b/scripts/patcher/patch.js new file mode 100644 index 0000000000..3801d8997d --- /dev/null +++ b/scripts/patcher/patch.js @@ -0,0 +1,4 @@ +const fs = require("fs-extra"); +const path = require("path"); + +fs.copySync(path.resolve(__dirname, "files"), path.resolve(__dirname, "../../node_modules")); diff --git a/src/ApiClient/AdminClient.ts b/src/ApiClient/AdminClient.ts new file mode 100644 index 0000000000..4675eb64a6 --- /dev/null +++ b/src/ApiClient/AdminClient.ts @@ -0,0 +1,341 @@ +import { TypedEmitter } from "tiny-typed-emitter/lib"; + +import { Components } from "./generatedcode/_generated"; +import InternalError, { ErrorCode, GenericErrors } from "./models/InternalComms/InternalError"; +import InternalStatus, { StatusCode } from "./models/InternalComms/InternalStatus"; +import ServerClient from "./ServerClient"; + +interface IEvents { + loadAdminInfo: ( + user: InternalStatus + ) => void; +} + +export type AdminInfoErrors = + | GenericErrors + | ErrorCode.ADMIN_GITHUB_RATE + | ErrorCode.ADMIN_GITHUB_ERROR; + +export type RestartErrors = GenericErrors | ErrorCode.ADMIN_WATCHDOG_UNAVAIL; + +export type UpdateErrors = + | GenericErrors + | ErrorCode.ADMIN_WATCHDOG_UNAVAIL + | ErrorCode.ADMIN_VERSION_NOT_FOUND + | ErrorCode.ADMIN_GITHUB_RATE + | ErrorCode.ADMIN_GITHUB_ERROR; + +export type LogsErrors = GenericErrors | ErrorCode.ADMIN_LOGS_IO_ERROR; + +export type LogErrors = GenericErrors; + +export default new (class AdminClient extends TypedEmitter { + private _cachedAdminInfo?: InternalStatus; + public get cachedAdminInfo() { + return this._cachedAdminInfo; + } + private loadingAdminInfo = false; + + public constructor() { + super(); + ServerClient.on("purgeCache", () => { + this._cachedAdminInfo = undefined; + }); + } + + public async getAdminInfo(): Promise< + InternalStatus + > { + await ServerClient.wait4Init(); + if (this._cachedAdminInfo) { + return this._cachedAdminInfo; + } + + if (this.loadingAdminInfo) { + return await new Promise(resolve => { + const resolver = ( + user: InternalStatus + ) => { + resolve(user); + this.removeListener("loadAdminInfo", resolver); + }; + this.on("loadAdminInfo", resolver); + }); + } + + this.loadingAdminInfo = true; + + let response; + try { + response = await ServerClient.apiClient!.AdministrationController_Read(); + } catch (stat) { + const res = new InternalStatus({ + code: StatusCode.ERROR, + error: stat as InternalError + }); + this.emit("loadAdminInfo", res); + this.loadingAdminInfo = false; + return res; + } + + switch (response.status) { + case 200: { + const thing = new InternalStatus({ + code: StatusCode.OK, + payload: response.data as Components.Schemas.Administration + }); + + this._cachedAdminInfo = thing; + this.emit("loadAdminInfo", thing); + this.loadingAdminInfo = false; + return thing; + } + case 424: { + const errorMessage = response.data as Components.Schemas.ErrorMessage; + const thing = new InternalStatus< + Components.Schemas.Administration, + ErrorCode.ADMIN_GITHUB_RATE + >({ + code: StatusCode.ERROR, + error: new InternalError( + ErrorCode.ADMIN_GITHUB_RATE, + { errorMessage }, + response + ) + }); + this.emit("loadAdminInfo", thing); + this.loadingAdminInfo = false; + return thing; + } + case 429: { + const errorMessage = response.data as Components.Schemas.ErrorMessage; + const thing = new InternalStatus< + Components.Schemas.Administration, + ErrorCode.ADMIN_GITHUB_ERROR + >({ + code: StatusCode.ERROR, + error: new InternalError( + ErrorCode.ADMIN_GITHUB_ERROR, + { errorMessage }, + response + ) + }); + this.emit("loadAdminInfo", thing); + this.loadingAdminInfo = false; + return thing; + } + default: { + const res = new InternalStatus< + Components.Schemas.Administration, + ErrorCode.UNHANDLED_RESPONSE + >({ + code: StatusCode.ERROR, + error: new InternalError( + ErrorCode.UNHANDLED_RESPONSE, + { axiosResponse: response }, + response + ) + }); + this.emit("loadAdminInfo", res); + this.loadingAdminInfo = false; + return res; + } + } + } + + public async restartServer(): Promise> { + await ServerClient.wait4Init(); + + let response; + try { + response = await ServerClient.apiClient!.AdministrationController_Delete(); + } catch (stat) { + return new InternalStatus({ + code: StatusCode.ERROR, + error: stat as InternalError + }); + } + + switch (response.status) { + case 204: { + return new InternalStatus({ code: StatusCode.OK, payload: null }); + } + case 422: { + const errorMessage = response.data as Components.Schemas.ErrorMessage; + return new InternalStatus({ + code: StatusCode.ERROR, + error: new InternalError( + ErrorCode.ADMIN_WATCHDOG_UNAVAIL, + { errorMessage }, + response + ) + }); + } + default: { + return new InternalStatus({ + code: StatusCode.ERROR, + error: new InternalError( + ErrorCode.UNHANDLED_RESPONSE, + { axiosResponse: response }, + response + ) + }); + } + } + } + + public async updateServer(newVersion: string): Promise> { + await ServerClient.wait4Init(); + + let response; + try { + response = await ServerClient.apiClient!.AdministrationController_Update(null, { + windowsHost: true, + newVersion, + latestVersion: null, + trackedRepositoryUrl: null + }); + } catch (stat) { + return new InternalStatus({ + code: StatusCode.ERROR, + error: stat as InternalError + }); + } + + switch (response.status) { + case 202: { + return new InternalStatus({ code: StatusCode.OK, payload: null }); + } + case 410: { + const errorMessage = response.data as Components.Schemas.ErrorMessage; + return new InternalStatus({ + code: StatusCode.ERROR, + error: new InternalError( + ErrorCode.ADMIN_VERSION_NOT_FOUND, + { errorMessage }, + response + ) + }); + } + case 422: { + const errorMessage = response.data as Components.Schemas.ErrorMessage; + return new InternalStatus({ + code: StatusCode.ERROR, + error: new InternalError( + ErrorCode.ADMIN_WATCHDOG_UNAVAIL, + { errorMessage }, + response + ) + }); + } + case 424: { + const errorMessage = response.data as Components.Schemas.ErrorMessage; + return new InternalStatus({ + code: StatusCode.ERROR, + error: new InternalError( + ErrorCode.ADMIN_GITHUB_RATE, + { errorMessage }, + response + ) + }); + } + case 429: { + const errorMessage = response.data as Components.Schemas.ErrorMessage; + return new InternalStatus({ + code: StatusCode.ERROR, + error: new InternalError( + ErrorCode.ADMIN_GITHUB_ERROR, + { errorMessage }, + response + ) + }); + } + default: { + return new InternalStatus({ + code: StatusCode.ERROR, + error: new InternalError( + ErrorCode.UNHANDLED_RESPONSE, + { axiosResponse: response }, + response + ) + }); + } + } + } + + public async getLogs(): Promise> { + await ServerClient.wait4Init(); + + let response; + try { + response = await ServerClient.apiClient!.AdministrationController_ListLogs(); + } catch (stat) { + return new InternalStatus({ + code: StatusCode.ERROR, + error: stat as InternalError + }); + } + + switch (response.status) { + case 200: { + return new InternalStatus({ + code: StatusCode.OK, + payload: response.data as Components.Schemas.LogFile[] + }); + } + /*case 409: { + //not handled here as its a global error but instead handled in the interceptor as a snowflaky response, thanks for using 409 for two things cyber. + + }*/ + default: { + return new InternalStatus({ + code: StatusCode.ERROR, + error: new InternalError( + ErrorCode.UNHANDLED_RESPONSE, + { axiosResponse: response }, + response + ) + }); + } + } + } + + public async getLog( + logName: string + ): Promise> { + await ServerClient.wait4Init(); + + let response; + try { + response = await ServerClient.apiClient!.AdministrationController_GetLog({ + path: logName + }); + } catch (stat) { + return new InternalStatus({ + code: StatusCode.ERROR, + error: stat as InternalError + }); + } + switch (response.status) { + case 200: { + return new InternalStatus({ + code: StatusCode.OK, + payload: response.data as Components.Schemas.LogFile + }); + } + /*case 409: { + //not handled here as its a global error but instead handled in the interceptor as a snowflaky response, thanks for using 409 for two things cyber. + }*/ + default: { + return new InternalStatus({ + code: StatusCode.ERROR, + error: new InternalError( + ErrorCode.UNHANDLED_RESPONSE, + { axiosResponse: response }, + response + ) + }); + } + } + } +})(); diff --git a/src/ApiClient/InstanceClient.ts b/src/ApiClient/InstanceClient.ts new file mode 100644 index 0000000000..2e7dbe512b --- /dev/null +++ b/src/ApiClient/InstanceClient.ts @@ -0,0 +1,92 @@ +import { Components } from "./generatedcode/_generated"; +import InternalError, { ErrorCode, GenericErrors } from "./models/InternalComms/InternalError"; +import InternalStatus, { StatusCode } from "./models/InternalComms/InternalStatus"; +import ServerClient from "./ServerClient"; + +export type ListInstancesErrors = GenericErrors; +export type EditInstanceErrors = GenericErrors | ErrorCode.INSTANCE_NO_DB_ENTITY; + +export default new (class InstanceClient { + public async listInstances(): Promise< + InternalStatus + > { + await ServerClient.wait4Init(); + + let response; + try { + response = await ServerClient.apiClient!.InstanceController_List(); + } catch (stat) { + return new InternalStatus({ + code: StatusCode.ERROR, + error: stat as InternalError + }); + } + + switch (response.status) { + case 200: { + const payload = (response.data as Components.Schemas.Instance[]).sort( + (a, b) => a.id - b.id + ); + + return new InternalStatus({ + code: StatusCode.OK, + payload + }); + } + default: { + return new InternalStatus({ + code: StatusCode.ERROR, + error: new InternalError( + ErrorCode.UNHANDLED_RESPONSE, + { axiosResponse: response }, + response + ) + }); + } + } + } + + public async editInstance( + instance: Components.Schemas.Instance + ): Promise> { + await ServerClient.wait4Init(); + + let response; + try { + response = await ServerClient.apiClient!.InstanceController_Update(null, instance); + } catch (stat) { + return new InternalStatus({ + code: StatusCode.ERROR, + error: stat as InternalError + }); + } + switch (response.status) { + case 200: + case 202: { + const instance = response.data as Components.Schemas.Instance; + + return new InternalStatus({ + code: StatusCode.OK, + payload: instance + }); + } + case 410: + return new InternalStatus({ + code: StatusCode.ERROR, + error: new InternalError(ErrorCode.INSTANCE_NO_DB_ENTITY, { + errorMessage: response.data as Components.Schemas.ErrorMessage + }) + }); + default: { + return new InternalStatus({ + code: StatusCode.ERROR, + error: new InternalError( + ErrorCode.UNHANDLED_RESPONSE, + { axiosResponse: response }, + response + ) + }); + } + } + } +})(); diff --git a/src/ApiClient/InstanceUserClient.ts b/src/ApiClient/InstanceUserClient.ts new file mode 100644 index 0000000000..7202464f69 --- /dev/null +++ b/src/ApiClient/InstanceUserClient.ts @@ -0,0 +1,100 @@ +import { TypedEmitter } from "tiny-typed-emitter"; + +import { Components } from "./generatedcode/_generated"; +import InternalError, { ErrorCode, GenericErrors } from "./models/InternalComms/InternalError"; +import InternalStatus, { StatusCode } from "./models/InternalComms/InternalStatus"; +import ServerClient from "./ServerClient"; + +interface IEvents { + loadInstanceUser: ( + user: InternalStatus + ) => void; +} + +export type getCurrentInstanceUserErrors = GenericErrors; + +export default new (class InstanceUserClient extends TypedEmitter { + private _cachedInstanceUser: Map< + number, + InternalStatus + > = new Map>(); + public get cachedInstanceUser() { + return this._cachedInstanceUser; + } + + private loadingInstanceUserInfo: Map = new Map(); + + public constructor() { + super(); + + ServerClient.on("purgeCache", () => { + this._cachedInstanceUser.clear(); + }); + } + + public async getCurrentInstanceUser( + instanceid: number + ): Promise> { + await ServerClient.wait4Init(); + + if (this._cachedInstanceUser.has(instanceid)) { + return this._cachedInstanceUser.get(instanceid)!; + } + + if (this.loadingInstanceUserInfo.get(instanceid)) { + return await new Promise(resolve => { + const resolver = ( + user: InternalStatus + ) => { + resolve(user); + this.removeListener("loadInstanceUser", resolver); + }; + this.on("loadInstanceUser", resolver); + }); + } + + this.loadingInstanceUserInfo.set(instanceid, true); + + let response; + try { + response = await ServerClient.apiClient!.InstanceUserController_Read({ + Instance: instanceid + }); + } catch (stat) { + const res = new InternalStatus({ + code: StatusCode.ERROR, + error: stat as InternalError + }); + this.emit("loadInstanceUser", res); + this.loadingInstanceUserInfo.set(instanceid, false); + return res; + } + + switch (response.status) { + case 200: { + const res = new InternalStatus({ + code: StatusCode.OK, + payload: response.data as Components.Schemas.InstanceUser + }); + + this._cachedInstanceUser.set(instanceid, res); + this.emit("loadInstanceUser", res); + this.loadingInstanceUserInfo.set(instanceid, false); + return res; + } + default: { + const res = new InternalStatus({ + code: StatusCode.ERROR, + error: new InternalError( + ErrorCode.UNHANDLED_RESPONSE, + { axiosResponse: response }, + response + ) + }); + this.emit("loadInstanceUser", res); + this.loadingInstanceUserInfo.set(instanceid, false); + return res; + } + } + } +})(); diff --git a/src/ApiClient/JobsClient.ts b/src/ApiClient/JobsClient.ts new file mode 100644 index 0000000000..dc8c1adde8 --- /dev/null +++ b/src/ApiClient/JobsClient.ts @@ -0,0 +1,150 @@ +import { Components } from "./generatedcode/_generated"; +import InternalError, { ErrorCode, GenericErrors } from "./models/InternalComms/InternalError"; +import InternalStatus, { StatusCode } from "./models/InternalComms/InternalStatus"; +import ServerClient from "./ServerClient"; + +export type listJobsErrors = GenericErrors | ErrorCode.JOB_INSTANCE_OFFLINE; +export type getJobErrors = GenericErrors | ErrorCode.JOB_JOB_NOT_FOUND; +export type deleteJobErrors = + | GenericErrors + | ErrorCode.JOB_JOB_NOT_FOUND + | ErrorCode.JOB_JOB_COMPLETE; + +export default new (class JobsClient { + public async listJobs( + instanceid: number + ): Promise> { + await ServerClient.wait4Init(); + + let response; + try { + response = await ServerClient.apiClient!.JobController_Read({ Instance: instanceid }); + } catch (stat) { + return new InternalStatus({ + code: StatusCode.ERROR, + error: stat as InternalError + }); + } + + switch (response.status) { + case 200: { + return new InternalStatus({ + code: StatusCode.OK, + payload: response.data as Components.Schemas.Job[] + }); + } + default: { + return new InternalStatus({ + code: StatusCode.ERROR, + error: new InternalError( + ErrorCode.UNHANDLED_RESPONSE, + { axiosResponse: response }, + response + ) + }); + } + } + } + + public async getJob( + instanceid: number, + jobid: number + ): Promise> { + await ServerClient.wait4Init(); + + let response; + try { + response = await ServerClient.apiClient!.JobController_GetId({ + Instance: instanceid, + id: jobid + }); + } catch (stat) { + return new InternalStatus({ + code: StatusCode.ERROR, + error: stat as InternalError + }); + } + + switch (response.status) { + case 200: { + return new InternalStatus({ + code: StatusCode.OK, + payload: response.data as Components.Schemas.Job + }); + } + case 404: { + return new InternalStatus({ + code: StatusCode.ERROR, + error: new InternalError(ErrorCode.JOB_JOB_NOT_FOUND, { + errorMessage: response.data as Components.Schemas.ErrorMessage + }) + }); + } + default: { + return new InternalStatus({ + code: StatusCode.ERROR, + error: new InternalError( + ErrorCode.UNHANDLED_RESPONSE, + { axiosResponse: response }, + response + ) + }); + } + } + } + + public async deleteJob( + instanceid: number, + jobid: number + ): Promise> { + await ServerClient.wait4Init(); + + let response; + try { + response = await ServerClient.apiClient!.JobController_Delete({ + Instance: instanceid, + id: jobid + }); + } catch (stat) { + return new InternalStatus({ + code: StatusCode.ERROR, + error: stat as InternalError + }); + } + + switch (response.status) { + case 202: { + return new InternalStatus({ + code: StatusCode.OK, + payload: response.data as Components.Schemas.Job + }); + } + case 404: { + return new InternalStatus({ + code: StatusCode.ERROR, + error: new InternalError(ErrorCode.JOB_JOB_NOT_FOUND, { + errorMessage: response.data as Components.Schemas.ErrorMessage + }) + }); + } + case 410: { + return new InternalStatus({ + code: StatusCode.ERROR, + error: new InternalError(ErrorCode.JOB_JOB_COMPLETE, { + void: true + }) + }); + } + default: { + return new InternalStatus({ + code: StatusCode.ERROR, + error: new InternalError( + ErrorCode.UNHANDLED_RESPONSE, + { axiosResponse: response }, + response + ) + }); + } + } + } +})(); diff --git a/src/ApiClient/ServerClient.ts b/src/ApiClient/ServerClient.ts new file mode 100644 index 0000000000..b3f3321c61 --- /dev/null +++ b/src/ApiClient/ServerClient.ts @@ -0,0 +1,515 @@ +import { AxiosError, AxiosResponse, OpenAPIClientAxios } from "openapi-client-axios"; +import { Document } from "openapi-client-axios/types/client"; +import { TypedEmitter } from "tiny-typed-emitter/lib"; + +import { Client, Components } from "./generatedcode/_generated"; +import { ICredentials } from "./models/ICredentials"; +import InternalError, { ErrorCode, GenericErrors } from "./models/InternalComms/InternalError"; +import InternalStatus, { StatusCode } from "./models/InternalComms/InternalStatus"; +import configOptions from "./util/config"; +import CredentialsProvider from "./util/CredentialsProvider"; +import LoginHooks from "./util/LoginHooks"; + +interface IEvents { + //self explainatory + logout: () => void; + //fired whenever something is denied access, shouldnt really be used + accessDenied: () => void; + //fired when the server info is first loaded + loadServerInfo: ( + serverInfo: InternalStatus + ) => void; + //fired when the api is loaded from the json file and loaded + initialized: () => void; + //purge all caches + purgeCache: () => void; + //internal event, queues logins + loadLoginInfo: (loginInfo: InternalStatus) => void; +} + +export type LoginErrors = + | GenericErrors + | ErrorCode.LOGIN_DISABLED + | ErrorCode.LOGIN_FAIL + | ErrorCode.LOGIN_NOCREDS; +export type ServerInfoErrors = GenericErrors; + +export default new (class ServerClient extends TypedEmitter { + private static readonly globalHandledCodes = [400, 401, 403, 406, 409, 426, 500, 501, 503]; + + //api + public apiClient?: Client; //client to interface with the api + private api?: OpenAPIClientAxios; //api object, handles sending requests and configuring things + private initialized = false; + private loadingServerInfo = false; + + public constructor() { + super(); + this.getServerInfo = this.getServerInfo.bind(this); + + LoginHooks.addHook(this.getServerInfo); + this.on("purgeCache", () => { + this._serverInfo = undefined; + if (CredentialsProvider.token) { + void LoginHooks.runHooks(CredentialsProvider.token); + } + }); + } + + //serverInfo + private _serverInfo?: InternalStatus; + + public get serverInfo() { + return this._serverInfo; + } + + public autoLogin = true; + private loggingIn = false; + + public async initApi() { + console.log("Initializing API client"); + console.time("APIInit"); + const defObj = ((await import("./generatedcode/swagger.json")) + .default as unknown) as Document; + + this.api = new OpenAPIClientAxios({ + definition: defObj, + validate: false, + axiosConfigDefaults: { + baseURL: configOptions.apipath.value as string, + withCredentials: false, + headers: { + Accept: "application/json", + api: `Tgstation.Server.Api/` + API_VERSION, + "User-Agent": "tgstation-server-control-panel/" + VERSION + }, + validateStatus: status => { + return !ServerClient.globalHandledCodes.includes(status); + } + } + }); + this.apiClient = await this.api.init(); + this.apiClient.interceptors.request.use( + async value => { + if (!((value.url === "/" || value.url === "") && value.method === "post")) { + const tok = await this.wait4Token(); + (value.headers as { [key: string]: string })["Authorization"] = + "Bearer " + tok.bearer!; + } + return value; + }, + error => { + return Promise.reject(error); + } + ); + this.apiClient.interceptors.response.use( + val => val, + (error: AxiosError): Promise => { + if ( + error.response && + error.response.status && + ServerClient.globalHandledCodes.includes(error.response.status) + ) { + const res = error.response as AxiosResponse; + switch (error.response.status) { + case 400: { + const errorMessage = res.data as Components.Schemas.ErrorMessage; + const errorobj = new InternalError( + ErrorCode.HTTP_BAD_REQUEST, + { + errorMessage + }, + res + ); + return Promise.reject(errorobj); + } + case 401: { + const request = error.config; + if ( + (request.url === "/" || request.url === "") && + request.method === "post" + ) { + this.logout(); + console.log("Failed to login"); + const errorobj = new InternalError( + ErrorCode.LOGIN_FAIL, + { + void: true + }, + res + ); + return Promise.reject(errorobj); + } else { + if (this.autoLogin) { + return this.login().then(status => { + switch (status.code) { + case StatusCode.OK: { + return this.api!.client.request(error.config); + } + case StatusCode.ERROR: { + this.emit("accessDenied"); + //time to kick out the user + this.logout(); + const errorobj = new InternalError( + ErrorCode.HTTP_ACCESS_DENIED, + { + void: true + }, + res + ); + return Promise.reject(errorobj); + } + } + }); + } else { + this.emit("accessDenied"); + const errorobj = new InternalError( + ErrorCode.HTTP_ACCESS_DENIED, + { + void: true + }, + res + ); + return Promise.reject(errorobj); + } + } + } + case 403: { + const request = error.config; + if ( + (request.url === "/" || request.url === "") && + request.method === "post" + ) { + this.logout(); + console.log("Account disabled"); + const errorobj = new InternalError( + ErrorCode.LOGIN_DISABLED, + { + void: true + }, + res + ); + return Promise.reject(errorobj); + } else { + this.emit("accessDenied"); + const errorobj = new InternalError( + ErrorCode.HTTP_ACCESS_DENIED, + { + void: true + }, + res + ); + return Promise.reject(errorobj); + } + } + case 406: { + const errorobj = new InternalError( + ErrorCode.HTTP_NOT_ACCEPTABLE, + { + void: true + }, + res + ); + return Promise.reject(errorobj); + } + case 409: { + const errorMessage = res.data as Components.Schemas.ErrorMessage; + + //Thanks for reusing a global erorr status cyber. Log operations can return 409 + const request = error.config; + let status: ErrorCode; + if ( + request.url === "/Administration/Logs" && + request.method === "get" + ) { + status = ErrorCode.ADMIN_LOGS_IO_ERROR; + } else if (request.url === "/Job" && request.method === "get") { + status = ErrorCode.JOB_INSTANCE_OFFLINE; + } else { + status = ErrorCode.HTTP_DATA_INEGRITY; + } + + const errorobj = new InternalError( + status, + { + errorMessage + }, + res + ); + return Promise.reject(errorobj); + } + case 426: { + const errorMessage = res.data as Components.Schemas.ErrorMessage; + const errorobj = new InternalError( + ErrorCode.HTTP_API_MISMATCH, + { errorMessage }, + res + ); + return Promise.reject(errorobj); + } + case 500: { + const errorMessage = res.data as Components.Schemas.ErrorMessage; + const errorobj = new InternalError( + ErrorCode.HTTP_SERVER_ERROR, + { + errorMessage + }, + res + ); + return Promise.reject(errorobj); + } + case 501: { + const errorMessage = res.data as Components.Schemas.ErrorMessage; + const errorobj = new InternalError( + ErrorCode.HTTP_UNIMPLEMENTED, + { errorMessage }, + res + ); + return Promise.reject(errorobj); + } + case 503: { + console.log("Server not ready, delaying request", error.config); + return new Promise(resolve => { + setTimeout(resolve, 5000); + }).then(() => this.api!.client.request(error.config)); + /*const errorobj = new InternalError( + ErrorCode.HTTP_SERVER_NOT_READY, + { + void: true + }, + res + ); + return Promise.reject(errorobj);*/ + } + default: { + const errorobj = new InternalError( + ErrorCode.UNHANDLED_GLOBAL_RESPONSE, + { + axiosResponse: res + }, + res + ); + return Promise.reject(errorobj); + } + } + } else { + const err = error as Error; + const errorobj = new InternalError( + ErrorCode.AXIOS, + { jsError: err }, + error.response + ); + return Promise.reject(errorobj); + } + } + ); + console.timeEnd("APIInit"); + this.initialized = true; + this.emit("initialized"); + } + + public wait4Init(): Promise { + return new Promise(resolve => { + if (this.initialized) { + resolve(); + return; + } + this.on("initialized", () => resolve()); + }); + } + + public wait4Token() { + return new Promise(resolve => { + if (CredentialsProvider.isTokenValid()) { + resolve(CredentialsProvider.token); + return; + } + LoginHooks.on("loginSuccess", token => { + resolve(token); + }); + }); + } + + public async login( + newCreds?: ICredentials, + savePassword = false + ): Promise> { + await this.wait4Init(); + console.log("Attempting login"); + if (newCreds) { + CredentialsProvider.credentials = newCreds; + } + if (!CredentialsProvider.credentials) + return new InternalStatus({ + code: StatusCode.ERROR, + error: new InternalError(ErrorCode.LOGIN_NOCREDS, { void: true }) + }); + + if (this.loggingIn) { + return await new Promise(resolve => { + const resolver = (info: InternalStatus) => { + resolve(info); + this.removeListener("loadLoginInfo", resolver); + }; + this.on("loadLoginInfo", resolver); + }); + } + this.loggingIn = true; + + let response; + try { + response = await this.apiClient!.HomeController_CreateToken(null, null, { + auth: { + username: CredentialsProvider.credentials.userName, + password: CredentialsProvider.credentials.password + } + }); + } catch (stat) { + return new InternalStatus({ + code: StatusCode.ERROR, + error: stat as InternalError + }); + } finally { + this.loggingIn = false; + } + switch (response.status) { + case 200: { + console.log("Login success"); + const token = response.data as Components.Schemas.Token; + CredentialsProvider.token = token; + + /*if (token.expiresAt) { + const expiry = new Date(token.expiresAt); + const refreshtime = new Date(expiry.getTime() - 60000); //1 minute before expiry + const delta = refreshtime.getTime() - new Date().getTime(); //god damn, dates are hot garbage, get the ms until the refresh time + setInterval(() => this.login(), delta); //this is an arrow function so that "this" remains set + }*/ + if (savePassword) { + try { + window.localStorage.setItem( + "username", + CredentialsProvider.credentials.userName + ); + window.localStorage.setItem( + "password", + CredentialsProvider.credentials.password + ); + } catch (_) { + // eslint-disable-next-line @typescript-eslint/no-empty-function + (() => {})(); //noop + } + } + LoginHooks.runHooks(token); + const res = new InternalStatus({ + code: StatusCode.OK, + payload: token + }); + this.emit("loadLoginInfo", res); + return res; + } + default: { + return new InternalStatus({ + code: StatusCode.ERROR, + error: new InternalError( + ErrorCode.UNHANDLED_RESPONSE, + { axiosResponse: response }, + response + ) + }); + } + } + } + + public logout() { + if (!CredentialsProvider.isTokenValid()) { + return; + } + console.log("Logging out"); + CredentialsProvider.credentials = undefined; + try { + window.localStorage.removeItem("username"); + window.localStorage.removeItem("password"); + } catch (e) { + // eslint-disable-next-line @typescript-eslint/no-empty-function + (() => {})(); + } + CredentialsProvider.token = undefined; + this.emit("purgeCache"); + this.emit("logout"); + } + + public async getServerInfo( + _token?: Components.Schemas.Token, + bypassCache = false + ): Promise> { + await this.wait4Init(); + + if (this._serverInfo && !bypassCache) { + return this._serverInfo; + } + + if (this.loadingServerInfo) { + return new Promise(resolve => { + if (this._serverInfo) { + //race condition if 2 things listen to an event or something + resolve(this._serverInfo); + return; + } + const resolver = ( + info: InternalStatus + ) => { + resolve(info); + this.removeListener("loadServerInfo", resolver); + }; + this.on("loadServerInfo", resolver); + }); + } + + this.loadingServerInfo = true; + + let response; + try { + response = await this.apiClient!.HomeController_Home(); + } catch (stat) { + const res = new InternalStatus({ + code: StatusCode.ERROR, + error: stat as InternalError + }); + this.emit("loadServerInfo", res); + this.loadingServerInfo = false; + return res; + } + switch (response.status) { + case 200: { + const info = response.data as Components.Schemas.ServerInformation; + const cache = new InternalStatus< + Components.Schemas.ServerInformation, + ErrorCode.OK + >({ + code: StatusCode.OK, + payload: info + }); + this.emit("loadServerInfo", cache); + this._serverInfo = cache; + this.loadingServerInfo = false; + return cache; + } + default: { + const res = new InternalStatus< + Components.Schemas.ServerInformation, + ErrorCode.UNHANDLED_RESPONSE + >({ + code: StatusCode.ERROR, + error: new InternalError( + ErrorCode.UNHANDLED_RESPONSE, + { axiosResponse: response }, + response + ) + }); + this.emit("loadServerInfo", res); + this.loadingServerInfo = false; + return res; + } + } + } +})(); diff --git a/src/ApiClient/UserClient.ts b/src/ApiClient/UserClient.ts new file mode 100644 index 0000000000..bb0f892a39 --- /dev/null +++ b/src/ApiClient/UserClient.ts @@ -0,0 +1,300 @@ +import { TypedEmitter } from "tiny-typed-emitter/lib"; + +import { AdministrationRights, InstanceManagerRights } from "./generatedcode/_enums"; +import { Components } from "./generatedcode/_generated"; +import InternalError, { ErrorCode, GenericErrors } from "./models/InternalComms/InternalError"; +import InternalStatus, { StatusCode } from "./models/InternalComms/InternalStatus"; +import ServerClient from "./ServerClient"; +import LoginHooks from "./util/LoginHooks"; + +interface IEvents { + loadUserInfo: (user: InternalStatus) => void; +} + +export type EditUserErrors = GenericErrors | ErrorCode.USER_NOT_FOUND; +export type GetUserErrors = GenericErrors | ErrorCode.USER_NOT_FOUND; +export type CreateUserErrors = GenericErrors | ErrorCode.USER_NO_SYS_IDENT; + +//https://stackoverflow.com/questions/40510611/typescript-interface-require-one-of-two-properties-to-exist +//name describes what it does, makes the passed type only require 1 property, the others being optional +type RequireAtLeastOne = Pick> & + { + [K in Keys]-?: Required> & Partial>>; + }[Keys]; + +export default new (class UserClient extends TypedEmitter { + private _cachedUser?: InternalStatus; + public get cachedUser() { + return this._cachedUser; + } + private loadingUserInfo = false; + + public constructor() { + super(); + this.getCurrentUser = this.getCurrentUser.bind(this); + + LoginHooks.addHook(this.getCurrentUser); + ServerClient.on("purgeCache", () => { + this._cachedUser = undefined; + }); + } + + public async editUser( + id: number, + newUser: RequireAtLeastOne<{ + password: string; + enabled: boolean; + administrationRights: AdministrationRights; + instanceManagerRights: InstanceManagerRights; + }> + ): Promise> { + await ServerClient.wait4Init(); + + let response; + try { + response = await ServerClient.apiClient!.UserController_Update(null, { + //@ts-expect-error // name is set as non nullable despite being nullable + name: undefined, + id: id, + //@ts-expect-error // password is set as non nullable despite being nullable + password: newUser.password, + enabled: newUser.enabled, + administrationRights: newUser.administrationRights, + instanceManagerRights: newUser.instanceManagerRights + }); + } catch (stat) { + return new InternalStatus({ + code: StatusCode.ERROR, + error: stat as InternalError + }); + } + // noinspection DuplicatedCode + switch (response.status) { + case 200: { + const current = await this.getCurrentUser(); + if (current.code == StatusCode.OK) { + if (current.payload!.id! == id) { + //if we are editing ourselves, clear cached data to reload permissions on the app + ServerClient.emit("purgeCache"); + } + } else { + return new InternalStatus({ + code: StatusCode.ERROR, + error: current.error! + }); + } + return new InternalStatus({ + code: StatusCode.OK, + payload: response.data as Components.Schemas.User + }); + } + case 404: { + const errorMessage = response.data as Components.Schemas.ErrorMessage; + return new InternalStatus({ + code: StatusCode.ERROR, + error: new InternalError(ErrorCode.USER_NOT_FOUND, { errorMessage }) + }); + } + default: { + return new InternalStatus({ + code: StatusCode.ERROR, + error: new InternalError( + ErrorCode.UNHANDLED_RESPONSE, + { axiosResponse: response }, + response + ) + }); + } + } + } + + public async getCurrentUser(): Promise> { + await ServerClient.wait4Init(); + if (this._cachedUser) { + return this._cachedUser; + } + + if (this.loadingUserInfo) { + return await new Promise(resolve => { + const resolver = (user: InternalStatus) => { + resolve(user); + this.removeListener("loadUserInfo", resolver); + }; + this.on("loadUserInfo", resolver); + }); + } + + this.loadingUserInfo = true; + + let response; + try { + response = await ServerClient.apiClient!.UserController_Read(); + } catch (stat) { + const res = new InternalStatus({ + code: StatusCode.ERROR, + error: stat as InternalError + }); + this.emit("loadUserInfo", res); + this.loadingUserInfo = false; + return res; + } + + switch (response.status) { + case 200: { + const thing = new InternalStatus({ + code: StatusCode.OK, + payload: response.data as Components.Schemas.User + }); + + this._cachedUser = thing; + this.emit("loadUserInfo", thing); + this.loadingUserInfo = false; + return thing; + } + default: { + const res = new InternalStatus< + Components.Schemas.User, + ErrorCode.UNHANDLED_RESPONSE + >({ + code: StatusCode.ERROR, + error: new InternalError( + ErrorCode.UNHANDLED_RESPONSE, + { axiosResponse: response }, + response + ) + }); + this.emit("loadUserInfo", res); + this.loadingUserInfo = false; + return res; + } + } + } + + public async listUsers(): Promise> { + await ServerClient.wait4Init(); + + let response; + try { + response = await ServerClient.apiClient!.UserController_List(); + } catch (stat) { + return new InternalStatus({ + code: StatusCode.ERROR, + error: stat as InternalError + }); + } + + switch (response.status) { + case 200: { + const payload = (response.data as Components.Schemas.User[]).sort( + (a, b) => a.id! - b.id! + ); + + return new InternalStatus({ + code: StatusCode.OK, + payload + }); + } + default: { + return new InternalStatus({ + code: StatusCode.ERROR, + error: new InternalError( + ErrorCode.UNHANDLED_RESPONSE, + { axiosResponse: response }, + response + ) + }); + } + } + } + + public async getUser( + id: number + ): Promise> { + await ServerClient.wait4Init(); + + let response; + try { + response = await ServerClient.apiClient!.UserController_GetId({ id: id }); + } catch (stat) { + return new InternalStatus({ + code: StatusCode.ERROR, + error: stat as InternalError + }); + } + // noinspection DuplicatedCode + switch (response.status) { + case 200: { + return new InternalStatus({ + code: StatusCode.OK, + payload: response.data as Components.Schemas.User + }); + } + case 404: { + const errorMessage = response.data as Components.Schemas.ErrorMessage; + return new InternalStatus({ + code: StatusCode.ERROR, + error: new InternalError(ErrorCode.USER_NOT_FOUND, { errorMessage }) + }); + } + default: { + return new InternalStatus({ + code: StatusCode.ERROR, + error: new InternalError( + ErrorCode.UNHANDLED_RESPONSE, + { axiosResponse: response }, + response + ) + }); + } + } + } + + public async createUser( + newuser: + | { name: string; password: string; enabled?: boolean } + | { systemIdentifier: string; enabled?: boolean } + ): Promise> { + await ServerClient.wait4Init(); + + if (newuser.enabled === undefined) newuser.enabled = true; + + let response; + try { + response = await ServerClient.apiClient!.UserController_Create( + null, + newuser as Components.Schemas.UserUpdate + ); + } catch (stat) { + return new InternalStatus({ + code: StatusCode.ERROR, + error: stat as InternalError + }); + } + + switch (response.status) { + case 201: { + return new InternalStatus({ + code: StatusCode.OK, + payload: response.data as Components.Schemas.User + }); + } + case 410: { + const errorMessage = response.data as Components.Schemas.ErrorMessage; + return new InternalStatus({ + code: StatusCode.ERROR, + error: new InternalError(ErrorCode.USER_NO_SYS_IDENT, { errorMessage }) + }); + } + default: { + return new InternalStatus({ + code: StatusCode.ERROR, + error: new InternalError( + ErrorCode.UNHANDLED_RESPONSE, + { axiosResponse: response }, + response + ) + }); + } + } + } +})(); diff --git a/src/ApiClient/generatedcode/.gitkeep b/src/ApiClient/generatedcode/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/ApiClient/models/ICredentials.ts b/src/ApiClient/models/ICredentials.ts new file mode 100644 index 0000000000..3a68c2da59 --- /dev/null +++ b/src/ApiClient/models/ICredentials.ts @@ -0,0 +1,4 @@ +export interface ICredentials { + userName: string; + password: string; +} diff --git a/src/ApiClient/models/InternalComms/InternalError.ts b/src/ApiClient/models/InternalComms/InternalError.ts new file mode 100644 index 0000000000..496db85ea5 --- /dev/null +++ b/src/ApiClient/models/InternalComms/InternalError.ts @@ -0,0 +1,153 @@ +import { AxiosResponse } from "axios"; + +import { replaceAll } from "../../../utils/misc"; +import { ErrorCode as TGSErrorCode } from "../../generatedcode/_enums"; +import { Components } from "../../generatedcode/_generated"; +import configOptions from "../../util/config"; +import CredentialsProvider from "../../util/CredentialsProvider"; + +export type GenericErrors = + | ErrorCode.HTTP_BAD_REQUEST + | ErrorCode.HTTP_DATA_INEGRITY + | ErrorCode.HTTP_API_MISMATCH + | ErrorCode.HTTP_SERVER_ERROR + | ErrorCode.HTTP_UNIMPLEMENTED + // | ErrorCode.HTTP_SERVER_NOT_READY + | ErrorCode.AXIOS + | ErrorCode.UNHANDLED_RESPONSE + | ErrorCode.UNHANDLED_GLOBAL_RESPONSE + | ErrorCode.HTTP_ACCESS_DENIED + | ErrorCode.HTTP_NOT_ACCEPTABLE + | ErrorCode.OK; + +export enum ErrorCode { + OK = 'Isnt displayed but is used as an "error" when everything is ok', //void + HTTP_BAD_REQUEST = "error.http.bad_request", //errmessage + HTTP_DATA_INEGRITY = "error.http.data_integrity", //errmessage + HTTP_API_MISMATCH = "error.http.api_mismatch", //void + HTTP_SERVER_ERROR = "error.http.server_error", //errmessage + HTTP_UNIMPLEMENTED = "error.http.unimplemented", //errmessage + //auto retry HTTP_SERVER_NOT_READY = 'error.http.server_not_ready', //void + HTTP_ACCESS_DENIED = "error.http.access_denied", //void + HTTP_NOT_ACCEPTABLE = "error.http.not_acceptable", //void + UNHANDLED_RESPONSE = "error.unhandled_response", //axiosresponse + UNHANDLED_GLOBAL_RESPONSE = "error.unhandled_global_response", //axiosresponse + AXIOS = "error.axios", //jserror + + //Generic errors + GITHUB_FAIL = "error.github", //jserror + APP_FAIL = "error.app", //jserror + + //Login errors + LOGIN_FAIL = "error.login.bad_user_pass", //void + LOGIN_NOCREDS = "error.login.no_creds", //void + LOGIN_DISABLED = "error.login.user_disabled", //void + + //User errors + USER_NO_SYS_IDENT = "error.user.no_sys_ident", //errmessage + USER_NOT_FOUND = "error.user.not_found", //errmessage + + //Administration errors + ADMIN_GITHUB_RATE = "error.admin.rate", //errmessage + ADMIN_GITHUB_ERROR = "error.admin.error", //errmessage + ADMIN_WATCHDOG_UNAVAIL = "error.admin.watchdog.avail", //errmessage + ADMIN_VERSION_NOT_FOUND = "error.admin.update.notfound", //errmessage + ADMIN_LOGS_IO_ERROR = "error.admin.logs.io", //errmessage + + //Job errors + JOB_JOB_NOT_FOUND = "error.job.not_found", //errmessage + JOB_JOB_COMPLETE = "error.job.complete", //void + JOB_INSTANCE_OFFLINE = "error.job.instance_offline", //errmessage + + //Instance errors + INSTANCE_NO_DB_ENTITY = "error.instance.no_db_entity" //errmessage +} + +type errorMessage = { + errorMessage: Components.Schemas.ErrorMessage; +}; +type axiosResponse = { + axiosResponse: AxiosResponse; +}; +type jsError = { + jsError: Error; +}; +type voidError = { + void: true; +}; + +export enum DescType { + LOCALE, + TEXT +} +interface Desc { + type: DescType; + desc: string; +} + +type allAddons = errorMessage | axiosResponse | jsError | voidError; + +export default class InternalError { + public readonly code: T; + public readonly desc?: Desc; + public readonly extendedInfo: string; + + public constructor(code: T, addon: allAddons, origin?: AxiosResponse) { + this.code = code; + if ("errorMessage" in addon) { + const err = addon.errorMessage; + this.desc = { + type: DescType.TEXT, + desc: + TGSErrorCode[err.errorCode] + + ": " + + err.message + + (err.additionalData ? ": " + err.additionalData : "") + }; + if (!err.message) { + this.desc = { + type: DescType.TEXT, + desc: TGSErrorCode[err.errorCode] + }; + } + } + if ("jsError" in addon) { + const err = addon.jsError; + this.desc = { + type: DescType.TEXT, + desc: `${err.name}: ${err.message}` + }; + } + const stack = new Error().stack; + + let debuginfo = JSON.stringify({ addon, origin, config: configOptions, stack }); + debuginfo = debuginfo.replace( + /Basic (?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?/g, + "Basic **************" + ); + debuginfo = debuginfo.replace( + /{"username":".+?","password":".+?"}/g, + '{"username":"*******","password":"*******"}' + ); + if (CredentialsProvider.isTokenValid()) { + debuginfo = replaceAll( + debuginfo, + CredentialsProvider.token?.bearer as string, + "**************" + ); + } + if (configOptions.githubtoken.value) { + debuginfo = replaceAll( + debuginfo, + configOptions.githubtoken.value as string, + "**************" + ); + } + this.extendedInfo = debuginfo; + + console.error( + `Operational error: ${this.code} (${this.desc?.desc || "No description"})`, + this + ); + } +} diff --git a/src/ApiClient/models/InternalComms/InternalStatus.ts b/src/ApiClient/models/InternalComms/InternalStatus.ts new file mode 100644 index 0000000000..75fdcc460b --- /dev/null +++ b/src/ApiClient/models/InternalComms/InternalStatus.ts @@ -0,0 +1,38 @@ +import InternalError, { ErrorCode } from "./InternalError"; + +export enum StatusCode { + OK, + ERROR +} + +declare interface argsErr { + code: StatusCode.ERROR; + error: InternalError; +} + +declare interface argsOk { + code: StatusCode.OK; + payload: T; +} + +declare type args = argsErr | argsOk; + +class InternalStatus { + public code: StatusCode; + public payload?: T; + public error?: InternalError; + + public constructor(args: args) { + this.code = args.code; + switch (args.code) { + case StatusCode.OK: + this.payload = args.payload; + break; + case StatusCode.ERROR: + this.error = args.error; + break; + } + } +} + +export default InternalStatus; diff --git a/src/ApiClient/util/ConfigController.ts b/src/ApiClient/util/ConfigController.ts new file mode 100644 index 0000000000..1e0b301893 --- /dev/null +++ b/src/ApiClient/util/ConfigController.ts @@ -0,0 +1,72 @@ +import configOptions, { ConfigOption, ConfigValue } from "./config"; + +export default new (class ConfigController { + public loadconfig() { + for (const val of Object.values(configOptions)) { + this.getconfig(val); + } + console.log("Configuration loaded", configOptions); + } + + public saveconfig(newconfig: { [key: string]: ConfigOption }) { + for (const [key, val] of Object.entries(newconfig)) { + this.setconfig(key, val); + } + console.log("Configuration saved", configOptions); + } + + private setconfig(key: string, option: ConfigOption) { + if (option?.value === undefined) return this.deleteconfig(key); + + //safeties + switch (option.type) { + case "num": + //this parses strings and numbers alike to numbers and refuses non numbers + //@ts-expect-error //parseInt can take numbers + option.value = parseInt(option.value); + if (Number.isNaN(option.value)) return; + break; + } + + configOptions[key].value = option.value; + //configOptions[key].persist = option.persist; + + //if (!option.persist) return this.deleteconfig(key); //idiot proofing, alexkar proofing + + try { + localStorage.setItem(option.id, JSON.stringify(option.value)); + //option.persist = true; + } catch (e) { + // eslint-disable-next-line @typescript-eslint/no-empty-function + (() => {})(); //noop + } + } + + private getconfig(option: ConfigOption): void { + try { + const data = localStorage.getItem(option.id); + if (data !== undefined && data !== null) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + const json = JSON.parse(data); + if (json !== null && json !== undefined) { + option.value = json as ConfigValue; + } + //option.persist = true; + } + } catch (e) { + // eslint-disable-next-line @typescript-eslint/no-empty-function + (() => {})(); //noop + } + } + + private deleteconfig(key: string): void { + try { + const option = configOptions[key]; + localStorage.removeItem(option.id); + //option.persist = false; + } catch (e) { + // eslint-disable-next-line @typescript-eslint/no-empty-function + (() => {})(); //noop + } + } +})(); diff --git a/src/ApiClient/util/CredentialsProvider.ts b/src/ApiClient/util/CredentialsProvider.ts new file mode 100644 index 0000000000..cd43d890ab --- /dev/null +++ b/src/ApiClient/util/CredentialsProvider.ts @@ -0,0 +1,20 @@ +import { Components } from "../generatedcode/_generated"; +import { ICredentials } from "../models/ICredentials"; + +export default new (class CredentialsProvider { + //token + public token?: Components.Schemas.Token; + + //credentials + public credentials?: ICredentials; + + public isTokenValid() { + return ( + this.credentials && + this.token && + this.token + .bearer /* && + (!this.token.expiresAt || new Date(this.token.expiresAt) > new Date(Date.now()))*/ + ); + } +})(); diff --git a/src/ApiClient/util/JobsController.ts b/src/ApiClient/util/JobsController.ts new file mode 100644 index 0000000000..0352809251 --- /dev/null +++ b/src/ApiClient/util/JobsController.ts @@ -0,0 +1,350 @@ +import { TypedEmitter } from "tiny-typed-emitter"; + +import { + AdministrationRights, + ByondRights, + ChatBotRights, + ConfigurationRights, + DreamDaemonRights, + DreamMakerRights, + InstanceManagerRights, + InstanceUserRights, + RepositoryRights, + RightsType +} from "../generatedcode/_enums"; +import { Components } from "../generatedcode/_generated"; +import InstanceUserClient from "../InstanceUserClient"; +import JobsClient, { getJobErrors, listJobsErrors } from "../JobsClient"; +import InternalError, { ErrorCode } from "../models/InternalComms/InternalError"; +import { StatusCode } from "../models/InternalComms/InternalStatus"; +import ServerClient from "../ServerClient"; +import UserClient from "../UserClient"; +import configOptions from "./config"; + +interface IEvents { + jobsLoaded: () => unknown; +} + +export type CanCancelJob = Components.Schemas.Job & { + canCancel?: boolean; +}; + +export default new (class JobsController extends TypedEmitter { + private _instance: number | undefined; + public set instance(id: number | undefined) { + this._instance = id; + this.reset(); + } + + //This is a special property that gets set by approutes to add a handler for when this needs to change the instance + // This is here as a hack so that JobsController doesnt have to reference files outside the api client + // eslint-disable-next-line @typescript-eslint/no-empty-function + public setInstance: (instance: number | undefined) => void = () => {}; + + private fastmodecount = 0; + public set fastmode(cycles: number) { + console.log(`JobsController going in fastmode for ${cycles} cycles`); + this.fastmodecount = cycles; + this.restartLoop(); + } + + private currentLoop: Date = new Date(0); + + public errors: InternalError[] = []; + public jobs: Map = new Map(); + + private reset() { + this.jobs = new Map(); + this.restartLoop(); + } + + public constructor() { + super(); + + this.loop = this.loop.bind(this); + this.reset = this.reset.bind(this); + + //technically not a "cache" but we might as well reload it + ServerClient.on("purgeCache", this.reset); + } + + public restartLoop() { + //we use an actual date object here because it could help prevent really weird timing + // issues as two different date objects cannot be equal + // despite the date being + const initDate = new Date(Date.now()); + this.currentLoop = initDate; + this.loop(initDate); + } + + private loop(loopid: Date) { + //if we dont got an instance to check, dont check + // normally we should have an instance id, but this is in case we dont + if (this._instance === undefined) { + return; + } + + //so loops get initialiazed with the current time, it keeps track of which loop to run with + // that initialization date in currentLoop if the currentLoop isnt equal to the one provided + // to the loop, it means that the loop was + // replaced so we dont try to call for another one + if (loopid !== this.currentLoop) { + return; + } + + //time to clear out errors + this.errors = []; + + //now since this is async, it still possible that a single fire gets done after the new loop started, theres no really much that can be done about it + JobsClient.listJobs(this._instance) + .then(async value => { + //this check is here because the request itself is async and could return after + // the loop is terminated, we dont want to contaminate the jobs of an instance + // with the jobs of another even if it is for a single fire and would eventually + // get fixed on its own after a few seconds + if (loopid !== this.currentLoop) return; + + if (value.code === StatusCode.OK) { + for (const job of value.payload!) { + this.jobs.set(job.id, job); + } + + //we check all jobs we have locally against the active jobs we got in the reply so + // we can query jobs which we didnt get informed about manually + const localids = Array.from(this.jobs, ([, job]) => job.id); + const remoteids = value.payload!.map(job => job.id); + + const manualids = localids.filter(x => !remoteids.includes(x)); + + const work: Promise[] = []; + for (const id of manualids) { + work.push( + JobsClient.getJob(this._instance!, id).then(status => { + if (loopid !== this.currentLoop) return; + + if (status.code === StatusCode.OK) { + this.jobs.set(id, status.payload!); + } else { + this.errors.push(status.error!); + } + }) + ); + } + //await all jobs to exist + await Promise.all(work); + + if (loopid !== this.currentLoop) return; + + work.length = 0; + for (const _job of this.jobs.values()) { + const job = _job as CanCancelJob; + if (job.progress === undefined) { + work.push( + JobsClient.getJob(this._instance!, job.id).then(progressedjob => { + if (loopid !== this.currentLoop) return; + if (progressedjob.code === StatusCode.OK) { + job.progress = progressedjob.payload!.progress; + } else { + this.errors.push(progressedjob.error!); + } + }) + ); + } + + work.push( + this.canCancel(job, this.errors).then(canCancel => { + if (loopid !== this.currentLoop) return; + job.canCancel = canCancel; + }) + ); + } + + //populate fields on jobs + await Promise.all(work); + + if (loopid !== this.currentLoop) return; + + if (this.fastmodecount && loopid === this.currentLoop) { + window.setTimeout(() => this.loop(loopid), 800); + this.fastmodecount--; + console.log( + `JobsController will remain in fastmode for ${this.fastmodecount} cycles` + ); + } else { + window.setTimeout( + () => this.loop(loopid), + (value.payload!.length + ? (configOptions.jobpollactive.value as number) + : (configOptions.jobpollinactive.value as number)) * 1000 + ); + } + } else { + if (value.error!.code === ErrorCode.JOB_INSTANCE_OFFLINE) { + this.setInstance(undefined); + } + this.errors.push(value.error!); + window.setTimeout(() => this.loop(loopid), 10000); + } + + this.emit("jobsLoaded"); + }) + .catch(reason => { + console.error(reason); + }); + } + + private async canCancel( + job: Readonly, + errors: InternalError[] + ): Promise { + //shouldnt really occur in normal conditions but this is a safety anyways + if (this._instance === undefined) return false; + + //we dont need to reevalutate stuff that we already know + if (job.canCancel !== undefined) return job.canCancel; + + if (job.cancelRightsType === undefined) { + return true; + } + + switch (job.cancelRightsType as RightsType) { + case RightsType.Administration: { + const userInfo = await UserClient.getCurrentUser(); + if (userInfo.code === StatusCode.OK) { + const required = job.cancelRight as AdministrationRights; + return !!(userInfo.payload!.administrationRights! & required); + } else { + errors.push(userInfo.error!); + return false; + } + } + case RightsType.InstanceManager: { + const userInfo = await UserClient.getCurrentUser(); + if (userInfo.code === StatusCode.OK) { + const required = job.cancelRight as InstanceManagerRights; + return !!(userInfo.payload!.instanceManagerRights! & required); + } else { + errors.push(userInfo.error!); + return false; + } + } + case RightsType.Byond: { + const instanceUser = await InstanceUserClient.getCurrentInstanceUser( + this._instance + ); + if (instanceUser.code === StatusCode.OK) { + const required = job.cancelRight as ByondRights; + return !!(instanceUser.payload!.byondRights! & required); + } else { + errors.push(instanceUser.error!); + return false; + } + } + case RightsType.ChatBots: { + const instanceUser = await InstanceUserClient.getCurrentInstanceUser( + this._instance + ); + if (instanceUser.code === StatusCode.OK) { + const required = job.cancelRight as ChatBotRights; + return !!(instanceUser.payload!.chatBotRights! & required); + } else { + errors.push(instanceUser.error!); + return false; + } + } + case RightsType.Configuration: { + const instanceUser = await InstanceUserClient.getCurrentInstanceUser( + this._instance + ); + if (instanceUser.code === StatusCode.OK) { + const required = job.cancelRight as ConfigurationRights; + return !!(instanceUser.payload!.configurationRights! & required); + } else { + errors.push(instanceUser.error!); + return false; + } + } + case RightsType.DreamDaemon: { + const instanceUser = await InstanceUserClient.getCurrentInstanceUser( + this._instance + ); + if (instanceUser.code === StatusCode.OK) { + const required = job.cancelRight as DreamDaemonRights; + return !!(instanceUser.payload!.dreamDaemonRights! & required); + } else { + errors.push(instanceUser.error!); + return false; + } + } + case RightsType.DreamMaker: { + const instanceUser = await InstanceUserClient.getCurrentInstanceUser( + this._instance + ); + if (instanceUser.code === StatusCode.OK) { + const required = job.cancelRight as DreamMakerRights; + return !!(instanceUser.payload!.dreamMakerRights! & required); + } else { + errors.push(instanceUser.error!); + return false; + } + } + case RightsType.InstanceUser: { + const instanceUser = await InstanceUserClient.getCurrentInstanceUser( + this._instance + ); + if (instanceUser.code === StatusCode.OK) { + const required = job.cancelRight as InstanceUserRights; + return !!(instanceUser.payload!.instanceUserRights! & required); + } else { + errors.push(instanceUser.error!); + return false; + } + } + case RightsType.Repository: { + const instanceUser = await InstanceUserClient.getCurrentInstanceUser( + this._instance + ); + if (instanceUser.code === StatusCode.OK) { + const required = job.cancelRight as RepositoryRights; + return !!(instanceUser.payload!.repositoryRights! & required); + } else { + errors.push(instanceUser.error!); + return false; + } + } + } + } + + public async cancelOrClear( + jobid: number, + onError: (error: InternalError) => void + ): Promise { + const job = this.jobs.get(jobid); + + //no we cant cancel jobs we arent aware of yet + if (!job) return false; + + //just clear out the job + if (job.stoppedAt) { + this.jobs.delete(jobid); + return true; + } else { + if (this._instance === undefined) { + onError( + new InternalError(ErrorCode.APP_FAIL, { + jsError: new Error("No instance selected during deletion of a job") + }) + ); + return false; + } else { + const deleteInfo = await JobsClient.deleteJob(this._instance, jobid); + if (deleteInfo.code === StatusCode.OK) { + return true; + } else { + onError(deleteInfo.error!); + return false; + } + } + } + } +})(); diff --git a/src/ApiClient/util/LoginHooks.ts b/src/ApiClient/util/LoginHooks.ts new file mode 100644 index 0000000000..bdcbbabcef --- /dev/null +++ b/src/ApiClient/util/LoginHooks.ts @@ -0,0 +1,52 @@ +import { TypedEmitter } from "tiny-typed-emitter"; + +import { Components } from "../generatedcode/_generated"; + +interface IEvents { + //tasks once the user is fully logged in + loginSuccess: (token: Components.Schemas.Token) => void; +} + +class LoginHooks extends TypedEmitter { + private promiseHooks: Set<(token: Components.Schemas.Token) => Promise> = new Set(); + + public runHooks(token: Components.Schemas.Token) { + console.log("Running login hooks"); + let i = 0; + const work: Array> = []; + for (const hook of this.promiseHooks) { + const id = i; + console.log(`Running hook ${hook.name}(${id})`); + work.push( + new Promise((resolve, reject) => { + hook(token) + .then(() => { + console.log(`Done hook ${hook.name}(${id})`); + resolve(); + }) + .catch(err => { + console.error(`Error running hook ${hook.name}(${id}): `, err); + reject(err); + }); + }) + ); + i++; + } + Promise.all(work) + .then(() => { + console.log("Running post login event"); + this.emit("loginSuccess", token); + }) + .catch(() => console.error("An error occured while running login hooks")); + } + + public addHook(hook: (token: Components.Schemas.Token) => Promise): void { + this.promiseHooks.add(hook); + } + + public removeHook(hook: (token: Components.Schemas.Token) => Promise): void { + this.promiseHooks.delete(hook); + } +} + +export default new LoginHooks(); diff --git a/src/ApiClient/util/config.ts b/src/ApiClient/util/config.ts new file mode 100644 index 0000000000..9fee34ea17 --- /dev/null +++ b/src/ApiClient/util/config.ts @@ -0,0 +1,71 @@ +export type ConfigValue = number | string | boolean; + +export type ConfigOption = BaseConfigOption & + (NumConfigOption | StrConfigOption | PwdConfigOption | BoolConfigOption | EnumConfigOption); + +export interface BaseConfigOption { + id: string; +} + +export interface NumConfigOption extends BaseConfigOption { + type: "num"; + value: number; +} +export interface StrConfigOption extends BaseConfigOption { + type: "str"; + value: string; +} +export interface PwdConfigOption extends BaseConfigOption { + type: "pwd"; + value: string; +} +export interface BoolConfigOption extends BaseConfigOption { + type: "bool"; + value: boolean; +} +export interface EnumConfigOption extends BaseConfigOption { + type: "enum"; + possibleValues: Record; + value: string; +} + +export type ConfigMap = { + [key: string]: ConfigOption; +}; + +export enum jobsWidgetOptions { + ALWAYS = "always", + AUTO = "auto", + NEVER = "never" +} + +const configOptions: ConfigMap = { + githubtoken: { + id: "config.githubtoken", + type: "pwd", + value: "" + }, + apipath: { + id: "config.apipath", + type: "str", + value: "/" + }, + jobpollinactive: { + id: "config.jobpollinactive", + type: "num", + value: 15 + }, + jobpollactive: { + id: "config.jobpollactive", + type: "num", + value: 5 + }, + jobswidgetdisplay: { + id: "config.jobswidgetdisplay", + type: "enum", + possibleValues: jobsWidgetOptions, + value: jobsWidgetOptions.AUTO + } +}; + +export default configOptions; diff --git a/src/App.css b/src/App.css new file mode 100644 index 0000000000..66256ae0fc --- /dev/null +++ b/src/App.css @@ -0,0 +1,29 @@ +.App { + background-size: 50%; + background: #1e1e1e url(logo.svg) no-repeat center; + position: absolute; + width: 100%; + top: 0; + bottom: 0; + display: grid; +} + +.App-error { + color: red; + font-size: 150%; + margin: auto; +} + +.App-main { + display: grid; +} + +.Root { + overflow: hidden; + display: grid; + grid-template-rows: 9% auto; +} + +.Root-login { + display: grid; +} diff --git a/src/App.tsx b/src/App.tsx new file mode 100644 index 0000000000..437d2bf573 --- /dev/null +++ b/src/App.tsx @@ -0,0 +1,156 @@ +import "./App.css"; + +import * as React from "react"; +import Container from "react-bootstrap/Container"; +import { hot } from "react-hot-loader/root"; +import { IntlProvider } from "react-intl"; +import { BrowserRouter } from "react-router-dom"; + +import { ErrorCode } from "./ApiClient/models/InternalComms/InternalError"; +import { StatusCode } from "./ApiClient/models/InternalComms/InternalStatus"; +import ServerClient from "./ApiClient/ServerClient"; +import UserClient from "./ApiClient/UserClient"; +import configOptions from "./ApiClient/util/config"; +import LoginHooks from "./ApiClient/util/LoginHooks"; +import AppNavbar from "./components/AppNavbar"; +import ErrorBoundary from "./components/utils/ErrorBoundary"; +import JobsList from "./components/utils/JobsList"; +import Loading from "./components/utils/Loading"; +import IAppProps from "./IAppProps"; +import Router from "./Router"; +import ITranslation from "./translations/ITranslation"; +import ITranslationFactory from "./translations/ITranslationFactory"; +import TranslationFactory from "./translations/TranslationFactory"; +import { getSavedCreds } from "./utils/misc"; + +interface IState { + translation?: ITranslation; + translationError?: string; + loggedIn: boolean; + loading: boolean; + autoLogin: boolean; + passdownCat?: { name: string; key: string }; +} + +class App extends React.Component { + private readonly translationFactory: ITranslationFactory; + + public constructor(props: IAppProps) { + super(props); + + this.translationFactory = this.props.translationFactory || new TranslationFactory(); + + this.state = { + loggedIn: false, + loading: true, + autoLogin: false + }; + } + public async componentDidMount(): Promise { + LoginHooks.on("loginSuccess", () => { + console.log("Logging in"); + + void UserClient.getCurrentUser(); //preload the user, we dont particularly care about the content, just that its preloaded + this.setState({ + loggedIn: true, + loading: false, + autoLogin: false + }); + }); + ServerClient.on("logout", () => { + this.setState({ + loggedIn: false + }); + }); + + await this.loadTranslation(); + await ServerClient.initApi(); + + const [usr, pwd] = getSavedCreds() || [undefined, undefined]; + + const autoLogin = !!(usr && pwd); + if (autoLogin) console.log("Logging in with saved credentials"); + + this.setState({ + loading: false, + autoLogin: autoLogin + }); + if (autoLogin) { + const res = await ServerClient.login({ userName: usr!, password: pwd! }); + if (res.code == StatusCode.ERROR) { + this.setState({ + autoLogin: false + }); + if ( + res.error?.code == ErrorCode.LOGIN_DISABLED || + res.error?.code == ErrorCode.LOGIN_FAIL + ) { + try { + window.localStorage.removeItem("username"); + window.localStorage.removeItem("password"); + } catch (e) { + // eslint-disable-next-line @typescript-eslint/no-empty-function + (() => {})(); //noop + } + } + } + } + } + + public render(): React.ReactNode { + if (this.state.translationError != null) + return

{this.state.translationError}

; + + if (this.state.translation == null) return Loading translations...; + return ( + + + + + + {this.state.loading ? ( + + ) : this.state.autoLogin && !this.state.loggedIn ? ( + + ) : ( + { + this.setState({ + passdownCat: { + name: cat, + key: Math.random().toString() + } + }); + }} + /> + )} + + + + + + ); + } + + private async loadTranslation(): Promise { + console.time("LoadTranslations"); + try { + const translation = await this.translationFactory.loadTranslation(this.props.locale); + this.setState({ + translation + }); + } catch (error) { + this.setState({ + translationError: JSON.stringify(error) || "An unknown error occurred" + }); + + return; + } + console.timeEnd("LoadTranslations"); + } +} + +export default hot(App); diff --git a/src/IAppProps.ts b/src/IAppProps.ts new file mode 100644 index 0000000000..88728bcf5e --- /dev/null +++ b/src/IAppProps.ts @@ -0,0 +1,8 @@ +import ITranslationFactory from "./translations/ITranslationFactory"; + +interface IAppProps { + readonly locale: string; + readonly translationFactory?: ITranslationFactory; +} + +export default IAppProps; diff --git a/src/Router.tsx b/src/Router.tsx new file mode 100644 index 0000000000..984731e49c --- /dev/null +++ b/src/Router.tsx @@ -0,0 +1,129 @@ +import loadable, { LoadableComponent } from "@loadable/component"; +import { Component, ReactNode } from "react"; +import * as React from "react"; +import { FormattedMessage } from "react-intl"; +import { RouteComponentProps } from "react-router"; +import { Route, Switch, withRouter } from "react-router-dom"; + +import AccessDenied from "./components/utils/AccessDenied"; +import ErrorBoundary from "./components/utils/ErrorBoundary"; +import Loading from "./components/utils/Loading"; +import Reload from "./components/utils/Reload"; +import Login from "./components/views/Login"; +import { matchesPath } from "./utils/misc"; +import RouteController from "./utils/RouteController"; +import { AppRoute } from "./utils/routes"; + +interface IState { + loading: boolean; + routes: Array; + components: Map>; +} +interface IProps extends RouteComponentProps { + loggedIn: boolean; + selectCategory: (category: string) => void; +} + +const LoadSpin = (page: string) => ( + + + +); + +const NotFound = loadable(() => import("./components/views/NotFound"), { + fallback: LoadSpin("loading.page.notfound") +}); + +export default withRouter( + class Router extends Component { + public constructor(props: IProps) { + super(props); + + const components = new Map>(); + + const routes = RouteController.getImmediateRoutes(false); + routes.forEach(route => { + components.set( + route.name, + //*should* always be a react component + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + loadable(() => import(`./components/views/${route.file}`), { + fallback: LoadSpin(route.name) + }) + ); + }); + + this.state = { + loading: false, + routes: [], + components: components + }; + } + + public async componentDidMount() { + RouteController.on("refreshAll", routes => { + this.setState({ + routes + }); + }); + + this.setState({ + routes: await RouteController.getRoutes(false) + }); + + this.props.history.listen(location => { + void this.listener(location.pathname); + }); + await this.listener(this.props.location.pathname); + } + + private async listener(location: string) { + const routes = await RouteController.getRoutes(false); + for (const route of routes) { + if (route.category && route.navbarLoose && matchesPath(location, route.route)) { + this.props.selectCategory(route.category); + break; + } + } + } + + public render(): ReactNode { + return ( + + +
+ + {this.state.routes.map(route => { + if (!route.loginless && !this.props.loggedIn) return; + + return ( + { + let Comp; + + if (!route.cachedAuth) { + Comp = AccessDenied; + } else { + Comp = this.state.components.get(route.name)!; + } + + //@ts-expect-error //i cant for the life of me make this shit work so it has to stay like this. + return ; + }} + /> + ); + })} + + {this.props.loggedIn ? : } + + +
+
+
+ ); + } + } +); diff --git a/src/components/AppNavbar.tsx b/src/components/AppNavbar.tsx new file mode 100644 index 0000000000..e4d617dfb0 --- /dev/null +++ b/src/components/AppNavbar.tsx @@ -0,0 +1,422 @@ +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import * as React from "react"; +import Button from "react-bootstrap/Button"; +import Dropdown from "react-bootstrap/Dropdown"; +import Nav from "react-bootstrap/Nav"; +import Navbar from "react-bootstrap/Navbar"; +import { FormattedMessage } from "react-intl"; +import { RouteComponentProps, withRouter } from "react-router"; +import CSSTransition from "react-transition-group/CSSTransition"; + +import { Components } from "../ApiClient/generatedcode/_generated"; +import InternalError, { GenericErrors } from "../ApiClient/models/InternalComms/InternalError"; +import ServerClient, { ServerInfoErrors } from "../ApiClient/ServerClient"; +import UserClient from "../ApiClient/UserClient"; +import LoginHooks from "../ApiClient/util/LoginHooks"; +import { matchesPath } from "../utils/misc"; +import RouteController from "../utils/RouteController"; +import { AppCategories, AppRoute, AppRoutes } from "../utils/routes"; +import ErrorAlert from "./utils/ErrorAlert"; + +interface IProps extends RouteComponentProps { + category?: { + name: string; + key: string; + }; +} + +interface IState { + currentUser?: Components.Schemas.User; + serverInformation?: Components.Schemas.ServerInformation; + userNameError?: InternalError; + serverInfoError?: InternalError; + loggedIn: boolean; + //so we dont actually use the routes but it allows us to make react update the component + routes: AppRoute[]; + categories: AppCategories; + focusedCategory: string; + focusTimer?: number; +} + +export default withRouter( + class AppNavbar extends React.Component { + public constructor(props: IProps) { + super(props); + this.logoutClick = this.logoutClick.bind(this); + this.loadServerInformation = this.loadServerInformation.bind(this); + this.loadUserInformation = this.loadUserInformation.bind(this); + + this.state = { + loggedIn: false, + routes: [], + categories: RouteController.getCategories(), + focusedCategory: this.props.category?.name || "" + }; + } + + //mamamia, memory leaks go brrrrrrrrrrrr dont they? + //well you see, this component never gets normally unloaded so i dont give a fuck! + public async componentDidMount(): Promise { + LoginHooks.addHook(this.loadServerInformation); + ServerClient.on("loadServerInfo", serverInfo => { + this.setState({ + serverInformation: serverInfo.payload + }); + }); + + LoginHooks.addHook(this.loadUserInformation); + UserClient.on("loadUserInfo", user => { + this.setState({ + currentUser: user.payload + }); + }); + + LoginHooks.on("loginSuccess", () => { + this.setState({ + loggedIn: true + }); + }); + ServerClient.on("logout", () => { + this.setState({ + loggedIn: false + }); + }); + + this.setState({ + routes: await RouteController.getRoutes() + }); + + RouteController.on("refresh", routes => { + this.setState({ + routes + }); + }); + } + + public componentDidUpdate(prevProps: Readonly) { + if ( + this.props.category !== undefined && + this.props.category.key !== prevProps.category?.key + ) { + this.setState({ + focusedCategory: this.props.category.name + }); + } + } + + public render(): React.ReactNode { + return ( + + + { + this.props.history.push( + AppRoutes.home.link || AppRoutes.home.route, + { + reload: true + } + ); + }} + className="mr-auto"> + {this.renderVersion()} + + + + + {this.renderUser()} + + + {this.state.serverInfoError ? ( + + ) : ( + "" + )} + {this.state.userNameError ? ( + + ) : ( + "" + )} + + ); + } + + private renderVersion(): React.ReactNode { + if (!this.state.loggedIn) { + return ; + } + if (this.state.serverInfoError) + return ( +
+
+ +
+
+ +
+
+ ); + if (this.state.serverInformation) + return ( + + + {" v"} + {this.state.serverInformation.version!} + + ); + + return "loading"; //TODO: add a spinner; + } + + private renderUser(): React.ReactNode { + if (!this.state.loggedIn) + return ( + + ); + + return ( + + + + + { + this.props.history.push( + AppRoutes.config.link || AppRoutes.config.route, + { reload: true } + ); + }}> + + + {AppRoutes.passwd.cachedAuth ? ( + { + this.props.history.push( + AppRoutes.passwd.link || AppRoutes.passwd.route, + { reload: true } + ); + }}> + + + ) : ( + "" + )} + { + ServerClient.emit("purgeCache"); + }}> + + + { + this.props.history.replace(this.props.location.pathname, { + reload: true + }); + }}> + + + + + + + + + ); + } + + private logoutClick(): void { + ServerClient.logout(); + } + + private async loadServerInformation(): Promise { + const info = await ServerClient.getServerInfo(); + this.setState({ + serverInformation: info.payload, + serverInfoError: info.error + }); + } + + private async loadUserInformation(): Promise { + const response = await UserClient.getCurrentUser(); + this.setState({ + currentUser: response.payload, + userNameError: response.error + }); + } + } +); diff --git a/src/components/utils/AccessDenied.tsx b/src/components/utils/AccessDenied.tsx new file mode 100644 index 0000000000..f5f44495f8 --- /dev/null +++ b/src/components/utils/AccessDenied.tsx @@ -0,0 +1,31 @@ +import React, { ReactNode } from "react"; +import Alert from "react-bootstrap/Alert"; +import Button from "react-bootstrap/Button"; +import { FormattedMessage } from "react-intl"; +import { RouteComponentProps, withRouter } from "react-router"; + +interface IProps extends RouteComponentProps {} + +interface IState { + auth: boolean; +} + +class AccessDenied extends React.Component { + public render(): ReactNode { + const goBack = () => { + this.props.history.goBack(); + }; + return ( + + +
+ + +
+ ); + } +} + +export default withRouter(AccessDenied); diff --git a/src/components/utils/ErrorAlert.tsx b/src/components/utils/ErrorAlert.tsx new file mode 100644 index 0000000000..86a28bec1d --- /dev/null +++ b/src/components/utils/ErrorAlert.tsx @@ -0,0 +1,91 @@ +import ClickToSelect from "@mapbox/react-click-to-select"; +import React, { Component, ReactNode } from "react"; +import Alert from "react-bootstrap/Alert"; +import Button from "react-bootstrap/Button"; +import Modal from "react-bootstrap/Modal"; +import { FormattedMessage } from "react-intl"; + +import InternalError, { + DescType, + ErrorCode +} from "../../ApiClient/models/InternalComms/InternalError"; + +interface IProps { + error: InternalError | undefined; + onClose?: () => void; +} + +interface IState { + popup: boolean; +} + +export default class ErrorAlert extends Component { + public constructor(props: IProps) { + super(props); + this.state = { + popup: false + }; + } + public render(): ReactNode { + if (!this.props.error) { + return ""; + } + + const handleClose = () => this.setState({ popup: false }); + const handleOpen = () => this.setState({ popup: true }); + + return ( + + +
+ + + + + + + + + + + {this.props.error.desc?.type == DescType.LOCALE ? ( + + ) : this.props.error.desc?.desc ? ( + this.props.error.desc.desc + ) : ( + "" + )} +
+ + + {`Control Panel Version: ${VERSION} +Control Panel Mode: ${MODE} +API Version: ${API_VERSION} + +Error Code: ${this.props.error.code} +Error Description: ${this.props.error.desc ? this.props.error.desc.desc : "No description"} + +Additional Information: +${this.props.error.extendedInfo}`.replace(/\\/g, "\\\\")} + + +
+ + + + + + +
+
+ ); + } +} diff --git a/src/components/utils/ErrorBoundary.tsx b/src/components/utils/ErrorBoundary.tsx new file mode 100644 index 0000000000..79315c3898 --- /dev/null +++ b/src/components/utils/ErrorBoundary.tsx @@ -0,0 +1,62 @@ +import React from "react"; +import Card from "react-bootstrap/Card"; +import { FormattedMessage } from "react-intl"; +import { RouteComponentProps, withRouter } from "react-router"; + +interface IProps extends RouteComponentProps {} +interface IState { + error?: Error; + errorInfo?: React.ErrorInfo; +} + +class ErrorBoundary extends React.Component { + public constructor(props: IProps) { + super(props); + this.state = {}; + } + + public componentDidUpdate(prevProps: IProps): void { + if (this.props.location.key !== prevProps.location.key) { + this.setState({ + error: undefined, + errorInfo: undefined + }); + } + } + + public componentDidCatch(error: Error, errorInfo: React.ErrorInfo): void { + this.setState({ + error, + errorInfo + }); + } + + public render(): React.ReactNode { + if (this.state.error) { + return ( + + + + + + + {this.state.error.name}: {this.state.error.message} + + + + {`Control Panel Version: ${VERSION}\nControl Panel Mode: ${MODE}\nStack trace: ${ + this.state.errorInfo?.componentStack || + "Unable to get stack info" + }`} + + + + + ); + } else { + return this.props.children; + } + } +} + +export default withRouter(ErrorBoundary); diff --git a/src/components/utils/JobCard.tsx b/src/components/utils/JobCard.tsx new file mode 100644 index 0000000000..46103f2c12 --- /dev/null +++ b/src/components/utils/JobCard.tsx @@ -0,0 +1,173 @@ +import React, { ReactNode } from "react"; +import OverlayTrigger from "react-bootstrap/OverlayTrigger"; +import ProgressBar from "react-bootstrap/ProgressBar"; +import Toast from "react-bootstrap/Toast"; +import ToastBody from "react-bootstrap/ToastBody"; +import ToastHeader from "react-bootstrap/ToastHeader"; +import Tooltip from "react-bootstrap/Tooltip"; +import { FormattedMessage, FormattedRelativeTime } from "react-intl"; + +import { ErrorCode as TGSErrorCode } from "../../ApiClient/generatedcode/_enums"; +import { CanCancelJob } from "../../ApiClient/util/JobsController"; + +interface IState {} +interface IProps { + job: CanCancelJob; + width?: string; + onClose: (job: CanCancelJob) => void; +} + +export default class JobCard extends React.Component { + public render(): ReactNode { + const job = this.props.job; + const createddate = new Date(job.startedAt!); + const createddiff = (createddate.getTime() - Date.now()) / 1000; + const variant = + job.errorCode !== undefined || job.exceptionDetails !== undefined + ? "danger" + : job.cancelled + ? "warning" + : job.stoppedAt + ? "success" + : "info"; + + return ( + { + this.props.onClose(job); + }}> + + #{job.id}: {job.description} + + + {/*STARTED AT*/} + + + {createddate.toLocaleString()} + + }> + {({ ref, ...triggerHandler }) => ( + }> + + + )} + +
+ {/*CREATED BY*/} + + + + {job.startedBy!.id} + + }> + {({ ref, ...triggerHandler }) => ( + } {...triggerHandler}> + {job.startedBy!.name} + + )} + +
+
+ {/*STOPPED AT*/} + {job.stoppedAt ? ( + + + + {createddate.toLocaleString()} + + }> + {({ ref, ...triggerHandler }) => ( + }> + + + )} + +
+
+ ) : ( + "" + )} + {/*STOPPED BY*/} + {job.cancelledBy ? ( + + + + + {job.startedBy!.id} + + }> + {({ ref, ...triggerHandler }) => ( + } + {...triggerHandler}> + {job.cancelledBy!.name} + + )} + +
+
+ ) : ( + "" + )} + {(job.stoppedAt || job.cancelledBy) && + (job.errorCode !== undefined || job.exceptionDetails !== undefined) ? ( +
+ ) : ( + "" + )} + {/*ERROR*/} + {job.errorCode !== undefined || job.exceptionDetails !== undefined ? ( + + + ( + {job.errorCode !== undefined + ? TGSErrorCode[job.errorCode] + : "NoCode"} + ): {job.exceptionDetails} + +
+
+ ) : ( + "" + )} + +
+
+ ); + } +} diff --git a/src/components/utils/JobsList.tsx b/src/components/utils/JobsList.tsx new file mode 100644 index 0000000000..1c0a9d782a --- /dev/null +++ b/src/components/utils/JobsList.tsx @@ -0,0 +1,187 @@ +import React, { ReactNode } from "react"; +import { FormattedMessage } from "react-intl"; +import { Rnd } from "react-rnd"; + +import InternalError, { ErrorCode } from "../../ApiClient/models/InternalComms/InternalError"; +import configOptions, { jobsWidgetOptions } from "../../ApiClient/util/config"; +import JobsController, { CanCancelJob } from "../../ApiClient/util/JobsController"; +import { AppCategories } from "../../utils/routes"; +import ErrorAlert from "./ErrorAlert"; +import JobCard from "./JobCard"; +import Loading from "./Loading"; + +interface IProps { + width?: string; + widget: boolean; +} + +interface IState { + jobs: Map; + errors: InternalError[]; + ownerrors: Array | undefined>; + loading: boolean; +} + +export default class JobsList extends React.Component { + public static defaultProps = { + widget: true + }; + + private widgetRef = React.createRef(); + + public constructor(props: IProps) { + super(props); + + this.handleUpdate = this.handleUpdate.bind(this); + this.onCancelorClose = this.onCancelorClose.bind(this); + + this.state = { + jobs: new Map(), + errors: [], + ownerrors: [], + loading: true + }; + } + + private addError(error: InternalError): void { + this.setState(prevState => { + const ownerrors = Array.from(prevState.ownerrors); + ownerrors.push(error); + if (this.widgetRef.current) { + this.widgetRef.current.scrollTop = 0; + } + return { + ownerrors + }; + }); + } + + public componentDidMount(): void { + JobsController.restartLoop(); + JobsController.on("jobsLoaded", this.handleUpdate); + } + + public componentWillUnmount(): void { + JobsController.removeListener("jobsLoaded", this.handleUpdate); + } + + public handleUpdate(): void { + this.setState({ + jobs: JobsController.jobs, + errors: JobsController.errors, + loading: false + }); + } + + private async onCancelorClose(job: CanCancelJob) { + const cancelling = !job.stoppedAt; + const status = await JobsController.cancelOrClear(job.id, error => this.addError(error)); + + if (!status) { + return; + } + //Jobs changed, might as well refresh + if (cancelling) { + JobsController.fastmode = 5; + } else { + JobsController.restartLoop(); + } + } + + public render(): ReactNode { + if (AppCategories.instance.data?.instanceid === undefined) return ""; + + if (!this.props.widget) return this.nested(); + return ( +
+ +
+
+ +
+ {this.nested()} +
+
+
+ ); + } + + private nested(): ReactNode { + return ( +
+ {this.state.loading ? : ""} + {this.state.ownerrors.map((err, index) => { + if (!err) return; + return ( + + this.setState(prev => { + const newarr = Array.from(prev.ownerrors); + newarr[index] = undefined; + return { + ownerrors: newarr + }; + }) + } + /> + ); + })} + {this.state.errors.map((error, index) => { + return ( +
+ +
+ ); + })} + {Array.from(this.state.jobs, ([, job]) => job) + .sort((a, b) => b.id - a.id) + .map(job => ( + + ))} +
+ ); + } +} diff --git a/src/components/utils/Loading.tsx b/src/components/utils/Loading.tsx new file mode 100644 index 0000000000..8ee1a04b07 --- /dev/null +++ b/src/components/utils/Loading.tsx @@ -0,0 +1,68 @@ +import React, { ReactNode } from "react"; +import Spinner, { SpinnerProps } from "react-bootstrap/Spinner"; +import { FormattedMessage } from "react-intl"; +import CSSTransition from "react-transition-group/CSSTransition"; +import TransitionGroup from "react-transition-group/TransitionGroup"; + +type IProps = SpinnerProps & { + animation: "border" | "grow"; + center: boolean; + width: number; + widthUnit: string; + className?: string; + text?: string; +}; + +interface IState {} + +export default class Loading extends React.Component { + public static defaultProps = { + animation: "border", + width: "50", + widthUnit: "vmin", + center: true + }; + public constructor(props: IProps) { + super(props); + } + + public render(): ReactNode { + const { + variant, + animation, + center, + className, + width, + widthUnit, + text, + children, + ...otherprops + } = this.props; + const styles: React.CSSProperties = { + width: `${width}${widthUnit}`, + height: `${width}${widthUnit}` + } as React.CSSProperties; + return ( + + { + node.addEventListener("transitionend", done, false); + }}> +
+ + {text ? : ""} + {children} +
+
+
+ ); + } +} diff --git a/src/components/utils/Reload.tsx b/src/components/utils/Reload.tsx new file mode 100644 index 0000000000..f9af4fe8de --- /dev/null +++ b/src/components/utils/Reload.tsx @@ -0,0 +1,46 @@ +import { Component, ReactNode } from "react"; +import { RouteComponentProps, withRouter } from "react-router"; + +interface IProps + extends RouteComponentProps< + Record, + { + statusCode?: number; + }, + { reload?: boolean } + > {} +interface IState { + clear: boolean; +} + +class Reload extends Component { + public constructor(props: IProps) { + super(props); + this.state = { + clear: false + }; + } + public componentDidUpdate(prevProps: IProps): void { + if (this.state.clear) { + this.setState({ + clear: false + }); + return; + } + if ( + prevProps.match.path == this.props.match.path && + prevProps.location.key != this.props.location.key && + this.props.location.state?.reload + ) { + this.setState({ + clear: true + }); + } + } + + public render(): ReactNode { + return this.state.clear ? "" : this.props.children; + } +} + +export default withRouter(Reload); diff --git a/src/components/views/Admin/Logs.tsx b/src/components/views/Admin/Logs.tsx new file mode 100644 index 0000000000..c8e4ac4441 --- /dev/null +++ b/src/components/views/Admin/Logs.tsx @@ -0,0 +1,278 @@ +import React, { Component } from "react"; +import Button from "react-bootstrap/Button"; +import OverlayTrigger from "react-bootstrap/OverlayTrigger"; +import Table from "react-bootstrap/Table"; +import Tooltip from "react-bootstrap/Tooltip"; +import { FormattedMessage, FormattedRelativeTime } from "react-intl"; +import { RouteComponentProps, withRouter } from "react-router"; +import { Link } from "react-router-dom"; + +import AdminClient from "../../../ApiClient/AdminClient"; +import { Components } from "../../../ApiClient/generatedcode/_generated"; +import InternalError, { ErrorCode } from "../../../ApiClient/models/InternalComms/InternalError"; +import { StatusCode } from "../../../ApiClient/models/InternalComms/InternalStatus"; +import { download } from "../../../utils/misc"; +import { AppRoutes } from "../../../utils/routes"; +import ErrorAlert from "../../utils/ErrorAlert"; +import Loading from "../../utils/Loading"; + +interface IProps extends RouteComponentProps<{ name: string | undefined }> {} + +interface LogEntry { + time: string; + content: string; +} + +interface Log { + logFile: Components.Schemas.LogFile; + entries: LogEntry[]; +} + +interface IState { + logs: Components.Schemas.LogFile[]; + viewedLog?: Log; + errors: Array | undefined>; + loading: boolean; +} + +export default withRouter( + class Logs extends Component { + public constructor(props: IProps) { + super(props); + + this.state = { + errors: [], + loading: true, + logs: [] + }; + } + public async componentDidMount(): Promise { + const param = this.props.match.params.name; + if (param) { + const res = await AdminClient.getLog(param); + + switch (res.code) { + case StatusCode.OK: { + const regex = RegExp( + /(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{7}-\d{2}:\d{2}) {2}(.*?)(?=(?:\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{7}-\d{2}:\d{2}))/, + "gs" + ); + let match; + const entries: LogEntry[] = []; + while ((match = regex.exec(atob(res.payload!.content!))) !== null) { + entries.push({ + time: match[1], + content: match[2] + }); + } + this.setState({ + viewedLog: { + logFile: res.payload!, + entries: entries + } + }); + break; + } + case StatusCode.ERROR: { + this.addError(res.error!); + break; + } + } + } + const response = await AdminClient.getLogs(); + + switch (response.code) { + case StatusCode.OK: { + this.setState({ + logs: response.payload! + }); + break; + } + case StatusCode.ERROR: { + this.addError(response.error!); + break; + } + } + this.setState({ + loading: false + }); + } + + private addError(error: InternalError): void { + this.setState(prevState => { + const errors = Array.from(prevState.errors); + errors.push(error); + return { + errors + }; + }); + } + + private async downloadLog(name: string): Promise { + const res = await AdminClient.getLog(name); + switch (res.code) { + case StatusCode.OK: { + download(name, atob(res.payload!.content!)); + break; + } + case StatusCode.ERROR: { + this.addError(res.error!); + break; + } + } + } + + public render(): React.ReactNode { + return ( +
+ {this.state.errors.map((err, index) => { + if (!err) return; + return ( + + this.setState(prev => { + const newarr = Array.from(prev.errors); + newarr[index] = undefined; + return { + errors: newarr + }; + }) + } + /> + ); + })} + {this.state.loading ? ( + + ) : this.props.match.params.name && this.state.viewedLog ? ( + +

{this.props.match.params.name}

+ + +
+ + + + + + + {this.state.viewedLog.entries.map(value => { + return ( + + + + + ); + })} + +
+ + + +
{value.time} +
{value.content}
+
+
+ ) : ( + + + + + + + + + + + {this.state.logs.map((value, index) => { + const logdate = new Date(value.lastModified); + const logdiff = (logdate.getTime() - Date.now()) / 1000; + + return ( + //yes hello this shouldnt be nullable apparently + + + + + {logdate.toLocaleString()} + + }> + {({ ref, ...triggerHandler }) => ( + + )} + + + + ); + })} + +
# + + + + + +
{index}{value.name} + }> + + + + + +
+ )} +
+ ); + } + } +); diff --git a/src/components/views/Admin/Update.tsx b/src/components/views/Admin/Update.tsx new file mode 100644 index 0000000000..70c3db54c6 --- /dev/null +++ b/src/components/views/Admin/Update.tsx @@ -0,0 +1,345 @@ +import React, { ChangeEvent, ReactNode } from "react"; +import Button from "react-bootstrap/Button"; +import Col from "react-bootstrap/Col"; +import FormControl from "react-bootstrap/FormControl"; +import InputGroup from "react-bootstrap/InputGroup"; +import OverlayTrigger from "react-bootstrap/OverlayTrigger"; +import Tooltip from "react-bootstrap/Tooltip"; +import { FormattedMessage } from "react-intl"; +import ReactMarkdown from "react-markdown"; +import { RouteComponentProps, withRouter } from "react-router-dom"; + +import AdminClient from "../../../ApiClient/AdminClient"; +import InternalError, { ErrorCode } from "../../../ApiClient/models/InternalComms/InternalError"; +import { StatusCode } from "../../../ApiClient/models/InternalComms/InternalStatus"; +import ServerClient from "../../../ApiClient/ServerClient"; +import GithubClient, { TGSVersion } from "../../../utils/GithubClient"; +import { AppRoutes } from "../../../utils/routes"; +import ErrorAlert from "../../utils/ErrorAlert"; +import Loading from "../../utils/Loading"; + +interface IProps + extends RouteComponentProps<{ + all: string; + }> {} +interface IState { + versions: TGSVersion[]; + errors: Array | undefined>; + loading: boolean; + //option is the numerical representation of the version + selectedOption?: string; + //this is the actual version + selectedVersion?: TGSVersion; + //timer used to delay the user on the release notes page + timer?: number | null; + //seconds left for the release notes page + secondsLeft?: number | null; + //redirect to home page + updating?: boolean; + //manual entry +} + +export default withRouter( + class Update extends React.Component { + public constructor(props: IProps) { + super(props); + + this.loadNotes = this.loadNotes.bind(this); + this.updateServer = this.updateServer.bind(this); + + this.state = { + versions: [], + errors: [], + loading: true + }; + } + + public async componentDidMount(): Promise { + const tasks = []; + tasks.push(this.loadVersions()); + + await Promise.all(tasks); + this.setState({ + loading: false + }); + } + + public componentWillUnmount(): void { + if (this.state.timer) { + window.clearInterval(this.state.timer); + } + } + + private addError(error: InternalError): void { + this.setState(prevState => { + const errors = Array.from(prevState.errors); + errors.push(error); + return { + errors + }; + }); + } + + private async loadVersions(): Promise { + const adminInfo = await AdminClient.getAdminInfo(); + + switch (adminInfo.code) { + case StatusCode.ERROR: { + return this.addError(adminInfo.error!); + } + case StatusCode.OK: { + const url = adminInfo.payload!.trackedRepositoryUrl!; + const matcher = /https?:\/\/(github\.com)\/(.*?)\/(.*)/; + const results = matcher.exec(url); + + if (!results) { + return this.addError( + new InternalError(ErrorCode.APP_FAIL, { + jsError: Error(`Unknown repository url format: ${url}`) + }) + ); + } + + if (results[1] !== "github.com") { + this.setState({ + versions: [ + { + body: "Updates unavailable to non github repos", + version: "Updates unavailable to non github repos", + current: true, + old: true + } + ] + }); + return; + } + + const serverInfo = await ServerClient.getServerInfo(); + switch (serverInfo.code) { + case StatusCode.ERROR: { + return this.addError(serverInfo.error!); + } + case StatusCode.OK: { + const versionInfo = await GithubClient.getVersions({ + owner: results[2], + repo: results[3], + current: serverInfo.payload!.version!, + all: !!this.props.match.params.all + }); + console.log("Version info: ", versionInfo); + switch (versionInfo.code) { + case StatusCode.ERROR: { + return this.addError(adminInfo.error!); + } + case StatusCode.OK: { + this.setState({ + versions: versionInfo.payload! + }); + } + } + } + } + } + } + } + + private loadNotes(): void { + for (const version of this.state.versions) { + if (version.version !== this.state.selectedOption) continue; + + const timer = window.setInterval(() => { + this.setState(prevState => { + if (prevState.secondsLeft === undefined || prevState.secondsLeft === null) + return prevState; + //clear the timer if we are ticking the last tick + if (prevState.secondsLeft === 1) { + window.clearInterval(prevState.timer!); + return { + timer: null, + secondsLeft: null + } as IState; + } + + return { + secondsLeft: prevState.secondsLeft - 1 + } as IState; + }); + }, 1000); + + this.setState({ + selectedVersion: version, + timer: timer, + secondsLeft: 10 + }); + return; + } + } + + private async updateServer(): Promise { + if (!this.state.selectedOption) { + console.error("Attempted to update server to a no version"); + this.setState({ + selectedVersion: undefined + }); + return; + } + const response = await AdminClient.updateServer(this.state.selectedOption); + + switch (response.code) { + case StatusCode.ERROR: { + this.addError(response.error!); + break; + } + case StatusCode.OK: { + ServerClient.autoLogin = false; + // i need that timer to be async + // eslint-disable-next-line @typescript-eslint/no-misused-promises + window.setInterval(async () => { + const response = await ServerClient.getServerInfo(undefined, true); + switch (response.code) { + //we wait until we get an error which means either it rebooted and our creds are bullshit, or we rebooted and the api is different + //in both cases, we should reboot + case StatusCode.ERROR: { + window.location.reload(); + } + } + }, 2000); + this.setState({ + updating: true + }); + } + } + } + + public render(): ReactNode { + if (this.state.updating) { + return ; + } + if (this.state.loading) { + return ; + } + const handleChange = (changeEvent: ChangeEvent) => { + this.setState({ + selectedOption: changeEvent.target.value + }); + }; + + const timing = typeof this.state.secondsLeft === "number"; + return ( + +
+ {this.state.errors.map((err, index) => { + if (!err) return; + return ( + + this.setState(prev => { + const newarr = Array.from(prev.errors); + newarr[index] = undefined; + return { + errors: newarr + }; + }) + } + /> + ); + })} +
+ {this.state.selectedVersion ? ( + +
+ + + + + } + show={timing}> + + +

+ +

+
+
+ +
+ ) : ( +
+

+ +

+ + {this.state.versions.map((version, index) => { + return ( + + + + + + {version.version} + {version.current ? ( + + ) : ( + "" + )} + {index == 0 ? ( + + ) : ( + "" + )} + + + ); + })} + +
+ + +
+ )} +
+ ); + } + } +); diff --git a/src/components/views/Administration.tsx b/src/components/views/Administration.tsx new file mode 100644 index 0000000000..fa4d73db56 --- /dev/null +++ b/src/components/views/Administration.tsx @@ -0,0 +1,280 @@ +import { faLinux } from "@fortawesome/free-brands-svg-icons/faLinux"; +import { faWindows } from "@fortawesome/free-brands-svg-icons/faWindows"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import React, { ReactNode } from "react"; +import Button from "react-bootstrap/Button"; +import Modal from "react-bootstrap/Modal"; +import { FormattedMessage } from "react-intl"; +import { RouteComponentProps } from "react-router"; +import { withRouter } from "react-router-dom"; + +import AdminClient from "../../ApiClient/AdminClient"; +import { AdministrationRights } from "../../ApiClient/generatedcode/_enums"; +import { Components } from "../../ApiClient/generatedcode/_generated"; +import InternalError, { ErrorCode } from "../../ApiClient/models/InternalComms/InternalError"; +import { StatusCode } from "../../ApiClient/models/InternalComms/InternalStatus"; +import ServerClient from "../../ApiClient/ServerClient"; +import UserClient from "../../ApiClient/UserClient"; +import { AppRoutes } from "../../utils/routes"; +import ErrorAlert from "../utils/ErrorAlert"; +import Loading from "../utils/Loading"; + +interface IProps extends RouteComponentProps {} +interface IState { + adminInfo?: Components.Schemas.Administration; + serverInfo?: Components.Schemas.ServerInformation; + error?: InternalError; + busy: boolean; + canReboot: boolean; + canUpdate: boolean; + canLogs: boolean; + showRebootModal?: boolean; +} + +export default withRouter( + class Administration extends React.Component { + public constructor(props: IProps) { + super(props); + this.restart = this.restart.bind(this); + + this.state = { + busy: false, + canReboot: false, + canUpdate: false, + canLogs: false + }; + } + + public async componentDidMount(): Promise { + this.setState({ + busy: true + }); + const tasks = []; + + console.time("DataLoad"); + tasks.push(this.loadAdminInfo()); + tasks.push(this.loadServerInfo()); + tasks.push(this.checkRebootRights()); + tasks.push(this.checkUpdateRights()); + tasks.push(this.checkLogsRights()); + + await Promise.all(tasks); + console.timeEnd("DataLoad"); + this.setState({ + busy: false + }); + } + + private async loadServerInfo() { + console.time("ServerLoad"); + const response = await ServerClient.getServerInfo(); + switch (response.code) { + case StatusCode.ERROR: { + this.setState({ + error: response.error + }); + break; + } + case StatusCode.OK: { + this.setState({ + serverInfo: response.payload + }); + break; + } + } + console.timeEnd("ServerLoad"); + } + + private async loadAdminInfo() { + console.time("AdminLoad"); + const response = await AdminClient.getAdminInfo(); + switch (response.code) { + case StatusCode.ERROR: { + this.setState({ + error: response.error + }); + break; + } + case StatusCode.OK: { + this.setState({ + adminInfo: response.payload + }); + break; + } + } + console.timeEnd("AdminLoad"); + } + + private async checkRebootRights() { + const response = await UserClient.getCurrentUser(); + + if (response.code === StatusCode.OK) { + this.setState({ + canReboot: !!( + response.payload!.administrationRights! & AdministrationRights.RestartHost + ) + }); + } + } + + private async checkUpdateRights() { + const response = await UserClient.getCurrentUser(); + + if (response.code === StatusCode.OK) { + this.setState({ + canUpdate: !!( + response.payload!.administrationRights! & AdministrationRights.ChangeVersion + ) + }); + } + } + + private async checkLogsRights() { + const response = await UserClient.getCurrentUser(); + + if (response.code === StatusCode.OK) { + this.setState({ + canLogs: !!( + response.payload!.administrationRights! & AdministrationRights.DownloadLogs + ) + }); + } + } + + private async restart() { + this.setState({ + showRebootModal: false, + busy: true + }); + console.time("Reboot"); + const response = await AdminClient.restartServer(); + switch (response.code) { + case StatusCode.ERROR: { + this.setState({ + error: response.error + }); + break; + } + case StatusCode.OK: { + window.location.reload(); + } + } + this.setState({ + busy: false + }); + console.timeEnd("Reboot"); + } + + public render(): ReactNode { + if (this.state.busy) { + return ; + } + + const handleClose = () => this.setState({ showRebootModal: false }); + const handleOpen = () => this.setState({ showRebootModal: true }); + + return ( + + this.setState({ error: undefined })} + /> + {this.state.adminInfo && this.state.serverInfo ? ( +
+

+ + +

+
+ + + {this.state.adminInfo.trackedRepositoryUrl!} + +
+

+ + + {this.state.serverInfo.version!} + +

+

+ + + {this.state.adminInfo.latestVersion!} + +

+
+ + + + + + + + + + + + + + + + + +
+ ) : ( + "" + )} +
+ ); + } + } +); diff --git a/src/components/views/ChangePassword.tsx b/src/components/views/ChangePassword.tsx new file mode 100644 index 0000000000..4723c8d73a --- /dev/null +++ b/src/components/views/ChangePassword.tsx @@ -0,0 +1,261 @@ +import React, { ChangeEvent, FormEvent } from "react"; +import Button from "react-bootstrap/Button"; +import Col from "react-bootstrap/Col"; +import Form from "react-bootstrap/Form"; +import { FormattedMessage } from "react-intl"; +import { RouteComponentProps } from "react-router"; +import { withRouter } from "react-router-dom"; + +import { Components } from "../../ApiClient/generatedcode/_generated"; +import InternalError, { ErrorCode } from "../../ApiClient/models/InternalComms/InternalError"; +import { StatusCode } from "../../ApiClient/models/InternalComms/InternalStatus"; +import ServerClient from "../../ApiClient/ServerClient"; +import UserClient from "../../ApiClient/UserClient"; +import CredentialsProvider from "../../ApiClient/util/CredentialsProvider"; +import { getSavedCreds } from "../../utils/misc"; +import ErrorAlert from "../utils/ErrorAlert"; +import Loading from "../utils/Loading"; + +interface IProps extends RouteComponentProps<{ id: string }> {} + +interface IState { + errors: Array | undefined>; + password1: string; + password2: string; + matchError?: boolean; + lengthError?: boolean; + serverInfo?: Components.Schemas.ServerInformation; + loading: boolean; + pwdload?: boolean; + user?: Components.Schemas.User; + currentUser?: boolean; +} + +export default withRouter( + class ChangePassword extends React.Component { + public constructor(props: IProps) { + super(props); + + this.state = { + errors: [], + password1: "", + password2: "", + loading: true + }; + + this.submit = this.submit.bind(this); + } + + public async componentDidMount(): Promise { + const res = await ServerClient.getServerInfo(); + + switch (res.code) { + case StatusCode.ERROR: { + this.addError(res.error!); + break; + } + case StatusCode.OK: { + this.setState({ + serverInfo: res.payload! + }); + break; + } + } + + let id: number | undefined = undefined; + const cuser = await UserClient.getCurrentUser(); + if (cuser.code == StatusCode.OK) { + if (this.props.match.params.id) { + id = parseInt(this.props.match.params.id); + } else { + id = cuser.payload!.id!; + } + if (id === cuser.payload!.id!) { + this.setState({ + currentUser: true + }); + } + } else { + this.setState({ + loading: false + }); + return this.addError(cuser.error!); + } + + const user = await UserClient.getUser(id); + if (user.code == StatusCode.OK) { + this.setState({ + user: user.payload! + }); + } else { + this.addError(user.error!); + } + + this.setState({ + loading: false + }); + } + + private addError(error: InternalError): void { + this.setState(prevState => { + const errors = Array.from(prevState.errors); + errors.push(error); + return { + errors + }; + }); + } + + // noinspection DuplicatedCode + private async submit(event: FormEvent): Promise { + event.preventDefault(); + let err = false; + if (this.state.password1.length < this.state.serverInfo!.minimumPasswordLength) { + err = true; + this.setState({ + lengthError: true + }); + } else { + this.setState({ + lengthError: false + }); + } + if (this.state.password2 !== this.state.password1) { + err = true; + this.setState({ + matchError: true + }); + } else { + this.setState({ + matchError: false + }); + } + if (err) return; + + this.setState({ + pwdload: true + }); + + const res = await UserClient.editUser(this.state.user!.id!, { + password: this.state.password1 + }); + switch (res.code) { + case StatusCode.OK: { + if (this.state.currentUser) { + const [usr, pwd] = getSavedCreds() || [undefined, undefined]; + // noinspection ES6MissingAwait //we just dont care about what happens, it can fail or succeed + void ServerClient.login( + { + userName: CredentialsProvider.credentials!.userName, + password: this.state.password1 + }, + !!(usr && pwd) + ); + } + this.props.history.goBack(); + break; + } + case StatusCode.ERROR: { + this.addError(res.error!); + //we only unset it here because its going to get redirected anyways + this.setState({ + pwdload: false + }); + break; + } + } + } + + public render(): React.ReactNode { + if (this.state.loading) { + return ; + } + if (this.state.pwdload) { + return ; + } + + const handlePwd1Input = (event: ChangeEvent) => + this.setState({ password1: event.target.value }); + const handlePwd2Input = (event: ChangeEvent) => + this.setState({ password2: event.target.value }); + + return ( +
+ + {this.state.errors.map((err, index) => { + if (!err) return; + return ( + + this.setState(prev => { + const newarr = Array.from(prev.errors); + newarr[index] = undefined; + return { + errors: newarr + }; + }) + } + /> + ); + })} + {this.state.user ? ( + +

+ + {this.state.user.name}({this.state.user.id!}) +

+
+ + + + + + + {this.state.lengthError ? ( + + + {this.state.serverInfo!.minimumPasswordLength} + + ) : ( + "" + )} + + + + + + + + + {this.state.matchError ? ( + + ) : ( + "" + )} + + + +
+ ) : ( + "" + )} + + + ); + } + } +); diff --git a/src/components/views/Configuration.tsx b/src/components/views/Configuration.tsx new file mode 100644 index 0000000000..4fd241f5cf --- /dev/null +++ b/src/components/views/Configuration.tsx @@ -0,0 +1,207 @@ +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import React, { ReactNode } from "react"; +import Button from "react-bootstrap/Button"; +import Form from "react-bootstrap/Form"; +import FormControl from "react-bootstrap/FormControl"; +import InputGroup from "react-bootstrap/InputGroup"; +import OverlayTrigger from "react-bootstrap/OverlayTrigger"; +import Tooltip from "react-bootstrap/Tooltip"; +import { FormattedMessage } from "react-intl"; + +import configOptions, { ConfigMap, ConfigOption } from "../../ApiClient/util/config"; +import ConfigController from "../../ApiClient/util/ConfigController"; + +interface IProps {} +interface IState { + values: { [key: string]: ConfigOption }; + //if youre adding some state, make sure it doesnt get sent to be saved +} + +export default class Configuration extends React.Component { + public constructor(props: IProps) { + super(props); + this.save = this.save.bind(this); + + this.state = { + values: {} + }; + } + + private save() { + ConfigController.saveconfig(this.state.values); + this.setState({ + values: {} + }); + } + + public render(): ReactNode { + const config = Object.entries(configOptions); + + return ( + + {config.map(([key, currentVal]) => { + //const persistRef = React.createRef(); + const valueRef = React.createRef(); + const enumRef = React.createRef(); + const value = this.state.values[key] || currentVal; + const reset = () => { + this.setState((prevState: IState) => { + const filtered: ConfigMap = {}; + for (const [innerkey, val] of Object.entries(prevState.values)) { + if (innerkey === key) continue; + filtered[innerkey] = val; + } + return { + values: filtered + }; + }); + }; + + const updateValue = () => { + const obj: ConfigOption = this.state.values[key] || { + ...currentVal + }; + //obj.persist = persistRef.current!.checked; + obj.value = + value.type === "enum" + ? enumRef.current!.selectedOptions[0].value + : value.type === "bool" + ? valueRef.current!.checked + : valueRef.current!.value; + this.setState(prevstate => { + return { + values: { + ...prevstate.values, + [key]: obj + } + }; + }); + }; + + const tooltip = (innerid: string) => { + return ( + + + + ); + }; + + const random = Math.random().toString(); + + return ( + + + {/* + } + type="switch" + custom + onChange={updateValue} + ref={persistRef} + checked={value.persist} + value={''} + /> + */} + + {({ ref, ...triggerHandler }) => ( + + +
}> + +
+
+ )} +
+
+
+ {value.type === "enum" ? ( + + ) : value.type === "bool" ? ( + + ) : ( + + )} + {this.state.values[key] ? ( + + + + + + ) : ( + "" + )} +
+
+ ); + })} + +
+ +
+ +
+
+ ); + } +} diff --git a/src/components/views/Home.tsx b/src/components/views/Home.tsx new file mode 100644 index 0000000000..f1b19926c4 --- /dev/null +++ b/src/components/views/Home.tsx @@ -0,0 +1,85 @@ +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import * as React from "react"; +import Card from "react-bootstrap/Card"; +import Col from "react-bootstrap/Col"; +import Row from "react-bootstrap/Row"; +import { FormattedMessage } from "react-intl"; +import { Link } from "react-router-dom"; + +import RouteController from "../../utils/RouteController"; +import { AppRoute, AppRoutes } from "../../utils/routes"; + +interface IProps {} +interface IState { + routes: Array; +} + +export default class Home extends React.Component { + public static readonly Route: string = "/"; + + public constructor(props: IProps) { + super(props); + this.setRoutes = this.setRoutes.bind(this); + + this.state = { + routes: [] + }; + } + + private setRoutes(routes: AppRoute[]) { + this.setState({ routes }); + } + + public async componentDidMount(): Promise { + this.setState({ + routes: await RouteController.getRoutes(false) + }); + RouteController.on("refreshAll", this.setRoutes); + } + + public componentWillUnmount(): void { + RouteController.removeListener("refreshAll", this.setRoutes); + } + + public render(): React.ReactNode { + return ( + + {this.state.routes.map(val => { + //this means it shouldnt be displayed on the home screen + if (!val.homeIcon) return; + + if (val === AppRoutes.home) return; + + return ( + + + + + + + + + + + ); + })} + + ); + } +} diff --git a/src/components/views/Instance/Jobs.tsx b/src/components/views/Instance/Jobs.tsx new file mode 100644 index 0000000000..afbc798e75 --- /dev/null +++ b/src/components/views/Instance/Jobs.tsx @@ -0,0 +1,31 @@ +import React, { ReactNode } from "react"; +import { FormattedMessage } from "react-intl"; +import { RouteComponentProps, withRouter } from "react-router-dom"; + +import { AppCategories } from "../../../utils/routes"; +import JobsList from "../../utils/JobsList"; + +interface IProps extends RouteComponentProps<{ id: string }> {} +interface IState {} + +export default withRouter( + class Jobs extends React.Component { + public constructor(props: IProps) { + super(props); + + if (!AppCategories.instance.data) AppCategories.instance.data = {}; + AppCategories.instance.data.instanceid = props.match.params.id; + } + + public render(): ReactNode { + return ( +
+

+ +

+ +
+ ); + } + } +); diff --git a/src/components/views/Instance/List.tsx b/src/components/views/Instance/List.tsx new file mode 100644 index 0000000000..33180cac84 --- /dev/null +++ b/src/components/views/Instance/List.tsx @@ -0,0 +1,298 @@ +import React, { ReactNode } from "react"; +import Badge from "react-bootstrap/Badge"; +import Button from "react-bootstrap/Button"; +import Table from "react-bootstrap/Table"; +import { FormattedMessage } from "react-intl"; +import { RouteComponentProps, withRouter } from "react-router-dom"; + +import { InstanceManagerRights } from "../../../ApiClient/generatedcode/_enums"; +import { Components } from "../../../ApiClient/generatedcode/_generated"; +import InstanceClient from "../../../ApiClient/InstanceClient"; +import InstanceUserClient from "../../../ApiClient/InstanceUserClient"; +import InternalError, { ErrorCode } from "../../../ApiClient/models/InternalComms/InternalError"; +import { StatusCode } from "../../../ApiClient/models/InternalComms/InternalStatus"; +import UserClient from "../../../ApiClient/UserClient"; +import { AppCategories, AppRoutes } from "../../../utils/routes"; +import ErrorAlert from "../../utils/ErrorAlert"; +import Loading from "../../utils/Loading"; + +type Instance = Components.Schemas.Instance & { + canAccess: boolean; +}; + +interface IState { + instances: Instance[]; + loading?: boolean; + errors: Array | undefined>; + //isnt directly used but is used to make react rerender when the selected insance is changed + instanceid?: number; + canOnline: boolean; +} +interface IProps extends RouteComponentProps {} + +export default withRouter( + class InstanceList extends React.Component { + public constructor(props: IProps) { + super(props); + + this.setOnline = this.setOnline.bind(this); + + const actualid = + AppCategories.instance.data?.instanceid !== undefined + ? parseInt(AppCategories.instance.data.instanceid as string) + : undefined; + + this.state = { + loading: true, + instances: [], + errors: [], + instanceid: actualid, + canOnline: false + }; + } + + private addError(error: InternalError): void { + this.setState(prevState => { + const errors = Array.from(prevState.errors); + errors.push(error); + return { + errors + }; + }); + } + + private async loadInstances(): Promise { + const instancelist = await InstanceClient.listInstances(); + const modifiedlist: Array = []; + + const work: Array> = []; + for (const instance of instancelist.payload!) { + const modifiedinstance = instance as Instance; + if (instance.online) { + work.push( + InstanceUserClient.getCurrentInstanceUser(instance.id).then( + instanceuser => { + if (instanceuser.code == StatusCode.OK) { + modifiedinstance.canAccess = true; + } else { + modifiedinstance.canAccess = false; + if (instanceuser.error!.code !== ErrorCode.HTTP_ACCESS_DENIED) { + this.addError(instanceuser.error!); + } + } + modifiedlist.push(modifiedinstance); + } + ) + ); + } else { + modifiedinstance.canAccess = false; + modifiedlist.push(modifiedinstance); + } + } + + await Promise.all(work); + + if (instancelist.code == StatusCode.OK) { + this.setState({ + instances: modifiedlist.sort((a, b) => a.id - b.id) + }); + } else { + this.addError(instancelist.error!); + } + } + + public async componentDidMount(): Promise { + await this.loadInstances(); + + await UserClient.getCurrentUser().then(userinfo => { + if (userinfo.code === StatusCode.OK) { + this.setState({ + canOnline: !!( + userinfo.payload!.instanceManagerRights! & + InstanceManagerRights.SetOnline + ) + }); + } else { + this.addError(userinfo.error!); + } + }); + + this.setState({ + loading: false + }); + } + + private async setOnline(instance: Instance) { + //Yes this is desynchronized and will use the last known state of the instance + // to determine what state we should put it in, thats intentional, if the user clicks Set Online, it needs + // to be online, no matter what it previously was + const desiredState = !instance.online; + const instanceedit = await InstanceClient.editInstance(({ + id: instance.id, + online: desiredState + } as unknown) as Components.Schemas.Instance); + if (instanceedit.code === StatusCode.OK) { + await this.loadInstances(); + } else { + this.addError(instanceedit.error!); + } + } + + public render(): ReactNode { + if (this.state.loading) { + return ; + } + + return ( +
+ {this.state.errors.map((err, index) => { + if (!err) return; + return ( + + this.setState(prev => { + const newarr = Array.from(prev.errors); + newarr[index] = undefined; + return { + errors: newarr + }; + }) + } + /> + ); + })} +

+ +

+ + + + + + + + + + + + + {this.state.instances.map(value => { + return ( + + + + + + + + + ); + })} + +
# + + + + + + + + + +
{value.id}{value.name} + {value.online! ? ( + + + + ) : ( + + + + )} + + {value.moveJob ? ( + + ) : ( + value.path + )} + + + + + +
+ + + + +
+ ); + } + } +); diff --git a/src/components/views/Login.tsx b/src/components/views/Login.tsx new file mode 100644 index 0000000000..aebba084b5 --- /dev/null +++ b/src/components/views/Login.tsx @@ -0,0 +1,119 @@ +import React, { ChangeEvent, FormEvent, ReactNode } from "react"; +import Button from "react-bootstrap/Button"; +import Col from "react-bootstrap/Col"; +import Form from "react-bootstrap/Form"; +import { FormattedMessage } from "react-intl"; +import { RouteComponentProps } from "react-router"; +import { withRouter } from "react-router-dom"; + +import InternalError from "../../ApiClient/models/InternalComms/InternalError"; +import { StatusCode } from "../../ApiClient/models/InternalComms/InternalStatus"; +import ServerClient, { LoginErrors } from "../../ApiClient/ServerClient"; +import { getSavedCreds } from "../../utils/misc"; +import ErrorAlert from "../utils/ErrorAlert"; +import Loading from "../utils/Loading"; + +interface IProps extends RouteComponentProps {} +interface IState { + busy: boolean; + validated: boolean; + username: string; + password: string; + save: boolean; + error?: InternalError; +} + +export default withRouter( + class Login extends React.Component { + public constructor(props: IProps) { + super(props); + this.submit = this.submit.bind(this); + + const [usr, pwd] = getSavedCreds() || [undefined, undefined]; + + this.state = { + busy: false, + validated: false, + username: usr || "", + password: pwd || "", + save: !!(usr && pwd) + }; + } + + public render(): ReactNode { + const handleUsrInput = (event: ChangeEvent) => + this.setState({ username: event.target.value }); + const handlePwdInput = (event: ChangeEvent) => + this.setState({ password: event.target.value }); + const handleSaveInput = (event: ChangeEvent) => + this.setState({ save: event.target.checked }); + + if (this.state.busy) { + return ; + } + return ( +
+ + this.setState({ error: undefined })} + /> + + + + + + + + + + + + + + + + + + + ); + } + + private async submit(event: FormEvent) { + event.preventDefault(); + this.setState({ + busy: true + }); + const response = await ServerClient.login( + { + userName: this.state.username, + password: this.state.password + }, + this.state.save + ); + if (response.code == StatusCode.ERROR) { + this.setState({ + busy: false, + error: response.error + }); + } + } + } +); diff --git a/src/components/views/NotFound.tsx b/src/components/views/NotFound.tsx new file mode 100644 index 0000000000..946b35d8e8 --- /dev/null +++ b/src/components/views/NotFound.tsx @@ -0,0 +1,25 @@ +import React, { ReactNode } from "react"; +import Card from "react-bootstrap/Card"; +import { FormattedMessage } from "react-intl"; + +export default class NotFound extends React.Component { + public render(): ReactNode { + return ( + + + + + + + + + + + {`Control Panel Version: ${VERSION}\nControl Panel Mode: ${MODE}\nCurrent route: ${window.location.toString()}`} + + + + + ); + } +} diff --git a/src/components/views/User/Create.tsx b/src/components/views/User/Create.tsx new file mode 100644 index 0000000000..17ab5de4fb --- /dev/null +++ b/src/components/views/User/Create.tsx @@ -0,0 +1,277 @@ +import React, { ChangeEvent, FormEvent, ReactNode } from "react"; +import Button from "react-bootstrap/Button"; +import Col from "react-bootstrap/Col"; +import Form from "react-bootstrap/Form"; +import { FormattedMessage } from "react-intl"; +import { RouteComponentProps, withRouter } from "react-router-dom"; + +import { Components } from "../../../ApiClient/generatedcode/_generated"; +import InternalError, { ErrorCode } from "../../../ApiClient/models/InternalComms/InternalError"; +import { StatusCode } from "../../../ApiClient/models/InternalComms/InternalStatus"; +import ServerClient from "../../../ApiClient/ServerClient"; +import UserClient from "../../../ApiClient/UserClient"; +import { AppCategories, AppRoutes } from "../../../utils/routes"; +import ErrorAlert from "../../utils/ErrorAlert"; +import Loading from "../../utils/Loading"; + +interface IState { + errors: Array | undefined>; + password1: string; + password2: string; + username: string; + sysuser: string; + matchError?: boolean; + lengthError?: boolean; + serverInfo?: Components.Schemas.ServerInformation; + loading: boolean; + creating?: boolean; + redirect?: boolean; +} +interface IProps extends RouteComponentProps {} + +export default withRouter( + class UserCreate extends React.Component { + public constructor(props: IProps) { + super(props); + + this.state = { + errors: [], + password1: "", + password2: "", + username: "", + sysuser: "", + loading: true + }; + + this.submitTGS = this.submitTGS.bind(this); + this.submitSYS = this.submitSYS.bind(this); + } + + public async componentDidMount(): Promise { + const res = await ServerClient.getServerInfo(); + + switch (res.code) { + case StatusCode.ERROR: { + this.addError(res.error!); + break; + } + case StatusCode.OK: { + this.setState({ + serverInfo: res.payload! + }); + break; + } + } + + this.setState({ + loading: false + }); + } + + // noinspection DuplicatedCode + private validate(): boolean { + let err = false; + if (this.state.password1.length < this.state.serverInfo!.minimumPasswordLength) { + err = true; + this.setState({ + lengthError: true + }); + } else { + this.setState({ + lengthError: false + }); + } + if (this.state.password2 !== this.state.password1) { + err = true; + this.setState({ + matchError: true + }); + } else { + this.setState({ + matchError: false + }); + } + return err; + } + + private async submitTGS(event: FormEvent) { + event.preventDefault(); + + //validation + if (this.validate()) return; + if (!this.state.username) return; + + this.setState({ + creating: true + }); + + const user = await UserClient.createUser({ + name: this.state.username, + password: this.state.password1 + }); + // noinspection DuplicatedCode + if (user.code == StatusCode.OK) { + if (!AppCategories.user.data) AppCategories.user.data = {}; + AppCategories.user.data.selectedid = user.payload!.id!; + this.props.history.push(AppRoutes.useredit.link || AppRoutes.useredit.route); + } else { + this.addError(user.error!); + this.setState({ + creating: false + }); + } + } + + private async submitSYS(event: FormEvent) { + event.preventDefault(); + + //validation + if (!this.state.sysuser) return; + + this.setState({ + creating: true + }); + + const user = await UserClient.createUser({ + systemIdentifier: this.state.sysuser + }); + // noinspection DuplicatedCode + if (user.code == StatusCode.OK) { + if (!AppCategories.user.data) AppCategories.user.data = {}; + AppCategories.user.data.selectedid = user.payload!.id!; + this.props.history.push(AppRoutes.useredit.link || AppRoutes.useredit.route); + } else { + this.addError(user.error!); + this.setState({ + creating: false + }); + } + } + + private addError(error: InternalError): void { + this.setState(prevState => { + const errors = Array.from(prevState.errors); + errors.push(error); + return { + errors + }; + }); + } + + public render(): ReactNode { + if (this.state.loading) { + return ; + } + if (this.state.creating) { + return ; + } + + const handleUsernameInput = (event: ChangeEvent) => + this.setState({ username: event.target.value }); + const handleSysuserInput = (event: ChangeEvent) => + this.setState({ sysuser: event.target.value }); + const handlePwd1Input = (event: ChangeEvent) => + this.setState({ password1: event.target.value }); + const handlePwd2Input = (event: ChangeEvent) => + this.setState({ password2: event.target.value }); + + return ( +
+ {this.state.errors.map((err, index) => { + if (!err) return; + return ( + + this.setState(prev => { + const newarr = Array.from(prev.errors); + newarr[index] = undefined; + return { + errors: newarr + }; + }) + } + /> + ); + })} +

+ +

+ +
+ + + + + + + + + + + + + {this.state.lengthError ? ( + + + {this.state.serverInfo!.minimumPasswordLength} + + ) : ( + "" + )} + + + + + + + + + {this.state.matchError ? ( + + ) : ( + "" + )} + + + +
+
+
+ + + + + + + +
+ +
+ ); + } + } +); diff --git a/src/components/views/User/Edit.tsx b/src/components/views/User/Edit.tsx new file mode 100644 index 0000000000..6b114e5380 --- /dev/null +++ b/src/components/views/User/Edit.tsx @@ -0,0 +1,575 @@ +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import React from "react"; +import Alert from "react-bootstrap/Alert"; +import Badge from "react-bootstrap/Badge"; +import Button from "react-bootstrap/Button"; +import Col from "react-bootstrap/Col"; +import Form from "react-bootstrap/Form"; +import InputGroup from "react-bootstrap/InputGroup"; +import OverlayTrigger from "react-bootstrap/OverlayTrigger"; +import Row from "react-bootstrap/Row"; +import Tab from "react-bootstrap/Tab"; +import Tabs from "react-bootstrap/Tabs"; +import Tooltip from "react-bootstrap/Tooltip"; +import { FormattedMessage, FormattedRelativeTime } from "react-intl"; +import { RouteComponentProps, withRouter } from "react-router"; +import { Link } from "react-router-dom"; + +import { + AdministrationRights, + InstanceManagerRights +} from "../../../ApiClient/generatedcode/_enums"; +import { Components } from "../../../ApiClient/generatedcode/_generated"; +import InternalError, { ErrorCode } from "../../../ApiClient/models/InternalComms/InternalError"; +import { StatusCode } from "../../../ApiClient/models/InternalComms/InternalStatus"; +import UserClient from "../../../ApiClient/UserClient"; +import { AppCategories, AppRoutes } from "../../../utils/routes"; +import ErrorAlert from "../../utils/ErrorAlert"; +import Loading from "../../utils/Loading"; + +interface IProps extends RouteComponentProps<{ id: string; tab?: string }> {} + +interface IState { + errors: Array | undefined>; + user?: Components.Schemas.User; + loading: boolean; + saving: boolean; + permsadmin: { [key: string]: Permission }; + permsinstance: { [key: string]: Permission }; + canEdit: boolean; + //override for if its the current user and it can edit its own password + canEditOwnPassword: boolean; +} + +interface Permission { + readonly bitflag: number; + readonly currentVal: boolean; +} + +export default withRouter( + class UserEdit extends React.Component { + public constructor(props: IProps) { + super(props); + + this.state = { + errors: [], + loading: true, + saving: false, + permsadmin: {}, + permsinstance: {}, + canEdit: false, + canEditOwnPassword: false + }; + + if (!AppCategories.user.data) AppCategories.user.data = {}; + AppCategories.user.data.selectedid = props.match.params.id; + AppCategories.user.data.tab = props.match.params.tab; + } + + public async componentDidMount(): Promise { + const userid = parseInt(this.props.match.params.id); + const response = await UserClient.getUser(userid); + switch (response.code) { + case StatusCode.ERROR: { + this.addError(response.error!); + break; + } + case StatusCode.OK: { + this.loadUser(response.payload!); + break; + } + } + const currentuser = await UserClient.getCurrentUser(); + if (currentuser.code == StatusCode.OK) { + this.setState({ + canEdit: !!( + currentuser.payload!.administrationRights! & AdministrationRights.WriteUsers + ), + canEditOwnPassword: + !!( + currentuser.payload!.administrationRights! & + AdministrationRights.EditOwnPassword + ) && currentuser.payload!.id! === userid + }); + } + this.setState({ + loading: false + }); + } + + private loadUser(user: Components.Schemas.User) { + this.setState({ + user + }); + this.loadEnums(); + } + + private loadEnums(): void { + // noinspection DuplicatedCode + Object.entries(AdministrationRights).forEach(([k, v]) => { + /* enums are objects that are reverse mapped, for example, an enum with a = 1 and b = 2 would look like this: + * { + * "a": 1, + * "b": 2, + * 1: "a", + * 2: "b" + * } + * so we need to drop everything that doesnt resolve to a string because otherwise we end up with twice the values + */ + if (!isNaN(parseInt(k))) return; + + const key = k.toLowerCase(); + const val = v as number; + + //we dont care about nothing + if (key == "none") return; + + const currentVal = !!(this.state.user!.administrationRights! & val); + this.setState(prevState => { + return { + permsadmin: { + ...prevState.permsadmin, + [key]: { + currentVal, + newVal: currentVal, + bitflag: val + } + } + }; + }); + }); + // noinspection DuplicatedCode + Object.entries(InstanceManagerRights).forEach(([k, v]) => { + if (!isNaN(parseInt(k))) return; + + const key = k.toLowerCase(); + const val = v as number; + + //we dont care about nothing + if (key == "none") return; + + const currentVal = !!(this.state.user!.instanceManagerRights! & val); + this.setState(prevState => { + return { + permsinstance: { + ...prevState.permsinstance, + [key]: { + currentVal, + newVal: currentVal, + bitflag: val + } + } + }; + }); + }); + } + + private addError(error: InternalError): void { + this.setState(prevState => { + const errors = Array.from(prevState.errors); + errors.push(error); + return { + errors + }; + }); + } + + public render(): React.ReactNode { + if (this.state.loading) { + return ; + } + if (this.state.saving) { + return ; + } + + return ( +
+ {this.state.errors.map((err, index) => { + if (!err) return; + return ( + + this.setState(prev => { + const newarr = Array.from(prev.errors); + newarr[index] = undefined; + return { + errors: newarr + }; + }) + } + /> + ); + })} + {this.state.user ? ( + + {!this.state.canEdit ? ( + + + + ) : ( + "" + )} + {this.state.user.systemIdentifier ? ( + + + + ) : ( + + + + )}{" "} + {this.state.user.enabled ? ( + + + + ) : ( + + + + )} +

{this.state.user.name}

+ + { + if (!newkey) return; + + if (!AppCategories.user.data) AppCategories.user.data = {}; + AppCategories.user.data.selectedid = this.props.match.params.id; + AppCategories.user.data.tab = newkey; + this.props.history.push( + AppRoutes.useredit.link || AppRoutes.useredit.route + ); + }} + id="test" + className="justify-content-center mb-3 mt-4 flex-column flex-md-row"> + }> + {this.props.match.params.tab === "info" || + this.props.match.params.tab === undefined ? ( + + + +
+ +
+ + + {this.state.user.id} + +
+ {this.state.user.systemIdentifier ? ( + + +
+ +
+ + + {this.state.user.systemIdentifier} + +
+ ) : ( + "" + )} + + +
+ +
+ + + {this.state.user.enabled!.toString()} + +
+ + +
+ +
+ + + {new Date( + this.state.user.createdAt! + ).toLocaleString()} + + }> + {({ ref, ...triggerHandler }) => ( + + + }> + + + + )} + +
+ + +
+ +
+ + + + {this.state.user.createdBy!.id} + + }> + {({ ref, ...triggerHandler }) => ( + + + }> + {this.state.user!.createdBy!.name} + + + )} + +
+
+ {this.state.canEdit || + this.state.canEditOwnPassword ? ( + + ) : ( + "" + )} + {this.state.canEdit ? ( + + ) : ( + "" + )} +
+ + ) : ( + "" + )} +
+ }> + {this.props.match.params.tab === "adminperms" + ? this.renderPerms("permsadmin", "admin") + : ""} + + }> + {this.props.match.params.tab === "instanceperms" + ? this.renderPerms("permsinstance", "instance") + : ""} + +
+
+ ) : ( + "" + )} +
+ ); + } + + private renderPerms( + enumname: "permsadmin" | "permsinstance", + permprefix: string + ): React.ReactNode { + const inputs: Record> = {}; + const setAll = (val: boolean): (() => void) => { + return () => { + for (const ref of Object.values(inputs)) { + if (ref.current) ref.current.checked = val; + } + }; + }; + const resetAll = () => { + for (const [permname, ref] of Object.entries(inputs)) { + if (!ref.current) continue; + + ref.current.checked = this.state[enumname][permname].currentVal; + } + }; + const save = async () => { + this.setState({ + saving: true + }); + let bitflag = 0; + + for (const [permname, ref] of Object.entries(inputs)) { + if (!ref.current) continue; + + bitflag += ref.current.checked ? this.state[enumname][permname].bitflag : 0; + } + + const response = await UserClient.editUser(this.state.user!.id!, { + [enumname == "permsadmin" + ? "administrationRights" + : "instanceManagerRights"]: bitflag + } as { administrationRights: AdministrationRights } | { instanceManagerRights: InstanceManagerRights }); + if (response.code == StatusCode.OK) { + this.loadUser(response.payload!); + } else { + this.addError(response.error!); + } + this.setState({ + saving: false + }); + }; + return ( + + {this.state.canEdit ? ( + +
+ +
+ {" "} + {" "} + +
+ ) : ( + "" + )} + +
+ {Object.entries(this.state[enumname]).map(([perm, value]) => { + const inputref = React.createRef(); + inputs[perm] = inputref; + return ( + + + + + + }> + {({ ref, ...triggerHandler }) => ( + +
+ +
+
+ +
}> + +
+
+
+ )} +
+
+
+ ); + })} +
+ + {this.state.canEdit ? ( + + ) : ( + "" + )} +
+ ); + } + } +); diff --git a/src/components/views/User/List.tsx b/src/components/views/User/List.tsx new file mode 100644 index 0000000000..e24a4e1c39 --- /dev/null +++ b/src/components/views/User/List.tsx @@ -0,0 +1,229 @@ +import React from "react"; +import Alert from "react-bootstrap/Alert"; +import Badge from "react-bootstrap/Badge"; +import Button from "react-bootstrap/Button"; +import OverlayTrigger from "react-bootstrap/OverlayTrigger"; +import Table from "react-bootstrap/Table"; +import Tooltip from "react-bootstrap/Tooltip"; +import { FormattedMessage, FormattedRelativeTime } from "react-intl"; +import { Link, RouteComponentProps, withRouter } from "react-router-dom"; + +import { AdministrationRights } from "../../../ApiClient/generatedcode/_enums"; +import { Components } from "../../../ApiClient/generatedcode/_generated"; +import InternalError, { ErrorCode } from "../../../ApiClient/models/InternalComms/InternalError"; +import { StatusCode } from "../../../ApiClient/models/InternalComms/InternalStatus"; +import UserClient from "../../../ApiClient/UserClient"; +import { AppCategories, AppRoutes } from "../../../utils/routes"; +import ErrorAlert from "../../utils/ErrorAlert"; +import Loading from "../../utils/Loading"; + +interface IProps extends RouteComponentProps {} + +interface IState { + errors: Array | undefined>; + users: Components.Schemas.User[]; + loading: boolean; + canList: boolean; +} + +export default withRouter( + class UserList extends React.Component { + public constructor(props: IProps) { + super(props); + + this.state = { + errors: [], + users: [], + loading: true, + canList: false + }; + } + + private addError(error: InternalError): void { + this.setState(prevState => { + const errors = Array.from(prevState.errors); + errors.push(error); + return { + errors + }; + }); + } + + public async componentDidMount(): Promise { + const response = await UserClient.getCurrentUser(); + if (response.code == StatusCode.OK) { + const canList = !!( + response.payload!.administrationRights! & AdministrationRights.ReadUsers + ); + this.setState({ + canList + }); + + if (canList) { + const res = await UserClient.listUsers(); + switch (res.code) { + case StatusCode.OK: { + this.setState({ + users: res.payload! + }); + break; + } + case StatusCode.ERROR: { + this.addError(res.error!); + } + } + } else { + //if we cant list users, add our own user to the list + this.setState({ + users: [response.payload!] + }); + } + } else { + this.addError(response.error!); + } + this.setState({ + loading: false + }); + } + + public render(): React.ReactNode { + if (this.state.loading) { + return ; + } + return ( +
+ {!this.state.canList ? ( + + + + ) : ( + "" + )} + {this.state.errors.map((err, index) => { + if (!err) return; + return ( + + this.setState(prev => { + const newarr = Array.from(prev.errors); + newarr[index] = undefined; + return { + errors: newarr + }; + }) + } + /> + ); + })} + + + + + + + + + + + + + {this.state.users.map(value => { + const createddate = new Date(value.createdAt!); + const createddiff = (createddate.getTime() - Date.now()) / 1000; + + return ( + + + + + + {createddate.toLocaleString()} + + }> + {({ ref, ...triggerHandler }) => ( + + )} + + + + {value.createdBy!.id} + + }> + {({ ref, ...triggerHandler }) => ( + + )} + + + + ); + })} + +
# + + + + + + + + + +
{value.id!}{value.name} + {value.systemIdentifier! ? ( + + + + ) : ( + + + + )}{" "} + {value.enabled! ? ( + + + + ) : ( + + + + )} + + }> + + + + }> + {value.createdBy!.name} + + + +
+ +
+ ); + } + } +); diff --git a/src/definitions/globals.d.ts b/src/definitions/globals.d.ts new file mode 100644 index 0000000000..bfa2217f72 --- /dev/null +++ b/src/definitions/globals.d.ts @@ -0,0 +1,4 @@ +declare const API_VERSION: string; +declare const VERSION: string; +declare const MODE: string; +declare const DEFAULT_BASEPATH: string; diff --git a/src/definitions/mapbox__react-click-to-select.d.ts b/src/definitions/mapbox__react-click-to-select.d.ts new file mode 100644 index 0000000000..dee6051515 --- /dev/null +++ b/src/definitions/mapbox__react-click-to-select.d.ts @@ -0,0 +1 @@ +declare module "@mapbox/react-click-to-select"; diff --git a/src/definitions/scss.d.ts b/src/definitions/scss.d.ts new file mode 100644 index 0000000000..4db27c8e8c --- /dev/null +++ b/src/definitions/scss.d.ts @@ -0,0 +1,5 @@ +declare module "*.scss" { + const content: { [className: string]: string }; + // noinspection JSDuplicatedDeclaration + export default content; +} diff --git a/src/index.html b/src/index.html new file mode 100644 index 0000000000..f874be98af --- /dev/null +++ b/src/index.html @@ -0,0 +1,51 @@ + + + + + + + + + <%= htmlWebpackPlugin.options.title%> + + + + + + + + + + <% for (var css in htmlWebpackPlugin.files.css) { %> + + <% } %> + + +
+ + <% for (var chunk in htmlWebpackPlugin.files.chunks) { %> + + <% } %> + + diff --git a/src/index.tsx b/src/index.tsx new file mode 100644 index 0000000000..346dbe70fe --- /dev/null +++ b/src/index.tsx @@ -0,0 +1,30 @@ +//definition files +import "./definitions/scss.d"; +import "./definitions/globals.d"; +//css +import "./styles/dark.scss"; +//polyfills +import "@formatjs/intl-relativetimeformat/polyfill"; +import "@formatjs/intl-relativetimeformat/locale-data/en"; +import "@formatjs/intl-pluralrules/polyfill"; +import "@formatjs/intl-pluralrules/locale-data/en"; + +import * as React from "react"; +import * as ReactDOM from "react-dom"; + +import ConfigController from "./ApiClient/util/ConfigController"; +import App from "./App"; +import Locales from "./translations/Locales"; +import initIcons from "./utils/icolibrary"; + +initIcons(); +ConfigController.loadconfig(); + +const rootNode = document.getElementById("root") as HTMLElement; +const appTsx = ( + + + +); + +ReactDOM.render(appTsx, rootNode); diff --git a/src/logo.svg b/src/logo.svg new file mode 100644 index 0000000000..d16dcf85d1 --- /dev/null +++ b/src/logo.svg @@ -0,0 +1 @@ + diff --git a/src/react-app-env.d.ts b/src/react-app-env.d.ts new file mode 100644 index 0000000000..6431bc5fc6 --- /dev/null +++ b/src/react-app-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/src/styles/dark.scss b/src/styles/dark.scss new file mode 100644 index 0000000000..32fed12967 --- /dev/null +++ b/src/styles/dark.scss @@ -0,0 +1,349 @@ +.navbar { + font-weight: 600; +} +$enable-shadows: true; +$enable-gradients: true; + +.vmin-50 { + width: 50vmin !important; + height: 50vmin !important; +} + +$theme-colors: ( + //02549a + "primary": #02549a, + "secondary": #2576bc, + "transparent": transparent, + "background": #212529, + "darker": darken(#212529, 5%) +); + +$sizes: ( + 40: 40% +); + +@import "~bootstrap/scss/functions"; + +$white: #fff !default; +$gray-100: #f8f9fa !default; +$gray-200: #e9ecef !default; +$gray-300: #dee2e6 !default; +$gray-400: #ced4da !default; +$gray-500: #adb5bd !default; +$gray-600: #6c757d !default; +$gray-700: #495057 !default; +$gray-800: #343a40 !default; +$gray-900: #212529 !default; +$black: #000 !default; + +$grays: () !default; +// stylelint-disable-next-line scss/dollar-variable-default +$grays: map-merge( + ( + "100": $gray-100, + "200": $gray-200, + "300": $gray-300, + "400": $gray-400, + "500": $gray-500, + "600": $gray-600, + "700": $gray-700, + "800": $gray-800, + "900": $gray-900 + ), + $grays +); + +$blue: #007bff !default; +$indigo: #6610f2 !default; +$purple: #6f42c1 !default; +$pink: #e83e8c !default; +$red: #dc3545 !default; +$orange: #fd7e14 !default; +$yellow: #ffc107 !default; +$green: #28a745 !default; +$teal: #20c997 !default; +$cyan: #17a2b8 !default; + +$colors: () !default; +// stylelint-disable-next-line scss/dollar-variable-default +$colors: map-merge( + ( + "blue": $blue, + "indigo": $indigo, + "purple": $purple, + "pink": $pink, + "red": $red, + "orange": $orange, + "yellow": $yellow, + "green": $green, + "teal": $teal, + "cyan": $cyan, + "white": $white, + "gray": $gray-600, + "gray-dark": $gray-800 + ), + $colors +); + +$primary: $blue !default; +$secondary: $gray-600 !default; +$success: $green !default; +$info: $cyan !default; +$warning: $yellow !default; +$danger: $red !default; +$light: $gray-100 !default; +$dark: $gray-800 !default; + +$theme-colors: () !default; +// stylelint-disable-next-line scss/dollar-variable-default +$theme-colors: map-merge( + ( + "primary": $primary, + "secondary": $secondary, + "success": $success, + "info": $info, + "warning": $warning, + "danger": $danger, + "light": $light, + "dark": $dark + ), + $theme-colors +); + +$border-color: $gray-800; +$alert-border-radius: 3px; + +$body-bg: $gray-900; +$body-color: $gray-200; + +$card-bg: $gray-700; +$card-cap-color: $white; + +$code-color: inherit; + +$dropdown-bg: $gray-700; +$dropdown-color: $black; +$dropdown-link-color: $black; +$dropdown-link-hover-color: $black; +$dropdown-link-hover-bg: darken($dropdown-bg, 5%); + +$hr-border-color: rgba($white, 0.2); + +$link-color: theme-color("secondary"); + +$modal-content-bg: $dark; + +$navbar-dark-color: rgba($white, 0.75); +.navbar-dark > .navbar-nav > .nav-link.active { + font-weight: bold; +} + +$nav-tabs-border-color: $gray-700; +$nav-tabs-link-hover-border-color: $gray-700 $gray-700 $nav-tabs-border-color; +$nav-tabs-link-active-color: theme-color("secondary"); //$gray-200; +$nav-tabs-link-active-bg: $body-bg; +$nav-tabs-link-active-border-color: $gray-500 $gray-500 $nav-tabs-link-active-bg; + +$pre-color: inherit; + +$progress-bar-color: $black; + +$toast-color: $black; +$toast-background-color: $gray-700; +$toast-header-color: $toast-color; +$toast-header-background-color: $gray-600; + + + +@import "~bootstrap/scss/variables"; + +@import "~bootstrap/scss/mixins"; +@import "~bootstrap/scss/root"; +@import "~bootstrap/scss/reboot"; +@import "~bootstrap/scss/type"; + +//@import "~bootstrap/scss/images"; +@import "~bootstrap/scss/code"; +@import "~bootstrap/scss/grid"; +@import "~bootstrap/scss/tables"; +@import "~bootstrap/scss/forms"; +@import "~bootstrap/scss/buttons"; +@import "~bootstrap/scss/transitions"; +@import "~bootstrap/scss/dropdown"; +//@import "~bootstrap/scss/button-group"; +@import "~bootstrap/scss/input-group"; +@import "~bootstrap/scss/custom-forms"; +@import "~bootstrap/scss/nav"; +@import "~bootstrap/scss/navbar"; +@import "~bootstrap/scss/card"; +//@import "~bootstrap/scss/breadcrumb"; +//@import "~bootstrap/scss/pagination"; +@import "~bootstrap/scss/badge"; +//@import "~bootstrap/scss/jumbotron"; +@import "~bootstrap/scss/alert"; +@import "~bootstrap/scss/progress"; +//@import "~bootstrap/scss/media"; +//@import "~bootstrap/scss/list-group"; +@import "~bootstrap/scss/close"; +@import "~bootstrap/scss/toasts"; +@import "~bootstrap/scss/modal"; +@import "~bootstrap/scss/tooltip"; +//@import "~bootstrap/scss/popover"; +//@import "~bootstrap/scss/carousel"; +@import "~bootstrap/scss/spinners"; +@import "~bootstrap/scss/utilities"; +//@import "~bootstrap/scss/print"; + +.text-secondary { + color: #3b93de !important; +} + +.nav-tabs .nav-link { + color: $gray-200; + border: $nav-tabs-border-width solid $gray-700; + margin-right: 0.10rem; + margin-left: 0.10rem; +} + +@include media-breakpoint-down("sm") { + .nav-tabs .nav-link{ + margin-bottom: 0; + } +} + + +.alert-error { + @include alert-variant($dark, $danger, $white); +} + +.alert-dismissible { + padding-right: $alert-padding-x !important; +} + +.pre-wrap { + white-space: pre-wrap; +} + +@each $breakpoint in map-keys($grid-breakpoints) { + @include media-breakpoint-up($breakpoint) { + $infix: breakpoint-infix($breakpoint, $grid-breakpoints); + + @each $prop, $abbrev in (width: w, height: h) { + @each $size, $length in $sizes { + .#{$abbrev}#{$infix}-#{$size} { + #{$prop}: $length !important; + } + } + } + } +} + +@each $breakpoint in map-keys($grid-breakpoints) { + @include media-breakpoint-down($breakpoint) { + $infix: breakpoint-infix($breakpoint, $grid-breakpoints); + + .text#{$infix}-break { + word-wrap: break-word !important; + } + } +} + +.toast-header { + .close { + margin-left: auto !important; + span { + margin-left: 0.5rem !important; + } + } +} + + + +.anim-fade-appear { + opacity: 0; +} +.anim-fade-appear-active { + opacity: 1; +} + +.anim-fade-exit { + opacity: 1; +} +.anim-fade-exit-active { + opacity: 0; +} + +.anim-fade-appear-active, .anim-fade-exit-active { + transition: opacity 600ms; +} + +.anim-collapse-all { + display: none; +} + +.anim-collapse-enter { + flex-grow: 0; + flex-basis: 0; + min-width: 0; + overflow: hidden; + display: unset !important; +} +.anim-collapse-enter-active { + flex-grow: 1; + display: unset !important; +} +.anim-collapse-enter-done { + flex-grow: 1; + display: unset !important; +} + +.anim-collapse-exit { + flex-grow: 1; + display: unset !important; +} +.anim-collapse-exit-active { + flex-grow: 0; + flex-basis: 0; + overflow: hidden; +} +.anim-collapse-exit-done { + flex-grow: 0; + flex-basis: 0; + overflow: hidden; +} + +.anim-collapse-enter-active, .anim-collapse-exit-active { + transition: flex-grow 200ms; +} + +.nowrap { + white-space: nowrap; +} + +//these exists on firefox +//noinspection CssUnknownProperty +.fancyscroll { + scrollbar-width: thin; + scrollbar-color: $gray-800 rgba($gray-600, 0.5); +} + +//chrome/safari +.fancyscroll::-webkit-scrollbar { + height: 8px; + width: 8px; +} +.fancyscroll::-webkit-scrollbar-track { + background: rgba($gray-600, 0.5); +} +.fancyscroll::-webkit-scrollbar-thumb { + background-color: $gray-800; +} + +.jobswidget { + border: $gray-600 double; + background: rgba($gray-600, 0.5); + + h5 { + background: rgba($gray-800, 0.2); + } +} diff --git a/src/translations/ILocalization.ts b/src/translations/ILocalization.ts new file mode 100644 index 0000000000..b20b8456b0 --- /dev/null +++ b/src/translations/ILocalization.ts @@ -0,0 +1,3 @@ +export default interface ILocalization { + [stringID: string]: string; +} diff --git a/src/translations/ITranslation.ts b/src/translations/ITranslation.ts new file mode 100644 index 0000000000..df03dbe13f --- /dev/null +++ b/src/translations/ITranslation.ts @@ -0,0 +1,8 @@ +import ILocalization from "./ILocalization"; + +interface ITranslation { + readonly locale: string; + readonly messages: ILocalization; +} + +export default ITranslation; diff --git a/src/translations/ITranslationFactory.ts b/src/translations/ITranslationFactory.ts new file mode 100644 index 0000000000..334081f71b --- /dev/null +++ b/src/translations/ITranslationFactory.ts @@ -0,0 +1,7 @@ +import ITranslation from "./ITranslation"; + +interface ITranslationFactory { + loadTranslation(locale: string): Promise; +} + +export default ITranslationFactory; diff --git a/src/translations/Locales.ts b/src/translations/Locales.ts new file mode 100644 index 0000000000..a46d255de1 --- /dev/null +++ b/src/translations/Locales.ts @@ -0,0 +1,5 @@ +class Locales { + public static readonly en: string = "en"; +} + +export default Locales; diff --git a/src/translations/Translation.ts b/src/translations/Translation.ts new file mode 100644 index 0000000000..9755a9e913 --- /dev/null +++ b/src/translations/Translation.ts @@ -0,0 +1,6 @@ +import ILocalization from "./ILocalization"; +import ITranslation from "./ITranslation"; + +export default class Translation implements ITranslation { + public constructor(public readonly locale: string, public readonly messages: ILocalization) {} +} diff --git a/src/translations/TranslationFactory.ts b/src/translations/TranslationFactory.ts new file mode 100644 index 0000000000..8452b09ee3 --- /dev/null +++ b/src/translations/TranslationFactory.ts @@ -0,0 +1,40 @@ +import ITranslation from "./ITranslation"; +import ITranslationFactory from "./ITranslationFactory"; +import Locales from "./Locales"; +import Translation from "./Translation"; + +class TranslationFactory implements ITranslationFactory { + private static readonly fallbackLocale: string = Locales.en; + + private static getShortHandedLocale(locale: string): string { + return locale.split("-")[0]; + } + + public async loadTranslation(locale: string): Promise { + //fancy type annotations but its just load the json file in this variable as a map of strings to strings + const localization: { [key: string]: string } = (await import( + `./locales/${locale}.json` + )) as { [key: string]: string }; + + if (!localization) { + let shortHandedLocale = TranslationFactory.getShortHandedLocale(locale); + if (shortHandedLocale === locale) { + if (shortHandedLocale === TranslationFactory.fallbackLocale) + throw new Error("Invalid locale: " + locale); + shortHandedLocale = TranslationFactory.fallbackLocale; + } + return await this.loadTranslation(shortHandedLocale); + } + + let model: ITranslation | null = null; + try { + model = new Translation(locale, localization); + } catch (e) { + throw Error(`Error loading localization for locale '${locale}': ${JSON.stringify(e)}`); + } + + return model; + } +} + +export default TranslationFactory; diff --git a/src/translations/locales/en.json b/src/translations/locales/en.json new file mode 100644 index 0000000000..7e0a56b733 --- /dev/null +++ b/src/translations/locales/en.json @@ -0,0 +1,205 @@ +{ + "routes.home": "Home", + "routes.user_manager": "User Manager", + "routes.login": "Log In", + "routes.admin": "Administration", + "routes.admin.update": "TGS Update", + "routes.admin.logs": "TGS Logs", + "routes.config": "Configuration", + "routes.passwd": "Change Password", + "routes.usermanager": "Users", + "routes.useredit": "User Editor", + "routes.usercreate": "Create User", + "routes.instancelist": "Instances", + "routes.instancecode": "Code", + "routes.instancehosting": "Hosting", + "routes.instanceconfig": "Configuration", + "routes.instancejobs": "Jobs", + "login.submit": "Login", + "login.password": "Password", + "login.password.repeat": "Confirm Password", + "login.password.repeat.match": "Passwords do not match!", + "login.password.repeat.short": "Password is too short! It must have a length of atleast ", + "login.title": "Login", + "login.username": "Username", + "navbar.user_error": "Error loading current user", + "navbar.server_error": "Error loading server information", + "navbar.home": "Home", + "navbar.purgecache": "Purge client cache", + "navbar.refresh": "Refresh", + "navbar.logout": "Logout", + "app.job.started": "Started: ", + "app.job.startedby": "Started By: ", + "app.job.stopped": "Stopped: ", + "app.job.stoppedby": "Stopped By: ", + "error.http.access_denied.desc": "Access to this resource is denied", + "error.unhandled_response.desc": "The application received an unexpected response", + "error.unhandled_global_response.desc": "The application received an unexpected global response", + "error.login.no_creds.desc": "Attempted to login without any credentials", + "error.login.bad_user_pass.desc": "Invalid username/password!", + "error.login.user_disabled.desc": "This user account is disabled", + "error.user.no_sys_ident.desc": "This system user was not found", + "error.user.not_found.desc": "This TGS user was not found", + "error.http.bad_request": "BUG: Bad Request", + "error.http.data_integrity": "A data integrity check failed while performing the operation", + "error.http.api_mismatch": "API version mismatch", + "error.http.server_error": "BUG: Server error", + "error.http.unimplemented": "This feature is unimplemented.", + "error.http.server_not_ready": "The server is still starting/stoping!", + "error.http.access_denied": "Access denied", + "error.http.not_acceptable": "BUG: The server has found the request to be unacceptable.", + "error.axios": "Axios error", + "error.unhandled_response": "The application received an unexpected response", + "error.unhandled_global_response": "The application received an unexpected global response", + "error.login.no_creds": "Attempted to login without any credentials", + "error.login.bad_user_pass": "Invalid username/password!", + "error.login.user_disabled": "This user account is disabled", + "error.user.no_sys_ident": "This system user was not found", + "error.user.not_found": "This TGS user was not found", + "error.admin.rate": "The server has exceeded github's rate limiting. Please try again later.", + "error.admin.error": "The server has ran into an error while using github's API.", + "error.admin.watchdog.avail": "This operation is unavailable due to the launch configuration of TGS.", + "error.admin.update.notfound": "This TGS version does not seem to exist.", + "error.admin.logs.io": "An IO error occured while processing logs", + "error.somethingwentwrong": "Uh oh.... Something went wrong!", + "error.notfound": "This page has not been found!", + "error.github": "An error occured while interacting with the Github API", + "error.app": "An error occured in the application", + "error.job.not_found": "The specified job could not be found", + "error.job.complete": "Unable to delete the job, perhaps it already completed", + "error.job.instance_offline": "The instance is offline", + "error.instance.no_db_entity": "The database entity for the requested instance could not be retrieved. The instance was likely detached", + "error.api.empty": "No description available", + "generic.save": "Save", + "generic.savepage": "Save Page", + "generic.saveall": "Save All", + "generic.details": "Details", + "generic.debugwarn": "Be careful to censor out any credentials or tokens when copying errors!", + "generic.close": "Close", + "generic.goback": "Go Back", + "generic.accessdenied": "This user does not have access to this page. ", + "generic.persist": "Persist", + "generic.continue": "Continue", + "generic.view": "View", + "generic.download": "Download", + "generic.name": "Name", + "generic.datetime": "Date/Time", + "generic.entry": "Entry", + "generic.action": "Action", + "generic.createdby": "Created By", + "generic.created": "Created", + "generic.disabled": "Disabled", + "generic.enabled": "Enabled", + "generic.tgs": "TGS", + "generic.info": "Info", + "generic.system.short": "SYS", + "generic.edit": "Edit", + "generic.systemidentifier": "System Identifier", + "generic.appname": "tgstation-server", + "generic.userid": "User ID ", + "generic.setall": "Set all", + "generic.true": "True", + "generic.false": "False", + "generic.reset": "Reset", + "generic.disable": "Disable", + "generic.enable": "Enable", + "generic.configmode": "Configuration Mode", + "generic.online": "Online", + "generic.offline": "Offline", + "generic.path": "Path", + "generic.select": "Select", + "view.admin.hostos": "Host Machine OS: ", + "view.admin.remote": "Remote repository: ", + "view.admin.version.current": "Current Version: ", + "view.admin.version.latest": "Latest Version: ", + "view.admin.reboot.button": "Restart TGS", + "view.admin.reboot.modal.title": "Confirmation", + "view.admin.reboot.modal.body": "Are you sure you wish to restart TGS?", + "view.admin.update.button": "Update TGS", + "view.admin.update.selectversion": "Select Version", + "view.admin.update.latest": " (Latest)", + "view.admin.update.current": " (Current)", + "view.admin.update.releasenotes": "Release Notes", + "view.admin.update.wait": "Please take the time to read the release notes before proceeding", + "view.admin.update.showall": "Show all versions", + "view.admin.logs.button": "TGS Logs", + "view.user.list.cantlist": "This user does not have the permission to list users, only the current user is listed/editable.", + "view.user.edit.cantedit": "This user does not have the permission to edit users.", + "view.user.passwd.title": "Editing password for ", + "view.user.create.tgs": "Create user with TGS identifier", + "view.user.create.sys": "Create user with system identifier", + "view.instance.list.title": "Instance List", + "view.instance.list.set.online": "Set Online", + "view.instance.list.set.offline": "Set Offline", + "view.instance.configmode.0": "Disabled", + "view.instance.configmode.1": "Authorized users can read/write", + "view.instance.configmode.2": "Authorized users can read/write using their system user", + "view.instance.jobs.title": "Job list", + "view.instance.jobs.error": "An error occured", + "view.instance.moving": "[MOVING INSTANCE...]", + "perms.admin": "Administration Permissions", + "perms.admin.writeusers": "Edit Users", + "perms.admin.writeusers.desc": "Ability to edit users, if View Users is granted, all users can be edited, otherwise, only the current user can be edited", + "perms.admin.restarthost": "Restart TGS", + "perms.admin.restarthost.desc": "Ability to restart TGS", + "perms.admin.changeversion": "Update TGS", + "perms.admin.changeversion.desc": "Abilty to update TGS to a newer version", + "perms.admin.editownpassword": "Change Own Password", + "perms.admin.editownpassword.desc": "Ability to change their own password", + "perms.admin.readusers": "View Users", + "perms.admin.readusers.desc": "Ability to view all users", + "perms.admin.downloadlogs": "Access TGS logs", + "perms.admin.downloadlogs.desc": "Ability to view and download all TGS logs", + "perms.instance": "Instance Manager Permissions", + "perms.instance.read": "Read Accessible Instances", + "perms.instance.read.desc": "Ability to list and view instances the user is allowed access to. WARNING: Users who know the instance ID can still use the API to edit it using other permissions even if they lack this one.", + "perms.instance.create": "Create Instances", + "perms.instance.create.desc": "Ability to create new instances", + "perms.instance.rename": "Rename Instances", + "perms.instance.rename.desc": "Ability to rename instances", + "perms.instance.relocate": "Relocate Instances", + "perms.instance.relocate.desc": "Ablity to change the located of an instance on the file system", + "perms.instance.setonline": "Change Instance Online Status", + "perms.instance.setonline.desc": "Ability to set an instance as online or offline", + "perms.instance.delete": "Delete Instance", + "perms.instance.delete.desc": "Ablity to delete an instance", + "perms.instance.list": "Read All Instances", + "perms.instance.list.desc": "Ability to list and view all instances", + "perms.instance.setconfiguration": "Set Instance Configuration Mode", + "perms.instance.setconfiguration.desc": "Ability to set an instance's static file editing mode", + "perms.instance.setautoupdate": "Set Instance Autoupdate Interval", + "perms.instance.setautoupdate.desc": "Ability to set an instance's interval for automatic code updates", + "perms.instance.setchatbotlimit": "Set Instance Chatbot Limit", + "perms.instance.setchatbotlimit.desc": "Ability to change an instance's maximum amounts of bots", + "perms.instance.grantpermissions": "Grant All Permissions", + "perms.instance.grantpermissions.desc": "Ability to grant themselves all permissions on any instance", + "config.githubtoken": "Github token", + "config.githubtoken.desc": "You can supply a private authorization token for github to bypass some rate limiting on the github API.", + "config.apipath": "(Advanced) TGS API Path", + "config.apipath.desc": "Sets the API client server's path. Applies on next refresh.", + "config.jobpollinactive": "Inactive job poll delay (s)", + "config.jobpollinactive.desc": "After how many seconds should we check for new jobs if we dont have any active jobs", + "config.jobpollactive": "Active job poll delay (s)", + "config.jobpollactive.desc": "After how many seconds should we check for new jobs if we know about a job", + "config.jobswidgetdisplay": "Jobs Widget Display", + "config.jobswidgetdisplay.desc": "Display mode for the instance jobs widget", + "config.jobswidgetdisplay.enum.always": "Always display", + "config.jobswidgetdisplay.enum.auto": "Display when there are jobs", + "config.jobswidgetdisplay.enum.never": "Never display", + "loading.login": "Logging in...", + "loading.page": "Loading page: ", + "loading.page.notfound": "Loading page: NotFound", + "loading.app": "Loading app...", + "loading.admin": "Loading admin info...", + "loading.version": "Loading versions...", + "loading.updating": "Updating server...", + "loading.logs": "Loading Log(s)...", + "loading.info": "Loading Information...", + "loading.passwd": "Changing password...", + "loading.userlist": "Loading user list...", + "loading.user.load": "Loading user information...", + "loading.user.save": "Saving user information...", + "loading.user.create": "Creating user...", + "loading.instance.list": "Loading instance list...", + "loading.instance.jobs.list": "Loading job list..." +} diff --git a/src/utils/GithubClient.ts b/src/utils/GithubClient.ts new file mode 100644 index 0000000000..2ae543f9da --- /dev/null +++ b/src/utils/GithubClient.ts @@ -0,0 +1,150 @@ +import { retry } from "@octokit/plugin-retry"; +import { throttling } from "@octokit/plugin-throttling"; +import { RequestError } from "@octokit/request-error"; +import { Octokit } from "@octokit/rest"; +import { TypedEmitter } from "tiny-typed-emitter/lib"; + +import InternalError, { ErrorCode } from "../ApiClient/models/InternalComms/InternalError"; +import InternalStatus, { StatusCode } from "../ApiClient/models/InternalComms/InternalStatus"; +import configOptions from "../ApiClient/util/config"; + +export interface TGSVersion { + version: string; + body: string; + current: boolean; + old: boolean; +} + +interface IEvents {} + +/* eslint-disable */ + +async function hook(request: any, route: any, parameters?: any): Promise { + const endpoint = request.endpoint.merge(route as string, parameters); + + if (configOptions.githubtoken.value) { + endpoint.headers.authorization = `token ${configOptions.githubtoken.value}`; + } + + return request(endpoint); +} + +async function auth(): Promise { + if (configOptions.githubtoken.value) { + return { + type: "token", + tokenType: "pat", + token: configOptions.githubtoken.value + }; + } else { + return { + type: "unauthenticated" + }; + } +} + +const authStrategy = () => { + return Object.assign(auth.bind(null), { + hook: hook.bind(null) + }); +}; + +/* eslint-enable */ + +const e = new (class GithubClient extends TypedEmitter { + private readonly apiClient: Octokit; + + public constructor() { + super(); + + const octo = Octokit.plugin(retry, throttling); + + this.apiClient = new octo({ + authStrategy, + userAgent: "tgstation-server-control-panel/" + VERSION, + baseUrl: "https://api.github.com", + throttle: { + onRateLimit: ( + retryAfter: number, + options: { method: string; url: string; request: { retryCount: number } } + ) => { + console.warn( + `Request quota exhausted for request ${options.method} ${options.url}` + ); + + if (options.request.retryCount === 0) { + // only retries once + console.log(`Retrying after ${retryAfter} seconds!`); + return true; + } + return false; + }, + onAbuseLimit: (retryAfter: number, options: { method: string; url: string }) => { + // does not retry, only logs a warning + console.warn(`Abuse detected for request ${options.method} ${options.url}`); + } + } + }); + } + + public async getVersions({ + owner, + repo, + current, + all + }: { + owner: string; + repo: string; + current: string; + all?: boolean; + }): Promise> { + let payload: TGSVersion[]; + let oldversions = 0; + try { + payload = await this.apiClient.paginate( + this.apiClient.repos.listReleases, + { owner, repo }, + (response, done) => { + return response.data.reduce((result, release) => { + const match = /tgstation-server-v([\d.]+)/.exec(release.name); + if (!match) return result; + if (match[1][0] !== "4") return result; + + const version = match[1]; + let old = false; + + //show 3 outdated versions(2 if you count the current one) + if (version <= current) { + if (oldversions >= 3 && !all) { + (done as () => void)(); + return result; + } + oldversions++; + old = true; + } + + result.push({ + version, + body: release.body, + current: version === current, + old + }); + return result; + }, [] as TGSVersion[]); + } + ); + } catch (e) { + return new InternalStatus({ + code: StatusCode.ERROR, + error: new InternalError(ErrorCode.GITHUB_FAIL, { + jsError: e as RequestError + }) + }); + } + return new InternalStatus({ + code: StatusCode.OK, + payload + }); + } +})(); +export default e; diff --git a/src/utils/RouteController.ts b/src/utils/RouteController.ts new file mode 100644 index 0000000000..d9edfa0997 --- /dev/null +++ b/src/utils/RouteController.ts @@ -0,0 +1,131 @@ +import { TypedEmitter } from "tiny-typed-emitter/lib"; + +import LoginHooks from "../ApiClient/util/LoginHooks"; +import { AppCategories, AppRoute, AppRoutes, UnpopulatedAppCategory } from "./routes"; + +interface IEvents { + refresh: (routes: Array) => void; //auth + refreshAll: (routes: Array) => void; //noauth+auth +} + +//helper class to process AppRoutes +class RouteController extends TypedEmitter { + private refreshing = false; + + public constructor() { + super(); + this.refreshRoutes = this.refreshRoutes.bind(this); + + LoginHooks.addHook(this.refreshRoutes); + this.refreshRoutes().catch(console.error); + + //process categories + console.time("Category mapping"); + const catmap = new Map(); + + for (const val of Object.values(AppCategories)) { + val.routes = []; + //null asserted the name because that one is everywhere, even if the rest is partial + catmap.set(val.name!, val); + } + + for (const route of Object.values(AppRoutes)) { + if (!route.category) continue; + + const cat = catmap.get(route.category); + if (!cat) { + console.error("Route has invalid category", route); + continue; + } + + //this is guaranteed to be an array as its set in the loop above + cat.routes!.push(route); + + if (route.catleader) { + if (cat.leader) { + console.error("Category has two leaders", cat.leader, route); + continue; + } + cat.leader = route; + } + } + console.log("Categories mapped", catmap); + console.timeEnd("Category mapping"); + } + + public async refreshRoutes() { + if (this.refreshing) { + console.log("Already refreshing"); + return; + } //no need to refresh twice + + this.refreshing = true; + + const work = []; // we get all hidden routes no matter the authentification without waiting for the refresh + const routes = this.getImmediateRoutes(false); + + for (const route of routes) { + route.cachedAuth = undefined; + if (route.isAuthorized) { + work.push( + route.isAuthorized().then(auth => { + route.cachedAuth = auth; + }) + ); + } + } + + await Promise.all(work); //wait for all the authorized calls to complete + + this.emit("refresh", this.getImmediateRoutes(true)); + const routesNoAuth = this.getImmediateRoutes(false); + this.emit("refreshAll", routesNoAuth); + this.refreshing = false; + + console.log("Routes refreshed", routesNoAuth); + return await this.getRoutes(); + } + + private wait4refresh() { + return new Promise(resolve => { + if (!this.refreshing) { + resolve(); + return; + } + this.on("refresh", () => { + resolve(); + }); + }); + } + + public async getRoutes(auth = true): Promise { + await this.wait4refresh(); + + return this.getImmediateRoutes(auth); + } + + public getImmediateRoutes(auth = true) { + const results: Array = []; + + const propNames = Object.getOwnPropertyNames(AppRoutes); + for (let i = 0; i < propNames.length; i++) { + const name = propNames[i]; + const val = AppRoutes[name]; + + //we check for isauthorized here without calling because routes that lack the function are public + if (val.isAuthorized && !val.cachedAuth && auth) continue; //if not authorized and we only show authorized routes + + results.push(val); + } + + return results; + } + + //this is to ensure that the constructor(and that the categories are populated) is finished running before we try to access categories + public getCategories() { + //the second AppCategories here is a type that refers to { [key: string]: AppCategory } + return AppCategories as AppCategories; + } +} + +export default new RouteController(); diff --git a/src/utils/delay.ts b/src/utils/delay.ts new file mode 100644 index 0000000000..d07b5a3958 --- /dev/null +++ b/src/utils/delay.ts @@ -0,0 +1,7 @@ +const delay = (milliseconds: number): Promise => { + return new Promise(resolve => { + setTimeout(resolve, milliseconds); + }); +}; + +export default delay; diff --git a/src/utils/globalObjects.ts b/src/utils/globalObjects.ts new file mode 100644 index 0000000000..033b0bf15b --- /dev/null +++ b/src/utils/globalObjects.ts @@ -0,0 +1,8 @@ +//this should be a proper data store thing eventually but it will do 4 now +import Translation from "../translations/Translation"; + +export interface GlobalObjects { + translation: Translation; +} + +export const GlobalObjects = {}; diff --git a/src/utils/icolibrary.ts b/src/utils/icolibrary.ts new file mode 100644 index 0000000000..51f2d24bfa --- /dev/null +++ b/src/utils/icolibrary.ts @@ -0,0 +1,42 @@ +import { library } from "@fortawesome/fontawesome-svg-core"; +import { faAngleRight } from "@fortawesome/free-solid-svg-icons/faAngleRight"; +import { faCheck } from "@fortawesome/free-solid-svg-icons/faCheck"; +import { faCogs } from "@fortawesome/free-solid-svg-icons/faCogs"; +import { faExclamationCircle } from "@fortawesome/free-solid-svg-icons/faExclamationCircle"; +import { faGripLinesVertical } from "@fortawesome/free-solid-svg-icons/faGripLinesVertical"; +import { faHdd } from "@fortawesome/free-solid-svg-icons/faHdd"; +import { faHome } from "@fortawesome/free-solid-svg-icons/faHome"; +import { faInfo } from "@fortawesome/free-solid-svg-icons/faInfo"; +import { faKey } from "@fortawesome/free-solid-svg-icons/faKey"; +import { faPen } from "@fortawesome/free-solid-svg-icons/faPen"; +import { faPlus } from "@fortawesome/free-solid-svg-icons/faPlus"; +import { faQuestion } from "@fortawesome/free-solid-svg-icons/faQuestion"; +import { faSync } from "@fortawesome/free-solid-svg-icons/faSync"; +import { faTimes } from "@fortawesome/free-solid-svg-icons/faTimes"; +import { faTools } from "@fortawesome/free-solid-svg-icons/faTools"; +import { faUndo } from "@fortawesome/free-solid-svg-icons/faUndo"; +import { faUser } from "@fortawesome/free-solid-svg-icons/faUser"; +import { faUserSlash } from "@fortawesome/free-solid-svg-icons/faUserSlash"; + +export default function () { + library.add( + faCheck, + faTimes, + faExclamationCircle, + faUser, + faUserSlash, + faHdd, + faSync, + faPlus, + faQuestion, + faHome, + faTools, + faCogs, + faUndo, + faInfo, + faGripLinesVertical, + faAngleRight, + faKey, + faPen + ); +} diff --git a/src/utils/misc.ts b/src/utils/misc.ts new file mode 100644 index 0000000000..b417d32ec8 --- /dev/null +++ b/src/utils/misc.ts @@ -0,0 +1,50 @@ +import { pathToRegexp } from "path-to-regexp"; + +function getSavedCreds(): string[] | null { + let usr: string | null = null; + let pwd: string | null = null; + try { + //private browsing on safari can throw when using storage + usr = window.localStorage.getItem("username"); + pwd = window.localStorage.getItem("password"); + } catch (e) { + // eslint-disable-next-line @typescript-eslint/no-empty-function + (() => {})(); //noop + } + + if (usr && pwd) { + return [usr, pwd]; + } else { + return null; + } +} + +function download(filename: string, text: string): void { + const element = document.createElement("a"); + element.setAttribute("href", "data:text/plain;charset=utf-8," + encodeURIComponent(text)); + element.setAttribute("download", filename); + + element.style.display = "none"; + document.body.appendChild(element); + + element.click(); + + document.body.removeChild(element); +} + +function replaceAll(str: string, find: string, replace: string, ignore?: boolean): string { + return str.replace( + new RegExp(find.replace(/([/,!\\^${}[\]().*+?|<>\-&])/g, "\\$&"), ignore ? "gi" : "g"), + replace.replace(/\$/g, "$$$$") + ); +} + +function matchesPath(path: string, target: string, exact = false): boolean { + //remove trailing slashes + if (path.slice(-1) === "/") path = path.slice(0, -1); + if (target.slice(-1) === "/") target = target.slice(0, -1); + + return pathToRegexp(target, undefined, { end: exact }).test(path); +} + +export { getSavedCreds, download, replaceAll, matchesPath }; diff --git a/src/utils/routes.ts b/src/utils/routes.ts new file mode 100644 index 0000000000..7bdb97d127 --- /dev/null +++ b/src/utils/routes.ts @@ -0,0 +1,397 @@ +import { IconProp } from "@fortawesome/fontawesome-svg-core"; + +import { AdministrationRights, InstanceManagerRights } from "../ApiClient/generatedcode/_enums"; +import { StatusCode } from "../ApiClient/models/InternalComms/InternalStatus"; +import UserClient from "../ApiClient/UserClient"; +import CredentialsProvider from "../ApiClient/util/CredentialsProvider"; +import JobsController from "../ApiClient/util/JobsController"; + +export interface AppRoute { + ///Base parameters + //must be unique, also is the id of the route name message + name: string; + //must be unique, url to access + route: string; + //link to link to when linking to the route, defaults to the "route" + link?: string; + //filename in components/view that the route should display + file: string; + + ///Path parameters + //If subpaths should route here + loose: boolean; + //If subpaths should light up the navbar button + navbarLoose: boolean; + + ///Authentication + //if we can route to it even on the login page + loginless?: boolean; + //function to tell if we are authorized + isAuthorized: () => Promise; + //result of isAuthorized() after RouteController runs it, can be used by components but only set by RouteController + cachedAuth?: boolean; + + ///Visibility + //if this shows up on the navbar + visibleNavbar: boolean; + //serves two purposes, first one is to give it an icon, the second one is to not display it if the icon is undefined + homeIcon?: IconProp; + + ///Categories + //name of the category it belongs to + category?: string; + //if this is the main button in the category + catleader?: boolean; +} + +function adminRight(right: AdministrationRights) { + return async (): Promise => { + if (!CredentialsProvider.isTokenValid()) return false; + const response = await UserClient.getCurrentUser(); + + if (response.code == StatusCode.OK) { + return !!(response.payload!.administrationRights! & right); + } + return false; + }; +} + +function instanceManagerRight(right: InstanceManagerRights) { + return async (): Promise => { + if (!CredentialsProvider.isTokenValid()) return false; + const response = await UserClient.getCurrentUser(); + + if (response.code == StatusCode.OK) { + return !!(response.payload!.instanceManagerRights! & right); + } + return false; + }; +} + +const AppRoutes: { + [id: string]: AppRoute; +} = { + home: { + name: "routes.home", + route: "/", + file: "Home", + + loose: false, + navbarLoose: false, + + isAuthorized: (): Promise => Promise.resolve(true), + + visibleNavbar: true, + homeIcon: undefined, + + category: "home", + catleader: true + }, + instancelist: { + name: "routes.instancelist", + route: "/instances/", + file: "Instance/List", + + loose: false, + navbarLoose: true, + + isAuthorized: instanceManagerRight(InstanceManagerRights.List | InstanceManagerRights.Read), + + visibleNavbar: true, + homeIcon: "hdd", + + category: "instance", + catleader: true + }, + instancecode: { + name: "routes.instancecode", + route: "/instances/code/:id(\\d+)/", + file: "Instance/CodeDeployment", + + get link(): string { + return AppCategories.instance.data?.instanceid !== undefined + ? `/instances/code/${AppCategories.instance.data.instanceid}/` + : AppRoutes.instancelist.link || AppRoutes.instancelist.route; + }, + + loose: false, + navbarLoose: true, + + isAuthorized: (): Promise => Promise.resolve(true), + + visibleNavbar: true, + homeIcon: undefined, + + category: "instance" + }, + instancehosting: { + name: "routes.instancehosting", + route: "/instances/hosting/:id(\\d+)/", + file: "Instance/Hosting", + + get link(): string { + return AppCategories.instance.data?.instanceid !== undefined + ? `/instances/hosting/${AppCategories.instance.data.instanceid}/` + : AppRoutes.instancelist.link || AppRoutes.instancelist.route; + }, + + loose: false, + navbarLoose: true, + + isAuthorized: (): Promise => Promise.resolve(true), + + visibleNavbar: true, + homeIcon: undefined, + + category: "instance" + }, + instancejobs: { + name: "routes.instancejobs", + route: "/instances/jobs/:id(\\d+)/:jobid(\\d+)?/", + file: "Instance/Jobs", + + get link(): string { + return AppCategories.instance.data?.instanceid !== undefined + ? `/instances/jobs/${AppCategories.instance.data.instanceid}/${ + AppCategories.instance.data.lastjob !== undefined + ? `${AppCategories.instance.data.lastjob}/` + : "" + }` + : AppRoutes.instancelist.link || AppRoutes.instancelist.route; + }, + + loose: false, + navbarLoose: true, + + isAuthorized: (): Promise => Promise.resolve(true), + + visibleNavbar: true, + homeIcon: undefined, + + category: "instance" + }, + instanceconfig: { + name: "routes.instanceconfig", + route: "/instances/config/:id(\\d+)/", + file: "Instance/Config", + + get link(): string { + return AppCategories.instance.data?.instanceid !== undefined + ? `/instances/config/${AppCategories.instance.data.instanceid}/` + : AppRoutes.instancelist.link || AppRoutes.instancelist.route; + }, + + loose: false, + navbarLoose: true, + + isAuthorized: (): Promise => Promise.resolve(true), + + visibleNavbar: true, + homeIcon: undefined, + + category: "instance" + }, + userlist: { + name: "routes.usermanager", + route: "/users/", + file: "User/List", + + loose: false, + navbarLoose: true, + + //you can always read your own user + isAuthorized: (): Promise => Promise.resolve(true), + + visibleNavbar: true, + homeIcon: "user", + + category: "user", + catleader: true + }, + useredit: { + name: "routes.useredit", + route: "/users/edit/:id(\\d+)/:tab?/", + + //whole lot of bullshit just to make it that if you have an id, link to the edit page, otherwise link to the list page, and if you link to the user page, put the tab in + get link(): string { + return AppCategories.user.data?.selectedid !== undefined + ? `/users/edit/${AppCategories.user.data?.selectedid}/${ + AppCategories.user.data?.tab !== undefined + ? `${AppCategories.user.data?.tab}/` + : "" + }` + : AppRoutes.userlist.link || AppRoutes.userlist.route; + }, + file: "User/Edit", + + loose: true, + navbarLoose: true, + + //you can always read your own user + isAuthorized: (): Promise => Promise.resolve(true), + + visibleNavbar: true, + homeIcon: undefined, + + category: "user" + }, + usercreate: { + name: "routes.usercreate", + route: "/users/create/", + + link: "/users/create/", + file: "User/Create", + + loose: true, + navbarLoose: true, + + isAuthorized: adminRight(AdministrationRights.WriteUsers), + + visibleNavbar: true, + homeIcon: undefined, + + category: "user" + }, + admin: { + name: "routes.admin", + route: "/admin/", + file: "Administration", + + loose: false, + navbarLoose: true, + + isAuthorized: (): Promise => Promise.resolve(true), + + visibleNavbar: true, + homeIcon: "tools", + + category: "admin", + catleader: true + }, + admin_update: { + name: "routes.admin.update", + route: "/admin/update/:all?/", + file: "Admin/Update", + + link: "/admin/update/", + + loose: true, + navbarLoose: true, + + isAuthorized: adminRight(AdministrationRights.ChangeVersion), + visibleNavbar: true, + homeIcon: undefined, + + category: "admin" + }, + admin_logs: { + name: "routes.admin.logs", + route: "/admin/logs/:name?/", + link: "/admin/logs/", + file: "Admin/Logs", + + loose: false, + navbarLoose: true, + + isAuthorized: adminRight(AdministrationRights.DownloadLogs), + visibleNavbar: true, + homeIcon: undefined, + + category: "admin" + }, + passwd: { + name: "routes.passwd", + route: "/users/passwd/:id(\\d+)?/", + link: "/users/passwd/", + file: "ChangePassword", + + loose: true, + navbarLoose: true, + + isAuthorized: adminRight(AdministrationRights.EditOwnPassword), + + visibleNavbar: false, + homeIcon: "key" + }, + config: { + name: "routes.config", + route: "/config/", + file: "Configuration", + + loose: true, + navbarLoose: true, + + loginless: true, + isAuthorized: (): Promise => Promise.resolve(true), + + visibleNavbar: false, + homeIcon: "cogs" + } +}; + +export { AppRoutes }; + +export type UnpopulatedAppCategory = Partial; + +export interface AppCategory { + name: string; //doesnt really matter, kinda bullshit + routes: AppRoute[]; + leader: AppRoute; + data: Record; +} + +export type UnpopulatedAppCategories = { + [key: string]: UnpopulatedAppCategory; +}; + +export type AppCategories = { + [key: string]: AppCategory; +}; + +export const AppCategories: UnpopulatedAppCategories = { + home: { + name: "home" + }, + instance: { + name: "instance", + + data: { + _instanceid: undefined as number | undefined, + set instanceid(newval: string | undefined) { + let id: number | undefined; + //Undefined as a value is ok + if (newval === undefined) { + id = undefined; + } else { + //check if its a number + id = parseInt(newval); + if (Number.isNaN(id)) { + return; + } + } + + //setting the instance id causes the thing to drop all jobs its aware of, so avoid when possible + if (this._instanceid == id) { + return; + } + + this._instanceid = id; + JobsController.instance = id; + }, + get instanceid(): string | undefined { + return this._instanceid?.toString(); + } + } + }, + user: { + name: "user" + }, + admin: { + name: "admin" + } +}; + +//Either pass the instance id or pass an empty string +JobsController.setInstance = instance => { + AppCategories.instance.data!.instanceid = instance?.toString(); +}; diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000000..f94aff668f --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,39 @@ +{ + "compilerOptions": { + "outDir": "build/lib", + "module": "esnext", + "target": "es6", + "lib": [ + "es5", + "es6", + "dom", + "dom.iterable" + ], + "sourceMap": true, + "allowJs": false, + "jsx": "react", + "moduleResolution": "node", + "forceConsistentCasingInFileNames": true, + "noImplicitReturns": true, + "noImplicitThis": true, + "noImplicitAny": true, + "importHelpers": true, + "strictNullChecks": true, + "strict": true, + "skipLibCheck": true, + "esModuleInterop": true, + "resolveJsonModule": true, + "noEmit": true, + "isolatedModules": true, + "allowSyntheticDefaultImports": true + }, + "exclude": [ + "node_modules", + "build", + "dist", + "src/ApiClient/generatedcode" + ], + "include": [ + "src" + ] +} diff --git a/webpack.common.js b/webpack.common.js new file mode 100644 index 0000000000..164fcdc621 --- /dev/null +++ b/webpack.common.js @@ -0,0 +1,126 @@ +const HtmlWebpackPlugin = require("html-webpack-plugin"); +const { CleanWebpackPlugin } = require("clean-webpack-plugin"); +const CopyPlugin = require("copy-webpack-plugin"); + +module.exports = { + context: __dirname, + entry: { + //babel: '@babel/polyfill', + main: "./src/index.tsx" + }, + + optimization: { + runtimeChunk: "single", + splitChunks: { + chunks: "all", + cacheGroups: { + /* + packages: { + test: /[\\/]node_modules[\\/]/, + name: 'packages' + },*/ + api: { + priority: 1, + test: /[\\/]ApiClient[\\/]/, + enforce: true + } + } + } + }, + + resolve: { + extensions: [".ts", ".tsx", ".js"], + symlinks: false + }, + + module: { + rules: [ + { + test: /\.css$/, + exclude: /node_modules/, + loader: ["style-loader", "css-loader"], + sideEffects: true + }, + { + test: /\.(scss)$/, + use: [ + { + loader: "style-loader" + }, + { + loader: "css-loader" + }, + { + loader: "postcss-loader", + options: { + plugins: function () { + return [require("autoprefixer")]; + } + } + }, + { + loader: "fast-sass-loader" + } + ], + sideEffects: true + }, + { + test: /\.svg$/, + exclude: /node_modules/, + loader: "svg-loader" + }, + { + test: /\.[jt]sx?$/, + exclude: /node_modules/, + use: { + loader: "babel-loader", + options: { + cacheDirectory: true, + babelrc: false, + presets: [ + [ + "@babel/preset-env", + { + modules: false, + exclude: ["transform-regenerator"] + } + ], + "@babel/preset-typescript", + "@babel/preset-react" + ], + plugins: [ + ["@babel/plugin-proposal-class-properties", { loose: true }], + /*[ + '@babel/plugin-transform-runtime', + { + regenerator: false + } + ],*/ + "react-hot-loader/babel" + ] + } + } + } + ] + }, + + plugins: [ + new CleanWebpackPlugin(), + new HtmlWebpackPlugin({ + title: "TG Server Control Panel v0.4.0", + filename: "index.html", + template: "src/index.html" + }), + new CopyPlugin({ + patterns: [ + { + from: "public", + toType: "dir" + } + ] + }) + ], + node: { + fs: "empty" + } +}; diff --git a/webpack.dev.js b/webpack.dev.js new file mode 100644 index 0000000000..228ab579c6 --- /dev/null +++ b/webpack.dev.js @@ -0,0 +1,89 @@ +const webpack = require("webpack"); + +const { merge } = require("webpack-merge"); +const common = require("./webpack.common.js"); +const path = require("path"); +const SpeedMeasurePlugin = require("speed-measure-webpack-plugin"); + +const profile = false; + +let smp; + +if (profile) { + smp = new SpeedMeasurePlugin({ + granularLoaderData: false + }); +} else { + smp = { + wrap: function (thing) { + return thing; + } + }; +} + +const publicPath = process.env.TGS_OVERRIDE_DEFAULT_BASEPATH || "/"; + +module.exports = smp.wrap( + merge(common, { + mode: "development", + devtool: "source-map", + + output: { + publicPath: publicPath, + filename: "[name].js", + path: path.resolve(__dirname, "dist") + }, + + optimization: { + removeAvailableModules: false, + removeEmptyChunks: false, + splitChunks: { + chunks: "all", + cacheGroups: { + packages: { + test: /[\\/]node_modules[\\/]/, + name: "packages" + } + } + } + }, + + devServer: { + contentBase: path.join(__dirname, "dist"), + compress: true, + hot: true, + overlay: true, + host: "0.0.0.0", //technically insecure? don't put nudes in your app, helps to test with mobile + port: 8080, + historyApiFallback: true + }, + + resolve: { + alias: { + "react-dom": "@hot-loader/react-dom" + } + }, + + module: { + rules: [ + // All output '.js' files will have any sourcemaps re-processed by 'source-map-loader'. + { + enforce: "pre", + exclude: /node_modules/, + test: /\.js$/, + loader: "source-map-loader" + } + ] + }, + + plugins: [ + new webpack.HotModuleReplacementPlugin({}), + new webpack.DefinePlugin({ + API_VERSION: JSON.stringify(require("./package.json").tgs_api_version), + VERSION: JSON.stringify(require("./package.json").version), + MODE: JSON.stringify("DEV"), + DEFAULT_BASEPATH: JSON.stringify(publicPath) + }) + ] + }) +); diff --git a/webpack.prod.js b/webpack.prod.js new file mode 100644 index 0000000000..9bd590f90c --- /dev/null +++ b/webpack.prod.js @@ -0,0 +1,79 @@ +const ForkTsCheckerWebpackPlugin = require("fork-ts-checker-webpack-plugin"); +const TerserPlugin = require("terser-webpack-plugin"); +const webpack = require("webpack"); + +const { merge } = require("webpack-merge"); +const common = require("./webpack.common.js"); +const path = require("path"); + +const SpeedMeasurePlugin = require("speed-measure-webpack-plugin"); + +const profile = false; + +let smp; + +if (profile) { + smp = new SpeedMeasurePlugin({ + granularLoaderData: false + }); +} else { + smp = { + wrap: function (thing) { + return thing; + } + }; +} + +const publicPath = process.env.TGS_OVERRIDE_DEFAULT_BASEPATH || "/app/"; + +module.exports = smp.wrap( + merge(common, { + mode: "production", + optimization: { + minimize: true, + minimizer: [ + new TerserPlugin({ + test: /\.[jt]sx?$/ + }) + ], + splitChunks: { + cacheGroups: { + chunks: "all", + packages: { + maxInitialRequests: Infinity, + minSize: 5000, + priority: 3, + test: new RegExp("[\\/]node_modules[\\/]"), + name(module) { + // get the name. E.g. node_modules/packageName/not/this/part.js + // or node_modules/packageName + const packageName = module.context.match( + /[\\/]node_modules[\\/](.*?)([\\/]|$)/ + )[1]; + + // npm package names are URL-safe, but some servers don't like @ symbols + return `vendors/npm.${packageName.replace("@", "")}`; + } + } + } + } + }, + output: { + publicPath: publicPath, + filename: "[name].[contenthash].js", + path: path.resolve(__dirname, "dist") + }, + plugins: [ + new ForkTsCheckerWebpackPlugin(), + /*new webpack.debug.ProfilingPlugin({ + outputPath: 'profile.json' + }),*/ + new webpack.DefinePlugin({ + API_VERSION: JSON.stringify(require("./package.json").tgs_api_version), + VERSION: JSON.stringify(require("./package.json").version), + MODE: JSON.stringify("PROD"), + DEFAULT_BASEPATH: JSON.stringify(publicPath) + }) + ] + }) +); From 60456351f31f1c363766d479d100ce600a04db1c Mon Sep 17 00:00:00 2001 From: alexkar598 <25136265+alexkar598@users.noreply.github.com> Date: Mon, 12 Oct 2020 14:21:01 -0400 Subject: [PATCH 05/18] Also takes the packagelock json --- src/Tgstation.Server.Host/Tgstation.Server.Host.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Tgstation.Server.Host/Tgstation.Server.Host.csproj b/src/Tgstation.Server.Host/Tgstation.Server.Host.csproj index 09706ad1e1..89e0133ed9 100644 --- a/src/Tgstation.Server.Host/Tgstation.Server.Host.csproj +++ b/src/Tgstation.Server.Host/Tgstation.Server.Host.csproj @@ -25,7 +25,7 @@ ..\.. - + From 44fc0767c56a6fd58dbac11ba75f5c9f52eea28d Mon Sep 17 00:00:00 2001 From: alexkar598 <25136265+alexkar598@users.noreply.github.com> Date: Mon, 12 Oct 2020 14:53:53 -0400 Subject: [PATCH 06/18] Docker build as non root --- .github/workflows/ci-suite.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-suite.yml b/.github/workflows/ci-suite.yml index d6b91a754d..4e517ae188 100644 --- a/.github/workflows/ci-suite.yml +++ b/.github/workflows/ci-suite.yml @@ -116,7 +116,7 @@ jobs: uses: actions/checkout@v1 - name: Build Docker Image - run: docker build . -f build/Dockerfile + run: sudo -u \# 1001 docker build . -f build/Dockerfile linux-unit-tests: name: Linux Unit Tests From 196e3b65866f200d51028e56f7631d8b45beb4d3 Mon Sep 17 00:00:00 2001 From: alexkar598 <25136265+alexkar598@users.noreply.github.com> Date: Mon, 12 Oct 2020 14:55:47 -0400 Subject: [PATCH 07/18] Im stupid --- .github/workflows/ci-suite.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-suite.yml b/.github/workflows/ci-suite.yml index 4e517ae188..19c3721cf6 100644 --- a/.github/workflows/ci-suite.yml +++ b/.github/workflows/ci-suite.yml @@ -116,7 +116,7 @@ jobs: uses: actions/checkout@v1 - name: Build Docker Image - run: sudo -u \# 1001 docker build . -f build/Dockerfile + run: sudo -u \#1001 docker build . -f build/Dockerfile linux-unit-tests: name: Linux Unit Tests From 0293199ff65103bd20bd24df5e58767ed6d0741f Mon Sep 17 00:00:00 2001 From: alexkar598 <25136265+alexkar598@users.noreply.github.com> Date: Mon, 12 Oct 2020 15:00:20 -0400 Subject: [PATCH 08/18] Maybe this will work --- .github/workflows/ci-suite.yml | 2 +- build/Dockerfile | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci-suite.yml b/.github/workflows/ci-suite.yml index 19c3721cf6..d6b91a754d 100644 --- a/.github/workflows/ci-suite.yml +++ b/.github/workflows/ci-suite.yml @@ -116,7 +116,7 @@ jobs: uses: actions/checkout@v1 - name: Build Docker Image - run: sudo -u \#1001 docker build . -f build/Dockerfile + run: docker build . -f build/Dockerfile linux-unit-tests: name: Linux Unit Tests diff --git a/build/Dockerfile b/build/Dockerfile index fa4e18131f..62815eb72f 100644 --- a/build/Dockerfile +++ b/build/Dockerfile @@ -28,6 +28,7 @@ WORKDIR /repo/src/Tgstation.Server.Host COPY src/Tgstation.Server.Host/ClientApp ClientApp COPY src/Tgstation.Server.Host/Tgstation.Server.Host.csproj ./ +RUN npm set unsafe-perm true RUN dotnet msbuild -target:NpmBuild WORKDIR /repo From 2d3e7626c6474fdb2bf2046e66033bb3a12517e5 Mon Sep 17 00:00:00 2001 From: alexkar598 <25136265+alexkar598@users.noreply.github.com> Date: Mon, 12 Oct 2020 15:03:25 -0400 Subject: [PATCH 09/18] Unsets the flag after were done building --- build/Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/build/Dockerfile b/build/Dockerfile index 62815eb72f..db8ab3763e 100644 --- a/build/Dockerfile +++ b/build/Dockerfile @@ -28,8 +28,10 @@ WORKDIR /repo/src/Tgstation.Server.Host COPY src/Tgstation.Server.Host/ClientApp ClientApp COPY src/Tgstation.Server.Host/Tgstation.Server.Host.csproj ./ +# I cant figure out how to run npm as non root so eh RUN npm set unsafe-perm true RUN dotnet msbuild -target:NpmBuild +RUN npm set unsafe-perm false WORKDIR /repo From 36c65e076f7b1f69938fb7d656556bb4dc40a761 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Mon, 12 Oct 2020 15:15:54 -0400 Subject: [PATCH 10/18] Remove subtree --- .../ClientApp/.browserlistrc | 5 - .../ClientApp/.editorconfig | 8 - .../ClientApp/.eslintrc.json | 65 - .../ClientApp/.github/workflows/CI.yml | 36 - .../ClientApp/.gitignore | 34 - .../ClientApp/.idea/.gitignore | 2 - .../ClientApp/.idea/codeStyles/Project.xml | 44 - .../.idea/codeStyles/codeStyleConfig.xml | 5 - .../ClientApp/.idea/compiler.xml | 8 - .../ClientApp/.idea/dataSources.xml | 11 - .../.idea/inspectionProfiles/Eslint.xml | 1504 -- .../inspectionProfiles/Project_Default.xml | 15 - .../ClientApp/.idea/jsLibraryMappings.xml | 7 - .../ClientApp/.idea/misc.xml | 6 - .../ClientApp/.idea/modules.xml | 8 - .../ClientApp/.idea/prettier.xml | 6 - .../ClientApp/.idea/statistic.xml | 12 - .../ClientApp/.idea/tgs4panel.iml | 20 - .../ClientApp/.idea/vcs.xml | 6 - .../ClientApp/.prettierrc | 10 - .../ClientApp/.vscode/extensions.json | 3 - .../ClientApp/.vscode/launch.json | 16 - .../ClientApp/.vscode/settings.json | 22 - src/Tgstation.Server.Host/ClientApp/LICENSE | 661 - src/Tgstation.Server.Host/ClientApp/README.md | 1 - .../ClientApp/package-lock.json | 15655 ---------------- .../ClientApp/package.json | 137 - .../public/android-chrome-192x192.png | Bin 14478 -> 0 bytes .../public/android-chrome-512x512.png | Bin 41495 -> 0 bytes .../ClientApp/public/apple-touch-icon.png | Bin 13437 -> 0 bytes .../ClientApp/public/browserconfig.xml | 9 - .../ClientApp/public/favicon-16x16.png | Bin 1316 -> 0 bytes .../ClientApp/public/favicon-32x32.png | Bin 2511 -> 0 bytes .../ClientApp/public/favicon.ico | Bin 15086 -> 0 bytes .../ClientApp/public/manifest.json | 19 - .../ClientApp/public/mstile-150x150.png | Bin 10266 -> 0 bytes .../ClientApp/public/safari-pinned-tab.svg | 28 - .../ClientApp/scripts/api_download.js | 16 - .../ClientApp/scripts/generate_enums.js | 13 - .../ClientApp/scripts/msbuild.js | 9 - .../dtsgenerator/dist/core/dtsGenerator.d.ts | 22 - .../dtsgenerator/dist/core/dtsGenerator.js | 389 - .../dist/core/dtsGenerator.js.map | 1 - .../dtsgenerator/dist/core/dtsGenerator.ts | 335 - .../dtsgenerator/dist/core/jsonSchema.d.ts | 24 - .../dtsgenerator/dist/core/jsonSchema.js | 523 - .../dtsgenerator/dist/core/jsonSchema.js.map | 1 - .../dtsgenerator/dist/core/jsonSchema.ts | 560 - .../dtsgenerator/dist/core/schemaConvertor.js | 365 - .../openapi-client-axios-typegen/typegen.js | 359 - .../files/openapi-client-axios/client.js | 608 - .../openapi-client-axios/types/client.d.ts | 93 - .../ClientApp/scripts/patcher/patch.js | 4 - .../ClientApp/src/ApiClient/AdminClient.ts | 341 - .../ClientApp/src/ApiClient/InstanceClient.ts | 92 - .../src/ApiClient/InstanceUserClient.ts | 100 - .../ClientApp/src/ApiClient/JobsClient.ts | 150 - .../ClientApp/src/ApiClient/ServerClient.ts | 515 - .../ClientApp/src/ApiClient/UserClient.ts | 300 - .../src/ApiClient/generatedcode/.gitkeep | 0 .../src/ApiClient/models/ICredentials.ts | 4 - .../models/InternalComms/InternalError.ts | 153 - .../models/InternalComms/InternalStatus.ts | 38 - .../src/ApiClient/util/ConfigController.ts | 72 - .../src/ApiClient/util/CredentialsProvider.ts | 20 - .../src/ApiClient/util/JobsController.ts | 350 - .../src/ApiClient/util/LoginHooks.ts | 52 - .../ClientApp/src/ApiClient/util/config.ts | 71 - .../ClientApp/src/App.css | 29 - .../ClientApp/src/App.tsx | 156 - .../ClientApp/src/IAppProps.ts | 8 - .../ClientApp/src/Router.tsx | 129 - .../ClientApp/src/components/AppNavbar.tsx | 422 - .../src/components/utils/AccessDenied.tsx | 31 - .../src/components/utils/ErrorAlert.tsx | 91 - .../src/components/utils/ErrorBoundary.tsx | 62 - .../src/components/utils/JobCard.tsx | 173 - .../src/components/utils/JobsList.tsx | 187 - .../src/components/utils/Loading.tsx | 68 - .../ClientApp/src/components/utils/Reload.tsx | 46 - .../src/components/views/Admin/Logs.tsx | 278 - .../src/components/views/Admin/Update.tsx | 345 - .../src/components/views/Administration.tsx | 280 - .../src/components/views/ChangePassword.tsx | 261 - .../src/components/views/Configuration.tsx | 207 - .../ClientApp/src/components/views/Home.tsx | 85 - .../src/components/views/Instance/Jobs.tsx | 31 - .../src/components/views/Instance/List.tsx | 298 - .../ClientApp/src/components/views/Login.tsx | 119 - .../src/components/views/NotFound.tsx | 25 - .../src/components/views/User/Create.tsx | 277 - .../src/components/views/User/Edit.tsx | 575 - .../src/components/views/User/List.tsx | 229 - .../ClientApp/src/definitions/globals.d.ts | 4 - .../mapbox__react-click-to-select.d.ts | 1 - .../ClientApp/src/definitions/scss.d.ts | 5 - .../ClientApp/src/index.html | 51 - .../ClientApp/src/index.tsx | 30 - .../ClientApp/src/logo.svg | 1 - .../ClientApp/src/react-app-env.d.ts | 1 - .../ClientApp/src/styles/dark.scss | 349 - .../src/translations/ILocalization.ts | 3 - .../src/translations/ITranslation.ts | 8 - .../src/translations/ITranslationFactory.ts | 7 - .../ClientApp/src/translations/Locales.ts | 5 - .../ClientApp/src/translations/Translation.ts | 6 - .../src/translations/TranslationFactory.ts | 40 - .../src/translations/locales/en.json | 205 - .../ClientApp/src/utils/GithubClient.ts | 150 - .../ClientApp/src/utils/RouteController.ts | 131 - .../ClientApp/src/utils/delay.ts | 7 - .../ClientApp/src/utils/globalObjects.ts | 8 - .../ClientApp/src/utils/icolibrary.ts | 42 - .../ClientApp/src/utils/misc.ts | 50 - .../ClientApp/src/utils/routes.ts | 397 - .../ClientApp/tsconfig.json | 39 - .../ClientApp/webpack.common.js | 126 - .../ClientApp/webpack.dev.js | 89 - .../ClientApp/webpack.prod.js | 79 - 119 files changed, 30189 deletions(-) delete mode 100644 src/Tgstation.Server.Host/ClientApp/.browserlistrc delete mode 100644 src/Tgstation.Server.Host/ClientApp/.editorconfig delete mode 100644 src/Tgstation.Server.Host/ClientApp/.eslintrc.json delete mode 100644 src/Tgstation.Server.Host/ClientApp/.github/workflows/CI.yml delete mode 100644 src/Tgstation.Server.Host/ClientApp/.gitignore delete mode 100644 src/Tgstation.Server.Host/ClientApp/.idea/.gitignore delete mode 100644 src/Tgstation.Server.Host/ClientApp/.idea/codeStyles/Project.xml delete mode 100644 src/Tgstation.Server.Host/ClientApp/.idea/codeStyles/codeStyleConfig.xml delete mode 100644 src/Tgstation.Server.Host/ClientApp/.idea/compiler.xml delete mode 100644 src/Tgstation.Server.Host/ClientApp/.idea/dataSources.xml delete mode 100644 src/Tgstation.Server.Host/ClientApp/.idea/inspectionProfiles/Eslint.xml delete mode 100644 src/Tgstation.Server.Host/ClientApp/.idea/inspectionProfiles/Project_Default.xml delete mode 100644 src/Tgstation.Server.Host/ClientApp/.idea/jsLibraryMappings.xml delete mode 100644 src/Tgstation.Server.Host/ClientApp/.idea/misc.xml delete mode 100644 src/Tgstation.Server.Host/ClientApp/.idea/modules.xml delete mode 100644 src/Tgstation.Server.Host/ClientApp/.idea/prettier.xml delete mode 100644 src/Tgstation.Server.Host/ClientApp/.idea/statistic.xml delete mode 100644 src/Tgstation.Server.Host/ClientApp/.idea/tgs4panel.iml delete mode 100644 src/Tgstation.Server.Host/ClientApp/.idea/vcs.xml delete mode 100644 src/Tgstation.Server.Host/ClientApp/.prettierrc delete mode 100644 src/Tgstation.Server.Host/ClientApp/.vscode/extensions.json delete mode 100644 src/Tgstation.Server.Host/ClientApp/.vscode/launch.json delete mode 100644 src/Tgstation.Server.Host/ClientApp/.vscode/settings.json delete mode 100644 src/Tgstation.Server.Host/ClientApp/LICENSE delete mode 100644 src/Tgstation.Server.Host/ClientApp/README.md delete mode 100644 src/Tgstation.Server.Host/ClientApp/package-lock.json delete mode 100644 src/Tgstation.Server.Host/ClientApp/package.json delete mode 100644 src/Tgstation.Server.Host/ClientApp/public/android-chrome-192x192.png delete mode 100644 src/Tgstation.Server.Host/ClientApp/public/android-chrome-512x512.png delete mode 100644 src/Tgstation.Server.Host/ClientApp/public/apple-touch-icon.png delete mode 100644 src/Tgstation.Server.Host/ClientApp/public/browserconfig.xml delete mode 100644 src/Tgstation.Server.Host/ClientApp/public/favicon-16x16.png delete mode 100644 src/Tgstation.Server.Host/ClientApp/public/favicon-32x32.png delete mode 100644 src/Tgstation.Server.Host/ClientApp/public/favicon.ico delete mode 100644 src/Tgstation.Server.Host/ClientApp/public/manifest.json delete mode 100644 src/Tgstation.Server.Host/ClientApp/public/mstile-150x150.png delete mode 100644 src/Tgstation.Server.Host/ClientApp/public/safari-pinned-tab.svg delete mode 100644 src/Tgstation.Server.Host/ClientApp/scripts/api_download.js delete mode 100644 src/Tgstation.Server.Host/ClientApp/scripts/generate_enums.js delete mode 100644 src/Tgstation.Server.Host/ClientApp/scripts/msbuild.js delete mode 100644 src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/dtsGenerator.d.ts delete mode 100644 src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/dtsGenerator.js delete mode 100644 src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/dtsGenerator.js.map delete mode 100644 src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/dtsGenerator.ts delete mode 100644 src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/jsonSchema.d.ts delete mode 100644 src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/jsonSchema.js delete mode 100644 src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/jsonSchema.js.map delete mode 100644 src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/jsonSchema.ts delete mode 100644 src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/schemaConvertor.js delete mode 100644 src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/openapi-client-axios-typegen/typegen.js delete mode 100644 src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/openapi-client-axios/client.js delete mode 100644 src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/openapi-client-axios/types/client.d.ts delete mode 100644 src/Tgstation.Server.Host/ClientApp/scripts/patcher/patch.js delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/ApiClient/AdminClient.ts delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/ApiClient/InstanceClient.ts delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/ApiClient/InstanceUserClient.ts delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/ApiClient/JobsClient.ts delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/ApiClient/ServerClient.ts delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/ApiClient/UserClient.ts delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/ApiClient/generatedcode/.gitkeep delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/ApiClient/models/ICredentials.ts delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/ApiClient/models/InternalComms/InternalError.ts delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/ApiClient/models/InternalComms/InternalStatus.ts delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/ApiClient/util/ConfigController.ts delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/ApiClient/util/CredentialsProvider.ts delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/ApiClient/util/JobsController.ts delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/ApiClient/util/LoginHooks.ts delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/ApiClient/util/config.ts delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/App.css delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/App.tsx delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/IAppProps.ts delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/Router.tsx delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/components/AppNavbar.tsx delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/components/utils/AccessDenied.tsx delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/components/utils/ErrorAlert.tsx delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/components/utils/ErrorBoundary.tsx delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/components/utils/JobCard.tsx delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/components/utils/JobsList.tsx delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/components/utils/Loading.tsx delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/components/utils/Reload.tsx delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/components/views/Admin/Logs.tsx delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/components/views/Admin/Update.tsx delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/components/views/Administration.tsx delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/components/views/ChangePassword.tsx delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/components/views/Configuration.tsx delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/components/views/Home.tsx delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/components/views/Instance/Jobs.tsx delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/components/views/Instance/List.tsx delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/components/views/Login.tsx delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/components/views/NotFound.tsx delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/components/views/User/Create.tsx delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/components/views/User/Edit.tsx delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/components/views/User/List.tsx delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/definitions/globals.d.ts delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/definitions/mapbox__react-click-to-select.d.ts delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/definitions/scss.d.ts delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/index.html delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/index.tsx delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/logo.svg delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/react-app-env.d.ts delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/styles/dark.scss delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/translations/ILocalization.ts delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/translations/ITranslation.ts delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/translations/ITranslationFactory.ts delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/translations/Locales.ts delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/translations/Translation.ts delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/translations/TranslationFactory.ts delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/translations/locales/en.json delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/utils/GithubClient.ts delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/utils/RouteController.ts delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/utils/delay.ts delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/utils/globalObjects.ts delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/utils/icolibrary.ts delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/utils/misc.ts delete mode 100644 src/Tgstation.Server.Host/ClientApp/src/utils/routes.ts delete mode 100644 src/Tgstation.Server.Host/ClientApp/tsconfig.json delete mode 100644 src/Tgstation.Server.Host/ClientApp/webpack.common.js delete mode 100644 src/Tgstation.Server.Host/ClientApp/webpack.dev.js delete mode 100644 src/Tgstation.Server.Host/ClientApp/webpack.prod.js diff --git a/src/Tgstation.Server.Host/ClientApp/.browserlistrc b/src/Tgstation.Server.Host/ClientApp/.browserlistrc deleted file mode 100644 index 85abe3f61d..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/.browserlistrc +++ /dev/null @@ -1,5 +0,0 @@ -last 5 chrome version -last 5 firefox version -last 3 edge version -last 5 opera version -last 3 safari version \ No newline at end of file diff --git a/src/Tgstation.Server.Host/ClientApp/.editorconfig b/src/Tgstation.Server.Host/ClientApp/.editorconfig deleted file mode 100644 index f9366facfb..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/.editorconfig +++ /dev/null @@ -1,8 +0,0 @@ -root = true - -[*] -indent_style = space -indent_size = 4 -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true diff --git a/src/Tgstation.Server.Host/ClientApp/.eslintrc.json b/src/Tgstation.Server.Host/ClientApp/.eslintrc.json deleted file mode 100644 index 5da6d41f79..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/.eslintrc.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "env": { - "browser": true, - "es6": true - }, - "extends": [ - "eslint:recommended", - "plugin:react/recommended", - "plugin:@typescript-eslint/recommended", - "plugin:@typescript-eslint/recommended-requiring-type-checking", - "plugin:import/errors", - "plugin:import/warnings", - "plugin:import/typescript", - "plugin:import/react"], - "globals": { - "Atomics": "readonly", - "SharedArrayBuffer": "readonly" - }, - "ignorePatterns": [ - "node_modules/", - "src/ApiClient/generatedcode/", - "webpack*.js", - "scripts/patcher/", - "scripts/api_download.js", - "scripts/generate_enums.js" - ], - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2018, - "sourceType": "module", - "tsconfigRootDir": ".", - "project": ["./tsconfig.json"] - }, - "plugins": ["react", "@typescript-eslint", "prettier", "simple-import-sort"], - "rules": { - "simple-import-sort/sort": "error", - "@typescript-eslint/explicit-member-accessibility": [ - "error", - { - "accessibility": "explicit" - } - ], - "linebreak-style": "off", - "no-unused-vars": "off", - "prettier/prettier": "error", - "import/no-cycle": "error", - "@typescript-eslint/unbound-method": "off", - "@typescript-eslint/ban-ts-comment": [ - "warn", - { - "ts-expect-error": "allow-with-description" - } - ], - "@typescript-eslint/no-non-null-assertion": "off", - "@typescript-eslint/no-empty-interface": "off" - }, - "settings": { - "react": { - "version": "detect" - } - } -} diff --git a/src/Tgstation.Server.Host/ClientApp/.github/workflows/CI.yml b/src/Tgstation.Server.Host/ClientApp/.github/workflows/CI.yml deleted file mode 100644 index f488ca6a62..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/.github/workflows/CI.yml +++ /dev/null @@ -1,36 +0,0 @@ -name: Node.js CI - -on: [push, pull_request] - -jobs: - build: - - runs-on: ubuntu-latest - - strategy: - matrix: - node-version: [12.x, 14.x] - - steps: - - uses: actions/checkout@v2 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v1 - with: - node-version: ${{ matrix.node-version }} - - run: npm ci - - run: npm run build - lint: - runs-on: ubuntu-latest - - strategy: - matrix: - node-version: [12.x, 14.x] - - steps: - - uses: actions/checkout@v2 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v1 - with: - node-version: ${{ matrix.node-version }} - - run: npm ci - - run: npm run lint diff --git a/src/Tgstation.Server.Host/ClientApp/.gitignore b/src/Tgstation.Server.Host/ClientApp/.gitignore deleted file mode 100644 index d7274e38c7..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/.gitignore +++ /dev/null @@ -1,34 +0,0 @@ -# See https://help.github.com/ignore-files/ for more about ignoring files. - -# dependencies -/node_modules - -# testing -/coverage -/stats.json - -# production -/build -/dist - -# misc -.DS_Store -.env.local -.env.development.local -.env.test.local -.env.production.local -/.idea/dataSources* - - -package_version.txt - -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -*.tgz - -/tgstation-server-control-panel-.*\.tgz - -#generated code -src/ApiClient/generatedcode diff --git a/src/Tgstation.Server.Host/ClientApp/.idea/.gitignore b/src/Tgstation.Server.Host/ClientApp/.idea/.gitignore deleted file mode 100644 index e7e9d11d4b..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/.idea/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# Default ignored files -/workspace.xml diff --git a/src/Tgstation.Server.Host/ClientApp/.idea/codeStyles/Project.xml b/src/Tgstation.Server.Host/ClientApp/.idea/codeStyles/Project.xml deleted file mode 100644 index 33797513d8..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/.idea/codeStyles/Project.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Tgstation.Server.Host/ClientApp/.idea/codeStyles/codeStyleConfig.xml b/src/Tgstation.Server.Host/ClientApp/.idea/codeStyles/codeStyleConfig.xml deleted file mode 100644 index 79ee123c2b..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/.idea/codeStyles/codeStyleConfig.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/src/Tgstation.Server.Host/ClientApp/.idea/compiler.xml b/src/Tgstation.Server.Host/ClientApp/.idea/compiler.xml deleted file mode 100644 index 9736612612..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/.idea/compiler.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/Tgstation.Server.Host/ClientApp/.idea/dataSources.xml b/src/Tgstation.Server.Host/ClientApp/.idea/dataSources.xml deleted file mode 100644 index 18a78734ca..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/.idea/dataSources.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - mariadb - true - org.mariadb.jdbc.Driver - jdbc:mariadb://localhost:3306 - - - \ No newline at end of file diff --git a/src/Tgstation.Server.Host/ClientApp/.idea/inspectionProfiles/Eslint.xml b/src/Tgstation.Server.Host/ClientApp/.idea/inspectionProfiles/Eslint.xml deleted file mode 100644 index 78d7bf54ee..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/.idea/inspectionProfiles/Eslint.xml +++ /dev/null @@ -1,1504 +0,0 @@ - - - - \ No newline at end of file diff --git a/src/Tgstation.Server.Host/ClientApp/.idea/inspectionProfiles/Project_Default.xml b/src/Tgstation.Server.Host/ClientApp/.idea/inspectionProfiles/Project_Default.xml deleted file mode 100644 index a66e284c7b..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/.idea/inspectionProfiles/Project_Default.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - \ No newline at end of file diff --git a/src/Tgstation.Server.Host/ClientApp/.idea/jsLibraryMappings.xml b/src/Tgstation.Server.Host/ClientApp/.idea/jsLibraryMappings.xml deleted file mode 100644 index 07a456b5d8..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/.idea/jsLibraryMappings.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/src/Tgstation.Server.Host/ClientApp/.idea/misc.xml b/src/Tgstation.Server.Host/ClientApp/.idea/misc.xml deleted file mode 100644 index 24eb271ab3..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/.idea/misc.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/Tgstation.Server.Host/ClientApp/.idea/modules.xml b/src/Tgstation.Server.Host/ClientApp/.idea/modules.xml deleted file mode 100644 index 2ca627f5f5..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/src/Tgstation.Server.Host/ClientApp/.idea/prettier.xml b/src/Tgstation.Server.Host/ClientApp/.idea/prettier.xml deleted file mode 100644 index b0ab31a954..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/.idea/prettier.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/Tgstation.Server.Host/ClientApp/.idea/statistic.xml b/src/Tgstation.Server.Host/ClientApp/.idea/statistic.xml deleted file mode 100644 index c57e224f45..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/.idea/statistic.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/src/Tgstation.Server.Host/ClientApp/.idea/tgs4panel.iml b/src/Tgstation.Server.Host/ClientApp/.idea/tgs4panel.iml deleted file mode 100644 index c72b921c2a..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/.idea/tgs4panel.iml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Tgstation.Server.Host/ClientApp/.idea/vcs.xml b/src/Tgstation.Server.Host/ClientApp/.idea/vcs.xml deleted file mode 100644 index 35eb1ddfbb..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/src/Tgstation.Server.Host/ClientApp/.prettierrc b/src/Tgstation.Server.Host/ClientApp/.prettierrc deleted file mode 100644 index 7224b63429..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/.prettierrc +++ /dev/null @@ -1,10 +0,0 @@ -{ - "arrowParens": "avoid", - "endOfLine": "auto", - "jsxBracketSameLine": true, - "semi": true, - "singleQuote": false, - "tabWidth": 4, - "trailingComma": "none", - "printWidth": 100 -} diff --git a/src/Tgstation.Server.Host/ClientApp/.vscode/extensions.json b/src/Tgstation.Server.Host/ClientApp/.vscode/extensions.json deleted file mode 100644 index 400ff26bef..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/.vscode/extensions.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "recommendations": ["dbaeumer.vscode-eslint", "eg2.vscode-npm-script"] -} diff --git a/src/Tgstation.Server.Host/ClientApp/.vscode/launch.json b/src/Tgstation.Server.Host/ClientApp/.vscode/launch.json deleted file mode 100644 index a9449c101a..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/.vscode/launch.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - //this SO question can help you setup a debug environment https://stackoverflow.com/questions/48059983/react-debug-using-vscode-and-firefox-instead-of-chrome - "version": "0.2.0", - "configurations": [ - { - "type": "chrome", - "request": "launch", - "name": "Launch Chrome", - "url": "http://localhost:3000/tgstation-server-control-panel", - "webRoot": "${workspaceFolder}" - } - ] -} diff --git a/src/Tgstation.Server.Host/ClientApp/.vscode/settings.json b/src/Tgstation.Server.Host/ClientApp/.vscode/settings.json deleted file mode 100644 index b43d529b52..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/.vscode/settings.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "editor.formatOnSave": true, - "files.insertFinalNewline": true, - "eslint.validate": ["typescript", "typescriptreact"], - "[javascriptreact]": { - "editor.codeActionsOnSave": { - "source.fixAll.eslint": true - } - }, - "[typescript]": { - "editor.formatOnSave": false, - "editor.codeActionsOnSave": { - "source.fixAll.eslint": true - } - }, - "[typescriptreact]": { - "editor.formatOnSave": false, - "editor.codeActionsOnSave": { - "source.fixAll.eslint": true - } - } -} diff --git a/src/Tgstation.Server.Host/ClientApp/LICENSE b/src/Tgstation.Server.Host/ClientApp/LICENSE deleted file mode 100644 index dba13ed2dd..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/LICENSE +++ /dev/null @@ -1,661 +0,0 @@ - GNU AFFERO GENERAL PUBLIC LICENSE - Version 3, 19 November 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU Affero General Public License is a free, copyleft license for -software and other kinds of works, specifically designed to ensure -cooperation with the community in the case of network server software. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -our General Public Licenses are intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - Developers that use our General Public Licenses protect your rights -with two steps: (1) assert copyright on the software, and (2) offer -you this License which gives you legal permission to copy, distribute -and/or modify the software. - - A secondary benefit of defending all users' freedom is that -improvements made in alternate versions of the program, if they -receive widespread use, become available for other developers to -incorporate. Many developers of free software are heartened and -encouraged by the resulting cooperation. However, in the case of -software used on network servers, this result may fail to come about. -The GNU General Public License permits making a modified version and -letting the public access it on a server without ever releasing its -source code to the public. - - The GNU Affero General Public License is designed specifically to -ensure that, in such cases, the modified source code becomes available -to the community. It requires the operator of a network server to -provide the source code of the modified version running there to the -users of that server. Therefore, public use of a modified version, on -a publicly accessible server, gives the public access to the source -code of the modified version. - - An older license, called the Affero General Public License and -published by Affero, was designed to accomplish similar goals. This is -a different license, not a version of the Affero GPL, but Affero has -released a new version of the Affero GPL which permits relicensing under -this license. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU Affero General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Remote Network Interaction; Use with the GNU General Public License. - - Notwithstanding any other provision of this License, if you modify the -Program, your modified version must prominently offer all users -interacting with it remotely through a computer network (if your version -supports such interaction) an opportunity to receive the Corresponding -Source of your version by providing access to the Corresponding Source -from a network server at no charge, through some standard or customary -means of facilitating copying of software. This Corresponding Source -shall include the Corresponding Source for any work covered by version 3 -of the GNU General Public License that is incorporated pursuant to the -following paragraph. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the work with which it is combined will remain governed by version -3 of the GNU General Public License. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU Affero General Public License from time to time. Such new versions -will be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU Affero General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU Affero General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU Affero General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If your software can interact with users remotely through a computer -network, you should also make sure that it provides a way for users to -get its source. For example, if your program is a web application, its -interface could display a "Source" link that leads users to an archive -of the code. There are many ways you could offer source, and different -solutions will be better for different programs; see section 13 for the -specific requirements. - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU AGPL, see -. diff --git a/src/Tgstation.Server.Host/ClientApp/README.md b/src/Tgstation.Server.Host/ClientApp/README.md deleted file mode 100644 index 259c85a69a..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/README.md +++ /dev/null @@ -1 +0,0 @@ -# tgstation-server-control-panel \ No newline at end of file diff --git a/src/Tgstation.Server.Host/ClientApp/package-lock.json b/src/Tgstation.Server.Host/ClientApp/package-lock.json deleted file mode 100644 index bf95a24e3c..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/package-lock.json +++ /dev/null @@ -1,15655 +0,0 @@ -{ - "name": "tgstation-server-control-panel", - "version": "0.4.1", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@anttiviljami/dtsgenerator": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@anttiviljami/dtsgenerator/-/dtsgenerator-2.5.2.tgz", - "integrity": "sha512-lpM6xpKojw2ToY5EMdhdq7ZdyiueYfTbav+Hmtof2KjFWB9po+CYTEEJqFp4/aR1Kjj43ozRfmUs/MWrrHoMaA==", - "dev": true, - "requires": { - "commander": "^5.0.0", - "cross-fetch": "^3.0.4", - "debug": "^4.1.1", - "glob": "^7.1.6", - "js-yaml": "^3.13.1", - "mkdirp": "^1.0.3", - "tslib": "^1.11.1" - }, - "dependencies": { - "commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - } - } - }, - "@apidevtools/json-schema-ref-parser": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-8.0.0.tgz", - "integrity": "sha512-n4YBtwQhdpLto1BaUCyAeflizmIbaloGShsPyRtFf5qdFJxfssj+GgLavczgKJFa3Bq+3St2CKcpRJdjtB4EBw==", - "requires": { - "@jsdevtools/ono": "^7.1.0", - "call-me-maybe": "^1.0.1", - "js-yaml": "^3.13.1" - } - }, - "@apidevtools/openapi-schemas": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@apidevtools/openapi-schemas/-/openapi-schemas-2.0.3.tgz", - "integrity": "sha512-QoPaxGXfgqgGpK1p21FJ400z56hV681a8DOcZt3J5z0WIHgFeaIZ4+6bX5ATqmOoCpRCsH4ITEwKaOyFMz7wOA==" - }, - "@apidevtools/swagger-methods": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@apidevtools/swagger-methods/-/swagger-methods-3.0.1.tgz", - "integrity": "sha512-1Vlm18XYW6Yg7uHunroXeunWz5FShPFAdxBbPy8H6niB2Elz9QQsCoYHMbcc11EL1pTxaIr9HXz2An/mHXlX1Q==" - }, - "@apidevtools/swagger-parser": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@apidevtools/swagger-parser/-/swagger-parser-9.0.1.tgz", - "integrity": "sha512-Irqybg4dQrcHhZcxJc/UM4vO7Ksoj1Id5e+K94XUOzllqX1n47HEA50EKiXTCQbykxuJ4cYGIivjx/MRSTC5OA==", - "requires": { - "@apidevtools/json-schema-ref-parser": "^8.0.0", - "@apidevtools/openapi-schemas": "^2.0.2", - "@apidevtools/swagger-methods": "^3.0.0", - "@jsdevtools/ono": "^7.1.0", - "call-me-maybe": "^1.0.1", - "openapi-types": "^1.3.5", - "z-schema": "^4.2.2" - }, - "dependencies": { - "openapi-types": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-1.3.5.tgz", - "integrity": "sha512-11oi4zYorsgvg5yBarZplAqbpev5HkuVNPlZaPTknPDzAynq+lnJdXAmruGWP0s+dNYZS7bjM+xrTpJw7184Fg==" - } - } - }, - "@babel/code-frame": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.8.3" - } - }, - "@babel/compat-data": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.10.5.tgz", - "integrity": "sha512-mPVoWNzIpYJHbWje0if7Ck36bpbtTvIxOi9+6WSK9wjGEXearAqlwBoTQvVjsAY2VIwgcs8V940geY3okzRCEw==", - "requires": { - "browserslist": "^4.12.0", - "invariant": "^2.2.4", - "semver": "^5.5.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "@babel/core": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz", - "integrity": "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.0", - "@babel/helper-module-transforms": "^7.9.0", - "@babel/helpers": "^7.9.0", - "@babel/parser": "^7.9.0", - "@babel/template": "^7.8.6", - "@babel/traverse": "^7.9.0", - "@babel/types": "^7.9.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.13", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.6.tgz", - "integrity": "sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ==", - "dev": true, - "requires": { - "@babel/types": "^7.9.6", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", - "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", - "requires": { - "@babel/types": "^7.10.4" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" - }, - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@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" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" - }, - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-builder-react-jsx": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.4.tgz", - "integrity": "sha512-5nPcIZ7+KKDxT1427oBivl9V9YTal7qk0diccnh7RrcgrT/pGFOjgGw1dgryyx1GvHEpXVfoDF6Ak3rTiWh8Rg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/types": "^7.10.4" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", - "dev": true - }, - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-builder-react-jsx-experimental": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.10.5.tgz", - "integrity": "sha512-Buewnx6M4ttG+NLkKyt7baQn7ScC/Td+e99G914fRU8fGIUivDDgVIQeDHFa5e4CRSJQt58WpNHhsAZgtzVhsg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-module-imports": "^7.10.4", - "@babel/types": "^7.10.5" - }, - "dependencies": { - "@babel/helper-module-imports": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", - "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", - "dev": true - }, - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-compilation-targets": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz", - "integrity": "sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ==", - "requires": { - "@babel/compat-data": "^7.10.4", - "browserslist": "^4.12.0", - "invariant": "^2.2.4", - "levenary": "^1.1.1", - "semver": "^5.5.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz", - "integrity": "sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A==", - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-member-expression-to-functions": "^7.10.5", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/generator": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.5.tgz", - "integrity": "sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==", - "requires": { - "@babel/types": "^7.10.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.5.tgz", - "integrity": "sha512-HiqJpYD5+WopCXIAbQDG0zye5XYVvcO9w/DHp5GsaGkRUaamLj2bEtu6i8rnGGprAhHM3qidCMgp71HF4endhA==", - "requires": { - "@babel/types": "^7.10.5" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-replace-supers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", - "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", - "requires": { - "@babel/helper-member-expression-to-functions": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", - "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" - }, - "@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.10.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", - "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz", - "integrity": "sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.10.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/parser": "^7.10.5", - "@babel/types": "^7.10.5", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.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==" - } - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz", - "integrity": "sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-regex": "^7.10.4", - "regexpu-core": "^4.7.0" - } - }, - "@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" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" - }, - "@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.10.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", - "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.4.tgz", - "integrity": "sha512-4K71RyRQNPRrR85sr5QY4X3VwG4wtVoXZB9+L3r1Gp38DhELyHCtovqydRi7c1Ovb17eRGiQ/FD5s8JdU0Uy5A==", - "requires": { - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/generator": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.5.tgz", - "integrity": "sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==", - "requires": { - "@babel/types": "^7.10.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", - "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" - }, - "@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.10.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", - "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz", - "integrity": "sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.10.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/parser": "^7.10.5", - "@babel/types": "^7.10.5", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.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==" - } - } - }, - "@babel/helper-function-name": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz", - "integrity": "sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/types": "^7.9.5" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", - "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" - } - }, - "@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" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" - }, - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz", - "integrity": "sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" - } - }, - "@babel/helper-module-imports": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz", - "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" - } - }, - "@babel/helper-module-transforms": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz", - "integrity": "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.8.3", - "@babel/helper-replace-supers": "^7.8.6", - "@babel/helper-simple-access": "^7.8.3", - "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/template": "^7.8.6", - "@babel/types": "^7.9.0", - "lodash": "^4.17.13" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz", - "integrity": "sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" - } - }, - "@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-regex": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", - "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", - "requires": { - "lodash": "^4.17.19" - } - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.4.tgz", - "integrity": "sha512-86Lsr6NNw3qTNl+TBcF1oRZMaVzJtbWTyTko+CQL/tvNvcGYEFKbLXDPxtW0HKk3McNOk4KzY55itGWCAGK5tg==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-wrap-function": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/generator": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.5.tgz", - "integrity": "sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==", - "requires": { - "@babel/types": "^7.10.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", - "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" - }, - "@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.10.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", - "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz", - "integrity": "sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.10.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/parser": "^7.10.5", - "@babel/types": "^7.10.5", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.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==" - } - } - }, - "@babel/helper-replace-supers": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.9.6.tgz", - "integrity": "sha512-qX+chbxkbArLyCImk3bWV+jB5gTNU/rsze+JlcF6Nf8tVTigPJSI1o1oBow/9Resa1yehUO9lIipsmu9oG4RzA==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.8.3", - "@babel/helper-optimise-call-expression": "^7.8.3", - "@babel/traverse": "^7.9.6", - "@babel/types": "^7.9.6" - } - }, - "@babel/helper-simple-access": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz", - "integrity": "sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==", - "dev": true, - "requires": { - "@babel/template": "^7.8.3", - "@babel/types": "^7.8.3" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", - "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz", - "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==" - }, - "@babel/helper-wrap-function": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz", - "integrity": "sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug==", - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/generator": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.5.tgz", - "integrity": "sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==", - "requires": { - "@babel/types": "^7.10.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", - "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" - }, - "@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.10.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", - "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz", - "integrity": "sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.10.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/parser": "^7.10.5", - "@babel/types": "^7.10.5", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.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==" - } - } - }, - "@babel/helpers": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.6.tgz", - "integrity": "sha512-tI4bUbldloLcHWoRUMAj4g1bF313M/o6fBKhIsb3QnGVPwRm9JsNf/gqMkQ7zjqReABiffPV6RWj7hEglID5Iw==", - "dev": true, - "requires": { - "@babel/template": "^7.8.3", - "@babel/traverse": "^7.9.6", - "@babel/types": "^7.9.6" - } - }, - "@babel/highlight": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", - "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.6.tgz", - "integrity": "sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q==", - "dev": true - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz", - "integrity": "sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.10.4", - "@babel/plugin-syntax-async-generators": "^7.8.0" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz", - "integrity": "sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz", - "integrity": "sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-dynamic-import": "^7.8.0" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz", - "integrity": "sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.0" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz", - "integrity": "sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz", - "integrity": "sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.4.tgz", - "integrity": "sha512-6vh4SqRuLLarjgeOf4EaROJAHjvu9Gl+/346PbDH9yWbJyfnJ/ah3jmYKYtswEyCoWZiidvVHjHshd4WgjB9BA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.10.4" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz", - "integrity": "sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.4.tgz", - "integrity": "sha512-ZIhQIEeavTgouyMSdZRap4VPPHqJJ3NEs2cuHs5p0erH+iz6khB0qfgU8g7UuJkG88+fBMy23ZiU+nuHvekJeQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-optional-chaining": "^7.8.0" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz", - "integrity": "sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz", - "integrity": "sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", - "@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.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz", - "integrity": "sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA==", - "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-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.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz", - "integrity": "sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g==", - "dev": true, - "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.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz", - "integrity": "sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.10.4.tgz", - "integrity": "sha512-oSAEz1YkBCAKr5Yiq8/BNtvSAPwkp/IyUnwZogd8p+F0RuYQQrLeRUzIQhueQTTBy/F+a40uS7OFKxnkRvmvFQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz", - "integrity": "sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz", - "integrity": "sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ==", - "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.10.4" - }, - "dependencies": { - "@babel/helper-module-imports": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", - "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" - }, - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz", - "integrity": "sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.5.tgz", - "integrity": "sha512-6Ycw3hjpQti0qssQcA6AMSFDHeNJ++R6dIMnpRqUjFeBBTmTDPa8zgF90OVfTvAo11mXZTlVUViY1g8ffrURLg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz", - "integrity": "sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA==", - "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.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "globals": "^11.1.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/generator": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.5.tgz", - "integrity": "sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==", - "requires": { - "@babel/types": "^7.10.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.5.tgz", - "integrity": "sha512-HiqJpYD5+WopCXIAbQDG0zye5XYVvcO9w/DHp5GsaGkRUaamLj2bEtu6i8rnGGprAhHM3qidCMgp71HF4endhA==", - "requires": { - "@babel/types": "^7.10.5" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-replace-supers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", - "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", - "requires": { - "@babel/helper-member-expression-to-functions": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", - "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" - }, - "@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.10.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", - "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz", - "integrity": "sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.10.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/parser": "^7.10.5", - "@babel/types": "^7.10.5", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.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==" - } - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz", - "integrity": "sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz", - "integrity": "sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz", - "integrity": "sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz", - "integrity": "sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz", - "integrity": "sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw==", - "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.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz", - "integrity": "sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz", - "integrity": "sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg==", - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" - }, - "@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.10.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", - "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/plugin-transform-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz", - "integrity": "sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz", - "integrity": "sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz", - "integrity": "sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw==", - "requires": { - "@babel/helper-module-transforms": "^7.10.5", - "@babel/helper-plugin-utils": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/generator": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.5.tgz", - "integrity": "sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==", - "requires": { - "@babel/types": "^7.10.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.5.tgz", - "integrity": "sha512-HiqJpYD5+WopCXIAbQDG0zye5XYVvcO9w/DHp5GsaGkRUaamLj2bEtu6i8rnGGprAhHM3qidCMgp71HF4endhA==", - "requires": { - "@babel/types": "^7.10.5" - } - }, - "@babel/helper-module-imports": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", - "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-module-transforms": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.5.tgz", - "integrity": "sha512-4P+CWMJ6/j1W915ITJaUkadLObmCRRSC234uctJfn/vHrsLNxsR8dwlcXv9ZhJWzl77awf+mWXSZEKt5t0OnlA==", - "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-simple-access": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.5", - "lodash": "^4.17.19" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-replace-supers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", - "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", - "requires": { - "@babel/helper-member-expression-to-functions": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-simple-access": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", - "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", - "requires": { - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", - "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" - }, - "@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.10.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", - "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz", - "integrity": "sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.10.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/parser": "^7.10.5", - "@babel/types": "^7.10.5", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.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==" - } - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz", - "integrity": "sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w==", - "requires": { - "@babel/helper-module-transforms": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-simple-access": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/generator": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.5.tgz", - "integrity": "sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==", - "requires": { - "@babel/types": "^7.10.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.5.tgz", - "integrity": "sha512-HiqJpYD5+WopCXIAbQDG0zye5XYVvcO9w/DHp5GsaGkRUaamLj2bEtu6i8rnGGprAhHM3qidCMgp71HF4endhA==", - "requires": { - "@babel/types": "^7.10.5" - } - }, - "@babel/helper-module-imports": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", - "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-module-transforms": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.5.tgz", - "integrity": "sha512-4P+CWMJ6/j1W915ITJaUkadLObmCRRSC234uctJfn/vHrsLNxsR8dwlcXv9ZhJWzl77awf+mWXSZEKt5t0OnlA==", - "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-simple-access": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.5", - "lodash": "^4.17.19" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-replace-supers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", - "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", - "requires": { - "@babel/helper-member-expression-to-functions": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-simple-access": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", - "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", - "requires": { - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", - "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" - }, - "@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.10.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", - "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz", - "integrity": "sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.10.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/parser": "^7.10.5", - "@babel/types": "^7.10.5", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.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==" - } - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz", - "integrity": "sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw==", - "requires": { - "@babel/helper-hoist-variables": "^7.10.4", - "@babel/helper-module-transforms": "^7.10.5", - "@babel/helper-plugin-utils": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/generator": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.5.tgz", - "integrity": "sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==", - "requires": { - "@babel/types": "^7.10.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.5.tgz", - "integrity": "sha512-HiqJpYD5+WopCXIAbQDG0zye5XYVvcO9w/DHp5GsaGkRUaamLj2bEtu6i8rnGGprAhHM3qidCMgp71HF4endhA==", - "requires": { - "@babel/types": "^7.10.5" - } - }, - "@babel/helper-module-imports": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", - "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-module-transforms": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.5.tgz", - "integrity": "sha512-4P+CWMJ6/j1W915ITJaUkadLObmCRRSC234uctJfn/vHrsLNxsR8dwlcXv9ZhJWzl77awf+mWXSZEKt5t0OnlA==", - "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-simple-access": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.5", - "lodash": "^4.17.19" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-replace-supers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", - "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", - "requires": { - "@babel/helper-member-expression-to-functions": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-simple-access": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", - "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", - "requires": { - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", - "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" - }, - "@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.10.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", - "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz", - "integrity": "sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.10.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/parser": "^7.10.5", - "@babel/types": "^7.10.5", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.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==" - } - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz", - "integrity": "sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA==", - "requires": { - "@babel/helper-module-transforms": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/generator": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.5.tgz", - "integrity": "sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==", - "requires": { - "@babel/types": "^7.10.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.5.tgz", - "integrity": "sha512-HiqJpYD5+WopCXIAbQDG0zye5XYVvcO9w/DHp5GsaGkRUaamLj2bEtu6i8rnGGprAhHM3qidCMgp71HF4endhA==", - "requires": { - "@babel/types": "^7.10.5" - } - }, - "@babel/helper-module-imports": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", - "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-module-transforms": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.5.tgz", - "integrity": "sha512-4P+CWMJ6/j1W915ITJaUkadLObmCRRSC234uctJfn/vHrsLNxsR8dwlcXv9ZhJWzl77awf+mWXSZEKt5t0OnlA==", - "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-simple-access": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.5", - "lodash": "^4.17.19" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-replace-supers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", - "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", - "requires": { - "@babel/helper-member-expression-to-functions": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-simple-access": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", - "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", - "requires": { - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", - "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" - }, - "@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.10.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", - "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz", - "integrity": "sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.10.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/parser": "^7.10.5", - "@babel/types": "^7.10.5", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.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==" - } - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz", - "integrity": "sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz", - "integrity": "sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz", - "integrity": "sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/generator": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.5.tgz", - "integrity": "sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==", - "requires": { - "@babel/types": "^7.10.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.5.tgz", - "integrity": "sha512-HiqJpYD5+WopCXIAbQDG0zye5XYVvcO9w/DHp5GsaGkRUaamLj2bEtu6i8rnGGprAhHM3qidCMgp71HF4endhA==", - "requires": { - "@babel/types": "^7.10.5" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-replace-supers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", - "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", - "requires": { - "@babel/helper-member-expression-to-functions": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", - "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" - }, - "@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.10.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", - "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz", - "integrity": "sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.10.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/parser": "^7.10.5", - "@babel/types": "^7.10.5", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.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==" - } - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz", - "integrity": "sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw==", - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - }, - "dependencies": { - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" - }, - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz", - "integrity": "sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-react-display-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.10.4.tgz", - "integrity": "sha512-Zd4X54Mu9SBfPGnEcaGcOrVAYOtjT2on8QZkLKEq1S/tHexG39d9XXGZv19VfRrDjPJzFmPfTAqOQS1pfFOujw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.10.4.tgz", - "integrity": "sha512-L+MfRhWjX0eI7Js093MM6MacKU4M6dnCRa/QPDwYMxjljzSCzzlzKzj9Pk4P3OtrPcxr2N3znR419nr3Xw+65A==", - "dev": true, - "requires": { - "@babel/helper-builder-react-jsx": "^7.10.4", - "@babel/helper-builder-react-jsx-experimental": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-jsx": "^7.10.4" - } - }, - "@babel/plugin-transform-react-jsx-development": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.10.4.tgz", - "integrity": "sha512-RM3ZAd1sU1iQ7rI2dhrZRZGv0aqzNQMbkIUCS1txYpi9wHQ2ZHNjo5TwX+UD6pvFW4AbWqLVYvKy5qJSAyRGjQ==", - "dev": true, - "requires": { - "@babel/helper-builder-react-jsx-experimental": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-jsx": "^7.10.4" - } - }, - "@babel/plugin-transform-react-jsx-self": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.10.4.tgz", - "integrity": "sha512-yOvxY2pDiVJi0axdTWHSMi5T0DILN+H+SaeJeACHKjQLezEzhLx9nEF9xgpBLPtkZsks9cnb5P9iBEi21En3gg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-jsx": "^7.10.4" - } - }, - "@babel/plugin-transform-react-jsx-source": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.10.5.tgz", - "integrity": "sha512-wTeqHVkN1lfPLubRiZH3o73f4rfon42HpgxUSs86Nc+8QIcm/B9s8NNVXu/gwGcOyd7yDib9ikxoDLxJP0UiDA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-jsx": "^7.10.4" - } - }, - "@babel/plugin-transform-react-pure-annotations": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.10.4.tgz", - "integrity": "sha512-+njZkqcOuS8RaPakrnR9KvxjoG1ASJWpoIv/doyWngId88JoFlPlISenGXjrVacZUIALGUr6eodRs1vmPnF23A==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz", - "integrity": "sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw==", - "requires": { - "regenerator-transform": "^0.14.2" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz", - "integrity": "sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.10.5.tgz", - "integrity": "sha512-tV4V/FjElJ9lQtyjr5xD2IFFbgY46r7EeVu5a8CpEKT5laheHKSlFeHjpkPppW3PqzGLAuv5k2qZX5LgVZIX5w==", - "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "resolve": "^1.8.1", - "semver": "^5.5.1" - }, - "dependencies": { - "@babel/helper-module-imports": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", - "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" - }, - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz", - "integrity": "sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.4.tgz", - "integrity": "sha512-1e/51G/Ni+7uH5gktbWv+eCED9pP8ZpRhZB3jOaI3mmzfvJTWHkuyYTv0Z5PYtyM+Tr2Ccr9kUdQxn60fI5WuQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz", - "integrity": "sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-regex": "^7.10.4" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz", - "integrity": "sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz", - "integrity": "sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-typescript": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.10.5.tgz", - "integrity": "sha512-YCyYsFrrRMZ3qR7wRwtSSJovPG5vGyG4ZdcSAivGwTfoasMp3VOB/AKhohu3dFtmB4cCDcsndCSxGtrdliCsZQ==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.10.5", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-typescript": "^7.10.4" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz", - "integrity": "sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz", - "integrity": "sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/preset-env": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.10.4.tgz", - "integrity": "sha512-tcmuQ6vupfMZPrLrc38d0sF2OjLT3/bZ0dry5HchNCQbrokoQi4reXqclvkkAT5b+gWc23meVWpve5P/7+w/zw==", - "requires": { - "@babel/compat-data": "^7.10.4", - "@babel/helper-compilation-targets": "^7.10.4", - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-proposal-async-generator-functions": "^7.10.4", - "@babel/plugin-proposal-class-properties": "^7.10.4", - "@babel/plugin-proposal-dynamic-import": "^7.10.4", - "@babel/plugin-proposal-json-strings": "^7.10.4", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4", - "@babel/plugin-proposal-numeric-separator": "^7.10.4", - "@babel/plugin-proposal-object-rest-spread": "^7.10.4", - "@babel/plugin-proposal-optional-catch-binding": "^7.10.4", - "@babel/plugin-proposal-optional-chaining": "^7.10.4", - "@babel/plugin-proposal-private-methods": "^7.10.4", - "@babel/plugin-proposal-unicode-property-regex": "^7.10.4", - "@babel/plugin-syntax-async-generators": "^7.8.0", - "@babel/plugin-syntax-class-properties": "^7.10.4", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-json-strings": "^7.8.0", - "@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.10.4", - "@babel/plugin-transform-arrow-functions": "^7.10.4", - "@babel/plugin-transform-async-to-generator": "^7.10.4", - "@babel/plugin-transform-block-scoped-functions": "^7.10.4", - "@babel/plugin-transform-block-scoping": "^7.10.4", - "@babel/plugin-transform-classes": "^7.10.4", - "@babel/plugin-transform-computed-properties": "^7.10.4", - "@babel/plugin-transform-destructuring": "^7.10.4", - "@babel/plugin-transform-dotall-regex": "^7.10.4", - "@babel/plugin-transform-duplicate-keys": "^7.10.4", - "@babel/plugin-transform-exponentiation-operator": "^7.10.4", - "@babel/plugin-transform-for-of": "^7.10.4", - "@babel/plugin-transform-function-name": "^7.10.4", - "@babel/plugin-transform-literals": "^7.10.4", - "@babel/plugin-transform-member-expression-literals": "^7.10.4", - "@babel/plugin-transform-modules-amd": "^7.10.4", - "@babel/plugin-transform-modules-commonjs": "^7.10.4", - "@babel/plugin-transform-modules-systemjs": "^7.10.4", - "@babel/plugin-transform-modules-umd": "^7.10.4", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.10.4", - "@babel/plugin-transform-new-target": "^7.10.4", - "@babel/plugin-transform-object-super": "^7.10.4", - "@babel/plugin-transform-parameters": "^7.10.4", - "@babel/plugin-transform-property-literals": "^7.10.4", - "@babel/plugin-transform-regenerator": "^7.10.4", - "@babel/plugin-transform-reserved-words": "^7.10.4", - "@babel/plugin-transform-shorthand-properties": "^7.10.4", - "@babel/plugin-transform-spread": "^7.10.4", - "@babel/plugin-transform-sticky-regex": "^7.10.4", - "@babel/plugin-transform-template-literals": "^7.10.4", - "@babel/plugin-transform-typeof-symbol": "^7.10.4", - "@babel/plugin-transform-unicode-escapes": "^7.10.4", - "@babel/plugin-transform-unicode-regex": "^7.10.4", - "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.10.4", - "browserslist": "^4.12.0", - "core-js-compat": "^3.6.2", - "invariant": "^2.2.2", - "levenary": "^1.1.1", - "semver": "^5.5.0" - }, - "dependencies": { - "@babel/helper-module-imports": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", - "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" - }, - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "@babel/preset-modules": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz", - "integrity": "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==", - "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-react": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.10.4.tgz", - "integrity": "sha512-BrHp4TgOIy4M19JAfO1LhycVXOPWdDbTRep7eVyatf174Hff+6Uk53sDyajqZPu8W1qXRBiYOfIamek6jA7YVw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-transform-react-display-name": "^7.10.4", - "@babel/plugin-transform-react-jsx": "^7.10.4", - "@babel/plugin-transform-react-jsx-development": "^7.10.4", - "@babel/plugin-transform-react-jsx-self": "^7.10.4", - "@babel/plugin-transform-react-jsx-source": "^7.10.4", - "@babel/plugin-transform-react-pure-annotations": "^7.10.4" - } - }, - "@babel/preset-typescript": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.10.4.tgz", - "integrity": "sha512-SdYnvGPv+bLlwkF2VkJnaX/ni1sMNetcGI1+nThF1gyv6Ph8Qucc4ZZAjM5yZcE/AKRXIOTZz7eSRDWOEjPyRQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-transform-typescript": "^7.10.4" - } - }, - "@babel/runtime": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.6.tgz", - "integrity": "sha512-64AF1xY3OAkFHqOb9s4jpgk1Mm5vDZ4L3acHvAml+53nO1XbXLuDodsVpO4OIUsmemlUHMxNdYMNJmsvOwLrvQ==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", - "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/parser": "^7.8.6", - "@babel/types": "^7.8.6" - } - }, - "@babel/traverse": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.6.tgz", - "integrity": "sha512-b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.6", - "@babel/helper-function-name": "^7.9.5", - "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.9.6", - "@babel/types": "^7.9.6", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - }, - "dependencies": { - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz", - "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==", - "requires": { - "@babel/helper-validator-identifier": "^7.9.5", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "@formatjs/ecma402-abstract": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.2.1.tgz", - "integrity": "sha512-LvbwgHxprafjceDfOC7yMl4sP5al71rAWahXk3qug5bV020aCq64WjqAo+zNnkIJk8hqK2pFKnNdDsT58HZJQw==" - }, - "@formatjs/intl-datetimeformat": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@formatjs/intl-datetimeformat/-/intl-datetimeformat-2.1.3.tgz", - "integrity": "sha512-OQA2VNvmmhSCVqDH3sqGlnXj1gYCUR+4JAbRVN5xXLtK085WrbbX63XlhWn921Ab86CatQqueFF0P0y4csae0g==", - "requires": { - "@formatjs/intl-getcanonicallocales": "^1.3.0", - "@formatjs/intl-utils": "^3.8.0" - } - }, - "@formatjs/intl-displaynames": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@formatjs/intl-displaynames/-/intl-displaynames-3.1.3.tgz", - "integrity": "sha512-ljBhpPxDcl5htabLUH3jw2oN/u9uDSCvdWFf04rlBiBKEYzDpTCI8mtNSXMMCH3AdeAl00xp0e+O7fLers3LlA==", - "requires": { - "@formatjs/intl-utils": "^3.8.0" - } - }, - "@formatjs/intl-getcanonicallocales": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@formatjs/intl-getcanonicallocales/-/intl-getcanonicallocales-1.3.0.tgz", - "integrity": "sha512-9HzC7Hjr0Yx+jPQ0aYC5P5Jn/rUZaygDqMuNWgn72k6WcPftN2et1vHFIdBlosnRgWmo57+RgQvITBQi5NLgyQ==", - "requires": { - "cldr-core": "36.0.0" - } - }, - "@formatjs/intl-listformat": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@formatjs/intl-listformat/-/intl-listformat-3.1.3.tgz", - "integrity": "sha512-BPhsyjaTlnemYGsoiaCq8CCM03mmzmO52GwbPF7/QGek6mR64HtiYorq6zZNc5+HtPUGYWJovp59zmxtCFqyQw==", - "requires": { - "@formatjs/intl-utils": "^3.8.0" - } - }, - "@formatjs/intl-numberformat": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@formatjs/intl-numberformat/-/intl-numberformat-5.3.0.tgz", - "integrity": "sha512-V1TshvQNQCbQnR9GIG8ujoYAC4O8zVhedsFeJruzfX3THozK8TVAqaTLobE9SbIUgA/p41cO+rasoQLRBTis7w==", - "requires": { - "@formatjs/intl-utils": "^3.8.0" - } - }, - "@formatjs/intl-pluralrules": { - "version": "3.4.6", - "resolved": "https://registry.npmjs.org/@formatjs/intl-pluralrules/-/intl-pluralrules-3.4.6.tgz", - "integrity": "sha512-6/K0Lqlej2bYM1K3HfSNsEURHlsmWJhrE95k/hZdE4wo7k5S7Fc/QUfHlieLQvCXF77n/zVgzp/9bpgxMDxL0A==", - "requires": { - "@formatjs/ecma402-abstract": "^1.2.1" - } - }, - "@formatjs/intl-relativetimeformat": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/@formatjs/intl-relativetimeformat/-/intl-relativetimeformat-6.2.2.tgz", - "integrity": "sha512-IafCpqDA8VHi6eUhGuHq79mbl5wEt3i+fBGoLjHokkptisydJzy8jQFmp4obsR9SmU9E8NsQfzjs9YpGIFlMuQ==", - "requires": { - "@formatjs/intl-utils": "^3.8.0" - } - }, - "@formatjs/intl-utils": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@formatjs/intl-utils/-/intl-utils-3.8.0.tgz", - "integrity": "sha512-ZesVf+Z6Cm0bDzzkl5ihx/spwJCpPmP3iXK1RryCSJQcEENUcLCAjUu7GSPRVpDS2ZWa3RGSImSYH8DA9bDySA==", - "requires": { - "emojis-list": "^3.0.0" - } - }, - "@fortawesome/fontawesome-common-types": { - "version": "0.2.29", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.29.tgz", - "integrity": "sha512-cY+QfDTbZ7XVxzx7jxbC98Oxr/zc7R2QpTLqTxqlfyXDrAJjzi/xUIqAUsygELB62JIrbsWxtSRhayKFkGI7MA==" - }, - "@fortawesome/fontawesome-svg-core": { - "version": "1.2.29", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.29.tgz", - "integrity": "sha512-xmPmP2t8qrdo8RyKihTkGb09RnZoc+7HFBCnr0/6ZhStdGDSLeEd7ajV181+2W29NWIFfylO13rU+s3fpy3cnA==", - "requires": { - "@fortawesome/fontawesome-common-types": "^0.2.29" - } - }, - "@fortawesome/free-brands-svg-icons": { - "version": "5.13.1", - "resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-5.13.1.tgz", - "integrity": "sha512-dKwF+NpIV2LVCNBA7hibH53k+ChF4Wu59P2z35gu3zwRBZpmpLVhS9k1/RiSqUqkyXUQvA2rSv48GY6wp5axZQ==", - "requires": { - "@fortawesome/fontawesome-common-types": "^0.2.29" - }, - "dependencies": { - "@fortawesome/fontawesome-common-types": { - "version": "0.2.29", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.29.tgz", - "integrity": "sha512-cY+QfDTbZ7XVxzx7jxbC98Oxr/zc7R2QpTLqTxqlfyXDrAJjzi/xUIqAUsygELB62JIrbsWxtSRhayKFkGI7MA==" - } - } - }, - "@fortawesome/free-solid-svg-icons": { - "version": "5.13.1", - "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.13.1.tgz", - "integrity": "sha512-LQH/0L1p4+rqtoSHa9qFYR84hpuRZKqaQ41cfBQx8b68p21zoWSekTAeA54I/2x9VlCHDLFlG74Nmdg4iTPQOg==", - "requires": { - "@fortawesome/fontawesome-common-types": "^0.2.29" - } - }, - "@fortawesome/react-fontawesome": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.11.tgz", - "integrity": "sha512-sClfojasRifQKI0OPqTy8Ln8iIhnxR/Pv/hukBhWnBz9kQRmqi6JSH3nghlhAY7SUeIIM7B5/D2G8WjX0iepVg==", - "requires": { - "prop-types": "^15.7.2" - } - }, - "@hot-loader/react-dom": { - "version": "16.13.0", - "resolved": "https://registry.npmjs.org/@hot-loader/react-dom/-/react-dom-16.13.0.tgz", - "integrity": "sha512-lJZrmkucz2MrQJTQtJobx5MICXcfQvKihszqv655p557HPi0hMOWxrNpiHv3DWD8ugNWjtWcVWqRnFvwsHq1mQ==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.19.0" - } - }, - "@jsdevtools/ono": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.2.tgz", - "integrity": "sha512-qS/a24RA5FEoiJS9wiv6Pwg2c/kiUo3IVUQcfeM9JvsR6pM8Yx+yl/6xWYLckZCT5jpLNhslgjiA8p/XcGyMRQ==" - }, - "@loadable/component": { - "version": "5.13.1", - "resolved": "https://registry.npmjs.org/@loadable/component/-/component-5.13.1.tgz", - "integrity": "sha512-qTNfTv5bVfb9eTKNUOMzPweRnxzNaxCmLZEsFEMn+kxpd86iXae+IpibXFJlnb052Q4fVkcWM2tvmWLc/+HzLg==", - "requires": { - "@babel/runtime": "^7.7.7", - "hoist-non-react-statics": "^3.3.1", - "react-is": "^16.12.0" - } - }, - "@mapbox/react-click-to-select": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@mapbox/react-click-to-select/-/react-click-to-select-2.2.0.tgz", - "integrity": "sha512-L42P/vM4IP8NfvF5EEm0qRR1GjriHj+KFnuGo6U2gP1qdGFqZxj7VloHX5TGJPsQQVJH+BmjWAmF9RebeQ4ubQ==" - }, - "@nodelib/fs.scandir": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", - "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.3", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", - "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.3", - "fastq": "^1.6.0" - } - }, - "@npmcli/move-file": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.0.1.tgz", - "integrity": "sha512-Uv6h1sT+0DrblvIrolFtbvM1FgWm+/sy4B3pvLp67Zys+thcukzS5ekn7HsZFGpWP4Q3fYJCljbWQE/XivMRLw==", - "dev": true, - "requires": { - "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 - } - } - }, - "@octokit/auth-token": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.2.tgz", - "integrity": "sha512-jE/lE/IKIz2v1+/P0u4fJqv0kYwXOTujKemJMFr6FeopsxlIK3+wKDCJGnysg81XID5TgZQbIfuJ5J0lnTiuyQ==", - "requires": { - "@octokit/types": "^5.0.0" - } - }, - "@octokit/core": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.1.0.tgz", - "integrity": "sha512-yPyQSmxIXLieEIRikk2w8AEtWkFdfG/LXcw1KvEtK3iP0ENZLW/WYQmdzOKqfSaLhooz4CJ9D+WY79C8ZliACw==", - "requires": { - "@octokit/auth-token": "^2.4.0", - "@octokit/graphql": "^4.3.1", - "@octokit/request": "^5.4.0", - "@octokit/types": "^5.0.0", - "before-after-hook": "^2.1.0", - "universal-user-agent": "^5.0.0" - } - }, - "@octokit/endpoint": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.3.tgz", - "integrity": "sha512-Y900+r0gIz+cWp6ytnkibbD95ucEzDSKzlEnaWS52hbCDNcCJYO5mRmWW7HRAnDc7am+N/5Lnd8MppSaTYx1Yg==", - "requires": { - "@octokit/types": "^5.0.0", - "is-plain-object": "^3.0.0", - "universal-user-agent": "^5.0.0" - }, - "dependencies": { - "is-plain-object": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz", - "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==" - } - } - }, - "@octokit/graphql": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.5.1.tgz", - "integrity": "sha512-qgMsROG9K2KxDs12CO3bySJaYoUu2aic90qpFrv7A8sEBzZ7UFGvdgPKiLw5gOPYEYbS0Xf8Tvf84tJutHPulQ==", - "requires": { - "@octokit/request": "^5.3.0", - "@octokit/types": "^5.0.0", - "universal-user-agent": "^5.0.0" - } - }, - "@octokit/plugin-paginate-rest": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.2.3.tgz", - "integrity": "sha512-eKTs91wXnJH8Yicwa30jz6DF50kAh7vkcqCQ9D7/tvBAP5KKkg6I2nNof8Mp/65G0Arjsb4QcOJcIEQY+rK1Rg==", - "requires": { - "@octokit/types": "^5.0.0" - } - }, - "@octokit/plugin-request-log": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.0.tgz", - "integrity": "sha512-ywoxP68aOT3zHCLgWZgwUJatiENeHE7xJzYjfz8WI0goynp96wETBF+d95b8g/uL4QmS6owPVlaxiz3wyMAzcw==" - }, - "@octokit/plugin-rest-endpoint-methods": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-4.0.0.tgz", - "integrity": "sha512-emS6gysz4E9BNi9IrCl7Pm4kR+Az3MmVB0/DoDCmF4U48NbYG3weKyDlgkrz6Jbl4Mu4nDx8YWZwC4HjoTdcCA==", - "requires": { - "@octokit/types": "^5.0.0", - "deprecation": "^2.3.1" - } - }, - "@octokit/plugin-retry": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-3.0.3.tgz", - "integrity": "sha512-RFvcBg4JGyfWTWE35EIF7jf/eglIk5MuvfygzdIMLIVK3/4Ywz3X1x9Ri75nlyAmk53EpVWB4DwM/xEB1NXxXA==", - "requires": { - "@octokit/types": "^5.0.0", - "bottleneck": "^2.15.3" - } - }, - "@octokit/plugin-throttling": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-3.3.0.tgz", - "integrity": "sha512-0hMtpqTAwAvo3XkNoaPQFqX2+csfbuR0bYpruHq3anrBrhQFPt9Gn01RVqqoDla/qBYmIIY2MRirxlaLO21Apg==", - "requires": { - "@octokit/types": "^5.0.0", - "bottleneck": "^2.15.3" - } - }, - "@octokit/request": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.4.5.tgz", - "integrity": "sha512-atAs5GAGbZedvJXXdjtKljin+e2SltEs48B3naJjqWupYl2IUBbB/CJisyjbNHcKpHzb3E+OYEZ46G8eakXgQg==", - "requires": { - "@octokit/endpoint": "^6.0.1", - "@octokit/request-error": "^2.0.0", - "@octokit/types": "^5.0.0", - "deprecation": "^2.0.0", - "is-plain-object": "^3.0.0", - "node-fetch": "^2.3.0", - "once": "^1.4.0", - "universal-user-agent": "^5.0.0" - }, - "dependencies": { - "is-plain-object": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz", - "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==" - } - } - }, - "@octokit/request-error": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.0.2.tgz", - "integrity": "sha512-2BrmnvVSV1MXQvEkrb9zwzP0wXFNbPJij922kYBTLIlIafukrGOb+ABBT2+c6wZiuyWDH1K1zmjGQ0toN/wMWw==", - "requires": { - "@octokit/types": "^5.0.1", - "deprecation": "^2.0.0", - "once": "^1.4.0" - } - }, - "@octokit/rest": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.0.0.tgz", - "integrity": "sha512-4G/a42lry9NFGuuECnua1R1eoKkdBYJap97jYbWDNYBOUboWcM75GJ1VIcfvwDV/pW0lMPs7CEmhHoVrSV5shg==", - "requires": { - "@octokit/core": "^3.0.0", - "@octokit/plugin-paginate-rest": "^2.2.0", - "@octokit/plugin-request-log": "^1.0.0", - "@octokit/plugin-rest-endpoint-methods": "4.0.0" - } - }, - "@octokit/types": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-5.1.0.tgz", - "integrity": "sha512-OFxUBgrEllAbdEmWp/wNmKIu5EuumKHG4sgy56vjZ8lXPgMhF05c76hmulfOdFHHYRpPj49ygOZJ8wgVsPecuA==", - "requires": { - "@types/node": ">= 8" - } - }, - "@popperjs/core": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.4.4.tgz", - "integrity": "sha512-1oO6+dN5kdIA3sKPZhRGJTfGVP4SWV6KqlMOwry4J3HfyD68sl/3KmG7DeYUzvN+RbhXDnv/D8vNNB8168tAMg==" - }, - "@restart/context": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@restart/context/-/context-2.1.4.tgz", - "integrity": "sha512-INJYZQJP7g+IoDUh/475NlGiTeMfwTXUEr3tmRneckHIxNolGOW9CTq83S8cxq0CgJwwcMzMJFchxvlwe7Rk8Q==" - }, - "@restart/hooks": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.3.25.tgz", - "integrity": "sha512-m2v3N5pxTsIiSH74/sb1yW8D9RxkJidGW+5Mfwn/lHb2QzhZNlaU1su7abSyT9EGf0xS/0waLjrf7/XxQHUk7w==", - "requires": { - "lodash": "^4.17.15", - "lodash-es": "^4.17.15" - } - }, - "@types/anymatch": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz", - "integrity": "sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==", - "dev": true - }, - "@types/classnames": { - "version": "2.2.10", - "resolved": "https://registry.npmjs.org/@types/classnames/-/classnames-2.2.10.tgz", - "integrity": "sha512-1UzDldn9GfYYEsWWnn/P4wkTlkZDH7lDb0wBMGbtIQc9zXEQq7FlKBdZUn6OBqD8sKZZ2RQO2mAjGpXiDGoRmQ==" - }, - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", - "dev": true - }, - "@types/eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", - "dev": true - }, - "@types/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", - "dev": true - }, - "@types/glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", - "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", - "dev": true, - "requires": { - "@types/events": "*", - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/history": { - "version": "4.7.5", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.5.tgz", - "integrity": "sha512-wLD/Aq2VggCJXSjxEwrMafIP51Z+13H78nXIX0ABEuIGhmB5sNGbR113MOKo+yfw+RDo1ZU3DM6yfnnRF/+ouw==", - "dev": true - }, - "@types/hoist-non-react-statics": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", - "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", - "requires": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" - } - }, - "@types/html-minifier-terser": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.0.tgz", - "integrity": "sha512-iYCgjm1dGPRuo12+BStjd1HiVQqhlRhWDOQigNxn023HcjnhsiFz9pc6CzJj4HwDCSQca9bxTL4PxJDbkdm3PA==", - "dev": true - }, - "@types/invariant": { - "version": "2.2.33", - "resolved": "https://registry.npmjs.org/@types/invariant/-/invariant-2.2.33.tgz", - "integrity": "sha512-/jUNmS8d4bCKdqslfxW6dg/9Gksfzxz67IYfqApHn+HvHlMVXwYv2zpTDnS/yaK9BB0i0GlBTaYci0EFE62Hmw==" - }, - "@types/json-schema": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.4.tgz", - "integrity": "sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==", - "dev": true - }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", - "dev": true - }, - "@types/loadable__component": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@types/loadable__component/-/loadable__component-5.13.0.tgz", - "integrity": "sha512-t44mJuu2DR2oP6RGXHuznAsK3eQYzwTcX76enlcwu1Uz9634VyTYNDLCl0WwTcAfCoro3142li+KKGqOMTznbw==", - "dev": true, - "requires": { - "@types/react": "*" - } - }, - "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", - "dev": true - }, - "@types/node": { - "version": "12.12.42", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.42.tgz", - "integrity": "sha512-R/9QdYFLL9dE9l5cWWzWIZByVGFd7lk7JVOJ7KD+E1SJ4gni7XJRLz9QTjyYQiHIqEAgku9VgxdLjMlhhUaAFg==" - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "@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": "16.9.43", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.43.tgz", - "integrity": "sha512-PxshAFcnJqIWYpJbLPriClH53Z2WlJcVZE+NP2etUtWQs2s7yIMj3/LDKZT/5CHJ/F62iyjVCDu2H3jHEXIxSg==", - "requires": { - "@types/prop-types": "*", - "csstype": "^2.2.0" - } - }, - "@types/react-bootstrap": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/react-bootstrap/-/react-bootstrap-1.0.1.tgz", - "integrity": "sha512-n68SeFrpOFWiSN2DCpyn17ZwTZzY8+mio8E9oCrl7abHytUz3r7ZYIKPxaETHYQxCi8oxF3NultpMAyBxFIjhg==", - "dev": true - }, - "@types/react-dom": { - "version": "16.9.8", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.8.tgz", - "integrity": "sha512-ykkPQ+5nFknnlU6lDd947WbQ6TE3NNzbQAkInC2EKY1qeYdTKp7onFusmYZb+ityzx2YviqT6BXSu+LyWWJwcA==", - "dev": true, - "requires": { - "@types/react": "*" - } - }, - "@types/react-router": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.7.tgz", - "integrity": "sha512-2ouP76VQafKjtuc0ShpwUebhHwJo0G6rhahW9Pb8au3tQTjYXd2jta4wv6U2tGLR/I42yuG00+UXjNYY0dTzbg==", - "dev": true, - "requires": { - "@types/history": "*", - "@types/react": "*" - } - }, - "@types/react-router-dom": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.1.5.tgz", - "integrity": "sha512-ArBM4B1g3BWLGbaGvwBGO75GNFbLDUthrDojV2vHLih/Tq8M+tgvY1DSwkuNrPSwdp/GUL93WSEpTZs8nVyJLw==", - "dev": true, - "requires": { - "@types/history": "*", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "@types/react-transition-group": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.0.tgz", - "integrity": "sha512-/QfLHGpu+2fQOqQaXh8MG9q03bFENooTb/it4jr5kKaZlDQfWvjqWZg48AwzPVMBHlRuTRAY7hRHCEOXz5kV6w==", - "requires": { - "@types/react": "*" - } - }, - "@types/source-list-map": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", - "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", - "dev": true - }, - "@types/tapable": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.5.tgz", - "integrity": "sha512-/gG2M/Imw7cQFp8PGvz/SwocNrmKFjFsm5Pb8HdbHkZ1K8pmuPzOX4VeVoiEecFCVf4CsN1r3/BRvx+6sNqwtQ==", - "dev": true - }, - "@types/uglify-js": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.9.2.tgz", - "integrity": "sha512-d6dIfpPbF+8B7WiCi2ELY7m0w1joD8cRW4ms88Emdb2w062NeEpbNCeWwVCgzLRpVG+5e74VFSg4rgJ2xXjEiQ==", - "dev": true, - "requires": { - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "@types/warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/warning/-/warning-3.0.0.tgz", - "integrity": "sha1-DSUBJorY+ZYrdA04fEZU9fjiPlI=" - }, - "@types/webpack": { - "version": "4.41.13", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.13.tgz", - "integrity": "sha512-RYmIHOWSxnTTa765N6jJBVE45pd2SYNblEYshVDduLw6RhocazNmRzE5/ytvBD8IkDMH6DI+bcrqxh8NILimBA==", - "dev": true, - "requires": { - "@types/anymatch": "*", - "@types/node": "*", - "@types/tapable": "*", - "@types/uglify-js": "*", - "@types/webpack-sources": "*", - "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==", - "dev": true - } - } - }, - "@types/webpack-sources": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.7.tgz", - "integrity": "sha512-XyaHrJILjK1VHVC4aVlKsdNN5KBTwufMb43cQs+flGxtPAf/1Qwl8+Q0tp5BwEGaI8D6XT1L+9bSWXckgkjTLw==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/source-list-map": "*", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "@typescript-eslint/eslint-plugin": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.6.1.tgz", - "integrity": "sha512-06lfjo76naNeOMDl+mWG9Fh/a0UHKLGhin+mGaIw72FUMbMGBkdi/FEJmgEDzh4eE73KIYzHWvOCYJ0ak7nrJQ==", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "3.6.1", - "debug": "^4.1.1", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.0.0", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - }, - "dependencies": { - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true - } - } - }, - "@typescript-eslint/experimental-utils": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.6.1.tgz", - "integrity": "sha512-oS+hihzQE5M84ewXrTlVx7eTgc52eu+sVmG7ayLfOhyZmJ8Unvf3osyFQNADHP26yoThFfbxcibbO0d2FjnYhg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/types": "3.6.1", - "@typescript-eslint/typescript-estree": "3.6.1", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" - } - }, - "@typescript-eslint/parser": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-3.6.1.tgz", - "integrity": "sha512-SLihQU8RMe77YJ/jGTqOt0lMq7k3hlPVfp7v/cxMnXA9T0bQYoMDfTsNgHXpwSJM1Iq2aAJ8WqekxUwGv5F67Q==", - "dev": true, - "requires": { - "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "3.6.1", - "@typescript-eslint/types": "3.6.1", - "@typescript-eslint/typescript-estree": "3.6.1", - "eslint-visitor-keys": "^1.1.0" - } - }, - "@typescript-eslint/types": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.6.1.tgz", - "integrity": "sha512-NPxd5yXG63gx57WDTW1rp0cF3XlNuuFFB5G+Kc48zZ+51ZnQn9yjDEsjTPQ+aWM+V+Z0I4kuTFKjKvgcT1F7xQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.6.1.tgz", - "integrity": "sha512-G4XRe/ZbCZkL1fy09DPN3U0mR6SayIv1zSeBNquRFRk7CnVLgkC2ZPj8llEMJg5Y8dJ3T76SvTGtceytniaztQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "3.6.1", - "@typescript-eslint/visitor-keys": "3.6.1", - "debug": "^4.1.1", - "glob": "^7.1.6", - "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - }, - "dependencies": { - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true - } - } - }, - "@typescript-eslint/visitor-keys": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-3.6.1.tgz", - "integrity": "sha512-qC8Olwz5ZyMTZrh4Wl3K4U6tfms0R/mzU4/5W3XeUZptVraGVmbptJbn6h2Ey6Rb3hOs3zWoAUebZk8t47KGiQ==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dev": true, - "requires": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", - "dev": true, - "requires": { - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", - "dev": true - }, - "@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "abab": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz", - "integrity": "sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==", - "dev": true - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dev": true, - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "acorn": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.3.1.tgz", - "integrity": "sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==", - "dev": true - }, - "acorn-jsx": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", - "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", - "dev": true - }, - "aggregate-error": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz", - "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", - "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", - "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.4.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", - "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==" - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true - }, - "ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", - "dev": true - }, - "ansi-diff-stream": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ansi-diff-stream/-/ansi-diff-stream-1.2.1.tgz", - "integrity": "sha512-PaKs34INoKpTzcjyKd2GM/CCEeTyDgWKuHSgF0z7ywjpbBFj/pzQf/30v+TR6VBBLia6Mso+W2ygU22ljqbi6A==", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0", - "buffer-from": "^1.0.0", - "through2": "^2.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=", - "dev": true - } - } - }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", - "dev": true - }, - "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 - }, - "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" - } - }, - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "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=", - "dev": true - }, - "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==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-differ": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", - "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", - "dev": true - }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true - }, - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - }, - "array-includes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", - "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0", - "is-string": "^1.0.5" - } - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "array.prototype.flat": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz", - "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - } - }, - "array.prototype.flatmap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.3.tgz", - "integrity": "sha512-OOEk+lkePcg+ODXIpvuU9PAryCikCJyo7GlDG1upleEpQRx6mzL9puEBkozQ5iAx20KV0l3DbyQwqciJtqe5Pg==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1" - } - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "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.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "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.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true - }, - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true - }, - "async-foreach": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", - "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", - "dev": true - }, - "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==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "autoprefixer": { - "version": "9.8.5", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.5.tgz", - "integrity": "sha512-C2p5KkumJlsTHoNv9w31NrBRgXhf6eCMteJuHZi2xhkgC+5Vm40MEtCKPhc0qdgAOhox0YPy1SQHTAky05UoKg==", - "dev": true, - "requires": { - "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001097", - "colorette": "^1.2.0", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^7.0.32", - "postcss-value-parser": "^4.1.0" - }, - "dependencies": { - "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" - } - }, - "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" - } - } - } - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz", - "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==", - "dev": true - }, - "axios": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", - "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==", - "requires": { - "follow-redirects": "1.5.10" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "follow-redirects": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", - "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", - "requires": { - "debug": "=3.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "babel-loader": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", - "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", - "requires": { - "find-cache-dir": "^2.1.0", - "loader-utils": "^1.4.0", - "mkdirp": "^0.5.3", - "pify": "^4.0.1", - "schema-utils": "^2.6.5" - }, - "dependencies": { - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" - } - } - }, - "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" - } - }, - "babel-timing": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/babel-timing/-/babel-timing-0.8.0.tgz", - "integrity": "sha512-cffR8/GnYyL+Zu3PiJjPJ5MvairqaktH0a5AMfNT1MHh5yAxGlUXVatlCtUf7dl5st+98Z+KJpHm4TYopNELNw==", - "dev": true, - "requires": { - "@babel/core": "^7.4.3", - "ansi-diff-stream": "^1.2.1", - "babel-loader": "^8.0.6", - "cli-table3": "^0.5.1", - "colors": "^1.3.3", - "commander": "^2.20.0", - "find-babel-config": "^1.2.0", - "find-cache-dir": "^3.0.0", - "glob": "^7.1.3", - "lodash.chunk": "^4.2.0", - "lodash.defaults": "^4.2.0", - "lodash.mergewith": "^4.6.1", - "minimatch": "^3.0.4", - "multimatch": "^4.0.0", - "reduce-flatten": "^2.0.0", - "rimraf": "^2.6.3", - "webpack": "^4.32.2" - }, - "dependencies": { - "find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "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==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "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": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "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 - }, - "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==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - } - } - }, - "bail": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", - "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==" - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "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=", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "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==", - "dev": true - } - } - }, - "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", - "dev": true - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", - "dev": true - }, - "bath-es5": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/bath-es5/-/bath-es5-3.0.3.tgz", - "integrity": "sha512-PdCioDToH3t84lP40kUFCKWCOCH389Dl1kbC8FGoqOwamxsmqxxnJSXdkTOsPoNHXjem4+sJ+bbNoQm5zeCqxg==" - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "before-after-hook": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.1.0.tgz", - "integrity": "sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A==" - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "dev": true, - "requires": { - "inherits": "~2.0.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 - }, - "bn.js": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", - "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==", - "dev": true - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "dependencies": { - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true - } - } - }, - "bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", - "dev": true, - "requires": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "bootstrap": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.5.0.tgz", - "integrity": "sha512-Z93QoXvodoVslA+PWNdk23Hze4RBYIkpb5h8I2HY2Tu2h7A0LpAgLcyrhrSUyo2/Oxm2l1fRZPs1e5hnxnliXA==" - }, - "bottleneck": { - "version": "2.19.5", - "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", - "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "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 - }, - "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.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } - } - }, - "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": { - "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==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "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.13.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.13.0.tgz", - "integrity": "sha512-MINatJ5ZNrLnQ6blGvePd/QOz9Xtu+Ne+x29iQSCHfkU5BugKVJwZKn/iiL8UbpIpa3JhviKjz+XxMo0m2caFQ==", - "requires": { - "caniuse-lite": "^1.0.30001093", - "electron-to-chromium": "^1.3.488", - "escalade": "^3.0.1", - "node-releases": "^1.1.58" - } - }, - "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-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", - "dev": true - }, - "buffer-json": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/buffer-json/-/buffer-json-2.0.0.tgz", - "integrity": "sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw==", - "dev": true - }, - "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 - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true - }, - "cacache": { - "version": "15.0.5", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.5.tgz", - "integrity": "sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A==", - "dev": true, - "requires": { - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.0", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, - "dependencies": { - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "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==", - "dev": true, - "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": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "cache-loader": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cache-loader/-/cache-loader-4.1.0.tgz", - "integrity": "sha512-ftOayxve0PwKzBF/GLsZNC9fJBXl8lkZE3TOsjkboHfVHVkL39iUEs1FO07A33mizmci5Dudt38UZrrYXDtbhw==", - "dev": true, - "requires": { - "buffer-json": "^2.0.0", - "find-cache-dir": "^3.0.0", - "loader-utils": "^1.2.3", - "mkdirp": "^0.5.1", - "neo-async": "^2.6.1", - "schema-utils": "^2.0.0" - }, - "dependencies": { - "find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "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==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "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": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "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 - }, - "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==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - } - } - }, - "call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=" - }, - "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==", - "dev": true - }, - "camel-case": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.1.tgz", - "integrity": "sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q==", - "dev": true, - "requires": { - "pascal-case": "^3.1.1", - "tslib": "^1.10.0" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "dev": true, - "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true - } - } - }, - "caniuse-lite": { - "version": "1.0.30001100", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001100.tgz", - "integrity": "sha512-0eYdp1+wFCnMlCj2oudciuQn2B9xAFq3WpgpcBIZTxk/1HNA/O2YA7rpeYhnOqsqAJq1AHUgx6i1jtafg7m2zA==" - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "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" - } - }, - "character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" - }, - "character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==" - }, - "character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" - }, - "charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=" - }, - "chokidar": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.0.tgz", - "integrity": "sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ==", - "dev": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.4.0" - }, - "dependencies": { - "binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "readdirp": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", - "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - } - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "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" - } - }, - "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==", - "dev": true, - "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=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "classnames": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", - "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" - }, - "cldr-core": { - "version": "36.0.0", - "resolved": "https://registry.npmjs.org/cldr-core/-/cldr-core-36.0.0.tgz", - "integrity": "sha512-QLnAjt20rZe38c8h8OJ9jPND+O4o5O8Nw0TK/P3KpNn1cmOhMu0rk6Kc3ap96c5OStQ9gAngs9+Be2sum26NOw==" - }, - "clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", - "dev": true, - "requires": { - "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==", - "dev": true - } - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "clean-webpack-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-MciirUH5r+cYLGCOL5JX/ZLzOZbVr1ot3Fw+KcvbhUb6PM+yycqd9ZhIlcigQ5gl+XhppNmw3bEFuaaMNyLj3A==", - "dev": true, - "requires": { - "@types/webpack": "^4.4.31", - "del": "^4.1.1" - } - }, - "cli-source-preview": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/cli-source-preview/-/cli-source-preview-1.1.0.tgz", - "integrity": "sha1-BTA6sSeakJPq0aODez7iMfMAZUQ=", - "dev": true, - "requires": { - "chalk": "^1.1.3" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "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=", - "dev": true, - "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=", - "dev": true - } - } - }, - "cli-table3": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", - "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", - "dev": true, - "requires": { - "colors": "^1.1.2", - "object-assign": "^4.1.0", - "string-width": "^2.1.1" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "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": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "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=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "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" - }, - "dependencies": { - "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" - } - } - } - }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=" - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "dependencies": { - "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==", - "dev": true - } - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "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=", - "dev": true - }, - "collapse-white-space": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", - "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==" - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "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=" - }, - "colorette": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", - "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", - "dev": true - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", - "dev": true - }, - "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 - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "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 - }, - "contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", - "dev": true - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "copy-webpack-plugin": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.0.3.tgz", - "integrity": "sha512-q5m6Vz4elsuyVEIUXr7wJdIdePWTubsqVbEMvf1WQnHGv0Q+9yPRu7MtYFPt+GBOXRav9lvIINifTQ1vSCs+eA==", - "dev": true, - "requires": { - "cacache": "^15.0.4", - "fast-glob": "^3.2.4", - "find-cache-dir": "^3.3.1", - "glob-parent": "^5.1.1", - "globby": "^11.0.1", - "loader-utils": "^2.0.0", - "normalize-path": "^3.0.0", - "p-limit": "^3.0.1", - "schema-utils": "^2.7.0", - "serialize-javascript": "^4.0.0", - "webpack-sources": "^1.4.3" - }, - "dependencies": { - "find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "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" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "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==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "p-limit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz", - "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==", - "dev": true, - "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==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - }, - "dependencies": { - "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-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 - }, - "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==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - } - }, - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - } - } - }, - "core-js-compat": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", - "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", - "requires": { - "browserslist": "^4.8.5", - "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=", - "dev": true - }, - "cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/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" - }, - "dependencies": { - "parse-json": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz", - "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1", - "lines-and-columns": "^1.1.6" - } - } - } - }, - "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.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "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" - } - }, - "cross-conf-env": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/cross-conf-env/-/cross-conf-env-1.1.2.tgz", - "integrity": "sha1-7dlr//SOTO2w90HMpSeI9ks65kA=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1" - } - }, - "cross-fetch": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.0.6.tgz", - "integrity": "sha512-KBPUbqgFjzWlVcURG+Svp9TlhA5uliYtiNx/0r8nv0pdypeQCRJ9IaSIc3q/x3q8t3F75cHuwxVql1HFGHCNJQ==", - "dev": true, - "requires": { - "node-fetch": "2.6.1" - } - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" - }, - "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" - } - }, - "css-loader": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz", - "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "cssesc": "^3.0.0", - "icss-utils": "^4.1.1", - "loader-utils": "^1.2.3", - "normalize-path": "^3.0.0", - "postcss": "^7.0.32", - "postcss-modules-extract-imports": "^2.0.0", - "postcss-modules-local-by-default": "^3.0.2", - "postcss-modules-scope": "^2.2.0", - "postcss-modules-values": "^3.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^2.7.0", - "semver": "^6.3.0" - }, - "dependencies": { - "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" - } - }, - "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - } - }, - "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" - } - } - } - }, - "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 - }, - "csstype": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.11.tgz", - "integrity": "sha512-l8YyEC9NBkSm783PFTvh0FmJy7s5pFKrDp49ZL7zBGX3fWkO+N4EEyan1qqp8cwPLDcD0OSdyY6hAMoxp34JFw==" - }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true, - "requires": { - "array-find-index": "^1.0.1" - } - }, - "cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", - "dev": true - }, - "dag-map": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/dag-map/-/dag-map-1.0.2.tgz", - "integrity": "sha1-6DefBBAA7VYfxRVHXB7SyF7s6Nc=" - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - } - }, - "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" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "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-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "dev": true, - "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - } - }, - "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=", - "dev": true - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true - }, - "default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "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==", - "dev": true - } - } - }, - "del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" - }, - "dependencies": { - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" - }, - "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" - } - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", - "dev": true - }, - "detect-node": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", - "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", - "dev": true - }, - "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.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } - } - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", - "dev": true - }, - "dns-packet": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", - "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", - "dev": true, - "requires": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" - } - }, - "dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", - "dev": true, - "requires": { - "buffer-indexof": "^1.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dev": true, - "requires": { - "utila": "~0.4" - } - }, - "dom-helpers": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.1.4.tgz", - "integrity": "sha512-TjMyeVUvNEnOnhzs6uAn9Ya47GmMo3qq7m+Lr/3ON0Rs5kHvb8I+SQYjLUSYn7qhEm0QjW0yrBkvz9yOrwwz1A==", - "requires": { - "@babel/runtime": "^7.8.7", - "csstype": "^2.6.7" - } - }, - "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - }, - "dependencies": { - "domelementtype": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", - "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==" - } - } - }, - "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 - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dev": true, - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "dot-case": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.3.tgz", - "integrity": "sha512-7hwEmg6RiSQfm/GwPL4AAWXKy3YNNZA3oFv2Pdiey0mwkRCPZ9x6SZbkLcn8Ma5PYeVokzoD4Twv2n7LKp5WeA==", - "dev": true, - "requires": { - "no-case": "^3.0.3", - "tslib": "^1.10.0" - } - }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.497", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.497.tgz", - "integrity": "sha512-sPdW5bUDZwiFtoonuZCUwRGzsZmKzcLM0bMVhp6SMCfUG+B3faENLx3cE+o+K0Jl+MPuNA9s9cScyFjOlixZpQ==" - }, - "elliptic": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", - "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", - "dev": true, - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } - } - }, - "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 - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true - }, - "end-of-stream": { - "version": "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" - } - }, - "enhanced-resolve": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz", - "integrity": "sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "dependencies": { - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - } - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - }, - "dependencies": { - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - } - } - }, - "entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", - "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==" - }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, - "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" - } - }, - "es-abstract": { - "version": "1.17.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", - "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" - } - }, - "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==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escalade": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.0.2.tgz", - "integrity": "sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ==" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "eslint": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.4.0.tgz", - "integrity": "sha512-gU+lxhlPHu45H3JkEGgYhWhkR9wLHHEXC9FbWFnTlEkbKyZKWgWRLgf61E8zWmBuI6g5xKBph9ltg3NtZMVF8g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "eslint-scope": "^5.1.0", - "eslint-utils": "^2.0.0", - "eslint-visitor-keys": "^1.2.0", - "espree": "^7.1.0", - "esquery": "^1.2.0", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash": "^4.17.14", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^5.2.3", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "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" - } - }, - "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==", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "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 - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "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==", - "dev": true, - "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==", - "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.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "eslint-config-prettier": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.11.0.tgz", - "integrity": "sha512-oB8cpLWSAjOVFEJhhyMZh6NOEOtBVziaqdDQ86+qhDHFbZXoRTM7pNSvFRfW/W/L/LrQ38C99J5CGuRBBzBsdA==", - "dev": true, - "requires": { - "get-stdin": "^6.0.0" - } - }, - "eslint-import-resolver-node": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", - "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", - "dev": true, - "requires": { - "debug": "^2.6.9", - "resolve": "^1.13.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "eslint-module-utils": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", - "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", - "dev": true, - "requires": { - "debug": "^2.6.9", - "pkg-dir": "^2.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "requires": { - "find-up": "^2.1.0" - } - } - } - }, - "eslint-plugin-import": { - "version": "2.22.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.0.tgz", - "integrity": "sha512-66Fpf1Ln6aIS5Gr/55ts19eUuoDhAbZgnr6UxK5hbDx6l/QgQgx61AePq+BV4PP2uXQFClgMVzep5zZ94qqsxg==", - "dev": true, - "requires": { - "array-includes": "^3.1.1", - "array.prototype.flat": "^1.2.3", - "contains-path": "^0.1.0", - "debug": "^2.6.9", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.3", - "eslint-module-utils": "^2.6.0", - "has": "^1.0.3", - "minimatch": "^3.0.4", - "object.values": "^1.1.1", - "read-pkg-up": "^2.0.0", - "resolve": "^1.17.0", - "tsconfig-paths": "^3.9.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "^2.0.0" - } - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } - } - }, - "eslint-plugin-prettier": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.4.tgz", - "integrity": "sha512-jZDa8z76klRqo+TdGDTFJSavwbnWK2ZpqGKNZ+VvweMW516pDUMmQ2koXvxEE4JhzNvTv+radye/bWGBmA6jmg==", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-plugin-react": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.20.3.tgz", - "integrity": "sha512-txbo090buDeyV0ugF3YMWrzLIUqpYTsWSDZV9xLSmExE1P/Kmgg9++PD931r+KEWS66O1c9R4srLVVHmeHpoAg==", - "dev": true, - "requires": { - "array-includes": "^3.1.1", - "array.prototype.flatmap": "^1.2.3", - "doctrine": "^2.1.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.4.1", - "object.entries": "^1.1.2", - "object.fromentries": "^2.0.2", - "object.values": "^1.1.1", - "prop-types": "^15.7.2", - "resolve": "^1.17.0", - "string.prototype.matchall": "^4.0.2" - }, - "dependencies": { - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - } - } - }, - "eslint-plugin-simple-import-sort": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-5.0.3.tgz", - "integrity": "sha512-1rf3AWiHeWNCQdAq0iXNnlccnH1UDnelGgrPbjBBHE8d2hXVtOudcmy0vTF4hri3iJ0MKz8jBhmH6lJ0ZWZLHQ==", - "dev": true - }, - "eslint-scope": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", - "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - }, - "espree": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.1.0.tgz", - "integrity": "sha512-dcorZSyfmm4WTuTnE5Y7MEN1DyoPYy1ZR783QW1FJoenn7RailyWFsq/UL6ZAAA7uXurN9FIpYyUs3OfiIW+Qw==", - "dev": true, - "requires": { - "acorn": "^7.2.0", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.2.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "esquery": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", - "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz", - "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "dev": true, - "requires": { - "estraverse": "^4.1.0" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true - }, - "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", - "dev": true - }, - "events": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", - "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", - "dev": true - }, - "eventsource": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", - "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", - "dev": true, - "requires": { - "original": "^1.0.0" - } - }, - "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" - } - }, - "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" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "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==", - "dev": true, - "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=", - "dev": true, - "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=", - "dev": true, - "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=", - "dev": true - } - } - }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "dev": true, - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "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=", - "dev": true, - "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==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "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=", - "dev": true, - "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=", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "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==", - "dev": true - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "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==" - }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "fast-glob": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", - "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/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.npmjs.org/fast-memoize/-/fast-memoize-2.5.2.tgz", - "integrity": "sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==" - }, - "fast-sass-loader": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/fast-sass-loader/-/fast-sass-loader-1.5.0.tgz", - "integrity": "sha512-3K4/xG/sm0MqdjrOBKZhnOrrQ3TWMsdvqjxI4ZN0FlVwImNqChYHFUChpyQ9ecQsXS0pytOMEa5H+MDfatPqBA==", - "dev": true, - "requires": { - "async": "^2.0.1", - "cli-source-preview": "^1.0.0", - "co": "^4.6.0", - "fs-extra": "3.x", - "loader-utils": "^1.1.0" - }, - "dependencies": { - "fs-extra": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", - "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^3.0.0", - "universalify": "^0.1.0" - } - }, - "jsonfile": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", - "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - } - } - }, - "fastq": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz", - "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", - "dev": true - }, - "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", - "dev": true, - "requires": { - "flat-cache": "^2.0.1" - } - }, - "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==", - "dev": true, - "optional": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - }, - "dependencies": { - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - } - } - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "find-babel-config": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-1.2.0.tgz", - "integrity": "sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==", - "dev": true, - "requires": { - "json5": "^0.5.1", - "path-exists": "^3.0.0" - }, - "dependencies": { - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - } - } - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "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=", - "dev": true, - "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=", - "dev": true, - "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=", - "dev": true, - "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=", - "dev": true, - "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=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "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==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "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" - } - } - } - }, - "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", - "dev": true, - "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - }, - "dependencies": { - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "follow-redirects": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.12.1.tgz", - "integrity": "sha512-tmRv0AVuR7ZyouUHLeNSiO6pqulF7dYa3s19c6t+wz9LD69/uSzdMxJ2S91nTI9U3rt/IldxpzMOFejp6f0hjg==", - "dev": true - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "fork-ts-checker-webpack-plugin": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-5.0.7.tgz", - "integrity": "sha512-X7zHKTx4is5YSKa9bDiXGzv8v5K3bsUrZlZgr3F8DeCVsb3oik/+0Mo+K138Sdjh4mpzoHcuUgsrIgZeLIXovw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "chalk": "^2.4.1", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "1.0.0", - "semver": "^5.6.0", - "tapable": "^1.0.0" - }, - "dependencies": { - "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" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "dev": true - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "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==", - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" - } - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "fs-monkey": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.1.tgz", - "integrity": "sha512-fcSa+wyTqZa46iWweI7/ZiUfegOZl0SG8+dltIwFXo7+zYU9J9kpS3NB6pZcSlJdhvIwp81Adx2XhZorncxiaA==", - "dev": true - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "dev": true, - "optional": true - }, - "fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "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=", - "dev": true, - "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=", - "dev": true, - "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=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "gaze": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", - "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", - "dev": true, - "requires": { - "globule": "^1.0.0" - } - }, - "gensync": { - "version": "1.0.0-beta.1", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", - "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", - "dev": true - }, - "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==", - "dev": true - }, - "get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true - }, - "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=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "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.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "dev": true, - "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" - } - }, - "global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, - "requires": { - "global-prefix": "^3.0.0" - }, - "dependencies": { - "global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, - "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.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==", - "dev": true - } - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - } - }, - "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "dev": true, - "requires": { - "type-fest": "^0.8.1" - } - }, - "globby": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", - "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - }, - "dependencies": { - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true - } - } - }, - "globule": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.1.tgz", - "integrity": "sha512-OVyWOHgw29yosRHCHo7NncwR1hW5ew0W/UrvtwvjefVJeQ26q4/8r8FmPsSF1hJ93IgWkyv16pCTz6WblMzm/g==", - "dev": true, - "requires": { - "glob": "~7.1.1", - "lodash": "~4.17.12", - "minimatch": "~3.0.2" - } - }, - "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==" - }, - "handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "dev": true, - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "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=", - "dev": true, - "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=", - "dev": true - } - } - }, - "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==" - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "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=", - "dev": true, - "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=", - "dev": true, - "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=", - "dev": true, - "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=", - "dev": true, - "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": { - "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==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "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" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "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" - } - }, - "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" - } - }, - "homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "requires": { - "parse-passwd": "^1.0.0" - } - }, - "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", - "dev": true - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "html-entities": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz", - "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==", - "dev": true - }, - "html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", - "dev": true, - "requires": { - "camel-case": "^4.1.1", - "clean-css": "^4.2.3", - "commander": "^4.1.1", - "he": "^1.2.0", - "param-case": "^3.0.3", - "relateurl": "^0.2.7", - "terser": "^4.6.3" - }, - "dependencies": { - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true - } - } - }, - "html-to-react": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/html-to-react/-/html-to-react-1.4.3.tgz", - "integrity": "sha512-txe09A3vxW8yEZGJXJ1is5gGDfBEVACmZDSgwDyH5EsfRdOubBwBCg63ZThZP0xBn0UE4FyvMXZXmohusCxDcg==", - "requires": { - "domhandler": "^3.0", - "htmlparser2": "^4.1.0", - "lodash.camelcase": "^4.3.0", - "ramda": "^0.27" - }, - "dependencies": { - "domelementtype": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", - "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==" - }, - "domhandler": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.0.0.tgz", - "integrity": "sha512-eKLdI5v9m67kbXQbJSNn1zjh0SDzvzWVWtX+qEI3eMjZw8daH9k8rlj1FZY9memPwjiskQFbe7vHVVJIAqoEhw==", - "requires": { - "domelementtype": "^2.0.1" - } - }, - "domutils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.1.0.tgz", - "integrity": "sha512-CD9M0Dm1iaHfQ1R/TI+z3/JWp/pgub0j4jIQKH89ARR4ATAV2nbaOQS5XxU9maJP5jHaPdDDQSEHuE2UmpUTKg==", - "requires": { - "dom-serializer": "^0.2.1", - "domelementtype": "^2.0.1", - "domhandler": "^3.0.0" - } - }, - "htmlparser2": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", - "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^3.0.0", - "domutils": "^2.0.0", - "entities": "^2.0.0" - } - } - } - }, - "html-webpack-plugin": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.3.0.tgz", - "integrity": "sha512-C0fzKN8yQoVLTelcJxZfJCE+aAvQiY2VUf3UuKrR4a9k5UMWYOtpDLsaXwATbcVCnI05hUS7L9ULQHWLZhyi3w==", - "dev": true, - "requires": { - "@types/html-minifier-terser": "^5.0.0", - "@types/tapable": "^1.0.5", - "@types/webpack": "^4.41.8", - "html-minifier-terser": "^5.0.1", - "loader-utils": "^1.2.3", - "lodash": "^4.17.15", - "pretty-error": "^2.1.1", - "tapable": "^1.1.3", - "util.promisify": "1.0.0" - }, - "dependencies": { - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - } - } - }, - "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dev": true, - "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", - "dev": true - }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - } - } - }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", - "dev": true, - "requires": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "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=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "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": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "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=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "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=", - "dev": true, - "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=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "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=", - "dev": true, - "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=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "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==", - "dev": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "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=", - "dev": true, - "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=", - "dev": true, - "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=", - "dev": true, - "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=", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "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=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "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==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "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" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "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 - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "icss-utils": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", - "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", - "dev": true, - "requires": { - "postcss": "^7.0.14" - } - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", - "dev": true - }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", - "dev": true - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "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": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "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": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dev": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "in-publish": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.1.tgz", - "integrity": "sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ==", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", - "dev": true - }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "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==" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true - }, - "internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", - "dev": true, - "requires": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" - } - }, - "internal-slot": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.2.tgz", - "integrity": "sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g==", - "dev": true, - "requires": { - "es-abstract": "^1.17.0-next.1", - "has": "^1.0.3", - "side-channel": "^1.0.2" - } - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true - }, - "intl-format-cache": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/intl-format-cache/-/intl-format-cache-4.3.0.tgz", - "integrity": "sha512-kGumT8fncIYMXb+YiWJKJ0t8n1tjSGrysZ+IFvXJc8oGT9U9PzH8DY2pFd0OY8L8RId6uNk2AiAFGP6bBHFSTg==" - }, - "intl-messageformat": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-9.1.3.tgz", - "integrity": "sha512-QeTdl9pSPc4uIRJ00w8QcozS+m5wupbSV6lduIIanMcoHJjkcUfTwWdvJGDI6xFG00f2x1c2AvnfCBkYn2H/Gw==", - "requires": { - "intl-format-cache": "^4.3.0", - "intl-messageformat-parser": "^5.3.3" - } - }, - "intl-messageformat-parser": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/intl-messageformat-parser/-/intl-messageformat-parser-5.3.3.tgz", - "integrity": "sha512-IJmTPjLk3lOg6NlpJs/eQOKSDWbHNsyWmlMcctLIZuQyyTPuASSZbi9XkXzmnVLijXt4/SeWIYIIon616kYqyQ==", - "requires": { - "@formatjs/intl-numberformat": "^5.3.0" - } - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "dev": true - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true - }, - "is-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=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" - }, - "is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", - "requires": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - } - }, - "is-arguments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", - "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", - "dev": true - }, - "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-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "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.1.5", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", - "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", - "dev": true - }, - "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=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "dev": true - }, - "is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "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==", - "dev": true - } - } - }, - "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-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-finite": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", - "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", - "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 - }, - "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==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" - }, - "is-invalid-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-invalid-path/-/is-invalid-path-0.1.0.tgz", - "integrity": "sha1-MHqFWzzxqTi0TqcNLGEQYFNxTzQ=", - "requires": { - "is-glob": "^2.0.0" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "requires": { - "is-extglob": "^1.0.0" - } - } - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "dev": true - }, - "is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", - "dev": true, - "requires": { - "is-path-inside": "^2.1.0" - } - }, - "is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", - "dev": true, - "requires": { - "path-is-inside": "^1.0.2" - } - }, - "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=" - }, - "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==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "is-regex": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", - "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "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.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", - "dev": true - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "is-valid-path": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-valid-path/-/is-valid-path-0.1.1.tgz", - "integrity": "sha1-EQ+f90w39mPh7HkV60UfLbk6yd8=", - "requires": { - "is-invalid-path": "^0.1.0" - } - }, - "is-whitespace-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", - "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==" - }, - "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==", - "dev": true - }, - "is-word-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", - "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==" - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, - "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.npmjs.org/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=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "jest-worker": { - "version": "26.1.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.1.0.tgz", - "integrity": "sha512-Z9P5pZ6UC+kakMbNJn+tA2RdVdNX5WH1x+5UCBZ9MxIK24pjYtFt96fK+UwBTrjLYm232g1xz0L3eTh51OW+yQ==", - "dev": true, - "requires": { - "merge-stream": "^2.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==", - "dev": true - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jquery": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.1.tgz", - "integrity": "sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg==" - }, - "js-base64": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.2.tgz", - "integrity": "sha512-Vg8czh0Q7sFBSUMWWArX/miJeBWYBPpdU/3M/DKSaekLMqrqVPaedp+5mZhie/r0lgrcaYBfwXatEew6gwgiQQ==", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "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-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-deref-sync": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/json-schema-deref-sync/-/json-schema-deref-sync-0.13.0.tgz", - "integrity": "sha512-YBOEogm5w9Op337yb6pAT6ZXDqlxAsQCanM3grid8lMWNxRJO/zWEJi3ZzqDL8boWfwhTFym5EFrNgWwpqcBRg==", - "requires": { - "clone": "^2.1.2", - "dag-map": "~1.0.0", - "is-valid-path": "^0.1.1", - "lodash": "^4.17.13", - "md5": "~2.2.0", - "memory-cache": "~0.2.0", - "traverse": "~0.6.6", - "valid-url": "~1.0.9" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "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=", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json3": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", - "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", - "dev": true - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - }, - "jsonfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", - "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^1.0.0" - } - }, - "jsonschema": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.4.tgz", - "integrity": "sha512-lz1nOH69GbsVHeVgEdvyavc/33oymY1AZwtePMiMj4HZPMbP5OIKK3zT9INMWjwua/V4Z4yq7wSlBbSG+g4AEw==" - }, - "jsonschema-draft4": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jsonschema-draft4/-/jsonschema-draft4-1.0.0.tgz", - "integrity": "sha1-8K8gBQVPDwrefqIRhhS2ncUS2GU=" - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "jsx-ast-utils": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz", - "integrity": "sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w==", - "dev": true, - "requires": { - "array-includes": "^3.1.1", - "object.assign": "^4.1.0" - } - }, - "killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", - "dev": true - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, - "klona": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/klona/-/klona-1.1.2.tgz", - "integrity": "sha512-xf88rTeHiXk+XE2Vhi6yj8Wm3gMZrygGdKjJqN8HkV+PwF/t50/LdAKHoHpPcxFAlmQszTZ1CugrK25S7qDRLA==", - "dev": true - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" - }, - "levenary": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", - "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", - "requires": { - "leven": "^3.1.0" - } - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, - "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true - }, - "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==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", - "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" - }, - "lodash-es": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.15.tgz", - "integrity": "sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ==" - }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" - }, - "lodash.chunk": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.chunk/-/lodash.chunk-4.2.0.tgz", - "integrity": "sha1-ZuXOH3btJ7QwPYxlEujRIW6BBrw=", - "dev": true - }, - "lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", - "dev": true - }, - "lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" - }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" - }, - "lodash.mergewith": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", - "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", - "dev": true - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true - }, - "loglevel": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.8.tgz", - "integrity": "sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA==", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true, - "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" - } - }, - "lower-case": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.1.tgz", - "integrity": "sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ==", - "dev": true, - "requires": { - "tslib": "^1.10.0" - } - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "macos-release": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.4.0.tgz", - "integrity": "sha512-ko6deozZYiAkqa/0gmcsz+p4jSy3gY7/ZsCEokPaYd8k+6/aXGkiTgr61+Owup7Sf+xjqW8u2ElhoM9SEcEfuA==" - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "dependencies": { - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "markdown-escapes": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", - "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==" - }, - "md5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", - "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=", - "requires": { - "charenc": "~0.0.1", - "crypt": "~0.0.1", - "is-buffer": "~1.1.1" - } - }, - "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" - } - }, - "mdast-add-list-metadata": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdast-add-list-metadata/-/mdast-add-list-metadata-1.0.1.tgz", - "integrity": "sha512-fB/VP4MJ0LaRsog7hGPxgOrSL3gE/2uEdZyDuSEnKCv/8IkYHiDkIQSbChiJoHyxZZXZ9bzckyRk+vNxFzh8rA==", - "requires": { - "unist-util-visit-parents": "1.1.2" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, - "memfs": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.2.0.tgz", - "integrity": "sha512-f/xxz2TpdKv6uDn6GtHee8ivFyxwxmPuXatBb1FBwxYNuVpbM3k/Y1Z+vC0mH/dIXXrukYfe3qe5J32Dfjg93A==", - "dev": true, - "requires": { - "fs-monkey": "1.0.1" - } - }, - "memory-cache": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/memory-cache/-/memory-cache-0.2.0.tgz", - "integrity": "sha1-eJCwHVLADI68nVM+H46xfjA0hxo=" - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, - "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "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.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } - } - }, - "mime": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.5.tgz", - "integrity": "sha512-3hQhEUF027BuxZjQA3s7rIv/7VCQPa27hN9u9g87sEkWaKwQPuXOkVKtOeiyUrnWqTDiOs8Ed2rwg733mB0R5w==", - "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==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "mime-db": "1.44.0" - } - }, - "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.0", - "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.0.tgz", - "integrity": "sha512-b0TytUgFSbgFJGzJqXPKCFCBWigAjpjo+Fl7Vf7ZbKRDptszpppKxXH6DRXEABZ/gcEQczeb0iZ7JvL8e8jjCA==", - "requires": { - "@babel/runtime": "^7.5.5", - "tiny-warning": "^1.0.3" - } - }, - "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.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "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==" - }, - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - }, - "dependencies": { - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-pipeline": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.3.tgz", - "integrity": "sha512-cFOknTvng5vqnwOpDsZTWhNll6Jf8o2x+/diplafmxpuIymAjzoOolZG0VvQf3V2HgqzJNhnuKHYp2BqDgz8IQ==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minizlib": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.0.tgz", - "integrity": "sha512-EzTZN/fjSvifSX0SlqUERCN39o6T40AMarPbv0MrarSFtIITCBh7bi+dU8nxGFHuqs9jdIAeoYoKuQAAASsPPA==", - "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "dependencies": { - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "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==", - "dev": true, - "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" - } - }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", - "dev": true, - "requires": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" - } - }, - "multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", - "dev": true - }, - "multimatch": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz", - "integrity": "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==", - "dev": true, - "requires": { - "@types/minimatch": "^3.0.3", - "array-differ": "^3.0.0", - "array-union": "^2.1.0", - "arrify": "^2.0.1", - "minimatch": "^3.0.4" - }, - "dependencies": { - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "dev": true - } - } - }, - "nan": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", - "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==", - "dev": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "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" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "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==", - "dev": true - } - } - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "dev": true - }, - "neo-async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", - "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - }, - "no-case": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.3.tgz", - "integrity": "sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw==", - "dev": true, - "requires": { - "lower-case": "^2.0.1", - "tslib": "^1.10.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-forge": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz", - "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==", - "dev": true - }, - "node-gyp": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", - "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", - "dev": true, - "requires": { - "fstream": "^1.0.0", - "glob": "^7.0.3", - "graceful-fs": "^4.1.2", - "mkdirp": "^0.5.0", - "nopt": "2 || 3", - "npmlog": "0 || 1 || 2 || 3 || 4", - "osenv": "0", - "request": "^2.87.0", - "rimraf": "2", - "semver": "~5.3.0", - "tar": "^2.0.0", - "which": "1" - }, - "dependencies": { - "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", - "dev": true - }, - "tar": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", - "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", - "dev": true, - "requires": { - "block-stream": "*", - "fstream": "^1.0.12", - "inherits": "2" - } - } - } - }, - "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": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } - } - }, - "node-releases": { - "version": "1.1.59", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.59.tgz", - "integrity": "sha512-H3JrdUczbdiwxN5FuJPyCHnGHIFqQ0wWxo+9j1kAXAzqNMAHlo+4I/sYYxpyK0irQ73HgdiyzD32oqQDcU2Osw==" - }, - "node-sass": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.14.1.tgz", - "integrity": "sha512-sjCuOlvGyCJS40R8BscF5vhVlQjNN069NtQ1gSxyK1u9iqvn6tf7O1R4GNowVZfiZUCRt5MmMs1xd+4V/7Yr0g==", - "dev": true, - "requires": { - "async-foreach": "^0.1.3", - "chalk": "^1.1.1", - "cross-spawn": "^3.0.0", - "gaze": "^1.0.0", - "get-stdin": "^4.0.1", - "glob": "^7.0.3", - "in-publish": "^2.0.0", - "lodash": "^4.17.15", - "meow": "^3.7.0", - "mkdirp": "^0.5.1", - "nan": "^2.13.2", - "node-gyp": "^3.8.0", - "npmlog": "^4.0.0", - "request": "^2.88.0", - "sass-graph": "2.2.5", - "stdout-stream": "^1.4.0", - "true-case-path": "^1.0.2" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "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" - } - }, - "cross-spawn": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", - "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" - } - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "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=", - "dev": true - } - } - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "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" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "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 - }, - "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" - } - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dev": true, - "requires": { - "boolbase": "~1.0.0" - } - }, - "num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", - "dev": true - }, - "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=", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/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=", - "dev": true, - "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=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", - "dev": true - }, - "object-is": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz", - "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "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=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "object.entries": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.2.tgz", - "integrity": "sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5", - "has": "^1.0.3" - } - }, - "object.fromentries": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.2.tgz", - "integrity": "sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", - "has": "^1.0.3" - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", - "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "object.values": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", - "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", - "has": "^1.0.3" - } - }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "openapi-client-axios": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/openapi-client-axios/-/openapi-client-axios-3.4.1.tgz", - "integrity": "sha512-Ik3+4WB1ZK/JSN3/014wPt/XtLcCpv7knI9yApvZn0QOQ+gmxdEVQcYTEPQ5o9rlq5KGA73IygkTUuzg+42L3A==", - "requires": { - "axios": "^0.19.0", - "bath-es5": "^3.0.3", - "json-schema-deref-sync": "^0.13.0", - "lodash": "^4.17.15", - "openapi-schema-validation": "^0.4.2", - "openapi-types": "^1.3.4", - "query-string": "^6.5.0", - "swagger-parser": "^9.0.1" - }, - "dependencies": { - "openapi-types": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-1.3.5.tgz", - "integrity": "sha512-11oi4zYorsgvg5yBarZplAqbpev5HkuVNPlZaPTknPDzAynq+lnJdXAmruGWP0s+dNYZS7bjM+xrTpJw7184Fg==" - } - } - }, - "openapi-client-axios-typegen": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/openapi-client-axios-typegen/-/openapi-client-axios-typegen-1.1.0.tgz", - "integrity": "sha512-S/UfYwi1lgbcN/hubLiMHY9Gn2UXwJqxq5kLzErMTQDhXlsRWrHc1ldXA9VnsecYURt7sVlM8F3lPLjNr2AkJw==", - "dev": true, - "requires": { - "@anttiviljami/dtsgenerator": "^2.0.7", - "indent-string": "^4.0.0", - "openapi-client-axios": "*", - "swagger-parser": "^9.0.1", - "yargs": "^13.2.2" - } - }, - "openapi-schema-validation": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/openapi-schema-validation/-/openapi-schema-validation-0.4.2.tgz", - "integrity": "sha512-K8LqLpkUf2S04p2Nphq9L+3bGFh/kJypxIG2NVGKX0ffzT4NQI9HirhiY6Iurfej9lCu7y4Ndm4tv+lm86Ck7w==", - "requires": { - "jsonschema": "1.2.4", - "jsonschema-draft4": "^1.0.0", - "swagger-schema-official": "2.0.0-bab6bed" - } - }, - "opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", - "dev": true, - "requires": { - "is-wsl": "^1.1.0" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "original": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", - "dev": true, - "requires": { - "url-parse": "^1.4.3" - } - }, - "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-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-name": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-name/-/os-name-3.1.0.tgz", - "integrity": "sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg==", - "requires": { - "macos-release": "^2.2.0", - "windows-release": "^3.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=", - "dev": true - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dev": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "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": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-retry": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", - "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", - "dev": true, - "requires": { - "retry": "^0.12.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "dev": true, - "requires": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "param-case": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.3.tgz", - "integrity": "sha512-VWBVyimc1+QrzappRs7waeN2YmoZFCGXWASRYX1/rGHtXqEcrGEIDm+jqIwFa2fRXNgQEwrxaYuIrX0WcAguTA==", - "dev": true, - "requires": { - "dot-case": "^3.0.3", - "tslib": "^1.10.0" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "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-entities": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.2.tgz", - "integrity": "sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==", - "requires": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, - "pascal-case": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.1.tgz", - "integrity": "sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA==", - "dev": true, - "requires": { - "no-case": "^3.0.3", - "tslib": "^1.10.0" - } - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "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-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - }, - "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=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - }, - "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==" - }, - "path-to-regexp": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.1.0.tgz", - "integrity": "sha512-h9DqehX3zZZDCEm+xbfU0ZmwCGFCAAraPJWMXJ4+v32NjZJilVg3k1TcKsRgIb8IQ/izZSaydDc1OhJCZvs2Dw==" - }, - "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 - }, - "pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", - "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" - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "requires": { - "find-up": "^3.0.0" - }, - "dependencies": { - "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" - } - }, - "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" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "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==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "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==" - } - } - }, - "popper.js": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", - "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==" - }, - "portfinder": { - "version": "1.0.26", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.26.tgz", - "integrity": "sha512-Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ==", - "dev": true, - "requires": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.1" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "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=", - "dev": true - }, - "postcss": { - "version": "7.0.28", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.28.tgz", - "integrity": "sha512-YU6nVhyWIsVtlNlnAj1fHTsUKW5qxm3KEgzq2Jj6KTEFOTK8QWR12eIDvrlWhiSTK8WIBFTBhOJV4DY6dUuEbw==", - "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-load-config": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.0.tgz", - "integrity": "sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==", - "dev": true, - "requires": { - "cosmiconfig": "^5.0.0", - "import-cwd": "^2.0.0" - }, - "dependencies": { - "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" - } - }, - "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" - } - }, - "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" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - } - } - }, - "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" - }, - "dependencies": { - "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" - } - } - } - }, - "postcss-modules-extract-imports": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", - "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", - "dev": true, - "requires": { - "postcss": "^7.0.5" - } - }, - "postcss-modules-local-by-default": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz", - "integrity": "sha512-jM/V8eqM4oJ/22j0gx4jrp63GSvDH6v86OqyTHHUvk4/k1vceipZsaymiZ5PvocqZOl5SFHiFJqjs3la0wnfIQ==", - "dev": true, - "requires": { - "icss-utils": "^4.1.1", - "postcss": "^7.0.16", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.0" - } - }, - "postcss-modules-scope": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", - "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", - "dev": true, - "requires": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^6.0.0" - } - }, - "postcss-modules-values": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", - "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", - "dev": true, - "requires": { - "icss-utils": "^4.0.0", - "postcss": "^7.0.6" - } - }, - "postcss-selector-parser": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", - "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "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 - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "prettier": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.0.5.tgz", - "integrity": "sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg==", - "dev": true - }, - "prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, - "pretty-error": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", - "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", - "dev": true, - "requires": { - "renderkid": "^2.0.1", - "utila": "~0.4" - } - }, - "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 - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true - }, - "prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/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" - } - }, - "prop-types-extra": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/prop-types-extra/-/prop-types-extra-1.1.1.tgz", - "integrity": "sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew==", - "requires": { - "react-is": "^16.3.2", - "warning": "^4.0.0" - } - }, - "proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", - "dev": true, - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.1" - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "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.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "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" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "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==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "query-string": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.12.1.tgz", - "integrity": "sha512-OHj+zzfRMyj3rmo/6G8a5Ifvw3AleL/EbcHMD27YA31Q+cO5lfmQxECkImuNVjcskLcvBRVHNAB3w6udMs1eAA==", - "requires": { - "decode-uri-component": "^0.2.0", - "split-on-first": "^1.0.0", - "strict-uri-encode": "^2.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 - }, - "querystringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", - "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==", - "dev": true - }, - "ramda": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.0.tgz", - "integrity": "sha512-pVzZdDpWwWqEVVLshWUHjNwuVP7SfcmPraYuqocJp1yo2U1R7P+5QAfDhdItkuoGqIBnBYrtPp7rEPqDn9HlZA==" - }, - "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" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true - } - } - }, - "re-resizable": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/re-resizable/-/re-resizable-6.3.2.tgz", - "integrity": "sha512-ngxe4XBSb46vfwXjAwpURacVDig/pPt1kHRhcKlRRIoGICmo4aQHr725jurezepp1pm5jSC6iQhyLYfx3zOC3w==", - "requires": { - "fast-memoize": "^2.5.1" - } - }, - "react": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz", - "integrity": "sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2" - } - }, - "react-bootstrap": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-1.3.0.tgz", - "integrity": "sha512-GYj0c6FO9mx7DaO8Xyz2zs0IcQ6CGCtM3O6/feIoCaG4N8B0+l4eqL7stlMcLpqO4d8NG2PoMO/AbUOD+MO7mg==", - "requires": { - "@babel/runtime": "^7.4.2", - "@restart/context": "^2.1.4", - "@restart/hooks": "^0.3.21", - "@types/classnames": "^2.2.10", - "@types/invariant": "^2.2.33", - "@types/prop-types": "^15.7.3", - "@types/react": "^16.9.35", - "@types/react-transition-group": "^4.4.0", - "@types/warning": "^3.0.0", - "classnames": "^2.2.6", - "dom-helpers": "^5.1.2", - "invariant": "^2.2.4", - "prop-types": "^15.7.2", - "prop-types-extra": "^1.1.0", - "react-overlays": "^4.1.0", - "react-transition-group": "^4.4.1", - "uncontrollable": "^7.0.0", - "warning": "^4.0.3" - } - }, - "react-dom": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.13.1.tgz", - "integrity": "sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag==", - "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.npmjs.org/react-draggable/-/react-draggable-4.4.3.tgz", - "integrity": "sha512-jV4TE59MBuWm7gb6Ns3Q1mxX8Azffb7oTtDtBgFkxRvhDp38YAARmRplrj0+XGkhOJB5XziArX+4HUUABtyZ0w==", - "requires": { - "classnames": "^2.2.5", - "prop-types": "^15.6.0" - } - }, - "react-hot-loader": { - "version": "4.12.21", - "resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-4.12.21.tgz", - "integrity": "sha512-Ynxa6ROfWUeKWsTHxsrL2KMzujxJVPjs385lmB2t5cHUxdoRPGind9F00tOkdc1l5WBleOF4XEAMILY1KPIIDA==", - "requires": { - "fast-levenshtein": "^2.0.6", - "global": "^4.3.0", - "hoist-non-react-statics": "^3.3.0", - "loader-utils": "^1.1.0", - "prop-types": "^15.6.1", - "react-lifecycles-compat": "^3.0.4", - "shallowequal": "^1.1.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==" - } - } - }, - "react-intl": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/react-intl/-/react-intl-5.3.0.tgz", - "integrity": "sha512-9gdhFpfqeqniFZDUKFyzdPymGdxA2X/I9n7D5F//LVWOSpuBK++1tj48IE5J+AzFygg+UXHB2fzZu0IR7hQDrg==", - "requires": { - "@formatjs/intl-datetimeformat": "^2.1.3", - "@formatjs/intl-displaynames": "^3.1.3", - "@formatjs/intl-listformat": "^3.1.3", - "@formatjs/intl-numberformat": "^5.3.0", - "@formatjs/intl-relativetimeformat": "^6.2.2", - "@formatjs/intl-utils": "^3.8.0", - "@types/hoist-non-react-statics": "^3.3.1", - "hoist-non-react-statics": "^3.3.2", - "intl-format-cache": "^4.3.0", - "intl-messageformat": "^9.1.3", - "intl-messageformat-parser": "^5.3.3", - "shallow-equal": "^1.2.1" - } - }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" - }, - "react-markdown": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-4.3.1.tgz", - "integrity": "sha512-HQlWFTbDxTtNY6bjgp3C3uv1h2xcjCSi1zAEzfBW9OwJJvENSYiLXWNXN5hHLsoqai7RnZiiHzcnWdXk2Splzw==", - "requires": { - "html-to-react": "^1.3.4", - "mdast-add-list-metadata": "1.0.1", - "prop-types": "^15.7.2", - "react-is": "^16.8.6", - "remark-parse": "^5.0.0", - "unified": "^6.1.5", - "unist-util-visit": "^1.3.0", - "xtend": "^4.0.1" - } - }, - "react-overlays": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/react-overlays/-/react-overlays-4.1.0.tgz", - "integrity": "sha512-vdRpnKe0ckWOOD9uWdqykLUPHLPndIiUV7XfEKsi5008xiyHCfL8bxsx4LbMrfnxW1LzRthLyfy50XYRFNQqqw==", - "requires": { - "@babel/runtime": "^7.4.5", - "@popperjs/core": "^2.0.0", - "@restart/hooks": "^0.3.12", - "@types/warning": "^3.0.0", - "dom-helpers": "^5.1.0", - "prop-types": "^15.7.2", - "uncontrollable": "^7.0.0", - "warning": "^4.0.3" - } - }, - "react-rnd": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/react-rnd/-/react-rnd-10.2.2.tgz", - "integrity": "sha512-UoQnNehseKEspimfPFaO0gN0vSVJ8uCZeG39nCibUVyGTjZ5d+bnY/zHEp9SObHQ9tKW4vFSa9+8Mf7QZrQrUw==", - "requires": { - "re-resizable": "6.3.2", - "react-draggable": "4.4.3", - "tslib": "2.0.0" - }, - "dependencies": { - "tslib": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.0.tgz", - "integrity": "sha512-lTqkx847PI7xEDYJntxZH89L2/aXInsyF2luSafe/+0fHOMjlBNXdH6th7f70qxLDhul7KZK0zC8V5ZIyHl0/g==" - } - } - }, - "react-router": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/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.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "requires": { - "isarray": "0.0.1" - } - } - } - }, - "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-transition-group": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.1.tgz", - "integrity": "sha512-Djqr7OQ2aPUiYurhPalTrVy9ddmFCCzwhqQmtN+J3+3DzLO209Fdr70QrN8Z3DsglWql6iY1lDWAfpFiBtuKGw==", - "requires": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - }, - "dependencies": { - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - } - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - } - } - }, - "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": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - } - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "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=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "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": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "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=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "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=", - "dev": true, - "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=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "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=", - "dev": true, - "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=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "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==", - "dev": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "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=", - "dev": true, - "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=", - "dev": true, - "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=", - "dev": true, - "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=", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "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=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "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==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "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" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true, - "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" - }, - "dependencies": { - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, - "requires": { - "repeating": "^2.0.0" - } - } - } - }, - "reduce-flatten": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", - "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", - "dev": true - }, - "regenerate": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", - "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==" - }, - "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.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", - "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==" - }, - "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" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexp.prototype.flags": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", - "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - } - }, - "regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", - "dev": true - }, - "regexpu-core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", - "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", - "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=" - } - } - }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", - "dev": true - }, - "remark-parse": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-5.0.0.tgz", - "integrity": "sha512-b3iXszZLH1TLoyUzrATcTQUZrwNl1rE70rVdSruJFlDaJ9z5aMkhrG43Pp68OgfHndL/ADz6V69Zow8cTQu+JA==", - "requires": { - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^1.1.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^1.0.0", - "vfile-location": "^2.0.0", - "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=", - "dev": true - }, - "renderkid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz", - "integrity": "sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==", - "dev": true, - "requires": { - "css-select": "^1.1.0", - "dom-converter": "^0.2", - "htmlparser2": "^3.3.0", - "strip-ansi": "^3.0.0", - "utila": "^0.4.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dev": true, - "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - } - }, - "css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", - "dev": true - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "^1.0.0" - } - }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=" - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "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" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "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 - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "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 - } - } - }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - }, - "dependencies": { - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - } - } - }, - "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 - }, - "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=", - "dev": true - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "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" - } - }, - "run-parallel": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", - "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", - "dev": true - }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", - "dev": true, - "requires": { - "aproba": "^1.1.1" - } - }, - "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==", - "dev": true - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sass": { - "version": "1.26.10", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.26.10.tgz", - "integrity": "sha512-bzN0uvmzfsTvjz0qwccN1sPm2HxxpNI/Xa+7PlUEMS+nQvbyuEK7Y0qFqxlPHhiNHb1Ze8WQJtU31olMObkAMw==", - "dev": true, - "requires": { - "chokidar": ">=2.0.0 <4.0.0" - } - }, - "sass-graph": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.5.tgz", - "integrity": "sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag==", - "dev": true, - "requires": { - "glob": "^7.0.0", - "lodash": "^4.0.0", - "scss-tokenizer": "^0.2.3", - "yargs": "^13.3.2" - } - }, - "sass-loader": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-9.0.2.tgz", - "integrity": "sha512-nphcum3jNI442njnrZ5wJgSNX5lfEOHOKHCLf+PrTIaleploKqAMUuT9CVKjf+lyi6c2MCGPHh1vb9nGsjnZJA==", - "dev": true, - "requires": { - "klona": "^1.1.1", - "loader-utils": "^2.0.0", - "neo-async": "^2.6.1", - "schema-utils": "^2.7.0", - "semver": "^7.3.2" - }, - "dependencies": { - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "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" - } - }, - "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - } - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true - } - } - }, - "scheduler": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", - "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "schema-utils": { - "version": "2.6.6", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.6.tgz", - "integrity": "sha512-wHutF/WPSbIi9x6ctjGGk2Hvl0VOz5l3EKEuKbjPlB30mKZUzb9A5k9yEXRX3pwyqVLPvpfZZEllaFq/M718hA==", - "requires": { - "ajv": "^6.12.0", - "ajv-keywords": "^3.4.1" - } - }, - "scss-tokenizer": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", - "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", - "dev": true, - "requires": { - "js-base64": "^2.1.8", - "source-map": "^0.4.2" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", - "dev": true - }, - "selfsigned": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz", - "integrity": "sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==", - "dev": true, - "requires": { - "node-forge": "0.9.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - } - } - }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^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=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - }, - "dependencies": { - "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==", - "dev": true - } - } - }, - "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": "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=" - }, - "side-channel": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.2.tgz", - "integrity": "sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA==", - "dev": true, - "requires": { - "es-abstract": "^1.17.0-next.1", - "object-inspect": "^1.7.0" - } - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - } - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "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==", - "dev": true, - "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=", - "dev": true, - "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=", - "dev": true, - "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=", - "dev": true - } - } - }, - "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==", - "dev": true, - "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=", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "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==", - "dev": true - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - } - }, - "sockjs": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz", - "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==", - "dev": true, - "requires": { - "faye-websocket": "^0.10.0", - "uuid": "^3.4.0", - "websocket-driver": "0.6.5" - } - }, - "sockjs-client": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", - "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", - "dev": true, - "requires": { - "debug": "^3.2.5", - "eventsource": "^1.0.7", - "faye-websocket": "~0.11.1", - "inherits": "^2.0.3", - "json3": "^3.3.2", - "url-parse": "^1.4.3" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "faye-websocket": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", - "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - } - } - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "source-map-loader": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-1.0.1.tgz", - "integrity": "sha512-DE4CJyfCVoxFLsHyuVE9Sjcib8cs5qdmOq3wcev1Un/r6F2AfQJDhag4rzpPPA48A2QZyV3CTbc+NGoFMfKIOQ==", - "dev": true, - "requires": { - "data-urls": "^2.0.0", - "iconv-lite": "^0.5.1", - "loader-utils": "^2.0.0", - "schema-utils": "^2.6.6", - "source-map": "^0.6.0" - }, - "dependencies": { - "iconv-lite": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.2.tgz", - "integrity": "sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "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" - } - }, - "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 - } - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true - } - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "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.5", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", - "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", - "dev": true - }, - "spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - } - }, - "spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - }, - "dependencies": { - "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==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "speed-measure-webpack-plugin": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.3.3.tgz", - "integrity": "sha512-2ljD4Ch/rz2zG3HsLsnPfp23osuPBS0qPuz9sGpkNXTN1Ic4M+W9xB8l8rS8ob2cO4b1L+WTJw/0AJwWYVgcxQ==", - "dev": true, - "requires": { - "chalk": "^2.0.1" - } - }, - "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==" - }, - "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==", - "dev": true, - "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.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "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" - } - }, - "ssri": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.0.tgz", - "integrity": "sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA==", - "dev": true, - "requires": { - "minipass": "^3.1.1" - } - }, - "state-toggle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", - "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==" - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "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=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true - }, - "stdout-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", - "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", - "dev": true, - "requires": { - "readable-stream": "^2.0.1" - } - }, - "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" - } - }, - "stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.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" - } - }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true - }, - "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=" - }, - "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" - } - }, - "string.prototype.matchall": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz", - "integrity": "sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0", - "has-symbols": "^1.0.1", - "internal-slot": "^1.0.2", - "regexp.prototype.flags": "^1.3.0", - "side-channel": "^1.0.2" - } - }, - "string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", - "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "string.prototype.trimleft": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz", - "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5", - "string.prototype.trimstart": "^1.0.0" - } - }, - "string.prototype.trimright": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz", - "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5", - "string.prototype.trimend": "^1.0.0" - } - }, - "string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", - "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "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" - } - }, - "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" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" - }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, - "requires": { - "get-stdin": "^4.0.1" - }, - "dependencies": { - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - } - } - }, - "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 - }, - "style-loader": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.2.1.tgz", - "integrity": "sha512-ByHSTQvHLkWE9Ir5+lGbVOXhxX10fbprhLvdg96wedFZb4NDekDPxVKv5Fwmio+QcMlkkNfuK+5W1peQ5CUhZg==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^2.6.6" - }, - "dependencies": { - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "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" - } - } - } - }, - "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" - } - }, - "svg-loader": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/svg-loader/-/svg-loader-0.0.2.tgz", - "integrity": "sha1-YBqy/aodra48qZdbVQ3pKgfh2Ss=", - "dev": true - }, - "swagger-parser": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/swagger-parser/-/swagger-parser-9.0.1.tgz", - "integrity": "sha512-oxOHUaeNetO9ChhTJm2fD+48DbGbLD09ZEOwPOWEqcW8J6zmjWxutXtSuOiXsoRgDWvORYlImbwM21Pn+EiuvQ==", - "requires": { - "@apidevtools/swagger-parser": "9.0.1" - } - }, - "swagger-schema-official": { - "version": "2.0.0-bab6bed", - "resolved": "https://registry.npmjs.org/swagger-schema-official/-/swagger-schema-official-2.0.0-bab6bed.tgz", - "integrity": "sha1-cAcEaNbSl3ylI3suUZyn0Gouo/0=" - }, - "table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", - "dev": true, - "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - } - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true - }, - "tar": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.2.tgz", - "integrity": "sha512-Glo3jkRtPcvpDlAs/0+hozav78yoXKFr+c4wgw62NNMO3oo4AaJdCo21Uu7lcwr55h39W2XD1LMERc64wtbItg==", - "dev": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.0", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "dependencies": { - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "terser": { - "version": "4.6.13", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.13.tgz", - "integrity": "sha512-wMvqukYgVpQlymbnNbabVZbtM6PN63AzqexpwJL8tbh/mRT9LE5o+ruVduAGL7D6Fpjl+Q+06U5I9Ul82odAhw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "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 - } - } - }, - "terser-webpack-plugin": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-3.0.6.tgz", - "integrity": "sha512-z3HLOOPUHkCNGkeEHqqiMAIy1pjpHwS1o+i6Zn0Ws3EAvHJj46737efNNEvJ0Vx9BdDQM83d56qySDJOSORA0A==", - "dev": true, - "requires": { - "cacache": "^15.0.4", - "find-cache-dir": "^3.3.1", - "jest-worker": "^26.0.0", - "p-limit": "^3.0.1", - "schema-utils": "^2.6.6", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.8.0", - "webpack-sources": "^1.4.3" - }, - "dependencies": { - "find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "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==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "p-limit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz", - "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==", - "dev": true, - "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==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - }, - "dependencies": { - "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-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 - }, - "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==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - } - } - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "timers-browserify": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", - "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", - "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-typed-emitter": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/tiny-typed-emitter/-/tiny-typed-emitter-2.0.2.tgz", - "integrity": "sha512-mTodzBLyisJpj8tQuXOowrYHIW8548XqJHEJdqo4vw1QMV7ZOZYDZKk75/5VkYMTJTvDlUpDtJUHjOowAvs0wA==", - "dev": true - }, - "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==" - }, - "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.npmjs.org/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=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "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": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - } - } - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "dev": true - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tr46": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", - "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", - "dev": true, - "requires": { - "punycode": "^2.1.1" - } - }, - "traverse": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", - "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=" - }, - "trim": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" - }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true - }, - "trim-trailing-lines": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.3.tgz", - "integrity": "sha512-4ku0mmjXifQcTVfYDfR5lpgV7zVqPg6zV9rdZmwOPqq0+Zq19xDqEgagqVbc4pOOShbncuAOIs59R3+3gcF3ZA==" - }, - "trough": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==" - }, - "true-case-path": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", - "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", - "dev": true, - "requires": { - "glob": "^7.1.2" - } - }, - "tsconfig-paths": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", - "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", - "dev": true, - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } - } - }, - "tslib": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", - "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==", - "dev": true - }, - "tsutils": { - "version": "3.17.1", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", - "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "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.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "typescript": { - "version": "3.9.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.6.tgz", - "integrity": "sha512-Pspx3oKAPJtjNwE92YS05HQoY7z2SFyOpHo9MqJor3BXAGNaPUs83CuVp9VISFkSjyRfiTpmKuAYGJB7S7hOxw==", - "dev": true - }, - "uncontrollable": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-7.1.1.tgz", - "integrity": "sha512-EcPYhot3uWTS3w00R32R2+vS8Vr53tttrvMj/yA1uYRhf8hbTG2GyugGqWDY0qIskxn0uTTojVd6wPYW9ZEf8Q==", - "requires": { - "@babel/runtime": "^7.6.3", - "@types/react": "^16.9.11", - "invariant": "^2.2.4", - "react-lifecycles-compat": "^3.0.4" - } - }, - "unherit": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", - "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", - "requires": { - "inherits": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "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==" - }, - "unified": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-6.2.0.tgz", - "integrity": "sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA==", - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^1.1.0", - "trough": "^1.0.0", - "vfile": "^2.0.0", - "x-is-string": "^0.1.0" - } - }, - "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==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", - "dev": true - }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "unist-util-is": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", - "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==" - }, - "unist-util-remove-position": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz", - "integrity": "sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==", - "requires": { - "unist-util-visit": "^1.1.0" - } - }, - "unist-util-stringify-position": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", - "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==" - }, - "unist-util-visit": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", - "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", - "requires": { - "unist-util-visit-parents": "^2.0.0" - }, - "dependencies": { - "unist-util-visit-parents": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", - "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", - "requires": { - "unist-util-is": "^3.0.0" - } - } - } - }, - "unist-util-visit-parents": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-1.1.2.tgz", - "integrity": "sha512-yvo+MMLjEwdc3RhhPYSximset7rwjMrdt9E41Smmvg25UQIenzrN83cRnF1JMzoMi9zZOQeYXHSDf7p+IQkW3Q==" - }, - "universal-user-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-5.0.0.tgz", - "integrity": "sha512-B5TPtzZleXyPrUMKCpEHFmVhMN6EhmJYjG5PQna9s7mXeSqGTLap4OpqLl5FCEFUI3UBmllkETwKf/db66Y54Q==", - "requires": { - "os-name": "^3.1.0" - } - }, - "universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "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=", - "dev": true, - "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=", - "dev": true, - "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=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "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=", - "dev": true - }, - "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 - } - } - }, - "url-parse": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", - "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", - "dev": true, - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "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.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", - "dev": true - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - }, - "v8-compile-cache": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", - "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", - "dev": true - }, - "valid-url": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", - "integrity": "sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA=" - }, - "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" - } - }, - "validator": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-12.2.0.tgz", - "integrity": "sha512-jJfE/DW6tIK1Ek8nCfNFqt8Wb3nzMoAbocBF6/Icgg1ZFSBpObdnwVY2jQj6qUqzhx5jc71fpvBWyLGO7Xl+nQ==" - }, - "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==" - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "vfile": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-2.3.0.tgz", - "integrity": "sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==", - "requires": { - "is-buffer": "^1.1.4", - "replace-ext": "1.0.0", - "unist-util-stringify-position": "^1.0.0", - "vfile-message": "^1.0.0" - } - }, - "vfile-location": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.6.tgz", - "integrity": "sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==" - }, - "vfile-message": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz", - "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==", - "requires": { - "unist-util-stringify-position": "^1.1.1" - } - }, - "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 - }, - "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" - } - }, - "watchpack": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz", - "integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==", - "dev": true, - "requires": { - "chokidar": "^3.4.1", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.0" - }, - "dependencies": { - "binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", - "dev": true, - "optional": true - }, - "chokidar": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.2.tgz", - "integrity": "sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A==", - "dev": true, - "optional": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.4.0" - } - }, - "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==", - "dev": true, - "optional": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "readdirp": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", - "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", - "dev": true, - "optional": true, - "requires": { - "picomatch": "^2.2.1" - } - } - } - }, - "watchpack-chokidar2": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz", - "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==", - "dev": true, - "optional": true, - "requires": { - "chokidar": "^2.1.8" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "optional": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "optional": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "optional": true, - "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=", - "dev": true, - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "optional": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "optional": true, - "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=", - "dev": true, - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "optional": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "optional": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "optional": true, - "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=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "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==", - "dev": true, - "optional": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "optional": true, - "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" - } - } - } - }, - "wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "requires": { - "minimalistic-assert": "^1.0.0" - } - }, - "webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true - }, - "webpack": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.1.tgz", - "integrity": "sha512-4UOGAohv/VGUNQJstzEywwNxqX417FnjZgZJpJQegddzPmTvph37eBIRbRTfdySXzVtJXLJfbMN3mMYhM6GdmQ==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.3.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", - "webpack-sources": "^1.4.1" - }, - "dependencies": { - "acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "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=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "enhanced-resolve": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", - "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "dependencies": { - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - } - } - }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "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=", - "dev": true, - "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=", - "dev": true, - "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=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "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==", - "dev": true - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "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" - } - }, - "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" - } - }, - "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 - }, - "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", - "dev": true, - "requires": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - } - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, - "webpack-cli": { - "version": "3.3.12", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.12.tgz", - "integrity": "sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "cross-spawn": "^6.0.5", - "enhanced-resolve": "^4.1.1", - "findup-sync": "^3.0.0", - "global-modules": "^2.0.0", - "import-local": "^2.0.0", - "interpret": "^1.4.0", - "loader-utils": "^1.4.0", - "supports-color": "^6.1.0", - "v8-compile-cache": "^2.1.1", - "yargs": "^13.3.2" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "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" - } - }, - "v8-compile-cache": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", - "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", - "dev": true - } - } - }, - "webpack-dev-middleware": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", - "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", - "dev": true, - "requires": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", - "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" - } - }, - "webpack-dev-server": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz", - "integrity": "sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==", - "dev": true, - "requires": { - "ansi-html": "0.0.7", - "bonjour": "^3.5.0", - "chokidar": "^2.1.8", - "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "debug": "^4.1.1", - "del": "^4.1.1", - "express": "^4.17.1", - "html-entities": "^1.3.1", - "http-proxy-middleware": "0.19.1", - "import-local": "^2.0.0", - "internal-ip": "^4.3.0", - "ip": "^1.1.5", - "is-absolute-url": "^3.0.3", - "killable": "^1.0.1", - "loglevel": "^1.6.8", - "opn": "^5.5.0", - "p-retry": "^3.0.1", - "portfinder": "^1.0.26", - "schema-utils": "^1.0.0", - "selfsigned": "^1.10.7", - "semver": "^6.3.0", - "serve-index": "^1.9.1", - "sockjs": "0.3.20", - "sockjs-client": "1.4.0", - "spdy": "^4.0.2", - "strip-ansi": "^3.0.1", - "supports-color": "^6.1.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.2", - "webpack-log": "^2.0.0", - "ws": "^6.2.1", - "yargs": "^13.3.2" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "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=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "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==", - "dev": true, - "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=", - "dev": true, - "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=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "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=", - "dev": true, - "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=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "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=", - "dev": true, - "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=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "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==", - "dev": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "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=", - "dev": true, - "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=", - "dev": true, - "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=", - "dev": true, - "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=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", - "dev": true - }, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "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=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "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==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "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" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "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" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^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==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - } - } - }, - "webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", - "dev": true, - "requires": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" - } - }, - "webpack-merge": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.0.9.tgz", - "integrity": "sha512-P4teh6O26xIDPugOGX61wPxaeP918QOMjmzhu54zTVcLtOS28ffPWtnv+ilt3wscwBUCL2WNMnh97XkrKqt9Fw==", - "dev": true, - "requires": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - } - }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "requires": { - "source-list-map": "^2.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==", - "dev": true - } - } - }, - "websocket-driver": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", - "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", - "dev": true, - "requires": { - "websocket-extensions": ">=0.1.1" - } - }, - "websocket-extensions": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", - "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", - "dev": true - }, - "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==", - "dev": true - }, - "whatwg-url": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.1.0.tgz", - "integrity": "sha512-vEIkwNi9Hqt4TV9RdnaBPNt+E2Sgmo3gePebCRgZ1R7g6d23+53zCTnuB0amKI4AXq6VM8jj2DUAa0S1vjJxkw==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^2.0.2", - "webidl-conversions": "^5.0.0" - } - }, - "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" - } - }, - "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 - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "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": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "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=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true - }, - "windows-release": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-3.3.1.tgz", - "integrity": "sha512-Pngk/RDCaI/DkuHPlGTdIkDiTAnAkyMjoQMZqRsxydNl1qGXNIoZrB7RK8g53F2tEgQBMqQJHQdYZuQEEAu54A==", - "requires": { - "execa": "^1.0.0" - } - }, - "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==", - "dev": true - }, - "worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "dev": true, - "requires": { - "errno": "~0.1.7" - } - }, - "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" - }, - "dependencies": { - "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" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } - }, - "x-is-string": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz", - "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=" - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, - "yaml": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", - "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", - "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" - }, - "dependencies": { - "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 - }, - "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-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-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 - }, - "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" - } - } - } - }, - "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" - } - }, - "z-schema": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-4.2.3.tgz", - "integrity": "sha512-zkvK/9TC6p38IwcrbnT3ul9in1UX4cm1y/VZSs4GHKIiDCrlafc+YQBgQBUdDXLAoZHf2qvQ7gJJOo6yT1LH6A==", - "requires": { - "commander": "^2.7.1", - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^12.0.0" - } - } - } -} diff --git a/src/Tgstation.Server.Host/ClientApp/package.json b/src/Tgstation.Server.Host/ClientApp/package.json deleted file mode 100644 index f1deb061e0..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/package.json +++ /dev/null @@ -1,137 +0,0 @@ -{ - "name": "tgstation-server-control-panel", - "version": "1.0.1", - "private": true, - "homepage": "https://tgstation.github.io/tgstation-server-control-panel", - "repository": "github:tgstation/tgstation-server-control-panel", - "bugs": { - "url": "https://github.com/tgstation/tgstation-server-control-panel/issues" - }, - "license": "AGPL-3.0-or-later", - "author": { - "name": "Cyberboss" - }, - "main": "build/lib/App.js", - "types": "build/lib/App.d.ts", - "dependencies": { - "@babel/plugin-transform-runtime": "^7.10.5", - "@babel/preset-env": "^7.10.4", - "@formatjs/intl-pluralrules": "^3.4.6", - "@fortawesome/fontawesome-svg-core": "^1.2.29", - "@fortawesome/free-brands-svg-icons": "^5.13.1", - "@fortawesome/free-solid-svg-icons": "^5.13.1", - "@fortawesome/react-fontawesome": "^0.1.11", - "@hot-loader/react-dom": "^16.13.0", - "@loadable/component": "^5.13.1", - "@mapbox/react-click-to-select": "^2.2.0", - "@octokit/plugin-paginate-rest": "^2.2.3", - "@octokit/plugin-retry": "^3.0.3", - "@octokit/plugin-throttling": "^3.3.0", - "@octokit/request-error": "^2.0.2", - "@octokit/rest": "^18.0.0", - "@octokit/types": "^5.1.0", - "axios": "^0.19.2", - "babel-loader": "^8.1.0", - "bootstrap": "^4.5.0", - "fs-extra": "^9.0.1", - "jquery": "^3.5.1", - "openapi-client-axios": "3.4.1", - "path-to-regexp": "^6.1.0", - "popper.js": "^1.16.1", - "react": "^16.13.1", - "react-bootstrap": "^1.3.0", - "react-hot-loader": "^4.12.21", - "react-intl": "^5.3.0", - "react-markdown": "^4.3.1", - "react-rnd": "^10.2.2", - "react-router-dom": "^5.2.0", - "react-transition-group": "^4.4.1" - }, - "scripts": { - "generate_api": "npm run patch && npm run download_api && npm run generate_enums && npm run typegen", - "postinstall": "npm run generate_api", - "start": "npx webpack-dev-server --config webpack.dev.js", - "build": "npx webpack --config webpack.prod.js", - "msbuild": "npm run build && node scripts/msbuild.js", - "build-dev": "npx webpack --config webpack.dev.js", - "lint": "eslint ./src --max-warnings=0", - "lint-fix": "eslint --fix ./src --max-warnings=0", - "patch": "node scripts/patcher/patch.js", - "download_api": "node scripts/api_download.js", - "generate_enums": "node scripts/generate_enums.js > src/ApiClient/generatedcode/_enums.ts", - "typegen": "npx typegen src/ApiClient/generatedcode/swagger.json > src/ApiClient/generatedcode/_generated.d.ts" - }, - "devDependencies": { - "@babel/plugin-proposal-class-properties": "^7.10.4", - "@babel/preset-react": "^7.10.4", - "@babel/preset-typescript": "^7.10.4", - "@types/loadable__component": "^5.13.0", - "@types/react": "^16.9.43", - "@types/react-bootstrap": "^1.0.1", - "@types/react-dom": "^16.9.8", - "@types/react-router-dom": "^5.1.5", - "@types/react-transition-group": "^4.4.0", - "@typescript-eslint/eslint-plugin": "^3.6.1", - "@typescript-eslint/parser": "^3.6.1", - "autoprefixer": "^9.8.5", - "babel-timing": "^0.8.0", - "cache-loader": "^4.1.0", - "clean-webpack-plugin": "^3.0.0", - "copy-webpack-plugin": "^6.0.3", - "cross-conf-env": "^1.1.2", - "css-loader": "^3.6.0", - "eslint": "^7.4.0", - "eslint-config-prettier": "^6.10.1", - "eslint-plugin-import": "^2.22.0", - "eslint-plugin-prettier": "^3.1.4", - "eslint-plugin-react": "^7.20.3", - "eslint-plugin-simple-import-sort": "^5.0.3", - "fast-sass-loader": "^1.5.0", - "follow-redirects": "^1.12.1", - "fork-ts-checker-webpack-plugin": "^5.0.7", - "html-webpack-plugin": "^4.3.0", - "node-sass": "^4.14.1", - "openapi-client-axios-typegen": "1.1.0", - "postcss-loader": "^3.0.0", - "prettier": "^2.0.4", - "react-dom": "^16.13.1", - "regenerator-runtime": "^0.13.5", - "sass": "^1.26.10", - "sass-loader": "^9.0.2", - "source-map-loader": "^1.0.1", - "speed-measure-webpack-plugin": "^1.3.3", - "style-loader": "^1.2.1", - "svg-loader": "0.0.2", - "terser-webpack-plugin": "^3.0.6", - "tiny-typed-emitter": "^2.0.2", - "typescript": "^3.9.6", - "webpack": "^4.43.0", - "webpack-cli": "^3.3.12", - "webpack-dev-server": "^3.11.0", - "webpack-merge": "^5.0.9" - }, - "tgs_api_version": "7.3.2", - "files": [ - "build/lib", - "build/public" - ], - "eslintConfig": { - "extends": "react-app" - }, - "browserslist": { - "production": [ - "last 5 chrome version", - "last 5 firefox version", - "last 3 edge version", - "last 2 ie version", - "last 5 opera version", - "last 3 safari version" - ] - }, - "sideEffects": [ - "@formatjs/intl-relativetimeformat/polyfill", - "@formatjs/intl-relativetimeformat/locale-data/en", - "@formatjs/intl-pluralrules/polyfill", - "@formatjs/intl-pluralrules/locale-data/en" - ] -} diff --git a/src/Tgstation.Server.Host/ClientApp/public/android-chrome-192x192.png b/src/Tgstation.Server.Host/ClientApp/public/android-chrome-192x192.png deleted file mode 100644 index 8e0873b04dbc1d269fd57b74bc69dbd0a8a3578c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14478 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 z 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 diff --git a/src/Tgstation.Server.Host/ClientApp/public/android-chrome-512x512.png b/src/Tgstation.Server.Host/ClientApp/public/android-chrome-512x512.png deleted file mode 100644 index 8f0cc45fe80e70e74cb56645f99e2bc27d06120d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41495 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­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�{{5 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 diff --git a/src/Tgstation.Server.Host/ClientApp/public/apple-touch-icon.png b/src/Tgstation.Server.Host/ClientApp/public/apple-touch-icon.png deleted file mode 100644 index efdd41fde9ec8ea8ac89ca973bc5dc186db7252c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13437 zcmZ{Lb97v9*lldvwi_E0Tb&}dZR;1a4ca&p8;y;|RvX*4`JH}$-Mj9(D=Rt4OwJs< z@4KJ%(;IQEYh^wXgfe+!KP?VAS=(Tj3<>~hk{1lPnYMH3wgB1J?A$Usp zfR0KP-mC|O<*rs@zV@!_I1h5%T4i!xRr>=Um8JYQ%?vzq$PI>d0oKg3nZ=n{m&BP0 zS)qBN$S~aAqu)0oi?dAEeUbC_eX(@scl^ekS7Y7N$aKiEwB*RD|K^wu=232;W7~y||{S)-d#3h~< zD-wPtNU_@pf{At2=4=o9hPhyOBe=v8Amv(-%Ev70rNBiH6E<^&a)N;vjl~oV1Az|f z7B@<}o`iCWYA+EwnAA#Crz`v;9!*~Mip5zfv8z%(CQXt6u*WU{u$hiCA>NB z^9w7o?vs(fyy^AiDhPDscUT=hLhq{a9yD;dMlG$=fey|?`Uzo~uDrJ~61%{4B67-9 z&~pgzK{O)b!Xb)r2wPUxC@9KRRD>+545nHk+?@3sVE;!XX2OLL@gHKgPgG^woiR7_ z2BABwWd&rF&D3y%c>_mvRz}YbG5d8?Uyt8CWR%9#Q;>;?&EmMqzhbR9>^7sxm5L|g zs?289g#{&=!vXOd>Pzg|HivxEntPCpCp}Kk^Z^V7^bJ%<;VjC3RJ?tl{ZPSh%#+d7 zdg@rBg@l~~uMl=A^zHRpS4vN@OLcy`#VAF}eUA-eBV^TwB0+sYTKH3jz1(i!Zb|TL zWWs58jQYx8|9;kKZRa3WVL?S+bVo$(gY_)`oZZUrJ26BiHjaLarhKGeEEEt`u!)gC z>t7Ce!rIXkF6(reBoYQ$YGIZT1Loma68>)=dJ%ab>X^drkppJjSxyvfcjQ}*gW1Nf zd*mF-`YGB%_pVkb{E;VeeKvJ z3|MQ7spy6O^XEwJt0rD37LKG6GcWUZEgU=|1wT79*ylU5u}JDzl60j6hpZ?h%C=m_DM&y~6Hx`|XOj!{J!r&J5d{xwaPSDc$L^RGRC5F7W(;4@+HNWcj29J@=*{`XA-O&%FwGQW5!%{uIqrbIil8p(E zW%1;gKQ8g;{;>>&B(Pe5^F8m){+-l70@>1%G;e4{@8inz4jBQvZcHAMAgrvt%^SU6 zMpD${Z84>>-qW`^iacW(*>Kmn8Y!}o3G+ZX3{WK2jg=B~O)ptiWIkI{L&PCi%~mQ$ zVXV~O_hM`ax7MvW4)I)T$@Ic|}mbdMOcWeEN$qi*8Bs**l{Q&(2kpp%M45sxz zfLilSzDpxsJ!JogV z=UHM?$WDqa#$@BxBKkkSA!(p5EGG{6YfW{H!edAiI-s=vJ^hbk%Z%#x<2i`1x)YTV zPfEjx>icGH0XjwZEatk}dGgL&_NQ_!1I>P(>Phpr--XFPK5JN3%7ghryIa7VP7dGZ z@{0Q@fzIuSap$NlA|)UY#xs}4*~VbNfG@`}M8lImxV;C2N(Y9tht z0(~>Ms4U@`4qHo~Vz*rN1P3>DwE|ZV8Mbk5rI=U_WX*zBpzB*~?;|iXhqGbRPA12w z8LNY~W?XEJD@xMCp^CdnU9>*l+${JRNwjv~=b?(jmR#aHKZioHOwQm$Vf3QUP!W}H z%&1DO6_BH8YT)3p$?>I3^w`8&J&J&N_vCi2r1Vo}%fvJi302G*l#pZiT}w+_cW^q9 zyH<}zBDMc5)~?nCm5GBrzi}d38VsEo_4)Vflr(+~f|%|!qt<6#{V9jD{-kadX8JOo zG_eI78Mij1#4X|Jd|S&WH}xX*gete=M1^9E(d3_8SYvP!kTjp zf;LRE8VTBnlNG=CAIX~9x)IXgRZOv$Acshn*N{2*RoE|Vg(n2K_6ce@X=7HOdA>B>S>BP4fRHpX^reZW}yK#D>1-_g9LY;+k-$ z30nSf3W0%<#B5P3N||LItMpTc3BHEHwnH}goywaKFVR2;e89_gL(ACf3u!Bz8;$)C z)IcG+vBtXro!gN@P>Xky)+}9rq4~*DPEUHA?w2-e(zZKFlYdJ!(_LaX>ax-wHGXs` zx0J5Wo$lC4JUTBk%%PM=*H*NW{lGzRHEyTROAhU5exz4OJO%uB%;%DP?RE0=!U;yS z(#S%+zreYFYfz{fIq^)Ffay&5H}Pf(=3&Lqh;ZJc)?0qkh-=ivc2i6VhlSta>>|Ts z!}(=J11;O7HCB&0M-{j2S3A--CvzHg8?59D8xal$R~=#^zu?^)c@ZPw__-FgW26VLJ1cXN&>&bXj($NnYR|=1kKf z%yxNt3d_jzjVTIOH%UlK{J7m7FkEP~m3WkoDQ#NB0`b}zH0RrpY|lnqEdfALSAHJ# zl+Q`%a-1LN$&O(Ne-<*gXl9L%diu%AoW`gT4#8!j#8{khFR>PdBJfT1?X|yY5T6G! zzvJ|#r>8S9;-2xPC4gr$mzs{TKZ(CY!gK}!mx5%Z)v)n;7APVj$+Fho=Di4sc}Qc7 zi>tiMDCKjGdyVqhd%KL3H!ZO}^*ygq330$e#*)Q0ou0*u)-h$PG|9~hQG@znlRnqx z>w<$S;g_=0*Ss#O_LrBS`XOr9Rv@oTCno+AQcuqq*^lbiuak}!Q%yf{cuR$p3E+&h zRQ`NDc4oETxJ>0$rEO5hltU+7sBZ{|%SEE;?TtJplK$BzsMSiBNJRLYLBpSIQn%c) zxyJZlvZ*!3piS$TEz8@z*Jjs*gDm; zD`6(Qo@lg9Gxxj-D6p!`rlf4nsj?^*o*5fdV}Bpec(O8I(ZU?vX>N~{4w6(hqQV_4 zpu8WSm>A!;a%P5xhK56g2a5f|Oz$lbc($ap()QDr$=#o_gpdcvePDnxW zpXHNvEMUMQmpM~iT~y=1MO#>EgfahZjLbn&*Vt!rsM z*`q?hX3$f-&PFX#9dxVf;WP`Yel^*()?27OVV_*`9}H|Nu*><6D!Gu+(=RJC4)QT5 zOXI7laBy%!{+xA>W8;Q%ym2LwP7ZBn+zuTU!dW_A#k_P2zo(%6iB`G zQfDv&{fFsOuYkRdm)o-p9lfzLCJ}K|nT`mS` ziT(VMf5Sy}HZtb4`)jc=bJYOEI*|j}dBwSR_e+Q$58k3sF0SXA6MSw@&&Q9St~Y<8 z06;E+xW*$>bhCroH}k1tu*?j z!ND~@+p}MG|HE~*1U5c)e33PSo8c4g28^Va_8$Z6dR;FE?h96uiy94zj@N{C z-e+iG#>})BDb=JKrNiGrYn>@ZZZrc$=+q3tC=t@T#pBDr7Eg=))V?Ti-LLwgS4+Gi zG3zJloyoIYU^p>iov>??a#-z4{x^-;*@=m!2^L#_Oj*Rdn#!q`$Vcr`pp$;OEz&oW zvBfOZbW>G=00@b*;K>xTHFG5=HfhKG!GEOX<+*<`R*^JzO*dSvyRLgZSkN(YiA$=j zg@`D?Ik;c_JghqlYg6WJ0Jc*7QOAZ zr(^W)gi4-xX9Crj{S{^@FPr9_ObnpINy>BTmrXjHuUlrOGz3}$-)jP=`hu~)zBSWG z(Db`06Bu6x#XrOJNJ+U_Z<#FUIGWCPO4}_qB=kPY*NBisCYgCDSeDror`{FZo%TRF zJ0g+pPnI>2r0#dpgDMQ3X& zC?M5(gDi%4l=q8byw-yxRA-SeQFr4>Eu1D*KjY$K&lT84d|_i^5cBl94LAJa-7Xs? z=$&2<2Qy|7UUX-j3@Nv@@jkD6uicjnFV8KsL<&~a6g;z(QeyidX=0iu)_L+H%h&tR zFsH_CTuy0}Ra9vPCmJO4g{c?uZujiHEgCt0R#eG64k$!Hi?OSlkeZUdYu^xx<$#At zfp3YKLlr`fN#Bzqh6`?>_n;GC&vmtCD#!8N>)=j5t=%!)Xc>@$!TGKrwz{*n6kdua}J^o!bMmx8RPM*n}Ub#Dh!i2N2<{wi)P#}aB(v4-@?P;d~e$E zCG58V0I%hwU4AsirkFo3FRR*&pcDYA7WCWO#i^d>;bUAU<7plZSDGrodX!jMGDHLG z7W?oCv*le(L@_0`Gc-+%~RPRfSQ!3pLWhqf0zGTC!LVzoCYG*a%w` z72jv?)T>7WgV{lm8PoHIfei%(=l>ODDc*dUa(HvWG$P=VR=F*eykTS5f-e zXQ93%>-Le(n(-haF(pIYSW~f1LXbUbSb9|Aylee>G`=Hz*M}(@6kv?)7{Hrj4ExM~ zG!?3mDez^Bg=N+*F=@;Dv^3%%JF~C+d@{ebb)bT2r0~ET>kWp@R_Ulz-eR1+QxxF= zs#$54SKA6$?r(=SmMhbOA9AAIGa8e!Jp1-B=1F8_!F(~FtK7}2iNo`lDi)i=VACRW z-2<>UjYWN)bGkL9|ztlztF z2e)<(szkkLH!ROUbDwda9T-B&(H7Jlw0B#6mrN<(VEp%KytvXGK~P6a4(uNHxpC+e z0}-IOy1voqu@vHwmRz&RR-Kva%O1hUc3nn!P%_j6G*g z|J!4{TxgSVFx?1#TKQ2@R%Kn1?I@_Fr3qeL(tbf-ZKb>VjeF129LV|ec^dnoq!W~s zPv+4EGzO-?J>u*VNcg-zkzZT3SKl}Rag6o4hu5j$kfBB9%D9dEgnRl?8_!t-Ny=WI zoLI=4oqzhI9p)@xODNlad;KGLKKstZf!ObS`4pg0VX}o)j%#)|@p^GZ%ml)u-#pr+ z$%e+PzbjU~nd~kB%A^C95QHA(nW`&XItE)LI~a4@ijaIbH5jO$jOL6# zf^T)^nE^~c?jKEie915~+i!>)$CVhTp%o#t_3u!g(iQU$(8kk3`G^81`Qtc9_cswpsQ#l7u47|bBCqQ4AS$Qad|`b-$rY*<2Ym( z+rOiC!GFmnINdt-!w%Mh)pLLD_9ncZhq{ zM#LV%I^kcdRO&;#ZThaSiN{iI%j760e0V-Q%vn%dW^C!k=yY_%-<4k)!U1<>0R@!AQptZZl!(fs#SL~g&l;H|@0tdI^w zp2d#$Kkmozo)F2T#FEIGZGtjKmWW!6HYJqhpi|WrIc<1-^c_^$8zv@}JuAgh>JW@Z zxM@D-o*L4f{T-(08MAveB}Kc4yFQsF9y7MNCm)PglFbsydl=CiZCt}Hk|AuQ5!NzM zab!R4Rz}8Lq%QwE_kv`){y`tVgFBhz&!1eIA=JM$LuPj`lJ}S_Bd`E{h4H$^`Fnga zM-&`3caq&vi^%KAYsHY))}G0Lfr;Qk>6d7#gs`Te_n z&1XUVnk!A^hO5TXL~RYbtjt!QpcTr$tJgH$G}jXrA4f1b%XcJcK8~KBAsyp%nb^Z) zJmFHIwA!=Poxf_qLQaii&QP7w-u}ovo%TQr@)1eO!vQ)4Okw_*^=&AU3y?UT*y}NA zzXMWS(o|`_@%&28_if<-bJ#10b#Z3~?E#2N89M}2{B8>O147m6p=LFm9U34iZIif= zdgo^4s1lk#p>y83t%q>pc+>zK!-q;5NlMl{C0B?XP-pHe=O4MWloD~bkx|hYxMO2kEvae_lYz`>^2TQXKh z@Bz(6=lil*H4&zv6aeK3kfjw)XJ>0jf8ec0DFhbuT7CfTk%AiciO;kqww~yt-F%Y^ zozLHQhAa~6vam*|S$a4)T{eIgYt^Oayk`S4ri{Go1N`ZK3ODX*piE~}P!K9(e4(;Q zrme9catC+mATM|-KiE0F>;pjRCn)&FriRV;$#a`4R&pRa{~-aAmg#z~opklGm{1h+ zeym3ex&G8~m)D60Zv)-}y=3Tc0hj$qOT8nZ`9fbovR{i8v%K=iOURuj83y7tAxB~T zO7kC0YPg?jS&}Ml1;-hWG~L^31*+`u9snVAJI?HW+>ifoV`09t^UGIuk$ch_}e|9*u0n~{X z#W(R-EDhbygO=-TJvxqh_EO3kR6HE1G73&yT9a@c&`9?d%r#y{Wyy*0r_0WV$;jcY z@PH0AW>`N4Mi^1&`L0EBw|~zR{rd<#wfB44QsYxwiCQ(?UyJV5`lU0uU`TZh6`$}pDE5VA5T7_9Dj6PEaDR+=YuGHHj)n-*QeQ!07EoZSu*NnfC4NN3cxKmy3azV z6K{m=Xk!$37N(!z$xdAV)T@mbR z+2c|UdWVC}IYlOqPcv)i&uE@d&$9kaMflUZotUW@^?&^kT|en^@pG5*r|(IDaI%-E zt?VY1)%$ghKQ**1`A*WIp)G)0hhvrSIVK+AO8|9~J%l%Gi)#Ih3K}IZ)#wX3;{dEp!Fa}@f&;=KVNFWTf&pQPw7dltY z*r{Mj^b+j6BD1WFSLzz^+{WHDLsAq}-Ehv=`2lPY77>=w!?U3G3zJVVU7I-5K6J18 z-Ger=k06)AEFEn`L83VC-wV>n@eX=pcPSWgO~H zn)JxBh=MNajv|aG#&Hv%A~KT9ISVCq+ZiAS)&}OPkJz?6#b zS~xg%o6{l=W^T04;l4`7n#hiUqB*Tk;h=)AnRML&EK=1_KUhHDz9$Wi?XOXtM>?B# ztq_aXQ1YC=;Tq>s2L!gFJ8#FvH18!c8?< z?JpTJT!8lGyiJhpZO<|JdP^alpx4rT@)C8jmeYfJ9&nOE>Q;2QD4@LX>z*pzqat{! zV4&c`p`P2?1B1RUn2#ZrxJSB4|GWWq{F;DmuS1=Xs!#?=6JcePxhyeTV`@(NSU>(A zdgH^*+Zws}n+-OskLUhgc`@-ihE zE2|{9N^6qUBwX*Sx8;LBxgDPeIvuV(-rkm;|NNQDWr{{=hhhs&B7_K)nyh3$h;hjy z8CTcoJPsbaerFqR}<{t z!F{$8l0W8mh7Jhw%>xhk7bFmV5uxGA>JidzKS22s(JJUNs`6a&ExbGIsd#qC)h~G8 zX;P=AkIr)%<(o|tcMth&kT;<-$y41mnV!?sdbQOAs}8jr$BaH#l2CFD0#Beien`Uu zeARw!&es?l&Rgbory0Ss<~NtX+AhpoYm)7m2&Z$^&)7spCkUhmvQ+y4Z|IbP4MVr( zI2+DJ>ZaA3r8;_VZojZD9zB)4?vtuJaBO%oR8}4bS(}}gEXU$GJ^jm z4fESW{p3ca-_Tg^qv+d9#ttR3%i}mDv@6u1BK}O#4RdmLM7N$SHW@qf?&bcvSz!3D zFnK+yZfBdnxfq&Q8AU29q)Lf{w zrK~gbi?|wL>18Cv!jhEvlG@dNW*uE*-F}@@{qWL8xl(>FfndhJ>ofk!!m;w`1P>rgk2PAPr1WRJI5LHm|cgQ27+QdsbOl z`_-Fhr+(|wg`&J{`13MdPWTA`gL|%yS|69D*sLfnI7M$VR;_EpJbZiZgA>BAl0SXq zJ`QUFra2@RHz68nu=-#&1~^ZPjtlH-@-gdhjbuh&?$fU!tKLlLL;z^_@A$Z z)o}l5F$D-dTpoNze4sI-%u#2w-ISE@unU^sAmj_(gW2$_XqIa7rt5SFYq?F$;%T@Z zE8PO9rhjW)S4j0=A9VVngto@bqcbHdStO|esH|T;oERx%9V2GieYG%<+?*ZXxjBDj`7h&TiU zA=2PiRB37JN8eH#lHD#HtKJVjh4j#1s5zeuWUr>=^HQh^_ zDSrmhRGWyp_=RO>)-#RzS|BL^ukuLFI)8>^kWkH!g!0kf_cZz9fPz~fKR>}PUVL<< zW7in|8l`j-4HLeJE_DudRB+P?A!W!#(n?J7x@bIpIQQk`-oNx!Bwbl=(O;vHw&E=- z^GU|x+WxKhPef4KvE~Od0`nijm#aF^lxbNh6z9F*$IogtzP@IlH=Xj<>g$?bhC{$m zs(`PpBR9nnibXfzzSC&SY1-q<>2!Kis&FX%Lk9`)#VEpfaE0A>(&W!gB+t(TKQ;_o zvKA%_eoRR{@EB`7Cy)bl$b@A3U%Ybp12+QQYT|*}(r@o1j`pUQ?0SqYZX3GV-S+CkrJp zw%pSOG@wzVO$gbB%8T25m8Hi3%WA>_eZY7tVhWfKkg6P447x=^IAD~d=stb|Z#xNc zk?P%cjnlvZ{T)ii6ilVzB%Xoy5jBR{-ai@51r-I5c_WkX2)-Sp!~?n@pn8(N`noe# zAoF!zqsIIaA%la5!&)BG@u(8TkVV25`?apoPJh4+hl~##?<7E~4eP+TyrNf?HJ5-0 zOR_7QnVlr-o0ba~D$+VJp0^589zu*+bHrmToK zU~eYlKmXkaG`RUhdoKFLNJxG-6IwlD1=iM1}(s*uWDrjS?S zMZ0BxNJGR76HshqoUMfbLrAk1f&URA3%J{q0eX{j`p^2#w*p@qaSuI)y&^xV9B46X=_+#!$Jd#O~i>3I@7`nI&oA@YqaIgZFz&z^Jq)#Gh!G zEzZ8$=}7+Oxx=*nQWNcsN>JxMFMedtk0;w>#=STd!xa!`@O_>2uNXRE{W4?KN@Ak; zq|k$A_c(*>BP^CTFkq8ix77bQ*9)>~%hA>_+Sz&rq#Md{?AO=kHiaiaLYyoH9U$@H#5=Tx|7~fawA9PUAqthtaRS$Qnq~?2gKgK5VrWo(QEz z_2!yz^C5YQU2t5GYhVnVVYF`lh59vG+*nXhEy?N3g_2stG}14rWdJCp{=7MygzV;k z(OK1EhLRtSeuErC51o{UMP}Dy$8F4=hJ?n2i-#9kWW7T`*1ze*E99(z6x^^jFk9Uo z0oXUdxO6kBH4^^(as7}f@c6P!Z--k$_5|4l?KurVL9P9Jl%!>>S)oZ%V1f6@9xE&liv$fnmA z{>xgr+2aWh=*ru{I8*voWdlLbtKLt!B9TC~H$nb~%-v8t7!f1$>(v{p?|!NPD1#yy z3Z+q~naV4+rUTnYfMC;EyEB5~C3{Xjnvb8~Y~!lv_0luj*A9w^Ua9>DwU^iLA_rNC zFByY#%O@|jrkFWw50vZdy3(Dx;;o92C>w#@BHike{>n&;vN7p!pJ8c~m7W|nus7Db z`$3V)stnpTfZ%$#O!?`T-KpFRBId@C@>};#o&0o95CPKf-lc0C#kL_NISf@X2lWA8 z$JX@WZTU-p8*v40Y5~qedOd+gD5R`4{PSAQU~~?@^WXlYG|>P&eUZVoCfGX?0N73z ze7{u_aP9+RJtUzODl@~!oGrw2zTNIjOG=@uYq?vjy8Q4^F8gw^?E_>Vu%fq~eh9~& zQ3j${$hWt*fMLQAtGHe6ndA6zeg#0>Jx;xW49b9>s@I5bPQUBo zwUop-g&JY!^?k$vcmMMC{Zq}xGd@t}1^f;|X^^-wkkOF1>Pb_3bG01na?8?rszH;u zhtmx_^C}s?-Div67?7=d?pa%QH@h@-45Ee$sBZf5PP_LHRQ>N}MnE2$xFH^!3?~{! zFixmWRSf1v0C9M`KAMfCTzuGgo1qkN+9eO1K9=O2Ye(LfreEKkmP()@`P%aM za-3BCcu+2jhetr}Dy$FY`wjXp&1J&spFRSF-1^P5oCH7Kk&T&6U-4Dwbfp32J~MlD zw@sz|EU(&?`6ltiW7@a{5V!0bkV#r9X2cyV;sG)aikH8-h#dhZg~!1+6kXTDgqs;h zf9M>>5JtY+7dwVQZBoEFS_G{F>8=BaCjFboJ<94c9JS6uEw}t4>ug{9=T@I@0;c0K ztCABv0DUgtO{SG@z+2P<{P)3onZqFKnK|Z1wR?8%>~&%U5dF*&Fz88kmCNBu2RJHy z6XY9^CEVE|bg3^$PET*OSl9k6Yz=U=U*t=(^trghikE%vk<=H0)Y_^_**=H*ZwB)lPDx4GFfnbsA#-tDlgm9A}!nD#Fb+8a+*NSV6&Fe+x^TE@8=KK z?O4==N8x*Oz(9y&J%2!zk5$vcR5#gbN;uZ zA!6Pt9xnwT)AI8Lq5O5LhF`(sarcvZz{+oXxhD*cxcKeS@crQ?yDp!N(AACRfZWa( znOaMEgteq@j>lThCqqaOi+}{=_E9FI?B=HD<=pE!|51?qUjKldcEs=N*v7b@)qhU* zBM?vg@sFV!0Bk-u93}v#Kl`HtvChl=ta!nWe@a(QG=fm=rx$DvVLhpCFkvVbfIsY< z?av<~uF=(t#kK*j-h21e8)%+9>{Hn!F()4@)=%Qq+sHUp^b(}Ixn!|dQBY!#QP9lv zo~HP>e>TDsa6EqxZ0Da}MA9ZhIO|U%-e(%MKi$kqmdStL!E zl`w<3O4Vi(j-|XX1hKkfS;&Ng=LOKF)zzV=AYAaVl$E7jPYeQUpzVIe0NQ?3SemqM z%4rPdS2>o6hHk9tGY;h&|6V(OGa{3{tw}h)O>UMzE4BDhf~r8)dVePA)@!9$Rng2I zTRm!V3I|Lm)|OuRco7h9;j&&)NKk9FN)ML?Ym&3@x51W!IfwKOzN!KcwVMKl(+%Nj zx{@+bodu#FDvDp>8$Pk#^0yh(XxjMjXBQQ3Ax}T7vGHeQEpm4D0!z8sWa2tF5T>!w zDywJERY)z2XPy>EtjCYL8z}LatQ?u44Qt_lb<`{WDrIRGG`M%Y>Fq!HXQi~Z8U|KX zHyPJ0msU3&3iYP%07hN&>(l7rI%^@gu^Kg=;JSx!{pwI)UE8v95NAgigFsS41G1LN z%M|$y3zeDxl>q4adI&%v|7D3${FgPZ{2vlJ#()Vj-2zVEL`Q_zL)zyX263OUM;Ier zU3{KQiVy@b&nIoJAC4$D zJ3KwQ9W8J#y6`o)`!$`&|6Ai3P3Ka7>%%u&)gY8fG^gTxmeTapnSrb@)Oavs3}Y5R z$^LIim=%PC{=j;HR^Jf@5wX{qnxeA7eTttm4Dy)yYSXQnOfsmRz$ts*zdAidmeu&p?Ny`sc2s0I{~q{bP>(nbLh6eC)I7273>Y@;Upx-TS>? zHm?>(r|884%E9+jwy9>4%T3wr!G=>58w@Ae-ErNN!SQ89*my+U4>!3hw}Y(20xnF! z(2Sh6425R*Z)j@|7pQxjI&zEE?qU@O%o&c5=TUKgP~ZFoYAdo}SS1u~@N>|0uq43# zK&7$7J_SOR1(U0*^R5Y&t# zV6~@{yk`oMqZ#OdtFQg*a7H3YK;CoaXg zvgOH{9%(p*uz}}6<^=16h*cf&s1ge#VA|fi=z(f+y%%Bl&k!iHJ<>C7Cb?0~{XBK7 z{}8sK@)E+2Bp^VC-%Q+066u8h0~rksQr|waYakd@cmOhh{_+aqN9cl}4=|rdZjb@b z9@Hn#prIQ#!ya7jOj^Shmn@S6NcloHSt+1#p?6d%Ahm+uumq75x>Dl?IjuOi@ERr8 zvp)st_!X4o{=d(q{ClMy>m74|=j-Q#jb0|;;Td{2*)MKp#%|`qrY`2d28x@Dn~R-` zm;HmlM=oArK0aY?K2|PnVJ_M~!h zakQ|uGpBO%b~2~3c5*X?g7V7TzCuHC{=~#IqCPsNxT^&PON+{3ii%5%tDJ-fi%TUF x#M^5IOI!DmYINbxP~TV|Ss&tPkOD-B1L}wn+wBU(mjWCDN>Nr#rV3;f@;^ZO4Q2oU diff --git a/src/Tgstation.Server.Host/ClientApp/public/browserconfig.xml b/src/Tgstation.Server.Host/ClientApp/public/browserconfig.xml deleted file mode 100644 index b3930d0f04..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/public/browserconfig.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - #da532c - - - diff --git a/src/Tgstation.Server.Host/ClientApp/public/favicon-16x16.png b/src/Tgstation.Server.Host/ClientApp/public/favicon-16x16.png deleted file mode 100644 index 8eab43dd173da509e50178451dcce865479f9275..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1316 zcmZ`&Yfutc6uyWLgh+=X~Ee_uPWekU%Wj z9t{A%GJ_Z#C~;pW3JF&iqE#3arb&KmKLBnQVV2{~piU43ao7N4Z2}-SAAluzlsg4L z1_^*^J^=I*0BogYjr)B7Fxe9t%ng7BRA%&ccAQnxjBsVeCzS6WE(8EkS=VysK_|3Y zSy?H*e7*ceeRN7ze0r`&K!hhVI`2YdL3xe&n(r)aT}&)(keIce0o?GU!|wiJZoBqV z19cHE`PTS~Qd`u&G@GqW8}d;hGi z^9_wZoPWBZ?U7DDl6|}w!nLZ@ZI3mvk{p1rzu9oVw($YLZH9zvn;z7+DB%X!c{Dxj zXi=%rPTM1rkLX9ohsP$qPt74Rcy-MW@3bl*RmsmMAj+HR_vyz9c_KOF0prJrvp0IN zjuw`*tF`4-wfSetoV-K!@g=IR?&kJRj^GfCEzUW9sR@2BXl8bPW_Iqw+`Q(Q?rHA;q$kTOf|0K&8oT?SKY6Bmr0J=-+dBSws;Rv* zHZ`a8ubL`F`AXu3T3@N(RHylF=9;l3Q)@ zz1ynV5hh^sCCH5wm{*cKf6-uAG%Rt1GThc3!F zCo5LWO*%X@GA2Fx`}pLP(YX9u@uf9xyPB1qpT8`&s=AzfLSTJ@4@eN}$?z?DbVCr* zJ2c*mK)qIbFC+i-liq=s6R+>yR~4MU9DE=(yWp&DXkn1B>+hR8zs?+AF=RCAuR8FSj4?Eg)*IX0 zW@Uc+4hq+%v|-FGupFB1ZwN6M!#qFC)6ha~&%srskueG)P@FsT;#dmPWUJdK)~*90 zA%55!$iQqIP_{wELdIkVSWK8&n|j&Z^i#oafIu=Ceq4O7fDb#~lDS31wA*Bk;-5cP z91+Up@b-rb5c5&}R7yQrQLCuSkbN4&;|I5Y#HOYFy?{ZVJb^8w-NQE&vRSMywd>aO zs;czhCk=KQVsi4kX$Sj@r7_X^A!0TDhL}!oYRtCZn{8a$99&l~xFs*4WTJ!k({*n> z6Y2DAv?fiduZ0syKC*0vi5rEE>P)qU6>^pZM9LE4WkR|jO$Y@blgK0@ zi9+1w#U)YbR4ScJbtRGMBvRUu`Zxb_5K9t7iJAZJfON*jK!=DdZlsJ8FDFRTB#ELF zAwiZY6%s^JnE-$zWv>=ip$_p}T-5uzG|Wj3KssXF1sEGgo4v)~AZ-YYTuOTa(ow-B nbPe`(C^gD;N{g=Cpvx?GFl}osTkxlzgAjlj5W=YO=O6nAV?8?7 diff --git a/src/Tgstation.Server.Host/ClientApp/public/favicon-32x32.png b/src/Tgstation.Server.Host/ClientApp/public/favicon-32x32.png deleted file mode 100644 index 6e8aa69005045abe293cc4b39f1cd017659c0958..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2511 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 WL;$~Qq@K^P0FWjq#GgjqN&f&UHjM57 diff --git a/src/Tgstation.Server.Host/ClientApp/public/favicon.ico b/src/Tgstation.Server.Host/ClientApp/public/favicon.ico deleted file mode 100644 index 604f8ae0911890091b10763a20e54adb70226fa8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 zcmeHO2YgQF+dhfJuDw@c$4G>TO>7c-G`5l`O<@)ATp-}n2T-|xK7InQ~%L!2v(u7k?(Q0LXKiI+O)IBq znzQqZ=M0*58D$xe^L6m(4TZyIj7-C9`RsA8DHXheM%lN(z0X<*e$Ge#GEz%|iF@*(`^D+a<$#x4z+3 zBGdT7>9l;dTmE}*Jn|(g>FMm)!6UDI3-?@F1I%xAmrPoDkGzf@K51O>$j?jW#yos* zPxSQo(L>p^W^rt{meo#qI;ZI7l2I$qHl=cDKIo%4`s#>2%lsQ(P$a#UyL|)CLo0un zA*+9y9sQrVlOq>QANOqLgyD~VoINoj^vWfj?0EV0ze8lnyeW}0CJcKtfBM*GKYc$r za@FEl(W`%&BVC$TJzXr5_P#lcy;q5hU;VOjQ9Rn-wP44l)l%C%`>agb`#bNh*|n-8 z`?tUK)}1aupfQi$3DvAprvnK-DUIXV+YmPv9Yo8{Ml1^`s9(i zc+WC(x_K>Bu7zF^yimnak&&qT*l1&J%Ly|H& zDPsm%>a&gMnuPoBza1r~js?lurSqcedE{PRB8yfrv!*3~+waJ3ucdU&X6MzQg7c4~ z2X(r=f6o>PfBsC-$DgA?du7JgL*?GxTXOHtO-0X~$s@^UWI*S}Qn^T4DVN_-Je?iH z+cU2$Uo>4VUpgmuZ{3i)x6Rj0xq1C>2|lm~`=^&|-?&oUk01K!y~dRbE_cgeUpJ?N zmikS;qinup`I}TNybALgcI;pP=zea{t=}9)`NA3F^+);Ee}H&8IY@#tijU#b-S$S<+`8r z-qF)8jLSOabTDv-)N;=@HnH@x?!kRK%w4Ga$jAsG|Cug%`Nn_MUpn`@fOjte z{ZI{Go9voZE3$;V*qoj{dm`OGuCC^e<8tm2GyieuU%yP9XEXhlGg3&d44O;N*0s-(Cz{j4u=~=XVL2&>x&OE6fBY~^26b&30{zJ2 zRrEvm&Csx7{IEGel{e--sph|0@eG_(!G4unH~vv$QO>vX_E5TzH6fH2;B!wg zhn>y)$T_8!5qi@h%6IGZ1iB1#&NwnPDd^`p>eQs7&|bI?9V8n3jVUN#n^Y>CS_XD$ zA`kA}u_i~zr#d&Qe5O!ZEvNns(9u$~s8M{~`QMMntAG4(pj0oJ$=ElfJt^q7mTmgL zq#v?YUBB)6RWCO3kiRZSJ0Fi-Iqfu<)Gt$+JX(u+Q~kq@iZ52{r#{iNYGKG@i$0;#K|R%fQ0Lp=|AZA2OwOsa0>k^X35|H6Z|QBR zOHg0ac|XT|*ZpHnxBkpAYPe>B?tefZUghLZunq12Lvl@!cof2Bs|IZ2Nt}jw2;8{| z{2;9{_eo7ZZ5+jOT+%7KjnA9cEwv^?ewg`nBrv0fw&({>{)95ly5UynU6l%_c`x(N z`L6GoM}GbJKXQ2gE?G45EA=hJgscq9SMJZGoPTTm zlX?pFx#FwVbezPV@+qHhwhj92np7#Y^z7-Q*3Hy&bW{{}BS};l``Uqy2hCuqk&E;xAPb7+Gx zLrxz*WYET&V~6(1gfDuF|KQHFg#>!GES~d?QHQoL%dmz5>_X~#H~Et zTg>`8ZFgcoOaMTHIuLZ<6K*-Qn#pX;yEXlMh8^Yv>}q51{@toC$Yt5S!P2iPc+Jli z@IRh&?iccn#3atg*I)FKkiX8W>c5{jEX}-J_5g1$k`RrrD+5Mf7xF*}nI z(hj?N`C`Hs^m6zlh%+h7mN+2!Ezc0oYiTgvn>B1i;CtszlYOUiXh9+Beh%1u6pE(&U+cvC_xl{ckfxQQn z$og)3NB=I@?Do0bvTJp*m;JD&^I>D`8{Vh&HOLxFZ9H|!7MTf_6Z?dHeX~omD*J&$ zEUH{I?O?YYcHXYp?DOj5Cvk35^E=4rJUQhW25ZZx=x7y(Y`e&zJqKFgrB>p(c%BV4KO{Y zMwJV0*tq(~*o$XR$@&!wW5*5Yeiv9{0I;TU@K=rop0f)&OY>t{^+C;=^q(PmmsQV$%{2|a_Ia8YUGLIcC!slowOCFY9<>8v<#PTprOK;9Y z0N(LA001y^eiVM9nR{8~PMU^p(2?yN-D3bv3t^t(Wgft1D4=>C!e`Taz1{0_TkUkZ zbh=~N|LB+BBYeh>k^6&L@>$RIc|pU`EH^HHINA7o;;|*?O!L{2GfvAHS9M%QoK^-r z{2xhKlWA!iS1Hn_X|XgYcjM~C^!eU_A9%cbo|MHv$1C>(d_`G+Lr+|~U>Zz`GqIdYCd&3b+tw=^?@Paq z0=-!v|CP_QVWs>EgP{FqPJCvZ!iH5p%3l}%h(%mhXrFfVrT{<5VQW5srPhaD6jvcq z;~!J816d^+ZrE! z$hK%}D9*HBk01UGdThl&C@1Tip23V0s}7%9QKkq4vF{<{T4`CVh=HD^kNYBbfDW@(-?Oay&(+HU zpPTZzlZMys|M8z2yu!kNEa#v6pYe-&dj9+=<07|WTxi)w0`K#gN1Vo-h}{6+mNJN? zqAXubF3_f#($+NyS|G5CH3w<(XDGm=ToLHN2;sJAF)*Q~nay zqKpjMw>_e7d++(M?Gu#2P!3YIs8M3T-fin2^V@$}u}HO39a;U*Kabc90S>EZwR)`{ z!+_7OT0C1}YTyaaTGe$Q2EFukF_)GlC$^@ev5wbjPPRod^4}2*yqVr zeCN@i0MtFIbO7oBCy(rB9Js>uc;=yx?!}zPiES`e-|7Y!$AB{@f>kUk@tA!(Ef?dL zD2EwW*Tc7_!iPEMjK5+W4P$Frhi&NZ;~r)rZ-?9+VKt1+M|@Lh_(X0~Z($6CIdL7S zPf+jVJul8P`MVigWt+%|2;~RCJUoC8%#b%W2Y&GazU1VvYkU#6Fcb5(6SQ2peDUl{ zAj?cp0{2+E82E~=LVwtey*|5n^fc%emD6A4RFhq0w&M@ zo}{mvM0<(&+Zpfz;07;359TWbJeyYl5EFl_D|22UrgC#xI1m|Lz&^ZqDF`DVnMgzEeJ76|;Eld)+G>8Cnz+M{bNR+UR~7H2twTSl?*9aDygIOJ^Rm{TfcV|ibEk~% zj{SRrIv(%?*@1Bh-Bckm^g8$6puM21HlPA%ijeewa z)5=QMq0YG-`0sScVe((vI+rhyNu&H4!hWsD0C;+&(!l&TltbqSR9Hm{( z`M!BQ6moQ@(iv!LQhxIPLi8i@9{&Y6G19L?WzN5zrjH-u3)vQFk+sK_tfQ@ibyju< z*PSvOYacap;)r&7J3a5%s8SBB@6r>&`!8ZIL{X36-X&hc95OHJ_v42y{knF^^3F}G z=GNPpb1-$s`kwi6L${j&y(bKM+aIvo&me{|Z2j^Db9^e~&jaNyj(%lsuiv+<hH}t8B?^EriEc9L(q8uF) diff --git a/src/Tgstation.Server.Host/ClientApp/public/manifest.json b/src/Tgstation.Server.Host/ClientApp/public/manifest.json deleted file mode 100644 index cfef1e2984..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/public/manifest.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "Tgstation Server Control Panel", - "short_name": "TGS Control Panel", - "icons": [ - { - "src": "/android-chrome-192x192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "/android-chrome-512x512.png", - "sizes": "512x512", - "type": "image/png" - } - ], - "theme_color": "#ffffff", - "background_color": "#ffffff", - "display": "standalone" -} diff --git a/src/Tgstation.Server.Host/ClientApp/public/mstile-150x150.png b/src/Tgstation.Server.Host/ClientApp/public/mstile-150x150.png deleted file mode 100644 index 1aebfaac82965a163d08cfe53d11e9ad70cc7036..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10266 zcmd6Nby$;c{O)L#kPt)~K|)#qX%wVJk1i=`Mt37$>5xXcLl`9tkW@+--7q>O#-wv_ zUeEdK{Biz1ziZdKU3<6Zd7t>ieczuaN<&S7_z}$`5C}x9r1%~J0%4K-yB^>JcYNxu zN`Mbsn|G@3K%lw=!dr7Z;5(D0B19Dg@?!&mLjD7Ru7O)2e?TBleh_HS3s((Rjkb8ReHE0EiNM8{6=0Iv)1V^5<8Ez^i8h(_#O&@FdZQeWCVI2c?N6)p$8>N_ zYD0gM$VKN*g_4ppkxn2!S|3VwN@H`FJ{(XPWL@*^{BQzE@*kDF7#T`-9}OH4W%`d) z<^l8noHs#HO4OsszAZQZA6T-X0cMgK2N%AcEOhKxe~3SVXhT%vT)R+m%fC~a)5BZVyi5muiAtbg9{LSbLKTkt#OB6b`5&mzyH zu5mExF%2K~*KT}k3j?aG?_L^)y74g2F8)~ha0pk(XsA_}Zs(|xuJTu2CVFa;?EFRs zOQe@Nlav&1eC#Q&hoY+a?w%(u_D@N0g+qw<3!erlauLI4>ByoGiiYinC4Yjq?bwgd z$ZBR`ws1z_EB&?rp_p`-#gaVZ72aoD*)-vlLA}9CP0kM74m@3)&ms8ap;%qEtE@;k z0n*T0n7CU-Nv$wXJWQY)|D;m0U!XbIlzd~uXZ7o>&uwbcW88#J?C;N^^O4(1*a}?r z(zYtIna{xESJ{(ge^*hn<5G<%W~7ex^?YUyqJDZ`f74_jx^aI#u{8_a$(a9(KQ<0r zVfD6T#;+KZ(48lC zsM%M@-iK8(V1Xmgg~*9zfrlSyjg2MHf<4>*4w<^6hxNv#N>F4Mga%Zt7YCMS3A9(% zyD#r9mS}{XhD*zfpTLBa9v+<@EXQfe##`N%7ZA~=C|y+NL`AtW)GdO8DPMmGNG8br zs#MbX4Z?Zm&Fa%Y1FUSQ?5A*Zk6VmE=h|{s&GQ#6s`^{DFiu_`%OYoSW!rgfj$ zL>uxgE9TqVx1&BsJUM;`xb&0m+Mf}qmfo%Np7%FDqOJvsOt8pW@|pzcNEG^|O?=qA z@3-8NlF5rq8pBj3KhEW=B#~3-|8Rp%no?3%raTgXOs0K)QGB!A6A zMC?Q0!2F^o=AMOqx4_zeA6PiCokPm6Jbx)NKvgU$8n-pEm| z`R(B*g`vurNLM{n>fV|&FX)Pg7H(Z9Y4gNxc$sf)~tx5?(EOB@s#=m--B@lNt<2V}>bS3q~iVT6H8l7Cjpp7x)P$yWhAoh6$ zQ(h%gDyuIBuK8~;YB%q`k%QEMGXj)uXV8Lm&i|lAy{%@^U@O@ z(UZF$_ck{M6w!WDjoiP;XlZ44NKlukl!wKvP4656CB|MXoQWAKtw!c{z@d-PGc7Dd z5hRZFVTN$k4?$RW-@f^!Qxbjtjo@Px_-J&kGv2yGJ|L2a$)CKMP9^7LpSRh{!3{Bjchfv>eLX3X|eG zxVO3Wdp7twhgtaA-Z7DW{L`gEXT1@eZDDCKSI3ngx13rE`Su&=T+dB9GnZw7QiP^u zk%8UCB6jlU<`F}7d|xna!%W-BQGipMH-78IArLpRGA^c@iW`&)oog6k8H6MM#U+>f zAdkbjLo?D^=y1oc!o3!WG??|#@$_x&fI`qaGG>GfR&d^tgia`E*3?U?P9RR2$Z9=< zOyces`6N9hP6zCXdrX7LUneCODJ*J*B4vMg9uEC641c!7&pc80YN40adjKi;X%*J0A}qs%T7C$VdM zlhx&YzlhQPDOni77z=FwCnHsAirZ+>==bdiRpRUX#d^n}#kSP-q*p|;n04hqv*rLD zrmj*La()%Dz9dSh0VaEZuL(Bi@a#cWfIIUD^1cp~nFcBwI}&*gj6}PN+2&<_YE_`= zCOEUXT)p!+9IKu&D%~u8uSPAI?W|X&1Y*;Y#1z=dkc(tyAW*I#c5!+V%ZW?P9+6-_ zLSe^&^~MY7f(cVOh=oiT+q?)piCBZO=(;dvYS68Y4z>2mf-TJ9psCi8wxMs=gM26Y zh1Y$Llu^@cdnfZpgG-FgB@UK_W%fU(+3n2jk+ZoAcghi`b6ttDRQTIdi3akn)cDqU z!^utC4b5M-C_^Bv`#poh6ukErbAjZ?cpPKK@t>7JEWN;g1Wuh)5q268RKa2Vs$u;f z{Ic{`Fw`dxa1uUD36$C~L^OzHrr^exzL}Zvy8inUvpe06 zWbV|^E;DaZQZZW>c$~R28+zuZLzGF8y#pmF&0y>3+N-&^~N4M}+~sc1&1$ zw6s7xI!FQN>&%Kxj3XUp7mf^(fp9#>bnbO(HGx0f#K4>Di)y_=w zXipuBU2;aqj9(!FW%m^2;2{XuRl_SsqlCjLsk6x8zuWQ-sy9q8iYp^^t)70_hSpi};anTK7b zKoA|ZHLWcAj2q9k>gIoqU84^VGyo#kG~T4z3t_m`&}?O6saAwn_6;(*J9n#13jfse z1j$M9d%iv5KB&F84>clk_Wsq)>96_&&MxkBbaA%#M4Rl`X#KRn>yVE2 zp{I;(VJm8)%nLe|uMzNPKx!RYR=w#r=IrHUkA1<+8~=GZRVW_z?}u6I+Z>8Ml70aG z%v|%V{=&?+6ea@GWxYuUHLEyae$4p&PI*}5i>V8CJN{3AS{`u~R-R(f^98H9a7Z)yEr8Av#|s{hK?-dk!xbL2$rRpYtB`*bYwDJuk!4-fsHwNVBU~W zq@$538STDG^JZ1WqStVVhkc%34@Pj>bgHfW=JMmu=dp&6y2hD*$a2aR=W!MsCRAnE z6iP4dU1a}IH~iIHQsc%`WUojL-Ns1yq;Gm!>UTQ_;ns_7OM`R1@1{Z`bR-k4Ud7(> z7lvgLj_FA%qlZiSZH_|XC+8C^ux-s#6LHVgHF4*zoWzmt(e_+@4P&<$JL*6ar%|4u zJa3~*bfF0OLptK2t@BfyJLvp*jd(F!$hqVA!q{sW9qHa;zx0M#Dqcj7TUigbu_(Rb z^>+tcfeBq3b1t+pP@$HLy~y+ba@lN}R@1n>JG;C!{8+kIGa}Rju%{&5>c+mtV1`(h zal@0Vbt{SMU$j-mO`*|`q<@GJ-L3Fwg2&ke5?xvF-8b@ht>?OiXb^F6Q3Xb2B$t)n z=8{d{Ldn-Rn%C-2TrU(ioF7Y}=IWvS9+QHv05E5ID}`S7YlE%df9Va#mVnv^k@LfL5 zisI4d=Tc>J8Pwzs29;Yey@=+6(%>(x4v$OirZQI&O*MWW_?p&^H|2bNeK(RnBqij8 z6mB7AMiiDeRH>Z_sV3W%sTBJ+jV#{Q^c%D}PAis78Sysl)N~O9<-IwMVI~3K66l=W zE2pfn!RXe=b1hJ1)BDQXkDGL>(6JMmsc^)_Yqfw?Gf~?g?oa9FOH=sBf44p z4BVwH?F>W{+Wz9Vw4SfJOz}+WaDMJyGXpq9Lg%gU=(4v_98V#28BPNmH4*woDnKLH zTFURSxAZaHcd2V&z#-PDnk5bIq!KCli zTI(+o8li`{VF7o;kWXi}LQ@J*=AHgw zVOiF3$P$crPKWf`gcyDx)4XnZMRZIU{d?KKe>GAYA|vtUZr39BwtpC)3&RzS9i$>f z%Xo}inLA~5R=d{oUK6`oZ2y8UJv{jpIUM@h=I8V3<}=fS<>Z8M6?Oq$PM#Wp7j44P zdqJ7?_0jUMqHe*jcUeltzT+MmgZX}*5}J=E`Za^CY-M_1SgD!pyxUUHUAs8>mBsiM zU1pPHsz1egk|ti%;}Qg_658gIiM}{$A*% z^h{F??V7GSuWl-*_WOtbQ1RRE?UHt2f^Cj@J$>UEw?PEgz~FooBt^45zp*@G`);S| z1&1ye#qpB!h4)2nb-L_+dJ@^JO0)y=k=@(dH- zD~^)mP!oWjrKw>nNCNo16Edi`TVt_*zF2$l_%nBIu)A>j(&=LWZwM9kXTowI(I)=q zZX42!8@UR(MGaLF2d~_`(FL{5xFy;o8q_Fv``t~g1%BZO?wDbNd2_TrM0W&%4pLcO z{zNsFH%|R6xs@AH_>xp)lkyQJ<(UIDK4ofZoA3=q{r;DWqhKgvq@-{n0bbDs`6;d1QX7CPCQzcS5aq!^C8*KG_@aOs zd;5>3?D;O5%$ZD~{WsIiA;|@?VUwhDhRHLH6wu_PUt-}_29C>VaWnc|X|{Rp4laW5 zINENflBrx^gXg~U-6D6EpY1B_Lcv0l{4N>W=B5!tCWQrh7f$A*xw?iQex7HW5agEs zCcVLTISn$T)vbdZaPac5*yvrV>n=)8*ym))gqYKu4*X#_54w32GvBC}TQ0~7#NO31 zb}lTqRYa$opW&<;EBlLSyY}g#uUu^S-tw1Co`BnHXdAy&*QWV`8z26Cpq@tE4|yUZ@Je zUTXDBr0OS|Gn}joe3`Ql(RnzLR+WvD;8|kX5c==mVHzUHGB~k#6k^w9Oq>N)7ZKQC zYv}O9dtb#3Vlj6ESBLuNpZMkv1ugTlx(I^Ok&|)`l9HmFiLcegISX4}`+2H&3ub!3 z=BVUkxBl9!|p{8xYl&lYo~Gu%J#II0nBW&ZTbWi>`WU-%w(t&yIoe7sTChYeeg7Z z$Jr7X={2$P0^9#n?LZBC`E_l-<@^U5(ZeRBn(W78mI-SADkEjw zk#Pu2L!chs50euN=%-#kGee#i15n}$wfT^YveswbUN_+0veFp}@bBUyhLK#cXC6yz zbb=`s=Vhk+=$KyW@KAH=k6Q=p8+e2*YxRV`s=EPFP4_0B5zs(HM+Ao-b{*K7rl)~{ z@RVKAco+bnms9tP2mU)|{5|6C+ggSnLc1N8)U_R90|!gVgk?EYGeKE!r=4WH6&I%J zg|uNHy}7JCD;sAPdQnvmLBiLnCfVvdrhn+KN~9xCqE>cbk19#Ae#5{$!14n)$q?*D zTY7H|dCwCLc+=5V6Cz;`%W3VEYFOib)8DQ2EizQ_Lez$fO|d2N9M??0VYI9yN!@W% zt(E#UL^Jzksi1>yMt*B3kNZfygd-hU(2+$X-gn2dACc$M8&ed!Q&N;h z`*v@;xm&zb61&L0Za@(XV&%b%Z1MDDnpnLrN>cQ+pZjhnKE%Z)8x4@+`2LupKmI+^ z%X`&(Tq-?H5nJJ-npSwUc;GSaLK!@+JcJqN+7)B9LqW0e^cC}C5I_8Ud!ozEd!#AffwLpt+X?ig2=2$%gl zz9^q#7UWFTN`0KhZyC-i+dM60)=-vLuT!7j02C^a!)3?#J%r%j8KlqQUyc3JKqf*kNrh~^&bJ(XH7$Zq$QK4^Qi65 zg>Sd1^BM=cFCE$6o3?xR7D;biJZyEz%OQt{UjzNzCYm+LQm0v9g!gT`VBU^9Ua!OD zNqdT)DwCW4*ng#SI%Cr9mP>}j(M48<;IexUrg3IE^n5{jJ<5fNxhtH@elr`A3L8kjZ`E%Kj_ED4M~w(WqcrYO)b4$S%4{Pxx=pQvbtKpB7su0s!;+HMOY zw>Ll!45$)1U&V+LQkm2A$*+0=QZFgWVFIGGT29b8nnkc^&tbVwaMH0lKfBToXW6fG z>Fskv=%n*6zZP77Wyod45%k(uf*x5WZ``MFkI7^=4J1IqV?x9MEP636Rg(tb10cgL zZ-HGM#_GWgfk&#_fmhHTD^Ju^=svGx!ez6F;Ss&^+>=#77Igeg5XSm2Xj3#A43-5~ zL;#j`#ui#+9$?0Cw%PH^;$|cw&m6P;d-hgoew|c>s?3RA$qGP&nx%X(dYM(!Ca;>54`NZ!#vd zzcuicd&}v`$Ny%*(_R&5(x#pQNuZ)i*RSb#LlCUv^WCk#PechEtAH2=x3`JgU>P;- zm{Ip}uZr%@+Uk>w(9GRE{=;3O{lQ%Gp^iB|Nm=(hH;cm4xS24h!}%c>t~TZ0wBnRE z5&$pkmfrf{Ppf`n=G0^fd!8BiQAcZhS-z}W zsj1r6l^V4KcCLbtfD5~G)PbvHFsy(SK%``;<1lxH>b5`JcPHyC67DNd6*_V9bgu9( zRzj5p7m|~$Nu-QVHFF$cN=i<$hUvfAw?wm#qropRK`D?RrdyqFaxh>Hxo(Jh&X-Z# zE_7p3jXY0P#8bWVuHL+6#E6%vOXU{#{AcY>2xt=Q!0gQA#@H>5gmVjUb`xi|B9V5# z{KZT#f?N+YNL~q&k^n6cC_Sl`6KR(bm&-v_ zU&T`GfP|}(&ti@O0I?S4?x5(P%JDHVaXGb;Pc&jKBZH=iI9!IK#6@hcW5Ptq?&?mg zk`Aal%oo?LM*>4;fI6sZ{uj1nPtLewu|7w(=+P_JpcLzTI(527vK-CgNuoq@8=r8~Mky9zFFjV6Xsj*e1W55s<)1RNgO2WLm+# zc*G0m8Vl-bDj5`UKXRa!FRB5Rr4)X9`S!zIq82kz_v$Gp1@)U_ks0V|9hb9nToW%~ zYJTZzM1OXwg{X0{-+66sZA8bF$WkX?0?MNWQW#wEd&m8W0&8f|(Gwh?;|e>ZS4_@- zBBVt1@`rx-U#ums|(XtuV@!``@KdWY+E6KloFB{HQNMEdEktmaM4}I-FKT zzj(396(D%;pwi8OHzU7W-{|L7IpG6T0!ArQQ}J*h%?m!nn)FY ziXYyjL}z*NsW*BU(}oUydN)e_I)MMFns}VjhC*V}V(HP#!f#sL8^(2j76WLW+S-=` zh!wpukOfEYq2$#+!7le|7D`0#qf(^PSU52%JKE9b@O{V4v2)qj^Jrc~<>bpsaH|Dz z&1f!SXT@iLk3)u&rJp~xrE9;d9y4nq`1~QAs@eUflr*TRWii)=zSP&rS8fXr*ty~r z8MODv8qSUTU4xbgs>gJ^MYgqeuv$6mr+Mb$NjjH^>wzL2Niv{p91}kBy@NgeDv2hH zj#lO$W|0;WCJLLDcHAu7KV0qO;bZmF{%q8xFI&v?pX@Fc(BF5Q z*Jo{HKmh7;VSg>0BFM&!zr^J zwt_>6-NkZ7EN@ywcTPF8Jr{}%`<<)q%vrQXI-@(<{r(OGHtEzX-kmt|m()VDjL^ZK z)H@A-9qce}Za%am;bb8tIzCIH9P-)aq2e)7Vxs<4wN_UL-4Elc4Yjz;S5dp3<_ISq zDmL1Qmwpj6EySYA`Kf>u?{lx?Lgw(Vl9hkRbYQ7Hf*Et;y22A|J>m2CbMK2GgWAY9 zQW^a~iIk(}6j^HSs10rhpIvhxSUYr9$ zhfPjJ2?IMOO0IU#P+AK!BKGjw<|hdF)#~Sn4CC%!BcFRq+AanHa)VHTGtSH55W2R& zaYIXFWneR zvg|Ia9n~U$VB&sy=X5o@A#u~^C{v&@#ve-wu6PqF3gmn71@zK5fI42Ux%rcaC>grf zn3vz(|F{}8zUV)(U+idT`_w7<_sMc--`-OmF?YG|pbmd$;EPuoJlAut8#MZZ*yuN~g!R#bwFJVYbp4iAWr7gauGl`QHT_s&uz$blGd)+dnjnj7D%(9UZfK z+o`|U5q8wg7M8AJ^qqh5hY@_Mi(JlDN5?t~g2VsNS9@H*?q}N;fSgnTHMH@s0ua*x zOwNzOiJGEmmcn&A-E|MbdNh%~RDvO?sr$)>hdhrG^eU6F`K*JTgOiI70$u`ewVp!B^FsL~w`C$A zR(OIdo^4UyjTP~=4V*8Uj8{XFIk{?9*LIefye}Atx_xjixfeXiJ6U<+tp^h`;q&}c z`Ahy6XPy}(YSgbS?u*7|P;rlUjyAc_W)AIYoSy9~JHrWHIX!$zF-2dGZ`$O#WV@DU zm+$}ktlSynl}fX;4V{-bpFm#XguX19A_9Qe3!wi9_Ru0$`L4RQ-R&WGDkyN4KzS0|T$UHm3!S@4UFuEH*hsGB-Hr?u56VhZjPP7>?Y zNYiU$%D1-MZ^}waw9QdceRk9Ke;PH2WQqbv8ApQp(dWUu+$#o$8D{|XA!qbeYpXt4 z&6C02rl*^B0ZOwPknD89lKU6F=|c8$a_s|5O=)YE-Tc;2#Julr*yzwEU%IIx$CJVd z)3fh-XJU;)?YE(z4SAxq>;j6sH|Xs~o%Ku4r#UT|2!lcOWvbrat84U)EXlDpt+ zt~8PK7#}@uUOjHtYW?M`8&N=26i_{(UA?k3b<}K~Sy5d91NCXkP=J`6s)ALz9vS?{ zO^ATk@w8rd!sBMN)w9aZLXWK9G2t$dQEYg`Ka={;flo4BX+xgOXjFn2QE$+(O~BxP z1(m|=839_HO#UbB73}`}w*@5efdVPN_*GT9yZDLdN<$}i^V@!@>o94Qr~DX0pNzzv zH&Qhwca47no`2MpYPdh5z2i*~f&y3MjY=n~p1mI+SVl@PG5*0awlbKB1ddzu?IyFk zoH34=YgjYJKCnI;T&PRlS-B3GwHak`c9se^cZ7f?iL0=aLQXNBV{hrklJ}^pXAEg? zg7a!Sn_rboIdnw?$*Z4dEl;&T}K$TV6)82t;^}=_5$`^~}8byT)$kQ(~jfKWIY+Z``GKcE6&Jy0>AVEBUkZJ79-fIb%;E*UF@Xk?4~_NE}Zj zZhXy$8drGN4IfK-D4uk!Z3DAdq4@#Q!FFVoYkMJ?2 z=0gMw_-TsDYk!`HZg4bqZoR^49;iRq*jTs7N$yYB{-Hc-H8mDWP_{p5_&o?Aoa=XH zvYdA#3WR95dFD#x-e$x7W#IC$ZC;G6AGt`p+rPS$h^#|kI~0i#hpTV3t>pgNdYb*t zLPo-QC>KHK9Q+$l1&B)AQX!+*H9*rv+gX$M3AiL!fPAp~(AeA|P{7c8Z)b!_YNYpK z|Ba=AZiPAZ_t5^(X-||E87v)_#PtgTB@mL>WeP<~8H7y=67l_I;x`rJ@5Le)>EZi# z)A#sj?qMZn>1G9d zfL`&x;^*NPBqa7qn2Z0F7(c)4mm0tSs{z#cqn)+y|GUAf;ir8-13f=& zeGiDaH_3rq+p>? zPJV(z!Sp^vu=^tp%Xe)i#N5>Ho}nJP9s)#&Vm_D`wD*+E<5)&06?g - - - -Created by potrace 1.11, written by Peter Selinger 2001-2013 - - - - - diff --git a/src/Tgstation.Server.Host/ClientApp/scripts/api_download.js b/src/Tgstation.Server.Host/ClientApp/scripts/api_download.js deleted file mode 100644 index 09712cf8da..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/scripts/api_download.js +++ /dev/null @@ -1,16 +0,0 @@ -const { https } = require("follow-redirects"); -const fs = require("fs"); -const path = require("path"); -const pkg = require("../package.json"); - -const file = fs.createWriteStream( - path.resolve(__dirname, "..", "src", "ApiClient", "generatedcode", "swagger.json") -); -https.get( - "https://github.com/tgstation/tgstation-server/releases/download/api-v" + - pkg.tgs_api_version + - "/swagger.json", - function (response) { - response.pipe(file); - } -); diff --git a/src/Tgstation.Server.Host/ClientApp/scripts/generate_enums.js b/src/Tgstation.Server.Host/ClientApp/scripts/generate_enums.js deleted file mode 100644 index d4f1b25106..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/scripts/generate_enums.js +++ /dev/null @@ -1,13 +0,0 @@ -const swagger = require("../src/ApiClient/generatedcode/swagger.json"); - -for (const [name, schema] of Object.entries(swagger.components.schemas)) { - if (!("enum" in schema)) continue; //skip if true - - console.log(`export enum ${name} {`); //outputs text - for (let i = 0; i < schema.enum.length; i++) { - const name = schema["x-enum-varnames"][i]; //sets the name - const value = schema["enum"][i]; //sets the value - console.log(` ${name} = ${value}${i < schema.enum.length - 1 ? "," : ""}`); //outputs to console - } - console.log(`}\n`); //creates a newline -} diff --git a/src/Tgstation.Server.Host/ClientApp/scripts/msbuild.js b/src/Tgstation.Server.Host/ClientApp/scripts/msbuild.js deleted file mode 100644 index 8668e56f0c..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/scripts/msbuild.js +++ /dev/null @@ -1,9 +0,0 @@ -const fs = require("fs-extra"); - -const destination = "../wwwroot"; - -//Removes the directory -// noinspection JSUnresolvedFunction //function does exist -fs.removeSync(destination); -//Moves the dist folder to the web root -fs.moveSync("./dist", destination); diff --git a/src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/dtsGenerator.d.ts b/src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/dtsGenerator.d.ts deleted file mode 100644 index 248bfc1fa5..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/dtsGenerator.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import ReferenceResolver from "./referenceResolver"; -import SchemaConvertor from "./schemaConvertor"; -export default class DtsGenerator { - private resolver; - private convertor; - private currentSchema; - constructor(resolver: ReferenceResolver, convertor: SchemaConvertor); - generate(): Promise; - private walk; - private walkSchema; - private normalizeContent; - private normalizeSchemaContent; - private generateDeclareType; - private generateAnyTypeModel; - private generateTypeCollection; - private generateProperties; - private generateTypeProperty; - private generateArrayedType; - private generateArrayTypeProperty; - private generateType; - private generateTypeName; -} diff --git a/src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/dtsGenerator.js b/src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/dtsGenerator.js deleted file mode 100644 index 0026e4e64e..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/dtsGenerator.js +++ /dev/null @@ -1,389 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var debug_1 = tslib_1.__importDefault(require("debug")); -var jsonPointer_1 = require("../jsonPointer"); -var jsonSchema_1 = require("./jsonSchema"); -var utils = tslib_1.__importStar(require("./utils")); -var debug = debug_1.default("dtsgen"); -var typeMarker = Symbol(); -var DtsGenerator = (function () { - function DtsGenerator(resolver, convertor) { - this.resolver = resolver; - this.convertor = convertor; - } - DtsGenerator.prototype.generate = function () { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var map, result; - return tslib_1.__generator(this, function (_a) { - switch (_a.label) { - case 0: - debug("generate type definition files."); - return [4, this.resolver.resolve()]; - case 1: - _a.sent(); - map = this.convertor.buildSchemaMergedMap( - this.resolver.getAllRegisteredSchema(), - typeMarker - ); - this.convertor.start(); - this.walk(map); - result = this.convertor.end(); - return [2, result]; - } - }); - }); - }; - DtsGenerator.prototype.walk = function (map) { - var e_1, _a; - var keys = Object.keys(map).sort(); - try { - for ( - var keys_1 = tslib_1.__values(keys), keys_1_1 = keys_1.next(); - !keys_1_1.done; - keys_1_1 = keys_1.next() - ) { - var key = keys_1_1.value; - var value = map[key]; - if (value.hasOwnProperty(typeMarker)) { - var schema = value[typeMarker]; - debug( - " walk doProcess: key=" + key + " schemaId=" + schema.id.getAbsoluteId() - ); - this.walkSchema(schema); - delete value[typeMarker]; - } - if (typeof value === "object" && Object.keys(value).length > 0) { - this.convertor.startNest(key); - this.walk(value); - this.convertor.endNest(); - } - } - } catch (e_1_1) { - e_1 = { error: e_1_1 }; - } finally { - try { - if (keys_1_1 && !keys_1_1.done && (_a = keys_1.return)) _a.call(keys_1); - } finally { - if (e_1) throw e_1.error; - } - } - }; - DtsGenerator.prototype.walkSchema = function (schema) { - var normalized = this.normalizeContent(schema); - this.currentSchema = normalized; - this.convertor.outputComments(normalized); - var type = normalized.content.type; - switch (type) { - case "any": - return this.generateAnyTypeModel(normalized); - case "array": - return this.generateTypeCollection(normalized); - case "object": - default: - return this.generateDeclareType(normalized); - } - }; - DtsGenerator.prototype.normalizeContent = function (schema, pointer) { - if (pointer != null) { - schema = jsonSchema_1.getSubSchema(schema, pointer); - } - var content = this.normalizeSchemaContent(schema.content); - return Object.assign({}, schema, { content: content }); - }; - DtsGenerator.prototype.normalizeSchemaContent = function (content) { - var e_2, _a; - if (typeof content === "boolean") { - content = content ? {} : { not: {} }; - } else { - if (content.allOf) { - var work = content; - try { - for ( - var _b = tslib_1.__values(content.allOf), _c = _b.next(); - !_c.done; - _c = _b.next() - ) { - var sub = _c.value; - if (typeof sub === "object" && sub.$ref && false) { - var ref = this.resolver.dereference(sub.$ref); - var normalized = this.normalizeContent(ref).content; - utils.mergeSchema(work, normalized); - } else if (typeof sub === "object") { - var normalized = this.normalizeSchemaContent(sub); - utils.mergeSchema(work, normalized); - } else { - utils.mergeSchema(work, sub); - } - } - } catch (e_2_1) { - e_2 = { error: e_2_1 }; - } finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } finally { - if (e_2) throw e_2.error; - } - } - delete content.allOf; - content = work; - } - if ( - content.type === undefined && - (content.properties || content.additionalProperties) - ) { - content.type = "object"; - } - if (content.nullable) { - var type = content.type; - if (type == null) { - content.type = "null"; - } else if (!Array.isArray(type)) { - content.type = [type, "null"]; - } else { - type.push("null"); - } - } - var types = content.type; - if (Array.isArray(types)) { - var reduced = utils.reduceTypes(types); - content.type = reduced.length === 1 ? reduced[0] : reduced; - } - } - return content; - }; - DtsGenerator.prototype.generateDeclareType = function (schema) { - var content = schema.content; - if ( - content.$ref || - content.oneOf || - content.anyOf || - content.enum || - "const" in content || - content.type !== "object" - ) { - this.convertor.outputExportType(schema.id); - this.generateTypeProperty(schema, true); - } else { - this.convertor.startInterfaceNest(schema.id); - this.generateProperties(schema); - this.convertor.endInterfaceNest(); - } - }; - DtsGenerator.prototype.generateAnyTypeModel = function (schema) { - this.convertor.startInterfaceNest(schema.id); - this.convertor.outputRawValue("[name: string]: any; // any", true); - this.convertor.endInterfaceNest(); - }; - DtsGenerator.prototype.generateTypeCollection = function (schema) { - this.convertor.outputExportType(schema.id); - this.generateArrayTypeProperty(schema, true); - }; - DtsGenerator.prototype.generateProperties = function (baseSchema) { - var e_3, _a; - var content = baseSchema.content; - if (content.additionalProperties) { - this.convertor.outputRawValue("[name: string]: "); - var schema = this.normalizeContent(baseSchema, "/additionalProperties"); - if (content.additionalProperties === true) { - this.convertor.outputStringTypeName(schema, "any", true); - } else { - this.generateTypeProperty(schema, true); - } - } - if (content.properties) { - try { - for ( - var _b = tslib_1.__values(Object.keys(content.properties)), _c = _b.next(); - !_c.done; - _c = _b.next() - ) { - var propertyName = _c.value; - var schema = this.normalizeContent( - baseSchema, - "/properties/" + jsonPointer_1.tilde(propertyName) - ); - this.convertor.outputComments(schema); - this.convertor.outputPropertyAttribute(schema); - this.convertor.outputPropertyName( - schema, - propertyName, - !!schema.content.nullable - ); - this.generateTypeProperty(schema); - } - } catch (e_3_1) { - e_3 = { error: e_3_1 }; - } finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } finally { - if (e_3) throw e_3.error; - } - } - } - }; - DtsGenerator.prototype.generateTypeProperty = function (schema, terminate) { - var _this = this; - if (terminate === void 0) { - terminate = true; - } - var content = schema.content; - if (content.$ref) { - var ref = this.resolver.dereference(content.$ref); - if (ref.id == null) { - throw new Error("target referenced id is nothing: " + content.$ref); - } - var refSchema = this.normalizeContent(ref); - return this.convertor.outputTypeIdName( - refSchema, - this.currentSchema, - terminate, - !!content.nullable - ); - } - if (content.anyOf || content.oneOf) { - this.generateArrayedType(schema, content.anyOf, "/anyOf/", terminate); - this.generateArrayedType(schema, content.oneOf, "/oneOf/", terminate); - return; - } - if (content.enum) { - this.convertor.outputArrayedType( - schema, - content.enum, - function (value) { - if (content.type === "integer" || content.type === "number") { - _this.convertor.outputRawValue("" + value); - } else { - _this.convertor.outputRawValue('"' + value + '"'); - } - }, - terminate - ); - } else if ("const" in content) { - var value = content.const; - if (content.type === "integer" || content.type === "number") { - this.convertor.outputStringTypeName(schema, "" + value, terminate); - } else { - this.convertor.outputStringTypeName(schema, '"' + value + '"', terminate); - } - } else { - this.generateType(schema, terminate); - } - }; - DtsGenerator.prototype.generateArrayedType = function (baseSchema, contents, path, terminate) { - var _this = this; - if (contents) { - this.convertor.outputArrayedType( - baseSchema, - contents, - function (_content, index) { - var schema = _this.normalizeContent(baseSchema, path + index); - if (schema.id.isEmpty()) { - _this.generateTypeProperty(schema, false); - } else { - _this.convertor.outputTypeIdName(schema, _this.currentSchema, false); - } - }, - terminate - ); - } - }; - DtsGenerator.prototype.generateArrayTypeProperty = function (schema, terminate) { - if (terminate === void 0) { - terminate = true; - } - var items = schema.content.items; - var minItems = schema.content.minItems; - var maxItems = schema.content.maxItems; - if (items == null) { - this.convertor.outputStringTypeName(schema, "any[]", terminate); - } else if (!Array.isArray(items)) { - this.generateTypeProperty(this.normalizeContent(schema, "/items"), false); - this.convertor.outputStringTypeName(schema, "[]", terminate); - } else if (items.length === 0 && minItems === undefined && maxItems === undefined) { - this.convertor.outputStringTypeName(schema, "any[]", terminate); - } else if (minItems != null && maxItems != null && maxItems < minItems) { - this.convertor.outputStringTypeName(schema, "never", terminate); - } else { - this.convertor.outputRawValue("["); - var itemCount = Math.max(minItems || 0, maxItems || 0, items.length); - if (maxItems != null) { - itemCount = Math.min(itemCount, maxItems); - } - for (var i = 0; i < itemCount; i++) { - if (i > 0) { - this.convertor.outputRawValue(", "); - } - if (i < items.length) { - var type = this.normalizeContent(schema, "/items/" + i); - if (type.id.isEmpty()) { - this.generateTypeProperty(type, false); - } else { - this.convertor.outputTypeIdName(type, this.currentSchema, false); - } - } else { - this.convertor.outputStringTypeName(schema, "any", false, false); - } - if (minItems == null || i >= minItems) { - this.convertor.outputRawValue("?"); - } - } - if (maxItems == null) { - if (itemCount > 0) { - this.convertor.outputRawValue(", "); - } - this.convertor.outputStringTypeName(schema, "...any[]", false, false); - } - this.convertor.outputRawValue("]"); - this.convertor.outputStringTypeName(schema, "", terminate); - } - }; - DtsGenerator.prototype.generateType = function (schema, terminate, outputOptional) { - var _this = this; - if (outputOptional === void 0) { - outputOptional = true; - } - var type = schema.content.type; - if (type == null) { - this.convertor.outputPrimitiveTypeName(schema, "void", terminate, outputOptional); - } else if (typeof type === "string") { - this.generateTypeName(schema, type, terminate, outputOptional); - } else { - var types = utils.reduceTypes(type); - if (types.length <= 1) { - schema.content.type = types[0]; - this.generateType(schema, terminate, outputOptional); - } else { - this.convertor.outputArrayedType( - schema, - types, - function (t) { - _this.generateTypeName(schema, t, false, false); - }, - terminate - ); - } - } - }; - DtsGenerator.prototype.generateTypeName = function (schema, type, terminate, outputOptional) { - if (outputOptional === void 0) { - outputOptional = true; - } - var tsType = utils.toTSType(type, schema.content); - if (tsType) { - this.convertor.outputPrimitiveTypeName(schema, tsType, terminate, outputOptional); - } else if (type === "object") { - this.convertor.startTypeNest(); - this.generateProperties(schema); - this.convertor.endTypeNest(terminate); - } else if (type === "array") { - this.generateArrayTypeProperty(schema, terminate); - } else { - throw new Error("unknown type: " + type); - } - }; - return DtsGenerator; -})(); -exports.default = DtsGenerator; -//# sourceMappingURL=dtsGenerator.js.map diff --git a/src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/dtsGenerator.js.map b/src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/dtsGenerator.js.map deleted file mode 100644 index d385339a94..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/dtsGenerator.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"dtsGenerator.js","sourceRoot":"","sources":["../../src/core/dtsGenerator.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/dtsGenerator.ts b/src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/dtsGenerator.ts deleted file mode 100644 index 7845c38633..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/dtsGenerator.ts +++ /dev/null @@ -1,335 +0,0 @@ -import Debug from "debug"; -import { tilde } from "../jsonPointer"; -import { getSubSchema, JsonSchema, NormalizedSchema, Schema } from "./jsonSchema"; -import ReferenceResolver from "./referenceResolver"; -import SchemaConvertor from "./schemaConvertor"; -import * as utils from "./utils"; - -const debug = Debug("dtsgen"); -const typeMarker = Symbol(); - -export default class DtsGenerator { - private currentSchema!: NormalizedSchema; - - constructor(private resolver: ReferenceResolver, private convertor: SchemaConvertor) {} - - public async generate(): Promise { - debug("generate type definition files."); - await this.resolver.resolve(); - - const map = this.convertor.buildSchemaMergedMap( - this.resolver.getAllRegisteredSchema(), - typeMarker - ); - this.convertor.start(); - this.walk(map); - const result = this.convertor.end(); - - return result; - } - - private walk(map: any): void { - const keys = Object.keys(map).sort(); - for (const key of keys) { - const value = map[key]; - if (value.hasOwnProperty(typeMarker)) { - const schema = value[typeMarker] as Schema; - debug(` walk doProcess: key=${key} schemaId=${schema.id.getAbsoluteId()}`); - this.walkSchema(schema); - delete value[typeMarker]; - } - if (typeof value === "object" && Object.keys(value).length > 0) { - this.convertor.startNest(key); - this.walk(value); - this.convertor.endNest(); - } - } - } - - private walkSchema(schema: Schema): void { - const normalized = this.normalizeContent(schema); - this.currentSchema = normalized; - this.convertor.outputComments(normalized); - - const type = normalized.content.type; - switch (type) { - case "any": - return this.generateAnyTypeModel(normalized); - case "array": - return this.generateTypeCollection(normalized); - case "object": - default: - return this.generateDeclareType(normalized); - } - } - - private normalizeContent(schema: Schema, pointer?: string): NormalizedSchema { - if (pointer != null) { - schema = getSubSchema(schema, pointer); - } - const content = this.normalizeSchemaContent(schema.content); - return Object.assign({}, schema, { content }); - } - - private normalizeSchemaContent(content: any): any { - if (typeof content === "boolean") { - content = content ? {} : { not: {} }; - } else { - if (content.allOf) { - const work = content; - for (const sub of content.allOf) { - if (typeof sub === "object" && sub.$ref && false) { - const ref = this.resolver.dereference(sub.$ref); - const normalized = this.normalizeContent(ref).content; - utils.mergeSchema(work, normalized); - } else if (typeof sub === "object") { - const normalized = this.normalizeSchemaContent(sub); - utils.mergeSchema(work, normalized); - } else { - utils.mergeSchema(work, sub); - } - } - delete content.allOf; - content = work; - } - if ( - content.type === undefined && - (content.properties || content.additionalProperties) - ) { - content.type = "object"; - } - if (content.nullable) { - const type = content.type; - if (type == null) { - content.type = "null"; - } else if (!Array.isArray(type)) { - content.type = [type, "null"]; - } else { - type.push("null"); - } - } - const types = content.type; - if (Array.isArray(types)) { - const reduced = utils.reduceTypes(types); - content.type = reduced.length === 1 ? reduced[0] : reduced; - } - } - return content; - } - private generateDeclareType(schema: NormalizedSchema): void { - const content = schema.content; - if ( - content.$ref || - content.oneOf || - content.anyOf || - content.enum || - "const" in content || - content.type !== "object" - ) { - this.convertor.outputExportType(schema.id); - this.generateTypeProperty(schema, true); - } else { - this.convertor.startInterfaceNest(schema.id); - this.generateProperties(schema); - this.convertor.endInterfaceNest(); - } - } - - private generateAnyTypeModel(schema: NormalizedSchema): void { - this.convertor.startInterfaceNest(schema.id); - this.convertor.outputRawValue("[name: string]: any; // any", true); - this.convertor.endInterfaceNest(); - } - - private generateTypeCollection(schema: NormalizedSchema): void { - this.convertor.outputExportType(schema.id); - this.generateArrayTypeProperty(schema, true); - } - - private generateProperties(baseSchema: NormalizedSchema): void { - const content = baseSchema.content; - if (content.additionalProperties) { - this.convertor.outputRawValue("[name: string]: "); - const schema = this.normalizeContent(baseSchema, "/additionalProperties"); - if (content.additionalProperties === true) { - this.convertor.outputStringTypeName(schema, "any", true); - } else { - this.generateTypeProperty(schema, true); - } - } - if (content.properties) { - for (const propertyName of Object.keys(content.properties)) { - const schema = this.normalizeContent( - baseSchema, - "/properties/" + tilde(propertyName) - ); - this.convertor.outputComments(schema); - this.convertor.outputPropertyAttribute(schema); - this.convertor.outputPropertyName(schema, propertyName, !!schema.content.nullable); - this.generateTypeProperty(schema); - } - } - } - private generateTypeProperty(schema: NormalizedSchema, terminate = true): void { - const content = schema.content; - if (content.$ref) { - const ref = this.resolver.dereference(content.$ref); - if (ref.id == null) { - throw new Error("target referenced id is nothing: " + content.$ref); - } - const refSchema = this.normalizeContent(ref); - return this.convertor.outputTypeIdName( - refSchema, - this.currentSchema, - terminate, - !!content.nullable - ); - } - if (content.anyOf || content.oneOf) { - this.generateArrayedType(schema, content.anyOf, "/anyOf/", terminate); - this.generateArrayedType(schema, content.oneOf, "/oneOf/", terminate); - return; - } - if (content.enum) { - this.convertor.outputArrayedType( - schema, - content.enum, - value => { - if (content.type === "integer" || content.type === "number") { - this.convertor.outputRawValue("" + value); - } else { - this.convertor.outputRawValue(`"${value}"`); - } - }, - terminate - ); - } else if ("const" in content) { - const value = content.const; - if (content.type === "integer" || content.type === "number") { - this.convertor.outputStringTypeName(schema, "" + value, terminate); - } else { - this.convertor.outputStringTypeName(schema, `"${value}"`, terminate); - } - } else { - this.generateType(schema, terminate); - } - } - private generateArrayedType( - baseSchema: NormalizedSchema, - contents: JsonSchema[] | undefined, - path: string, - terminate: boolean - ): void { - if (contents) { - this.convertor.outputArrayedType( - baseSchema, - contents, - (_content, index) => { - const schema = this.normalizeContent(baseSchema, path + index); - if (schema.id.isEmpty()) { - this.generateTypeProperty(schema, false); - } else { - this.convertor.outputTypeIdName(schema, this.currentSchema, false); - } - }, - terminate - ); - } - } - - private generateArrayTypeProperty(schema: NormalizedSchema, terminate = true): void { - const items = schema.content.items; - const minItems = schema.content.minItems; - const maxItems = schema.content.maxItems; - if (items == null) { - this.convertor.outputStringTypeName(schema, "any[]", terminate); - } else if (!Array.isArray(items)) { - this.generateTypeProperty(this.normalizeContent(schema, "/items"), false); - this.convertor.outputStringTypeName(schema, "[]", terminate); - } else if (items.length === 0 && minItems === undefined && maxItems === undefined) { - this.convertor.outputStringTypeName(schema, "any[]", terminate); - } else if (minItems != null && maxItems != null && maxItems < minItems) { - this.convertor.outputStringTypeName(schema, "never", terminate); - } else { - this.convertor.outputRawValue("["); - let itemCount = Math.max(minItems || 0, maxItems || 0, items.length); - if (maxItems != null) { - itemCount = Math.min(itemCount, maxItems); - } - for (let i = 0; i < itemCount; i++) { - if (i > 0) { - this.convertor.outputRawValue(", "); - } - if (i < items.length) { - const type = this.normalizeContent(schema, "/items/" + i); - if (type.id.isEmpty()) { - this.generateTypeProperty(type, false); - } else { - this.convertor.outputTypeIdName(type, this.currentSchema, false); - } - } else { - this.convertor.outputStringTypeName(schema, "any", false, false); - } - if (minItems == null || i >= minItems) { - this.convertor.outputRawValue("?"); - } - } - if (maxItems == null) { - if (itemCount > 0) { - this.convertor.outputRawValue(", "); - } - this.convertor.outputStringTypeName(schema, "...any[]", false, false); - } - this.convertor.outputRawValue("]"); - - this.convertor.outputStringTypeName(schema, "", terminate); - } - } - - private generateType( - schema: NormalizedSchema, - terminate: boolean, - outputOptional = true - ): void { - const type = schema.content.type; - if (type == null) { - this.convertor.outputPrimitiveTypeName(schema, "void", terminate, outputOptional); - } else if (typeof type === "string") { - this.generateTypeName(schema, type, terminate, outputOptional); - } else { - const types = utils.reduceTypes(type); - if (types.length <= 1) { - schema.content.type = types[0]; - this.generateType(schema, terminate, outputOptional); - } else { - this.convertor.outputArrayedType( - schema, - types, - t => { - this.generateTypeName(schema, t, false, false); - }, - terminate - ); - } - } - } - private generateTypeName( - schema: NormalizedSchema, - type: string, - terminate: boolean, - outputOptional = true - ): void { - const tsType = utils.toTSType(type, schema.content); - if (tsType) { - this.convertor.outputPrimitiveTypeName(schema, tsType, terminate, outputOptional); - } else if (type === "object") { - this.convertor.startTypeNest(); - this.generateProperties(schema); - this.convertor.endTypeNest(terminate); - } else if (type === "array") { - this.generateArrayTypeProperty(schema, terminate); - } else { - throw new Error("unknown type: " + type); - } - } -} diff --git a/src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/jsonSchema.d.ts b/src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/jsonSchema.d.ts deleted file mode 100644 index d17eb91e55..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/jsonSchema.d.ts +++ /dev/null @@ -1,24 +0,0 @@ -import SchemaId from "./schemaId"; -export declare type JsonSchema = JsonSchemaOrg.Draft04.Schema | JsonSchemaOrg.Draft07.Schema; -export declare type JsonSchemaObject = - | JsonSchemaOrg.Draft04.Schema - | JsonSchemaOrg.Draft07.SchemaObject; -export declare type SchemaType = "Draft04" | "Draft07"; -export interface Schema { - type: SchemaType; - openApiVersion?: 2 | 3; - id: SchemaId; - content: JsonSchema; - rootSchema?: Schema; -} -export interface NormalizedSchema extends Schema { - content: JsonSchemaObject; -} -export declare function parseSchema(content: any, url?: string): Schema; -export declare function getSubSchema(rootSchema: Schema, pointer: string, id?: SchemaId): Schema; -export declare function getId(type: SchemaType, content: any): string | undefined; -export declare function searchAllSubSchema( - schema: Schema, - onFoundSchema: (subSchema: Schema) => void, - onFoundReference: (refId: SchemaId) => void -): void; diff --git a/src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/jsonSchema.js b/src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/jsonSchema.js deleted file mode 100644 index a8585a5683..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/jsonSchema.js +++ /dev/null @@ -1,523 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.searchAllSubSchema = exports.getId = exports.getSubSchema = exports.parseSchema = void 0; -var tslib_1 = require("tslib"); -var JsonPointer = tslib_1.__importStar(require("../jsonPointer")); -var schemaId_1 = tslib_1.__importDefault(require("./schemaId")); -function parseSchema(content, url) { - var _a = selectSchemaType(content), - type = _a.type, - openApiVersion = _a.openApiVersion; - if (url != null) { - setId(type, content, url); - } - var id = getId(type, content); - return { - type: type, - openApiVersion: openApiVersion, - id: id ? new schemaId_1.default(id) : schemaId_1.default.empty, - content: content - }; -} -exports.parseSchema = parseSchema; -function getSubSchema(rootSchema, pointer, id) { - var content = JsonPointer.get(rootSchema.content, JsonPointer.parse(pointer)); - if (id == null) { - var subId = getId(rootSchema.type, content); - var getParentIds_1 = function (s, result) { - result.push(s.id.getAbsoluteId()); - return s.rootSchema == null ? result : getParentIds_1(s.rootSchema, result); - }; - if (subId) { - id = new schemaId_1.default(subId, getParentIds_1(rootSchema, [])); - } else { - id = new schemaId_1.default(pointer, getParentIds_1(rootSchema, [])); - } - } - return { - type: rootSchema.type, - id: id, - content: content, - rootSchema: rootSchema - }; -} -exports.getSubSchema = getSubSchema; -function getId(type, content) { - return content[getIdPropertyName(type)]; -} -exports.getId = getId; -function setId(type, content, id) { - var key = getIdPropertyName(type); - if (content[key] == null) { - content[key] = id; - } -} -function getIdPropertyName(type) { - switch (type) { - case "Draft04": - return "id"; - case "Draft07": - return "$id"; - } -} -function searchAllSubSchema(schema, onFoundSchema, onFoundReference) { - var walkArray = function (array, paths, parentIds) { - if (array == null) { - return; - } - array.forEach(function (item, index) { - walk(item, paths.concat(index.toString()), parentIds); - }); - }; - var walkObject = function (obj, paths, parentIds) { - if (obj == null) { - return; - } - Object.keys(obj).forEach(function (key) { - var sub = obj[key]; - if (sub != null) { - walk(sub, paths.concat(key), parentIds); - } - }); - }; - var walkMaybeArray = function (item, paths, parentIds) { - if (Array.isArray(item)) { - walkArray(item, paths, parentIds); - } else { - walk(item, paths, parentIds); - } - }; - var walk = function (s, paths, parentIds) { - if (s == null || typeof s !== "object") { - return; - } - var id = getId(schema.type, s); - if (id && typeof id === "string") { - var schemaId = new schemaId_1.default(id, parentIds); - var subSchema = { - type: schema.type, - id: schemaId, - content: s, - rootSchema: schema - }; - onFoundSchema(subSchema); - parentIds = parentIds.concat([schemaId.getAbsoluteId()]); - } - if (typeof s.$ref === "string") { - var schemaId = new schemaId_1.default(s.$ref, parentIds); - s.$ref = schemaId.getAbsoluteId(); - onFoundReference(schemaId); - } - walkArray(s.allOf, paths.concat("allOf"), parentIds); - walkArray(s.anyOf, paths.concat("anyOf"), parentIds); - walkArray(s.oneOf, paths.concat("oneOf"), parentIds); - walk(s.not, paths.concat("not"), parentIds); - walkMaybeArray(s.items, paths.concat("items"), parentIds); - walk(s.additionalItems, paths.concat("additionalItems"), parentIds); - walk(s.additionalProperties, paths.concat("additionalProperties"), parentIds); - walkObject(s.definitions, paths.concat("definitions"), parentIds); - walkObject(s.properties, paths.concat("properties"), parentIds); - walkObject(s.patternProperties, paths.concat("patternProperties"), parentIds); - walkMaybeArray(s.dependencies, paths.concat("dependencies"), parentIds); - if (schema.type === "Draft07") { - if ("propertyNames" in s) { - walk(s.propertyNames, paths.concat("propertyNames"), parentIds); - walk(s.contains, paths.concat("contains"), parentIds); - walk(s.if, paths.concat("if"), parentIds); - walk(s.then, paths.concat("then"), parentIds); - walk(s.else, paths.concat("else"), parentIds); - } - } - }; - function searchOpenApiSubSchema(openApi) { - function createId(paths) { - return "#/" + paths.map(convertKeyToTypeName).join("/"); - } - function convertKeyToTypeName(key) { - key = key.replace(/\/(.)/g, function (_match, p1) { - return p1.toUpperCase(); - }); - return key - .replace(/}/g, "") - .replace(/{/g, "$") - .replace(/^\//, "") - .replace(/[^0-9A-Za-z_$]+/g, "_"); - } - function setSubIdToAnyObject(f, obj, keys) { - if (obj == null) { - return; - } - Object.keys(obj).forEach(function (key) { - var item = obj[key]; - f(item, keys.concat(convertKeyToTypeName(key))); - }); - } - var setSubIdToParameterObject = function (obj, keys) { - return setSubIdToAnyObject(setSubIdToParameter, obj, keys); - }; - function setSubIdToParameter(param, keys) { - if ("schema" in param) { - setSubId(param.schema, keys.concat(param.name)); - } - } - var setSubIdToParameterObjectNoName = function (obj, keys) { - return setSubIdToAnyObject(setSubIdToParameterNoName, obj, keys); - }; - function setSubIdToParameterNoName(param, keys) { - if ("schema" in param) { - setSubId(param.schema, keys); - } - } - function setSubIdToParameters(array, keys) { - if (array == null) { - return; - } - var params = new Map(); - var refs = new Map(); - array.forEach(function (item) { - var _a, _b, _c; - if ("schema" in item) { - setSubIdToParameter(item, keys); - var work = params.get(item.in); - if (work == null) { - work = []; - params.set(item.in, work); - } - work.push(item); - } else if ("$ref" in item) { - var result = /\/([^\/]*)$/.exec(item.$ref)[1]; - if ( - ((_a = item.$ref) === null || _a === void 0 - ? void 0 - : _a.includes("Api")) || - ((_b = item.$ref) === null || _b === void 0 - ? void 0 - : _b.includes("User-Agent")) - ) { - return; - } - setSubId(item, keys.concat(result)); - var work = void 0; - if ( - (_c = item.$ref) === null || _c === void 0 - ? void 0 - : _c.includes("Instance") - ) { - work = refs.get("header"); - if (work == null) { - work = []; - refs.set("header", work); - } - } else { - work = refs.get("path"); - if (work == null) { - work = []; - refs.set("path", work); - } - } - work.push(item); - } - }); - addParameterSchema(params, refs, keys); - } - function addParameterSchema(params, refs, keys) { - var e_1, _a, e_2, _b; - try { - for ( - var params_1 = tslib_1.__values(params), params_1_1 = params_1.next(); - !params_1_1.done; - params_1_1 = params_1.next() - ) { - var _c = tslib_1.__read(params_1_1.value, 2), - key = _c[0], - param = _c[1]; - var _d = tslib_1.__read(buildParameterSchema(key, param, keys), 2), - paths = _d[0], - obj = _d[1]; - setSubId(obj, paths); - } - } catch (e_1_1) { - e_1 = { error: e_1_1 }; - } finally { - try { - if (params_1_1 && !params_1_1.done && (_a = params_1.return)) _a.call(params_1); - } finally { - if (e_1) throw e_1.error; - } - } - try { - for ( - var refs_1 = tslib_1.__values(refs), refs_1_1 = refs_1.next(); - !refs_1_1.done; - refs_1_1 = refs_1.next() - ) { - var _e = tslib_1.__read(refs_1_1.value, 2), - key = _e[0], - ref = _e[1]; - var _f = tslib_1.__read(buildParameterSchemaRefs(key, ref, keys), 2), - paths = _f[0], - obj = _f[1]; - setSubId(obj, paths); - } - } catch (e_2_1) { - e_2 = { error: e_2_1 }; - } finally { - try { - if (refs_1_1 && !refs_1_1.done && (_b = refs_1.return)) _b.call(refs_1); - } finally { - if (e_2) throw e_2.error; - } - } - } - function buildParameterSchema(inType, params, keys) { - var paths = keys.slice(0, keys.length - 1).concat(inType + "Parameters"); - var properties = {}; - params.forEach(function (item) { - properties[item.name] = { $ref: createId(keys.concat(item.name)) }; - }); - return [ - paths, - { - id: createId(paths), - type: "object", - properties: properties, - required: params - .filter(function (item) { - return item.required === true; - }) - .map(function (item) { - return item.name; - }) - } - ]; - } - function buildParameterSchemaRefs(inType, refs, keys) { - var paths = keys.slice(0, keys.length - 1).concat(inType + "Parameters"); - var properties = {}; - refs.forEach(function (item) { - if (item.$ref != null) { - var result = /\/([^\/]*)$/.exec(item.$ref)[1]; - properties[result] = { $ref: createId(keys.concat(result)) }; - } - }); - return [ - paths, - { - id: createId(paths), - type: "object", - properties: properties, - required: refs.map(function (item) { - return /\/([^\/]*)$/.exec(item.$ref)[1]; - }) - } - ]; - } - var setSubIdToResponsesV2 = function (responses, keys) { - return setSubIdToAnyObject(setSubIdToResponseV2, responses, keys); - }; - function setSubIdToResponseV2(response, keys) { - if (response == null) { - return; - } - if ("schema" in response) { - var s = response.schema; - if (s != null && s.type === "file") { - return; - } - setSubId(s, keys); - } - } - function setSubIdToOperationV2(ops, keys) { - if (ops == null) { - return; - } - var operationId = ops.operationId; - if (operationId) { - keys = [keys[0], convertKeyToTypeName(operationId)]; - } - setSubIdToParameters(ops.parameters, keys.concat("parameters")); - setSubIdToResponsesV2(ops.responses, keys.concat("responses")); - } - var setSubIdToPathsV2 = function (paths, keys) { - return setSubIdToAnyObject(setSubIdToPathItemV2, paths, keys); - }; - function setSubIdToPathItemV2(pathItem, keys) { - setSubIdToParameters(pathItem.parameters, keys.concat("parameters")); - setSubIdToOperationV2(pathItem.get, keys.concat("get")); - setSubIdToOperationV2(pathItem.put, keys.concat("put")); - setSubIdToOperationV2(pathItem.post, keys.concat("post")); - setSubIdToOperationV2(pathItem.delete, keys.concat("delete")); - setSubIdToOperationV2(pathItem.options, keys.concat("options")); - setSubIdToOperationV2(pathItem.head, keys.concat("head")); - setSubIdToOperationV2(pathItem.patch, keys.concat("patch")); - } - function setSubIdToMediaTypes(types, keys) { - var e_3, _a; - if (types == null) { - return; - } - try { - for ( - var _b = tslib_1.__values(Object.keys(types)), _c = _b.next(); - !_c.done; - _c = _b.next() - ) { - var mime = _c.value; - if ( - /^text\/|^(?:application\/x-www-form-urlencoded|application\/([a-z0-9-_]+\+)?json)$/.test( - mime - ) - ) { - var mt = types[mime]; - setSubId(mt.schema, keys); - } - } - } catch (e_3_1) { - e_3 = { error: e_3_1 }; - } finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } finally { - if (e_3) throw e_3.error; - } - } - } - var setSubIdToRequestBodies = function (bodys, keys) { - return setSubIdToAnyObject(setSubIdToRequestBody, bodys, keys); - }; - function setSubIdToRequestBody(body, keys) { - if (body == null) { - return; - } - if ("content" in body) { - setSubIdToMediaTypes(body.content, keys); - } else if ("$ref" in body) { - setSubId(body, keys); - } else { - setSubId({}, keys); - } - } - var setSubIdToResponsesV3 = function (responses, keys) { - return setSubIdToAnyObject(setSubIdToResponseV3, responses, keys); - }; - function setSubIdToResponseV3(response, keys) { - if (response == null) { - return; - } - if ("content" in response) { - setSubIdToMediaTypes(response.content, keys); - } else if ("$ref" in response) { - setSubId(response, keys); - } else { - setSubId({}, keys); - } - } - function setSubIdToOperationV3(ops, keys) { - if (ops == null) { - return; - } - var operationId = ops.operationId; - if (operationId) { - keys = [keys[0], convertKeyToTypeName(operationId)]; - } - setSubIdToParameters(ops.parameters, keys.concat("parameters")); - setSubIdToRequestBody(ops.requestBody, keys.concat("requestBody")); - setSubIdToResponsesV3(ops.responses, keys.concat("responses")); - } - var setSubIdToPathsV3 = function (paths, keys) { - return setSubIdToAnyObject(setSubIdToPathItemV3, paths, keys); - }; - function setSubIdToPathItemV3(pathItem, keys) { - setSubIdToParameters(pathItem.parameters, keys.concat("parameters")); - setSubIdToOperationV3(pathItem.get, keys.concat("get")); - setSubIdToOperationV3(pathItem.put, keys.concat("put")); - setSubIdToOperationV3(pathItem.post, keys.concat("post")); - setSubIdToOperationV3(pathItem.delete, keys.concat("delete")); - setSubIdToOperationV3(pathItem.options, keys.concat("options")); - setSubIdToOperationV3(pathItem.head, keys.concat("head")); - setSubIdToOperationV3(pathItem.patch, keys.concat("patch")); - setSubIdToOperationV3(pathItem.trace, keys.concat("trace")); - } - function setSubIdToObject(obj, paths) { - if (obj == null) { - return; - } - Object.keys(obj).forEach(function (key) { - var sub = obj[key]; - setSubId(sub, paths.concat(key)); - }); - } - function setSubId(s, paths) { - if (typeof s !== "object") { - return; - } - if (typeof s.$ref === "string") { - var thing = "#" + s.$ref.slice(1).split("/").map(convertKeyToTypeName).join("/"); - var schemaId = new schemaId_1.default(thing); - s.$ref = schemaId.getAbsoluteId(); - onFoundReference(schemaId); - } - var id = createId(paths); - setId(schema.type, s, id); - walk(s, paths, []); - } - if ("swagger" in openApi) { - setSubIdToObject(openApi.definitions, ["definitions"]); - setSubIdToParameterObject(openApi.parameters, ["parameters"]); - setSubIdToResponsesV2(openApi.responses, ["responses"]); - setSubIdToPathsV2(openApi.paths, ["paths"]); - } else { - if (openApi.components) { - var components = openApi.components; - setSubIdToObject(components.schemas, ["components", "schemas"]); - setSubIdToResponsesV3(components.responses, ["components", "responses"]); - setSubIdToParameterObjectNoName(components.parameters, [ - "components", - "parameters" - ]); - setSubIdToRequestBodies(components.requestBodies, ["components", "requestBodies"]); - } - if (openApi.paths) { - setSubIdToPathsV3(openApi.paths, ["paths"]); - } - } - } - if (schema.openApiVersion != null) { - var obj = schema.content; - searchOpenApiSubSchema(obj); - return; - } - walk(schema.content, ["#"], []); -} -exports.searchAllSubSchema = searchAllSubSchema; -function selectSchemaType(content) { - if (content.$schema) { - var schema = content.$schema; - var match = schema.match(/http\:\/\/json-schema\.org\/draft-(\d+)\/schema#?/); - if (match) { - var version = Number(match[1]); - if (version <= 4) { - return { type: "Draft04" }; - } else { - return { type: "Draft07" }; - } - } - } - if (content.swagger === "2.0") { - return { - type: "Draft04", - openApiVersion: 2 - }; - } - if (content.openapi) { - var openapi = content.openapi; - if (/^3\.\d+\.\d+$/.test(openapi)) { - return { - type: "Draft07", - openApiVersion: 3 - }; - } - } - return { type: "Draft04" }; -} -//# sourceMappingURL=jsonSchema.js.map diff --git a/src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/jsonSchema.js.map b/src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/jsonSchema.js.map deleted file mode 100644 index ee50f68d43..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/jsonSchema.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"jsonSchema.js","sourceRoot":"","sources":["../../src/core/jsonSchema.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/jsonSchema.ts b/src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/jsonSchema.ts deleted file mode 100644 index cdd0c55907..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/jsonSchema.ts +++ /dev/null @@ -1,560 +0,0 @@ -import * as JsonPointer from "../jsonPointer"; -import SchemaId from "./schemaId"; - -export type JsonSchema = JsonSchemaOrg.Draft04.Schema | JsonSchemaOrg.Draft07.Schema; -export type JsonSchemaObject = JsonSchemaOrg.Draft04.Schema | JsonSchemaOrg.Draft07.SchemaObject; -type OpenApiSchema = SwaggerIo.V2.SchemaJson | OpenApisOrg.V3.SchemaJson; - -interface ParameterObject { - name: string; - in: string; - required?: boolean; - schema?: JsonSchemaObject; -} -type Parameter = ParameterObject | { $ref?: string }; - -export type SchemaType = "Draft04" | "Draft07"; - -export interface Schema { - type: SchemaType; - openApiVersion?: 2 | 3; - id: SchemaId; - content: JsonSchema; - rootSchema?: Schema; -} -export interface NormalizedSchema extends Schema { - content: JsonSchemaObject; -} - -export function parseSchema(content: any, url?: string): Schema { - const { type, openApiVersion } = selectSchemaType(content); - if (url != null) { - setId(type, content, url); - } - const id = getId(type, content); - return { - type, - openApiVersion, - id: id ? new SchemaId(id) : SchemaId.empty, - content - }; -} - -export function getSubSchema(rootSchema: Schema, pointer: string, id?: SchemaId): Schema { - const content = JsonPointer.get(rootSchema.content, JsonPointer.parse(pointer)); - if (id == null) { - const subId = getId(rootSchema.type, content); - const getParentIds = (s: Schema, result: string[]): string[] => { - result.push(s.id.getAbsoluteId()); - return s.rootSchema == null ? result : getParentIds(s.rootSchema, result); - }; - if (subId) { - id = new SchemaId(subId, getParentIds(rootSchema, [])); - } else { - id = new SchemaId(pointer, getParentIds(rootSchema, [])); - } - } - return { - type: rootSchema.type, - id, - content, - rootSchema - }; -} - -export function getId(type: SchemaType, content: any): string | undefined { - return content[getIdPropertyName(type)]; -} -function setId(type: SchemaType, content: any, id: string): void { - const key = getIdPropertyName(type); - if (content[key] == null) { - content[key] = id; - } -} -function getIdPropertyName(type: SchemaType): string { - switch (type) { - case "Draft04": - return "id"; - case "Draft07": - return "$id"; - } -} - -export function searchAllSubSchema( - schema: Schema, - onFoundSchema: (subSchema: Schema) => void, - onFoundReference: (refId: SchemaId) => void -): void { - const walkArray = ( - array: JsonSchema[] | undefined, - paths: string[], - parentIds: string[] - ): void => { - if (array == null) { - return; - } - array.forEach((item, index) => { - walk(item, paths.concat(index.toString()), parentIds); - }); - }; - const walkObject = ( - obj: { [name: string]: JsonSchema } | undefined, - paths: string[], - parentIds: string[] - ): void => { - if (obj == null) { - return; - } - Object.keys(obj).forEach(key => { - const sub = obj[key]; - if (sub != null) { - walk(sub, paths.concat(key), parentIds); - } - }); - }; - const walkMaybeArray = ( - item: JsonSchema | JsonSchema[] | undefined, - paths: string[], - parentIds: string[] - ): void => { - if (Array.isArray(item)) { - walkArray(item, paths, parentIds); - } else { - walk(item, paths, parentIds); - } - }; - const walk = (s: JsonSchema | undefined, paths: string[], parentIds: string[]) => { - if (s == null || typeof s !== "object") { - return; - } - - const id = getId(schema.type, s); - if (id && typeof id === "string") { - const schemaId = new SchemaId(id, parentIds); - const subSchema: Schema = { - type: schema.type, - id: schemaId, - content: s, - rootSchema: schema - }; - onFoundSchema(subSchema); - parentIds = parentIds.concat([schemaId.getAbsoluteId()]); - } - if (typeof s.$ref === "string") { - const schemaId = new SchemaId(s.$ref, parentIds); - s.$ref = schemaId.getAbsoluteId(); - onFoundReference(schemaId); - } - - walkArray(s.allOf, paths.concat("allOf"), parentIds); - walkArray(s.anyOf, paths.concat("anyOf"), parentIds); - walkArray(s.oneOf, paths.concat("oneOf"), parentIds); - walk(s.not, paths.concat("not"), parentIds); - - walkMaybeArray(s.items, paths.concat("items"), parentIds); - walk(s.additionalItems, paths.concat("additionalItems"), parentIds); - walk(s.additionalProperties, paths.concat("additionalProperties"), parentIds); - walkObject(s.definitions, paths.concat("definitions"), parentIds); - walkObject(s.properties, paths.concat("properties"), parentIds); - walkObject(s.patternProperties, paths.concat("patternProperties"), parentIds); - walkMaybeArray(s.dependencies, paths.concat("dependencies"), parentIds); - if (schema.type === "Draft07") { - if ("propertyNames" in s) { - walk(s.propertyNames, paths.concat("propertyNames"), parentIds); - walk(s.contains, paths.concat("contains"), parentIds); - walk(s.if, paths.concat("if"), parentIds); - walk(s.then, paths.concat("then"), parentIds); - walk(s.else, paths.concat("else"), parentIds); - } - } - }; - - function searchOpenApiSubSchema(openApi: OpenApiSchema): void { - function createId(paths: string[]): string { - return "#/" + paths.map(convertKeyToTypeName).join("/"); - } - function convertKeyToTypeName(key: string): string { - key = key.replace(/\/(.)/g, (_match, p1) => { - return p1.toUpperCase(); - }); - return key - .replace(/}/g, "") - .replace(/{/g, "$") - .replace(/^\//, "") - .replace(/[^0-9A-Za-z_$]+/g, "_"); - } - function setSubIdToAnyObject( - f: (t: T, keys: string[]) => void, - obj: { [key: string]: T } | undefined, - keys: string[] - ): void { - if (obj == null) { - return; - } - Object.keys(obj).forEach(key => { - const item = obj[key]; - f(item, keys.concat(convertKeyToTypeName(key))); - }); - } - - // for OpenAPI - const setSubIdToParameterObject = ( - obj: { [name: string]: Parameter } | undefined, - keys: string[] - ) => setSubIdToAnyObject(setSubIdToParameter, obj, keys); - function setSubIdToParameter(param: Parameter, keys: string[]): void { - if ("schema" in param) { - setSubId(param.schema, keys.concat(param.name)); - } - } - const setSubIdToParameterObjectNoName = ( - obj: { [name: string]: Parameter } | undefined, - keys: string[] - ) => setSubIdToAnyObject(setSubIdToParameterNoName, obj, keys); - function setSubIdToParameterNoName(param: Parameter, keys: string[]): void { - if ("schema" in param) { - setSubId(param.schema, keys); - } - } - function setSubIdToParameters(array: Parameter[] | undefined, keys: string[]): void { - if (array == null) { - return; - } - const params = new Map(); - const refs = new Map(); - array.forEach(item => { - if ("schema" in item) { - setSubIdToParameter(item, keys); - - let work = params.get(item.in); - if (work == null) { - work = []; - params.set(item.in, work); - } - work.push(item); - } else if ("$ref" in item) { - // @ts-ignore - const result = (/\/([^\/]*)$/.exec(item.$ref) as RegExpExecArray)[1]; - // item.$ref = item.$ref + "/schema"; - if (item.$ref?.includes("Api") || item.$ref?.includes("User-Agent")) { - return; - } - // @ts-ignore - setSubId(item, keys.concat(result)); - let work: { $ref?: string }[] | undefined; - if (item.$ref?.includes("Instance")) { - work = refs.get("header"); - - if (work == null) { - work = []; - refs.set("header", work); - } - } else { - work = refs.get("path"); - if (work == null) { - work = []; - refs.set("path", work); - } - } - work.push(item); - } - }); - addParameterSchema(params, refs, keys); - } - function addParameterSchema( - params: Map, - refs: Map, - keys: string[] - ): void { - for (const [key, param] of params) { - const [paths, obj] = buildParameterSchema(key, param, keys); - setSubId(obj, paths); - } - - for (const [key, ref] of refs) { - const [paths, obj] = buildParameterSchemaRefs(key, ref, keys); - setSubId(obj, paths); - } - } - function buildParameterSchema( - inType: string, - params: ParameterObject[], - keys: string[] - ): [string[], JsonSchemaObject] { - const paths = keys.slice(0, keys.length - 1).concat(inType + "Parameters"); - const properties: any = {}; - params.forEach(item => { - properties[item.name] = { $ref: createId(keys.concat(item.name)) }; - }); - return [ - paths, - { - id: createId(paths), - type: "object", - properties, - required: params.filter(item => item.required === true).map(item => item.name) - } - ]; - } - - function buildParameterSchemaRefs( - inType: string, - refs: { $ref?: string }[], - keys: string[] - ): [string[], JsonSchemaObject] { - const paths = keys.slice(0, keys.length - 1).concat(inType + "Parameters"); - const properties: any = {}; - refs.forEach(item => { - if (item.$ref != null) { - const result = (/\/([^\/]*)$/.exec(item.$ref) as RegExpExecArray)[1]; - //const ref = "#" + item.$ref.slice(1).split("/").map(convertKeyToTypeName).join("/"); - //properties[result] = {$ref: ref}; - properties[result] = { $ref: createId(keys.concat(result)) }; - } - }); - return [ - paths, - { - id: createId(paths), - type: "object", - properties, - required: refs.map( - item => (/\/([^\/]*)$/.exec(item.$ref) as RegExpExecArray)[1] - ) - } - ]; - } - - /// for OpenAPI V2 only - const setSubIdToResponsesV2 = ( - responses: SwaggerIo.V2.SchemaJson.Definitions.Responses | undefined, - keys: string[] - ) => setSubIdToAnyObject(setSubIdToResponseV2, responses, keys); - function setSubIdToResponseV2( - response: SwaggerIo.V2.SchemaJson.Definitions.ResponseValue | undefined, - keys: string[] - ): void { - if (response == null) { - return; - } - if ("schema" in response) { - const s = response.schema; - if (s != null && s.type === "file") { - return; - } - setSubId(s as JsonSchemaObject, keys); - } - } - function setSubIdToOperationV2( - ops: SwaggerIo.V2.SchemaJson.Definitions.Operation | undefined, - keys: string[] - ): void { - if (ops == null) { - return; - } - const operationId = ops.operationId; - if (operationId) { - keys = [keys[0], convertKeyToTypeName(operationId)]; - } - setSubIdToParameters(ops.parameters, keys.concat("parameters")); - setSubIdToResponsesV2(ops.responses, keys.concat("responses")); - } - const setSubIdToPathsV2 = ( - paths: SwaggerIo.V2.SchemaJson.Definitions.Paths, - keys: string[] - ) => setSubIdToAnyObject(setSubIdToPathItemV2, paths, keys); - function setSubIdToPathItemV2( - pathItem: SwaggerIo.V2.SchemaJson.Definitions.PathItem, - keys: string[] - ): void { - setSubIdToParameters(pathItem.parameters, keys.concat("parameters")); - setSubIdToOperationV2(pathItem.get, keys.concat("get")); - setSubIdToOperationV2(pathItem.put, keys.concat("put")); - setSubIdToOperationV2(pathItem.post, keys.concat("post")); - setSubIdToOperationV2(pathItem.delete, keys.concat("delete")); - setSubIdToOperationV2(pathItem.options, keys.concat("options")); - setSubIdToOperationV2(pathItem.head, keys.concat("head")); - setSubIdToOperationV2(pathItem.patch, keys.concat("patch")); - } - - /// for OpenAPI V3 only - function setSubIdToMediaTypes( - types: OpenApisOrg.V3.SchemaJson.Definitions.MediaTypes | undefined, - keys: string[] - ): void { - if (types == null) { - return; - } - for (const mime of Object.keys(types)) { - if ( - /^text\/|^(?:application\/x-www-form-urlencoded|application\/([a-z0-9-_]+\+)?json)$/.test( - mime - ) - ) { - const mt = types[mime]; - setSubId(mt.schema, keys); - } - } - } - const setSubIdToRequestBodies = ( - bodys: OpenApisOrg.V3.SchemaJson.Definitions.RequestBodiesOrReferences | undefined, - keys: string[] - ) => setSubIdToAnyObject(setSubIdToRequestBody, bodys, keys); - function setSubIdToRequestBody( - body: OpenApisOrg.V3.SchemaJson.Definitions.RequestBodyOrReference | undefined, - keys: string[] - ): void { - if (body == null) { - return; - } - if ("content" in body) { - setSubIdToMediaTypes(body.content, keys); - } else if ("$ref" in body) { - setSubId(body, keys); - } else { - setSubId({}, keys); - } - } - const setSubIdToResponsesV3 = ( - responses: OpenApisOrg.V3.SchemaJson.Definitions.ResponsesOrReferences | undefined, - keys: string[] - ) => setSubIdToAnyObject(setSubIdToResponseV3, responses, keys); - function setSubIdToResponseV3( - response: OpenApisOrg.V3.SchemaJson.Definitions.ResponseOrReference | undefined, - keys: string[] - ): void { - if (response == null) { - return; - } - if ("content" in response) { - setSubIdToMediaTypes(response.content, keys); - } else if ("$ref" in response) { - setSubId(response, keys); - } else { - setSubId({}, keys); - } - } - function setSubIdToOperationV3( - ops: OpenApisOrg.V3.SchemaJson.Definitions.Operation | undefined, - keys: string[] - ): void { - if (ops == null) { - return; - } - const operationId = ops.operationId; - if (operationId) { - keys = [keys[0], convertKeyToTypeName(operationId)]; - } - setSubIdToParameters(ops.parameters, keys.concat("parameters")); - setSubIdToRequestBody(ops.requestBody, keys.concat("requestBody")); - setSubIdToResponsesV3(ops.responses, keys.concat("responses")); - } - const setSubIdToPathsV3 = ( - paths: OpenApisOrg.V3.SchemaJson.Definitions.Paths, - keys: string[] - ) => setSubIdToAnyObject(setSubIdToPathItemV3, paths, keys); - function setSubIdToPathItemV3( - pathItem: OpenApisOrg.V3.SchemaJson.Definitions.PathItem, - keys: string[] - ): void { - setSubIdToParameters(pathItem.parameters, keys.concat("parameters")); - setSubIdToOperationV3(pathItem.get, keys.concat("get")); - setSubIdToOperationV3(pathItem.put, keys.concat("put")); - setSubIdToOperationV3(pathItem.post, keys.concat("post")); - setSubIdToOperationV3(pathItem.delete, keys.concat("delete")); - setSubIdToOperationV3(pathItem.options, keys.concat("options")); - setSubIdToOperationV3(pathItem.head, keys.concat("head")); - setSubIdToOperationV3(pathItem.patch, keys.concat("patch")); - setSubIdToOperationV3(pathItem.trace, keys.concat("trace")); - } - - function setSubIdToObject( - obj: { [name: string]: JsonSchema } | undefined, - paths: string[] - ): void { - if (obj == null) { - return; - } - Object.keys(obj).forEach(key => { - const sub = obj[key]; - setSubId(sub, paths.concat(key)); - }); - } - function setSubId(s: JsonSchema | undefined, paths: string[]): void { - if (typeof s !== "object") { - return; - } - - if (typeof s.$ref === "string") { - const thing = "#" + s.$ref.slice(1).split("/").map(convertKeyToTypeName).join("/"); - const schemaId = new SchemaId(thing); - s.$ref = schemaId.getAbsoluteId(); - onFoundReference(schemaId); - } - const id = createId(paths); - setId(schema.type, s, id); - walk(s, paths, []); - } - - if ("swagger" in openApi) { - setSubIdToObject(openApi.definitions, ["definitions"]); - setSubIdToParameterObject(openApi.parameters, ["parameters"]); - setSubIdToResponsesV2(openApi.responses, ["responses"]); - - setSubIdToPathsV2(openApi.paths, ["paths"]); - } else { - if (openApi.components) { - const components = openApi.components; - setSubIdToObject(components.schemas, ["components", "schemas"]); - setSubIdToResponsesV3(components.responses, ["components", "responses"]); - setSubIdToParameterObjectNoName(components.parameters, [ - "components", - "parameters" - ]); - setSubIdToRequestBodies(components.requestBodies, ["components", "requestBodies"]); - } - if (openApi.paths) { - setSubIdToPathsV3(openApi.paths, ["paths"]); - } - } - } - - if (schema.openApiVersion != null) { - const obj = schema.content as OpenApisOrg.V3.SchemaJson; - searchOpenApiSubSchema(obj); - return; - } - walk(schema.content, ["#"], []); -} - -function selectSchemaType(content: any): { type: SchemaType; openApiVersion?: 2 | 3 } { - if (content.$schema) { - const schema = content.$schema; - const match = schema.match(/http\:\/\/json-schema\.org\/draft-(\d+)\/schema#?/); - if (match) { - const version = Number(match[1]); - if (version <= 4) { - return { type: "Draft04" }; - } else { - return { type: "Draft07" }; - } - } - } - if (content.swagger === "2.0") { - return { - type: "Draft04", - openApiVersion: 2 - }; - } - if (content.openapi) { - const openapi = content.openapi; - if (/^3\.\d+\.\d+$/.test(openapi)) { - return { - type: "Draft07", - openApiVersion: 3 - }; - } - } - // fallback to old version JSON Schema - return { type: "Draft04" }; -} diff --git a/src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/schemaConvertor.js b/src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/schemaConvertor.js deleted file mode 100644 index e2bcdff8be..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/@anttiviljami/dtsgenerator/dist/core/schemaConvertor.js +++ /dev/null @@ -1,365 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var JsonPointer = tslib_1.__importStar(require("../jsonPointer")); -var typeNameConvertor_1 = require("./typeNameConvertor"); -var SchemaConvertor = (function () { - function SchemaConvertor(processor, convertor, namespaceName) { - if (convertor === void 0) { - convertor = typeNameConvertor_1.DefaultTypeNameConvertor; - } - this.processor = processor; - this.convertor = convertor; - this.exportedTypes = []; - this.replaceLevel = 0; - this.ns = - namespaceName == null - ? undefined - : namespaceName.split("/").filter(function (s) { - return s.length > 0; - }); - } - SchemaConvertor.prototype.getExports = function () { - return this.exportedTypes; - }; - SchemaConvertor.prototype.getLastTypeName = function (id) { - var names = this.convertor(id); - if (names.length > 0) { - return names[names.length - 1]; - } else { - return ""; - } - }; - SchemaConvertor.prototype.buildSchemaMergedMap = function (schemas, typeMarker) { - var e_1, _a, e_2, _b, _c; - var map = {}; - var paths = []; - var minLevel = Number.MAX_SAFE_INTEGER; - try { - for ( - var schemas_1 = tslib_1.__values(schemas), schemas_1_1 = schemas_1.next(); - !schemas_1_1.done; - schemas_1_1 = schemas_1.next() - ) { - var type = schemas_1_1.value; - var path = this.convertor(type.id); - minLevel = Math.min(minLevel, path.length); - paths.push({ path: path, type: type }); - } - } catch (e_1_1) { - e_1 = { error: e_1_1 }; - } finally { - try { - if (schemas_1_1 && !schemas_1_1.done && (_a = schemas_1.return)) _a.call(schemas_1); - } finally { - if (e_1) throw e_1.error; - } - } - this.replaceLevel = minLevel; - try { - for ( - var paths_1 = tslib_1.__values(paths), paths_1_1 = paths_1.next(); - !paths_1_1.done; - paths_1_1 = paths_1.next() - ) { - var item = paths_1_1.value; - var path = item.path; - this.replaceNamespace(path); - var parent_1 = JsonPointer.get(map, path, true); - if (parent_1 == null) { - JsonPointer.set(map, path, ((_c = {}), (_c[typeMarker] = item.type), _c)); - } else { - parent_1[typeMarker] = item.type; - } - } - } catch (e_2_1) { - e_2 = { error: e_2_1 }; - } finally { - try { - if (paths_1_1 && !paths_1_1.done && (_b = paths_1.return)) _b.call(paths_1); - } finally { - if (e_2) throw e_2.error; - } - } - if (Object.keys(map).length === 0) { - throw new Error("There is no schema in the input contents."); - } - return map; - }; - SchemaConvertor.prototype.replaceNamespace = function (paths) { - if (this.ns == null) { - return; - } - paths.splice(0, this.replaceLevel - 1); - if (this.ns.length > 0) { - paths.unshift.apply(paths, tslib_1.__spread(this.ns)); - } - }; - SchemaConvertor.prototype.start = function () { - this.processor.clear(); - }; - SchemaConvertor.prototype.end = function () { - return this.processor.toDefinition(); - }; - SchemaConvertor.prototype.startNest = function (name) { - var processor = this.processor; - if (processor.indentLevel === 0) { - processor.output("declare "); - } - processor.output("namespace ").outputType(name, true).outputLine(" {"); - processor.increaseIndent(); - }; - SchemaConvertor.prototype.endNest = function () { - var processor = this.processor; - processor.decreaseIndent(); - processor.outputLine("}"); - }; - SchemaConvertor.prototype.startInterfaceNest = function (id) { - var processor = this.processor; - if (processor.indentLevel === 0 && (this.ns == null || this.ns.length > 0)) { - processor.output("declare "); - } else { - processor.output("export "); - } - var name = this.getLastTypeName(id); - processor.output("interface ").outputType(name).output(" "); - this.startTypeNest(); - this.addExport(id); - }; - SchemaConvertor.prototype.endInterfaceNest = function () { - this.endTypeNest(false); - this.processor.outputLine(); - }; - SchemaConvertor.prototype.outputExportType = function (id) { - var processor = this.processor; - if (processor.indentLevel === 0 && (this.ns == null || this.ns.length > 0)) { - processor.output("declare "); - } else { - processor.output("export "); - } - var name = this.getLastTypeName(id); - processor.output("type ").outputType(name).output(" = "); - this.addExport(id); - }; - SchemaConvertor.prototype.startTypeNest = function () { - this.processor.outputLine("{"); - this.processor.increaseIndent(); - }; - SchemaConvertor.prototype.endTypeNest = function (terminate) { - this.processor.decreaseIndent(); - this.processor.output("}"); - if (terminate) { - this.processor.outputLine(";"); - } - }; - SchemaConvertor.prototype.outputRawValue = function (value, isEndOfLine) { - if (isEndOfLine === void 0) { - isEndOfLine = false; - } - this.processor.output(value); - if (isEndOfLine) { - this.processor.outputLine(); - } - }; - SchemaConvertor.prototype.outputComments = function (schema) { - var _a; - var content = schema.content; - var comments = []; - if ("$comment" in content) { - comments.push(content.$comment); - } - comments.push(content.title); - comments.push(content.description); - if ("example" in content || "examples" in content) { - comments.push("example:"); - if ("example" in content) { - comments.push(content.example); - } - if ("examples" in content) { - comments.push.apply(comments, tslib_1.__spread(content.examples)); - } - } - (_a = this.processor).outputJSDoc.apply(_a, tslib_1.__spread(comments)); - }; - SchemaConvertor.prototype.outputPropertyName = function (_schema, propertyName, optional) { - this.processor.outputKey(propertyName, optional).output(": "); - }; - SchemaConvertor.prototype.outputPropertyAttribute = function (schema) { - var content = schema.content; - if ("readOnly" in content && content.readOnly) { - this.processor.output("readonly "); - } - }; - SchemaConvertor.prototype.outputArrayedType = function ( - schema, - types, - output, - terminate, - outputOptional - ) { - var _this = this; - if (outputOptional === void 0) { - outputOptional = true; - } - if (!terminate) { - this.processor.output("("); - } - types.forEach(function (t, index) { - output(t, index); - if (index < types.length - 1) { - _this.processor.output(" | "); - } - }); - if (!terminate) { - this.processor.output(")"); - } - this.outputTypeNameTrailer(schema, terminate, outputOptional); - }; - SchemaConvertor.prototype.outputTypeIdName = function ( - schema, - currentSchema, - terminate, - nullable, - outputOptional - ) { - var _this = this; - if (terminate === void 0) { - terminate = true; - } - if (nullable === void 0) { - nullable = false; - } - if (outputOptional === void 0) { - outputOptional = true; - } - var typeName = this.getTypename(schema.id, currentSchema); - typeName.forEach(function (type, index) { - var isLast = index === typeName.length - 1; - _this.processor.outputType(type, isLast ? false : true); - if (!isLast) { - _this.processor.output("."); - } - }); - this.outputTypeNameTrailer(schema, terminate, outputOptional); - }; - SchemaConvertor.prototype.getTypename = function (id, baseSchema) { - var e_3, _a; - var result = this.convertor(id); - this.replaceNamespace(result); - var baseId = baseSchema.id; - if (baseId) { - var baseTypes = this.convertor(baseId).slice(0, -1); - try { - for ( - var baseTypes_1 = tslib_1.__values(baseTypes), - baseTypes_1_1 = baseTypes_1.next(); - !baseTypes_1_1.done; - baseTypes_1_1 = baseTypes_1.next() - ) { - var type = baseTypes_1_1.value; - if (result[0] === type) { - result.shift(); - } else { - break; - } - } - } catch (e_3_1) { - e_3 = { error: e_3_1 }; - } finally { - try { - if (baseTypes_1_1 && !baseTypes_1_1.done && (_a = baseTypes_1.return)) - _a.call(baseTypes_1); - } finally { - if (e_3) throw e_3.error; - } - } - if (result.length === 0) { - return [this.getLastTypeName(id)]; - } - } - return result; - }; - SchemaConvertor.prototype.outputPrimitiveTypeName = function ( - schema, - typeName, - terminate, - outputOptional - ) { - if (terminate === void 0) { - terminate = true; - } - if (outputOptional === void 0) { - outputOptional = true; - } - this.processor.outputType(typeName, true); - this.outputTypeNameTrailer(schema, terminate, outputOptional); - }; - SchemaConvertor.prototype.outputStringTypeName = function ( - schema, - typeName, - terminate, - outputOptional - ) { - if (outputOptional === void 0) { - outputOptional = true; - } - if (typeName) { - this.processor.output(typeName); - } - this.outputTypeNameTrailer(schema, terminate, outputOptional); - }; - SchemaConvertor.prototype.outputTypeNameTrailer = function ( - schema, - terminate, - outputOptional, - nullable - ) { - if (nullable === void 0) { - nullable = false; - } - - if (nullable) { - this.processor.output(" | null"); - } - if (terminate) { - this.processor.output(";"); - } - if (outputOptional) { - this.outputOptionalInformation(schema, terminate); - } - if (terminate) { - this.processor.outputLine(); - } - }; - SchemaConvertor.prototype.outputOptionalInformation = function (schema, terminate) { - var format = schema.content.format; - var pattern = schema.content.pattern; - if (!format && !pattern) { - return; - } - if (terminate) { - this.processor.output(" //"); - } else { - this.processor.output(" /*"); - } - if (format) { - this.processor.output(" ").output(format); - } - if (pattern) { - this.processor.output(" ").output(pattern); - } - if (!terminate) { - this.processor.output(" */ "); - } - }; - SchemaConvertor.prototype.addExport = function (id) { - var name = this.getLastTypeName(id); - var schemaRef = id.getJsonPointerHash(); - var names = this.convertor(id); - var path = names.join("."); - this.exportedTypes.push({ name: name, path: path, schemaRef: schemaRef }); - }; - return SchemaConvertor; -})(); -exports.default = SchemaConvertor; -//# sourceMappingURL=schemaConvertor.js.map diff --git a/src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/openapi-client-axios-typegen/typegen.js b/src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/openapi-client-axios-typegen/typegen.js deleted file mode 100644 index e2ea282183..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/openapi-client-axios-typegen/typegen.js +++ /dev/null @@ -1,359 +0,0 @@ -"use strict"; -var __awaiter = - (this && this.__awaiter) || - function (thisArg, _arguments, P, generator) { - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { - try { - step(generator.next(value)); - } catch (e) { - reject(e); - } - } - function rejected(value) { - try { - step(generator["throw"](value)); - } catch (e) { - reject(e); - } - } - function step(result) { - result.done - ? resolve(result.value) - : new P(function (resolve) { - resolve(result.value); - }).then(fulfilled, rejected); - } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); - }; -var __generator = - (this && this.__generator) || - function (thisArg, body) { - var _ = { - label: 0, - sent: function () { - if (t[0] & 1) throw t[1]; - return t[1]; - }, - trys: [], - ops: [] - }, - f, - y, - t, - g; - return ( - (g = { next: verb(0), throw: verb(1), return: verb(2) }), - typeof Symbol === "function" && - (g[Symbol.iterator] = function () { - return this; - }), - g - ); - function verb(n) { - return function (v) { - return step([n, v]); - }; - } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) - try { - if ( - ((f = 1), - y && - (t = - op[0] & 2 - ? y["return"] - : op[0] - ? y["throw"] || ((t = y["return"]) && t.call(y), 0) - : y.next) && - !(t = t.call(y, op[1])).done) - ) - return t; - if (((y = 0), t)) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: - case 1: - t = op; - break; - case 4: - _.label++; - return { value: op[1], done: false }; - case 5: - _.label++; - y = op[1]; - op = [0]; - continue; - case 7: - op = _.ops.pop(); - _.trys.pop(); - continue; - default: - if ( - !((t = _.trys), (t = t.length > 0 && t[t.length - 1])) && - (op[0] === 6 || op[0] === 2) - ) { - _ = 0; - continue; - } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { - _.label = op[1]; - break; - } - if (op[0] === 6 && _.label < t[1]) { - _.label = t[1]; - t = op; - break; - } - if (t && _.label < t[2]) { - _.label = t[2]; - _.ops.push(op); - break; - } - if (t[2]) _.ops.pop(); - _.trys.pop(); - continue; - } - op = body.call(thisArg, _); - } catch (e) { - op = [6, e]; - y = 0; - } finally { - f = t = 0; - } - if (op[0] & 5) throw op[1]; - return { value: op[0] ? op[1] : void 0, done: true }; - } - }; -var __importDefault = - (this && this.__importDefault) || - function (mod) { - return mod && mod.__esModule ? mod : { default: mod }; - }; -var __importStar = - (this && this.__importStar) || - function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) - for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; - }; -Object.defineProperty(exports, "__esModule", { value: true }); -var lodash_1 = __importDefault(require("lodash")); -var yargs_1 = __importDefault(require("yargs")); -var indent_string_1 = __importDefault(require("indent-string")); -var __1 = __importStar(require("openapi-client-axios")); -var dtsGenerator_1 = __importDefault(require("@anttiviljami/dtsgenerator/dist/core/dtsGenerator")); -var jsonSchema_1 = require("@anttiviljami/dtsgenerator/dist/core/jsonSchema"); -var referenceResolver_1 = __importDefault( - require("@anttiviljami/dtsgenerator/dist/core/referenceResolver") -); -var schemaConvertor_1 = __importDefault( - require("@anttiviljami/dtsgenerator/dist/core/schemaConvertor") -); -var writeProcessor_1 = __importDefault( - require("@anttiviljami/dtsgenerator/dist/core/writeProcessor") -); -var typeNameConvertor_1 = require("@anttiviljami/dtsgenerator/dist/core/typeNameConvertor"); - -var swagger_parser_1 = __importDefault(require("swagger-parser")); -function main() { - return __awaiter(this, void 0, void 0, function () { - var argv, _a, imports, schemaTypes, operationTypings; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - argv = yargs_1.default - .usage("Usage: $0 [file]") - .example( - "$0 ./openapi.yml > client.d.ts", - "- generate a type definition file" - ) - .demandCommand(1).argv; - return [4 /*yield*/, generateTypesForDocument(argv._[0])]; - case 1: - (_a = _b.sent()), - (imports = _a[0]), - (schemaTypes = _a[1]), - (operationTypings = _a[2]); - console.log(imports, "\n"); - console.log(schemaTypes); - console.log(operationTypings); - return [2 /*return*/]; - } - }); - }); -} -exports.main = main; -function generateTypesForDocument(definition) { - return __awaiter(this, void 0, void 0, function () { - var api, - processor, - resolver, - convertor, - rootSchema, - generator, - schemaTypes, - exportedTypes, - operationTypings, - imports; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - api = new __1.default({ definition: definition }); - return [4 /*yield*/, api.init()]; - case 1: - _a.sent(); - processor = new writeProcessor_1.default({ - indentSize: 2, - indentChar: " " - }); - resolver = new referenceResolver_1.default(); - convertor = new schemaConvertor_1.default(processor); - return [4 /*yield*/, swagger_parser_1.default.bundle(definition)]; - case 2: - rootSchema = _a.sent(); - resolver.registerSchema(jsonSchema_1.parseSchema(rootSchema)); - generator = new dtsGenerator_1.default(resolver, convertor); - return [4 /*yield*/, generator.generate()]; - case 3: - schemaTypes = _a.sent(); - exportedTypes = convertor.getExports(); - operationTypings = generateOperationMethodTypings(api, exportedTypes); - imports = [ - "import {", - " OpenAPIClient,", - " Parameters,", - " UnknownParamsObject,", - " OperationResponse,", - " AxiosRequestConfig,", - "} from 'openapi-client-axios';" - ].join("\n"); - return [2 /*return*/, [imports, schemaTypes, operationTypings]]; - } - }); - }); -} -exports.generateTypesForDocument = generateTypesForDocument; -function generateMethodForOperation(methodName, operation, exportTypes) { - var operationId = typeNameConvertor_1.normalizeTypeName(operation.operationId), - summary = operation.summary, - description = operation.description; - // parameters arg - var parameterTypePaths = lodash_1.default - .chain([ - lodash_1.default.find(exportTypes, { - schemaRef: "#/paths/" + operationId + "/pathParameters" - }), - lodash_1.default.find(exportTypes, { - schemaRef: "#/paths/" + operationId + "/queryParameters" - }), - lodash_1.default.find(exportTypes, { - schemaRef: "#/paths/" + operationId + "/headerParameters" - }), - lodash_1.default.find(exportTypes, { - schemaRef: "#/paths/" + operationId + "/cookieParameters" - }) - ]) - .filter() - .map("path") - .value(); - var parametersType = !lodash_1.default.isEmpty(parameterTypePaths) - ? parameterTypePaths.join(" & ") - : "UnknownParamsObject"; - var parametersArg = !lodash_1.default.isEmpty(parameterTypePaths) - ? "parameters: Parameters<" + parametersType + ">" - : "parameters?: null"; - // payload arg - var requestBodyType = lodash_1.default.find(exportTypes, { - schemaRef: "#/paths/" + operationId + "/requestBody" - }); - var dataArg = requestBodyType ? "data: " + requestBodyType.path : "data?: null"; - // return type - var responseTypePaths = lodash_1.default - .chain(exportTypes) - .filter(function (_a) { - var schemaRef = _a.schemaRef; - return schemaRef.startsWith("#/paths/" + operationId + "/responses"); - }) - .map("path") - .map(function (arg) { - return arg.replace(/\.(?=\d)/, ".$"); - }) - .value(); - var responseType = !lodash_1.default.isEmpty(responseTypePaths) - ? responseTypePaths.join(" | ") - : "any"; - var returnType = "OperationResponse<" + responseType + ">"; - var operationArgs = [parametersArg, dataArg, "config?: AxiosRequestConfig"]; - var operationMethod = - typeNameConvertor_1.normalizeTypeName(methodName) + - "(\n" + - operationArgs - .map(function (arg) { - return indent_string_1.default(arg, 2); - }) - .join(",\n") + - " \n): " + - returnType; - // comment for type - var content = lodash_1.default.filter([summary, description]).join("\n\n"); - var comment = - "/**\n" + - indent_string_1.default(content === "" ? operationId : operationId + " - " + content, 1, { - indent: " * ", - includeEmptyLines: true - }) + - "\n */"; - return [comment, operationMethod].join("\n"); -} -function generateOperationMethodTypings(api, exportTypes) { - var operations = api.getOperations(); - var operationTypings = operations.map(function (op) { - return generateMethodForOperation(op.operationId, op, exportTypes); - }); - var pathOperationTypes = lodash_1.default.entries(api.definition.paths).map(function (_a) { - var path = _a[0], - pathItem = _a[1]; - var methodTypings = []; - for (var m in pathItem) { - if (pathItem[m] && lodash_1.default.includes(Object.values(__1.HttpMethod), m)) { - var method = m; - var operation = lodash_1.default.find(operations, { - path: path, - method: method - }); - methodTypings.push(generateMethodForOperation(method, operation, exportTypes)); - } - } - return ["['" + path + "']: {"] - .concat( - methodTypings.map(function (m) { - return indent_string_1.default(m, 2); - }), - ["}"] - ) - .join("\n"); - }); - return ["export interface OperationMethods {"] - .concat( - operationTypings.map(function (op) { - return indent_string_1.default(op, 2); - }), - ["}", "", "export interface PathsDictionary {"], - pathOperationTypes.map(function (p) { - return indent_string_1.default(p, 2); - }), - ["}", "", "export type Client = OpenAPIClient"] - ) - .join("\n"); -} -exports.generateOperationMethodTypings = generateOperationMethodTypings; -if (require.main === module) { - main(); -} -//# sourceMappingURL=typegen.js.map diff --git a/src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/openapi-client-axios/client.js b/src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/openapi-client-axios/client.js deleted file mode 100644 index 6f9c141356..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/openapi-client-axios/client.js +++ /dev/null @@ -1,608 +0,0 @@ -"use strict"; -var __assign = - (this && this.__assign) || - function () { - __assign = - Object.assign || - function (t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); - }; -var __awaiter = - (this && this.__awaiter) || - function (thisArg, _arguments, P, generator) { - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { - try { - step(generator.next(value)); - } catch (e) { - reject(e); - } - } - function rejected(value) { - try { - step(generator["throw"](value)); - } catch (e) { - reject(e); - } - } - function step(result) { - result.done - ? resolve(result.value) - : new P(function (resolve) { - resolve(result.value); - }).then(fulfilled, rejected); - } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); - }; -var __generator = - (this && this.__generator) || - function (thisArg, body) { - var _ = { - label: 0, - sent: function () { - if (t[0] & 1) throw t[1]; - return t[1]; - }, - trys: [], - ops: [] - }, - f, - y, - t, - g; - return ( - (g = { next: verb(0), throw: verb(1), return: verb(2) }), - typeof Symbol === "function" && - (g[Symbol.iterator] = function () { - return this; - }), - g - ); - function verb(n) { - return function (v) { - return step([n, v]); - }; - } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) - try { - if ( - ((f = 1), - y && - (t = - op[0] & 2 - ? y["return"] - : op[0] - ? y["throw"] || ((t = y["return"]) && t.call(y), 0) - : y.next) && - !(t = t.call(y, op[1])).done) - ) - return t; - if (((y = 0), t)) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: - case 1: - t = op; - break; - case 4: - _.label++; - return { value: op[1], done: false }; - case 5: - _.label++; - y = op[1]; - op = [0]; - continue; - case 7: - op = _.ops.pop(); - _.trys.pop(); - continue; - default: - if ( - !((t = _.trys), (t = t.length > 0 && t[t.length - 1])) && - (op[0] === 6 || op[0] === 2) - ) { - _ = 0; - continue; - } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { - _.label = op[1]; - break; - } - if (op[0] === 6 && _.label < t[1]) { - _.label = t[1]; - t = op; - break; - } - if (t && _.label < t[2]) { - _.label = t[2]; - _.ops.push(op); - break; - } - if (t[2]) _.ops.pop(); - _.trys.pop(); - continue; - } - op = body.call(thisArg, _); - } catch (e) { - op = [6, e]; - y = 0; - } finally { - f = t = 0; - } - if (op[0] & 5) throw op[1]; - return { value: op[0] ? op[1] : void 0, done: true }; - } - }; -var __importDefault = - (this && this.__importDefault) || - function (mod) { - return mod && mod.__esModule ? mod : { default: mod }; - }; -Object.defineProperty(exports, "__esModule", { value: true }); -var lodash_1 = __importDefault(require("lodash")); -var axios_1 = __importDefault(require("axios")); -var bath_es5_1 = __importDefault(require("bath-es5")); -var openapi_schema_validation_1 = require("openapi-schema-validation"); -var swagger_parser_1 = __importDefault(require("swagger-parser")); -var query_string_1 = __importDefault(require("query-string")); -var json_schema_deref_sync_1 = __importDefault(require("json-schema-deref-sync")); -var client_1 = require("./types/client"); -/** - * Main class and the default export of the 'openapi-client-axios' module - * - * @export - * @class OpenAPIClientAxios - */ -var OpenAPIClientAxios = /** @class */ (function () { - /** - * Creates an instance of OpenAPIClientAxios. - * - * @param opts - constructor options - * @param {Document | string} opts.definition - the OpenAPI definition, file path or Document object - * @param {boolean} opts.strict - strict mode, throw errors or warn on OpenAPI spec validation errors (default: false) - * @param {boolean} opts.validate - whether to validate the input document document (default: true) - * @param {boolean} opts.axiosConfigDefaults - default axios config for the instance - * @memberof OpenAPIClientAxios - */ - function OpenAPIClientAxios(opts) { - var _this = this; - /** - * Returns the instance of OpenAPIClient - * - * @returns - * @memberof OpenAPIClientAxios - */ - this.getClient = function () { - return __awaiter(_this, void 0, void 0, function () { - return __generator(this, function (_a) { - if (!this.initalized) { - return [2 /*return*/, this.init()]; - } - return [2 /*return*/, this.instance]; - }); - }); - }; - /** - * Initalizes OpenAPIClientAxios and creates a member axios client instance - * - * The init() method should be called right after creating a new instance of OpenAPIClientAxios - * - * @returns AxiosInstance - * @memberof OpenAPIClientAxios - */ - this.init = function () { - return __awaiter(_this, void 0, void 0, function () { - var _a, _b; - return __generator(this, function (_c) { - switch (_c.label) { - case 0: - // parse the document - _a = this; - return [ - 4 /*yield*/, - swagger_parser_1.default.parse(this.inputDocument) - ]; - case 1: - // parse the document - _a.document = _c.sent(); - try { - if (this.validate) { - // validate the document - this.validateDefinition(); - } - } catch (err) { - if (this.strict) { - // in strict-mode, fail hard and re-throw the error - throw err; - } else { - // just emit a warning about the validation errors - console.warn(err); - } - } - // dereference the document into definition - _b = this; - return [ - 4 /*yield*/, - swagger_parser_1.default.dereference(this.inputDocument) - ]; - case 2: - // dereference the document into definition - _b.definition = _c.sent(); - // create axios instance - this.instance = this.createAxiosInstance(); - // we are now initalized - this.initalized = true; - return [2 /*return*/, this.instance]; - } - }); - }); - }; - /** - * Synchronous version of .init() - * - * Note: Only works when the input definition is a valid OpenAPI v3 object and doesn't contain remote $refs. - * - * @memberof OpenAPIClientAxios - */ - this.initSync = function () { - if (typeof _this.inputDocument !== "object") { - throw new Error( - ".initSync() can't be called with a non-object definition. Please use .init()" - ); - } - // set document - _this.document = _this.inputDocument; - try { - if (_this.validate) { - // validate the document - _this.validateDefinition(); - } - } catch (err) { - if (_this.strict) { - // in strict-mode, fail hard and re-throw the error - throw err; - } else { - // just emit a warning about the validation errors - console.warn(err); - } - } - // dereference the document into definition - _this.definition = json_schema_deref_sync_1.default(_this.inputDocument); - // create axios instance - _this.instance = _this.createAxiosInstance(); - // we are now initalized - _this.initalized = true; - return _this.instance; - }; - /** - * Creates a new axios instance, extends it and returns it - * - * @memberof OpenAPIClientAxios - */ - this.createAxiosInstance = function () { - // create axios instance - var instance = axios_1.default.create(_this.axiosConfigDefaults); - // set baseURL to the one found in the definition servers (if not set in axios defaults) - var baseURL = _this.getBaseURL(); - if (baseURL && !_this.axiosConfigDefaults.baseURL) { - instance.defaults.baseURL = baseURL; - } - // create methods for operationIds - var operations = _this.getOperations(); - for (var _i = 0, operations_1 = operations; _i < operations_1.length; _i++) { - var operation = operations_1[_i]; - var operationId = operation.operationId; - if (operationId) { - instance[operationId] = _this.createOperationMethod(operation); - } - } - // create paths dictionary - // Example: api.paths['/pets/{id}'].get({ id: 1 }); - instance.paths = {}; - for (var path in _this.definition.paths) { - if (_this.definition.paths[path]) { - if (!instance.paths[path]) { - instance.paths[path] = {}; - } - var methods = _this.definition.paths[path]; - for (var m in methods) { - if ( - methods[m] && - lodash_1.default.includes(Object.values(client_1.HttpMethod), m) - ) { - var method = m; - var operation = lodash_1.default.find(_this.getOperations(), { - path: path, - method: method - }); - instance.paths[path][method] = _this.createOperationMethod(operation); - } - } - } - } - // add reference to parent class instance - instance.api = _this; - return instance; - }; - /** - * Validates this.document, which is the parsed OpenAPI document. Throws an error if validation fails. - * - * @returns {Document} parsed document - * @memberof OpenAPIClientAxios - */ - this.validateDefinition = function () { - var _a = openapi_schema_validation_1.validate(_this.document, 3), - valid = _a.valid, - errors = _a.errors; - if (!valid) { - var prettyErrors = JSON.stringify(errors, null, 2); - throw new Error( - "Document is not valid OpenAPI. " + - errors.length + - " validation errors:\n" + - prettyErrors - ); - } - return _this.document; - }; - /** - * Gets the API baseurl defined in the first OpenAPI specification servers property - * - * @returns string - * @memberof OpenAPIClientAxios - */ - this.getBaseURL = function (operation) { - if (!_this.definition) { - return undefined; - } - if (operation) { - if (typeof operation === "string") { - operation = _this.getOperation(operation); - } - if (operation.servers && operation.servers[0]) { - return operation.servers[0].url; - } - } - if (_this.definition.servers && _this.definition.servers[0]) { - return _this.definition.servers[0].url; - } - return undefined; - }; - /** - * Creates an axios config object for operation + arguments - * @memberof OpenAPIClientAxios - */ - this.getAxiosConfigForOperation = function (operation, args) { - if (typeof operation === "string") { - operation = _this.getOperation(operation); - } - var request = _this.getRequestConfigForOperation(operation, args); - // construct axios request config - var axiosConfig = { - method: request.method, - url: request.path, - data: request.payload, - params: request.query, - headers: request.headers - }; - // allow overriding baseURL with operation / path specific servers - var servers = operation.servers; - if (servers && servers[0]) { - axiosConfig.baseURL = servers[0].url; - } - // allow overriding any parameters in AxiosRequestConfig - var config = args[2]; - return config ? lodash_1.default.merge(axiosConfig, config) : axiosConfig; - }; - /** - * Creates a generic request config object for operation + arguments. - * - * This function contains the logic that handles operation method parameters. - * - * @memberof OpenAPIClientAxios - */ - this.getRequestConfigForOperation = function (operation, args) { - if (typeof operation === "string") { - operation = _this.getOperation(operation); - } - var pathParams = {}; - var query = {}; - var headers = {}; - var cookies = {}; - var setRequestParam = function (name, value, type) { - switch (type) { - case client_1.ParamType.Path: - pathParams[name] = value; - break; - case client_1.ParamType.Query: - query[name] = value; - break; - case client_1.ParamType.Header: - headers[name] = value; - break; - case client_1.ParamType.Cookie: - cookies[name] = value; - break; - } - }; - var getParamType = function (paramName) { - var param = lodash_1.default.find(operation.parameters, { name: paramName }); - if (param) { - return param.in; - } - // default all params to query if operation doesn't specify param - return client_1.ParamType.Query; - }; - var getFirstOperationParam = function () { - var firstRequiredParam = lodash_1.default.find(operation.parameters, { - required: true - }); - if (firstRequiredParam) { - return firstRequiredParam; - } - var firstParam = lodash_1.default.first(operation.parameters); - if (firstParam) { - return firstParam; - } - }; - var paramsArg = args[0], - payload = args[1]; - if (lodash_1.default.isArray(paramsArg)) { - // ParamsArray - for (var _i = 0, _a = paramsArg; _i < _a.length; _i++) { - var param = _a[_i]; - setRequestParam(param.name, param.value, param.in || getParamType(param.name)); - } - } else if (typeof paramsArg === "object") { - // ParamsObject - for (var name in paramsArg) { - if (paramsArg[name] !== undefined) { - setRequestParam(name, paramsArg[name], getParamType(name)); - } - } - } else if (!lodash_1.default.isNil(paramsArg)) { - var firstParam = getFirstOperationParam(); - if (!firstParam) { - throw new Error("No parameters found for operation " + operation.operationId); - } - setRequestParam(firstParam.name, paramsArg, firstParam.in); - } - // path parameters - var pathBuilder = bath_es5_1.default(operation.path); - // make sure all path parameters are set - for (var _b = 0, _c = pathBuilder.names; _b < _c.length; _b++) { - var name = _c[_b]; - var value = pathParams[name]; - pathParams[name] = "" + value; - } - var path = pathBuilder.path(pathParams); - // query parameters - var queryString = query_string_1.default.stringify(query, { arrayFormat: "none" }); - // full url with query string - var url = - "" + _this.getBaseURL(operation) + path + (queryString ? "?" + queryString : ""); - // construct request config - var config = { - method: operation.method, - url: url, - path: path, - pathParams: pathParams, - query: query, - queryString: queryString, - headers: headers, - cookies: cookies, - payload: payload - }; - return config; - }; - /** - * Flattens operations into a simple array of Operation objects easy to work with - * - * @returns {Operation[]} - * @memberof OpenAPIBackend - */ - this.getOperations = function () { - var paths = lodash_1.default.get(_this.definition, "paths", {}); - return lodash_1.default - .chain(paths) - .entries() - .flatMap(function (_a) { - var path = _a[0], - pathObject = _a[1]; - var methods = lodash_1.default.pick( - pathObject, - lodash_1.default.values(client_1.HttpMethod) - ); - return lodash_1.default.map(lodash_1.default.entries(methods), function (_a) { - var method = _a[0], - operation = _a[1]; - operation.operationId = operation.operationId.replace( - /[^0-9A-Za-z_$]+/g, - "_" - ); - var op = __assign({}, operation, { path: path, method: method }); - if (pathObject.parameters) { - op.parameters = (op.parameters || []).concat(pathObject.parameters); - } - if (pathObject.servers) { - op.servers = (op.servers || []).concat(pathObject.servers); - } - return op; - }); - }) - .value(); - }; - /** - * Gets a single operation based on operationId - * - * @param {string} operationId - * @returns {Operation} - * @memberof OpenAPIBackend - */ - this.getOperation = function (operationId) { - return lodash_1.default.find(_this.getOperations(), { operationId: operationId }); - }; - /** - * Creates an axios method for an operation - * (...pathParams, data?, config?) => Promise - * - * @param {Operation} operation - * @memberof OpenAPIClientAxios - */ - this.createOperationMethod = function (operation) { - return function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - return __awaiter(_this, void 0, void 0, function () { - var axiosConfig; - return __generator(this, function (_a) { - axiosConfig = this.getAxiosConfigForOperation(operation, args); - // do the axios request - return [2 /*return*/, this.client.request(axiosConfig)]; - }); - }); - }; - }; - var optsWithDefaults = __assign({ validate: true, strict: false }, opts, { - axiosConfigDefaults: __assign( - { - paramsSerializer: function (params) { - return query_string_1.default.stringify(params, { arrayFormat: "none" }); - } - }, - opts.axiosConfigDefaults || {} - ) - }); - this.inputDocument = optsWithDefaults.definition; - this.strict = optsWithDefaults.strict; - this.validate = optsWithDefaults.validate; - this.axiosConfigDefaults = optsWithDefaults.axiosConfigDefaults; - } - Object.defineProperty(OpenAPIClientAxios.prototype, "client", { - /** - * Returns the instance of OpenAPIClient - * - * @readonly - * @type {OpenAPIClient} - * @memberof OpenAPIClientAxios - */ - get: function () { - return this.instance; - }, - enumerable: true, - configurable: true - }); - return OpenAPIClientAxios; -})(); -exports.OpenAPIClientAxios = OpenAPIClientAxios; -//# sourceMappingURL=client.js.map diff --git a/src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/openapi-client-axios/types/client.d.ts b/src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/openapi-client-axios/types/client.d.ts deleted file mode 100644 index 2221e51d85..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/scripts/patcher/files/openapi-client-axios/types/client.d.ts +++ /dev/null @@ -1,93 +0,0 @@ -import { AxiosResponse, AxiosRequestConfig } from "axios"; -import { OpenAPIV3 } from "openapi-types"; -export * from "openapi-types"; -/** - * Type alias for OpenAPI document. We only support v3 - */ -export declare type Document = OpenAPIV3.Document; -/** - * OpenAPI allowed HTTP methods - */ -export declare enum HttpMethod { - Get = "get", - Put = "put", - Post = "post", - Patch = "patch", - Delete = "delete", - Options = "options", - Head = "head", - Trace = "trace" -} -/** - * OpenAPI parameters "in" - */ -export declare enum ParamType { - Query = "query", - Header = "header", - Path = "path", - Cookie = "cookie" -} -/** - * Operation method spec - */ -export declare type ImplicitParamValue = string | number; -export interface ExplicitParamValue { - value: string | number; - name: string; - in?: ParamType | string; -} -export declare type UnknownParamsObject = {}; -export declare type ParamsArray = ExplicitParamValue[]; -export declare type SingleParam = ImplicitParamValue; -export declare type Parameters = - | ParamsObject - | ParamsArray - | SingleParam; -export declare type RequestPayload = any; -export declare type OperationMethodArguments = [Parameters?, RequestPayload?, AxiosRequestConfig?]; -export declare type OperationResponse = Promise>; -export declare type UnknownOperationMethod = ( - parameters?: Parameters, - data?: RequestPayload, - config?: AxiosRequestConfig -) => OperationResponse; -export interface UnknownOperationMethods { - [operationId: string]: UnknownOperationMethod; -} -/** - * Generic request config object - */ -export interface RequestConfig { - method: HttpMethod; - url: string; - path: string; - pathParams: { - [key: string]: string; - }; - query: { - [key: string]: string | string[]; - }; - queryString: string; - headers: { - [header: string]: string | string[]; - }; - cookies: { - [cookie: string]: string; - }; - payload?: RequestPayload; -} -/** - * Operation object extended with path and method for easy looping - */ -export interface Operation extends OpenAPIV3.OperationObject { - path: string; - method: HttpMethod; -} -/** - * A dictionary of paths and their methods - */ -export interface UnknownPathsDictionary { - [path: string]: { - [method in HttpMethod]?: UnknownOperationMethod; - }; -} diff --git a/src/Tgstation.Server.Host/ClientApp/scripts/patcher/patch.js b/src/Tgstation.Server.Host/ClientApp/scripts/patcher/patch.js deleted file mode 100644 index 3801d8997d..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/scripts/patcher/patch.js +++ /dev/null @@ -1,4 +0,0 @@ -const fs = require("fs-extra"); -const path = require("path"); - -fs.copySync(path.resolve(__dirname, "files"), path.resolve(__dirname, "../../node_modules")); diff --git a/src/Tgstation.Server.Host/ClientApp/src/ApiClient/AdminClient.ts b/src/Tgstation.Server.Host/ClientApp/src/ApiClient/AdminClient.ts deleted file mode 100644 index 4675eb64a6..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/ApiClient/AdminClient.ts +++ /dev/null @@ -1,341 +0,0 @@ -import { TypedEmitter } from "tiny-typed-emitter/lib"; - -import { Components } from "./generatedcode/_generated"; -import InternalError, { ErrorCode, GenericErrors } from "./models/InternalComms/InternalError"; -import InternalStatus, { StatusCode } from "./models/InternalComms/InternalStatus"; -import ServerClient from "./ServerClient"; - -interface IEvents { - loadAdminInfo: ( - user: InternalStatus - ) => void; -} - -export type AdminInfoErrors = - | GenericErrors - | ErrorCode.ADMIN_GITHUB_RATE - | ErrorCode.ADMIN_GITHUB_ERROR; - -export type RestartErrors = GenericErrors | ErrorCode.ADMIN_WATCHDOG_UNAVAIL; - -export type UpdateErrors = - | GenericErrors - | ErrorCode.ADMIN_WATCHDOG_UNAVAIL - | ErrorCode.ADMIN_VERSION_NOT_FOUND - | ErrorCode.ADMIN_GITHUB_RATE - | ErrorCode.ADMIN_GITHUB_ERROR; - -export type LogsErrors = GenericErrors | ErrorCode.ADMIN_LOGS_IO_ERROR; - -export type LogErrors = GenericErrors; - -export default new (class AdminClient extends TypedEmitter { - private _cachedAdminInfo?: InternalStatus; - public get cachedAdminInfo() { - return this._cachedAdminInfo; - } - private loadingAdminInfo = false; - - public constructor() { - super(); - ServerClient.on("purgeCache", () => { - this._cachedAdminInfo = undefined; - }); - } - - public async getAdminInfo(): Promise< - InternalStatus - > { - await ServerClient.wait4Init(); - if (this._cachedAdminInfo) { - return this._cachedAdminInfo; - } - - if (this.loadingAdminInfo) { - return await new Promise(resolve => { - const resolver = ( - user: InternalStatus - ) => { - resolve(user); - this.removeListener("loadAdminInfo", resolver); - }; - this.on("loadAdminInfo", resolver); - }); - } - - this.loadingAdminInfo = true; - - let response; - try { - response = await ServerClient.apiClient!.AdministrationController_Read(); - } catch (stat) { - const res = new InternalStatus({ - code: StatusCode.ERROR, - error: stat as InternalError - }); - this.emit("loadAdminInfo", res); - this.loadingAdminInfo = false; - return res; - } - - switch (response.status) { - case 200: { - const thing = new InternalStatus({ - code: StatusCode.OK, - payload: response.data as Components.Schemas.Administration - }); - - this._cachedAdminInfo = thing; - this.emit("loadAdminInfo", thing); - this.loadingAdminInfo = false; - return thing; - } - case 424: { - const errorMessage = response.data as Components.Schemas.ErrorMessage; - const thing = new InternalStatus< - Components.Schemas.Administration, - ErrorCode.ADMIN_GITHUB_RATE - >({ - code: StatusCode.ERROR, - error: new InternalError( - ErrorCode.ADMIN_GITHUB_RATE, - { errorMessage }, - response - ) - }); - this.emit("loadAdminInfo", thing); - this.loadingAdminInfo = false; - return thing; - } - case 429: { - const errorMessage = response.data as Components.Schemas.ErrorMessage; - const thing = new InternalStatus< - Components.Schemas.Administration, - ErrorCode.ADMIN_GITHUB_ERROR - >({ - code: StatusCode.ERROR, - error: new InternalError( - ErrorCode.ADMIN_GITHUB_ERROR, - { errorMessage }, - response - ) - }); - this.emit("loadAdminInfo", thing); - this.loadingAdminInfo = false; - return thing; - } - default: { - const res = new InternalStatus< - Components.Schemas.Administration, - ErrorCode.UNHANDLED_RESPONSE - >({ - code: StatusCode.ERROR, - error: new InternalError( - ErrorCode.UNHANDLED_RESPONSE, - { axiosResponse: response }, - response - ) - }); - this.emit("loadAdminInfo", res); - this.loadingAdminInfo = false; - return res; - } - } - } - - public async restartServer(): Promise> { - await ServerClient.wait4Init(); - - let response; - try { - response = await ServerClient.apiClient!.AdministrationController_Delete(); - } catch (stat) { - return new InternalStatus({ - code: StatusCode.ERROR, - error: stat as InternalError - }); - } - - switch (response.status) { - case 204: { - return new InternalStatus({ code: StatusCode.OK, payload: null }); - } - case 422: { - const errorMessage = response.data as Components.Schemas.ErrorMessage; - return new InternalStatus({ - code: StatusCode.ERROR, - error: new InternalError( - ErrorCode.ADMIN_WATCHDOG_UNAVAIL, - { errorMessage }, - response - ) - }); - } - default: { - return new InternalStatus({ - code: StatusCode.ERROR, - error: new InternalError( - ErrorCode.UNHANDLED_RESPONSE, - { axiosResponse: response }, - response - ) - }); - } - } - } - - public async updateServer(newVersion: string): Promise> { - await ServerClient.wait4Init(); - - let response; - try { - response = await ServerClient.apiClient!.AdministrationController_Update(null, { - windowsHost: true, - newVersion, - latestVersion: null, - trackedRepositoryUrl: null - }); - } catch (stat) { - return new InternalStatus({ - code: StatusCode.ERROR, - error: stat as InternalError - }); - } - - switch (response.status) { - case 202: { - return new InternalStatus({ code: StatusCode.OK, payload: null }); - } - case 410: { - const errorMessage = response.data as Components.Schemas.ErrorMessage; - return new InternalStatus({ - code: StatusCode.ERROR, - error: new InternalError( - ErrorCode.ADMIN_VERSION_NOT_FOUND, - { errorMessage }, - response - ) - }); - } - case 422: { - const errorMessage = response.data as Components.Schemas.ErrorMessage; - return new InternalStatus({ - code: StatusCode.ERROR, - error: new InternalError( - ErrorCode.ADMIN_WATCHDOG_UNAVAIL, - { errorMessage }, - response - ) - }); - } - case 424: { - const errorMessage = response.data as Components.Schemas.ErrorMessage; - return new InternalStatus({ - code: StatusCode.ERROR, - error: new InternalError( - ErrorCode.ADMIN_GITHUB_RATE, - { errorMessage }, - response - ) - }); - } - case 429: { - const errorMessage = response.data as Components.Schemas.ErrorMessage; - return new InternalStatus({ - code: StatusCode.ERROR, - error: new InternalError( - ErrorCode.ADMIN_GITHUB_ERROR, - { errorMessage }, - response - ) - }); - } - default: { - return new InternalStatus({ - code: StatusCode.ERROR, - error: new InternalError( - ErrorCode.UNHANDLED_RESPONSE, - { axiosResponse: response }, - response - ) - }); - } - } - } - - public async getLogs(): Promise> { - await ServerClient.wait4Init(); - - let response; - try { - response = await ServerClient.apiClient!.AdministrationController_ListLogs(); - } catch (stat) { - return new InternalStatus({ - code: StatusCode.ERROR, - error: stat as InternalError - }); - } - - switch (response.status) { - case 200: { - return new InternalStatus({ - code: StatusCode.OK, - payload: response.data as Components.Schemas.LogFile[] - }); - } - /*case 409: { - //not handled here as its a global error but instead handled in the interceptor as a snowflaky response, thanks for using 409 for two things cyber. - - }*/ - default: { - return new InternalStatus({ - code: StatusCode.ERROR, - error: new InternalError( - ErrorCode.UNHANDLED_RESPONSE, - { axiosResponse: response }, - response - ) - }); - } - } - } - - public async getLog( - logName: string - ): Promise> { - await ServerClient.wait4Init(); - - let response; - try { - response = await ServerClient.apiClient!.AdministrationController_GetLog({ - path: logName - }); - } catch (stat) { - return new InternalStatus({ - code: StatusCode.ERROR, - error: stat as InternalError - }); - } - switch (response.status) { - case 200: { - return new InternalStatus({ - code: StatusCode.OK, - payload: response.data as Components.Schemas.LogFile - }); - } - /*case 409: { - //not handled here as its a global error but instead handled in the interceptor as a snowflaky response, thanks for using 409 for two things cyber. - }*/ - default: { - return new InternalStatus({ - code: StatusCode.ERROR, - error: new InternalError( - ErrorCode.UNHANDLED_RESPONSE, - { axiosResponse: response }, - response - ) - }); - } - } - } -})(); diff --git a/src/Tgstation.Server.Host/ClientApp/src/ApiClient/InstanceClient.ts b/src/Tgstation.Server.Host/ClientApp/src/ApiClient/InstanceClient.ts deleted file mode 100644 index 2e7dbe512b..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/ApiClient/InstanceClient.ts +++ /dev/null @@ -1,92 +0,0 @@ -import { Components } from "./generatedcode/_generated"; -import InternalError, { ErrorCode, GenericErrors } from "./models/InternalComms/InternalError"; -import InternalStatus, { StatusCode } from "./models/InternalComms/InternalStatus"; -import ServerClient from "./ServerClient"; - -export type ListInstancesErrors = GenericErrors; -export type EditInstanceErrors = GenericErrors | ErrorCode.INSTANCE_NO_DB_ENTITY; - -export default new (class InstanceClient { - public async listInstances(): Promise< - InternalStatus - > { - await ServerClient.wait4Init(); - - let response; - try { - response = await ServerClient.apiClient!.InstanceController_List(); - } catch (stat) { - return new InternalStatus({ - code: StatusCode.ERROR, - error: stat as InternalError - }); - } - - switch (response.status) { - case 200: { - const payload = (response.data as Components.Schemas.Instance[]).sort( - (a, b) => a.id - b.id - ); - - return new InternalStatus({ - code: StatusCode.OK, - payload - }); - } - default: { - return new InternalStatus({ - code: StatusCode.ERROR, - error: new InternalError( - ErrorCode.UNHANDLED_RESPONSE, - { axiosResponse: response }, - response - ) - }); - } - } - } - - public async editInstance( - instance: Components.Schemas.Instance - ): Promise> { - await ServerClient.wait4Init(); - - let response; - try { - response = await ServerClient.apiClient!.InstanceController_Update(null, instance); - } catch (stat) { - return new InternalStatus({ - code: StatusCode.ERROR, - error: stat as InternalError - }); - } - switch (response.status) { - case 200: - case 202: { - const instance = response.data as Components.Schemas.Instance; - - return new InternalStatus({ - code: StatusCode.OK, - payload: instance - }); - } - case 410: - return new InternalStatus({ - code: StatusCode.ERROR, - error: new InternalError(ErrorCode.INSTANCE_NO_DB_ENTITY, { - errorMessage: response.data as Components.Schemas.ErrorMessage - }) - }); - default: { - return new InternalStatus({ - code: StatusCode.ERROR, - error: new InternalError( - ErrorCode.UNHANDLED_RESPONSE, - { axiosResponse: response }, - response - ) - }); - } - } - } -})(); diff --git a/src/Tgstation.Server.Host/ClientApp/src/ApiClient/InstanceUserClient.ts b/src/Tgstation.Server.Host/ClientApp/src/ApiClient/InstanceUserClient.ts deleted file mode 100644 index 7202464f69..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/ApiClient/InstanceUserClient.ts +++ /dev/null @@ -1,100 +0,0 @@ -import { TypedEmitter } from "tiny-typed-emitter"; - -import { Components } from "./generatedcode/_generated"; -import InternalError, { ErrorCode, GenericErrors } from "./models/InternalComms/InternalError"; -import InternalStatus, { StatusCode } from "./models/InternalComms/InternalStatus"; -import ServerClient from "./ServerClient"; - -interface IEvents { - loadInstanceUser: ( - user: InternalStatus - ) => void; -} - -export type getCurrentInstanceUserErrors = GenericErrors; - -export default new (class InstanceUserClient extends TypedEmitter { - private _cachedInstanceUser: Map< - number, - InternalStatus - > = new Map>(); - public get cachedInstanceUser() { - return this._cachedInstanceUser; - } - - private loadingInstanceUserInfo: Map = new Map(); - - public constructor() { - super(); - - ServerClient.on("purgeCache", () => { - this._cachedInstanceUser.clear(); - }); - } - - public async getCurrentInstanceUser( - instanceid: number - ): Promise> { - await ServerClient.wait4Init(); - - if (this._cachedInstanceUser.has(instanceid)) { - return this._cachedInstanceUser.get(instanceid)!; - } - - if (this.loadingInstanceUserInfo.get(instanceid)) { - return await new Promise(resolve => { - const resolver = ( - user: InternalStatus - ) => { - resolve(user); - this.removeListener("loadInstanceUser", resolver); - }; - this.on("loadInstanceUser", resolver); - }); - } - - this.loadingInstanceUserInfo.set(instanceid, true); - - let response; - try { - response = await ServerClient.apiClient!.InstanceUserController_Read({ - Instance: instanceid - }); - } catch (stat) { - const res = new InternalStatus({ - code: StatusCode.ERROR, - error: stat as InternalError - }); - this.emit("loadInstanceUser", res); - this.loadingInstanceUserInfo.set(instanceid, false); - return res; - } - - switch (response.status) { - case 200: { - const res = new InternalStatus({ - code: StatusCode.OK, - payload: response.data as Components.Schemas.InstanceUser - }); - - this._cachedInstanceUser.set(instanceid, res); - this.emit("loadInstanceUser", res); - this.loadingInstanceUserInfo.set(instanceid, false); - return res; - } - default: { - const res = new InternalStatus({ - code: StatusCode.ERROR, - error: new InternalError( - ErrorCode.UNHANDLED_RESPONSE, - { axiosResponse: response }, - response - ) - }); - this.emit("loadInstanceUser", res); - this.loadingInstanceUserInfo.set(instanceid, false); - return res; - } - } - } -})(); diff --git a/src/Tgstation.Server.Host/ClientApp/src/ApiClient/JobsClient.ts b/src/Tgstation.Server.Host/ClientApp/src/ApiClient/JobsClient.ts deleted file mode 100644 index dc8c1adde8..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/ApiClient/JobsClient.ts +++ /dev/null @@ -1,150 +0,0 @@ -import { Components } from "./generatedcode/_generated"; -import InternalError, { ErrorCode, GenericErrors } from "./models/InternalComms/InternalError"; -import InternalStatus, { StatusCode } from "./models/InternalComms/InternalStatus"; -import ServerClient from "./ServerClient"; - -export type listJobsErrors = GenericErrors | ErrorCode.JOB_INSTANCE_OFFLINE; -export type getJobErrors = GenericErrors | ErrorCode.JOB_JOB_NOT_FOUND; -export type deleteJobErrors = - | GenericErrors - | ErrorCode.JOB_JOB_NOT_FOUND - | ErrorCode.JOB_JOB_COMPLETE; - -export default new (class JobsClient { - public async listJobs( - instanceid: number - ): Promise> { - await ServerClient.wait4Init(); - - let response; - try { - response = await ServerClient.apiClient!.JobController_Read({ Instance: instanceid }); - } catch (stat) { - return new InternalStatus({ - code: StatusCode.ERROR, - error: stat as InternalError - }); - } - - switch (response.status) { - case 200: { - return new InternalStatus({ - code: StatusCode.OK, - payload: response.data as Components.Schemas.Job[] - }); - } - default: { - return new InternalStatus({ - code: StatusCode.ERROR, - error: new InternalError( - ErrorCode.UNHANDLED_RESPONSE, - { axiosResponse: response }, - response - ) - }); - } - } - } - - public async getJob( - instanceid: number, - jobid: number - ): Promise> { - await ServerClient.wait4Init(); - - let response; - try { - response = await ServerClient.apiClient!.JobController_GetId({ - Instance: instanceid, - id: jobid - }); - } catch (stat) { - return new InternalStatus({ - code: StatusCode.ERROR, - error: stat as InternalError - }); - } - - switch (response.status) { - case 200: { - return new InternalStatus({ - code: StatusCode.OK, - payload: response.data as Components.Schemas.Job - }); - } - case 404: { - return new InternalStatus({ - code: StatusCode.ERROR, - error: new InternalError(ErrorCode.JOB_JOB_NOT_FOUND, { - errorMessage: response.data as Components.Schemas.ErrorMessage - }) - }); - } - default: { - return new InternalStatus({ - code: StatusCode.ERROR, - error: new InternalError( - ErrorCode.UNHANDLED_RESPONSE, - { axiosResponse: response }, - response - ) - }); - } - } - } - - public async deleteJob( - instanceid: number, - jobid: number - ): Promise> { - await ServerClient.wait4Init(); - - let response; - try { - response = await ServerClient.apiClient!.JobController_Delete({ - Instance: instanceid, - id: jobid - }); - } catch (stat) { - return new InternalStatus({ - code: StatusCode.ERROR, - error: stat as InternalError - }); - } - - switch (response.status) { - case 202: { - return new InternalStatus({ - code: StatusCode.OK, - payload: response.data as Components.Schemas.Job - }); - } - case 404: { - return new InternalStatus({ - code: StatusCode.ERROR, - error: new InternalError(ErrorCode.JOB_JOB_NOT_FOUND, { - errorMessage: response.data as Components.Schemas.ErrorMessage - }) - }); - } - case 410: { - return new InternalStatus({ - code: StatusCode.ERROR, - error: new InternalError(ErrorCode.JOB_JOB_COMPLETE, { - void: true - }) - }); - } - default: { - return new InternalStatus({ - code: StatusCode.ERROR, - error: new InternalError( - ErrorCode.UNHANDLED_RESPONSE, - { axiosResponse: response }, - response - ) - }); - } - } - } -})(); diff --git a/src/Tgstation.Server.Host/ClientApp/src/ApiClient/ServerClient.ts b/src/Tgstation.Server.Host/ClientApp/src/ApiClient/ServerClient.ts deleted file mode 100644 index b3f3321c61..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/ApiClient/ServerClient.ts +++ /dev/null @@ -1,515 +0,0 @@ -import { AxiosError, AxiosResponse, OpenAPIClientAxios } from "openapi-client-axios"; -import { Document } from "openapi-client-axios/types/client"; -import { TypedEmitter } from "tiny-typed-emitter/lib"; - -import { Client, Components } from "./generatedcode/_generated"; -import { ICredentials } from "./models/ICredentials"; -import InternalError, { ErrorCode, GenericErrors } from "./models/InternalComms/InternalError"; -import InternalStatus, { StatusCode } from "./models/InternalComms/InternalStatus"; -import configOptions from "./util/config"; -import CredentialsProvider from "./util/CredentialsProvider"; -import LoginHooks from "./util/LoginHooks"; - -interface IEvents { - //self explainatory - logout: () => void; - //fired whenever something is denied access, shouldnt really be used - accessDenied: () => void; - //fired when the server info is first loaded - loadServerInfo: ( - serverInfo: InternalStatus - ) => void; - //fired when the api is loaded from the json file and loaded - initialized: () => void; - //purge all caches - purgeCache: () => void; - //internal event, queues logins - loadLoginInfo: (loginInfo: InternalStatus) => void; -} - -export type LoginErrors = - | GenericErrors - | ErrorCode.LOGIN_DISABLED - | ErrorCode.LOGIN_FAIL - | ErrorCode.LOGIN_NOCREDS; -export type ServerInfoErrors = GenericErrors; - -export default new (class ServerClient extends TypedEmitter { - private static readonly globalHandledCodes = [400, 401, 403, 406, 409, 426, 500, 501, 503]; - - //api - public apiClient?: Client; //client to interface with the api - private api?: OpenAPIClientAxios; //api object, handles sending requests and configuring things - private initialized = false; - private loadingServerInfo = false; - - public constructor() { - super(); - this.getServerInfo = this.getServerInfo.bind(this); - - LoginHooks.addHook(this.getServerInfo); - this.on("purgeCache", () => { - this._serverInfo = undefined; - if (CredentialsProvider.token) { - void LoginHooks.runHooks(CredentialsProvider.token); - } - }); - } - - //serverInfo - private _serverInfo?: InternalStatus; - - public get serverInfo() { - return this._serverInfo; - } - - public autoLogin = true; - private loggingIn = false; - - public async initApi() { - console.log("Initializing API client"); - console.time("APIInit"); - const defObj = ((await import("./generatedcode/swagger.json")) - .default as unknown) as Document; - - this.api = new OpenAPIClientAxios({ - definition: defObj, - validate: false, - axiosConfigDefaults: { - baseURL: configOptions.apipath.value as string, - withCredentials: false, - headers: { - Accept: "application/json", - api: `Tgstation.Server.Api/` + API_VERSION, - "User-Agent": "tgstation-server-control-panel/" + VERSION - }, - validateStatus: status => { - return !ServerClient.globalHandledCodes.includes(status); - } - } - }); - this.apiClient = await this.api.init(); - this.apiClient.interceptors.request.use( - async value => { - if (!((value.url === "/" || value.url === "") && value.method === "post")) { - const tok = await this.wait4Token(); - (value.headers as { [key: string]: string })["Authorization"] = - "Bearer " + tok.bearer!; - } - return value; - }, - error => { - return Promise.reject(error); - } - ); - this.apiClient.interceptors.response.use( - val => val, - (error: AxiosError): Promise => { - if ( - error.response && - error.response.status && - ServerClient.globalHandledCodes.includes(error.response.status) - ) { - const res = error.response as AxiosResponse; - switch (error.response.status) { - case 400: { - const errorMessage = res.data as Components.Schemas.ErrorMessage; - const errorobj = new InternalError( - ErrorCode.HTTP_BAD_REQUEST, - { - errorMessage - }, - res - ); - return Promise.reject(errorobj); - } - case 401: { - const request = error.config; - if ( - (request.url === "/" || request.url === "") && - request.method === "post" - ) { - this.logout(); - console.log("Failed to login"); - const errorobj = new InternalError( - ErrorCode.LOGIN_FAIL, - { - void: true - }, - res - ); - return Promise.reject(errorobj); - } else { - if (this.autoLogin) { - return this.login().then(status => { - switch (status.code) { - case StatusCode.OK: { - return this.api!.client.request(error.config); - } - case StatusCode.ERROR: { - this.emit("accessDenied"); - //time to kick out the user - this.logout(); - const errorobj = new InternalError( - ErrorCode.HTTP_ACCESS_DENIED, - { - void: true - }, - res - ); - return Promise.reject(errorobj); - } - } - }); - } else { - this.emit("accessDenied"); - const errorobj = new InternalError( - ErrorCode.HTTP_ACCESS_DENIED, - { - void: true - }, - res - ); - return Promise.reject(errorobj); - } - } - } - case 403: { - const request = error.config; - if ( - (request.url === "/" || request.url === "") && - request.method === "post" - ) { - this.logout(); - console.log("Account disabled"); - const errorobj = new InternalError( - ErrorCode.LOGIN_DISABLED, - { - void: true - }, - res - ); - return Promise.reject(errorobj); - } else { - this.emit("accessDenied"); - const errorobj = new InternalError( - ErrorCode.HTTP_ACCESS_DENIED, - { - void: true - }, - res - ); - return Promise.reject(errorobj); - } - } - case 406: { - const errorobj = new InternalError( - ErrorCode.HTTP_NOT_ACCEPTABLE, - { - void: true - }, - res - ); - return Promise.reject(errorobj); - } - case 409: { - const errorMessage = res.data as Components.Schemas.ErrorMessage; - - //Thanks for reusing a global erorr status cyber. Log operations can return 409 - const request = error.config; - let status: ErrorCode; - if ( - request.url === "/Administration/Logs" && - request.method === "get" - ) { - status = ErrorCode.ADMIN_LOGS_IO_ERROR; - } else if (request.url === "/Job" && request.method === "get") { - status = ErrorCode.JOB_INSTANCE_OFFLINE; - } else { - status = ErrorCode.HTTP_DATA_INEGRITY; - } - - const errorobj = new InternalError( - status, - { - errorMessage - }, - res - ); - return Promise.reject(errorobj); - } - case 426: { - const errorMessage = res.data as Components.Schemas.ErrorMessage; - const errorobj = new InternalError( - ErrorCode.HTTP_API_MISMATCH, - { errorMessage }, - res - ); - return Promise.reject(errorobj); - } - case 500: { - const errorMessage = res.data as Components.Schemas.ErrorMessage; - const errorobj = new InternalError( - ErrorCode.HTTP_SERVER_ERROR, - { - errorMessage - }, - res - ); - return Promise.reject(errorobj); - } - case 501: { - const errorMessage = res.data as Components.Schemas.ErrorMessage; - const errorobj = new InternalError( - ErrorCode.HTTP_UNIMPLEMENTED, - { errorMessage }, - res - ); - return Promise.reject(errorobj); - } - case 503: { - console.log("Server not ready, delaying request", error.config); - return new Promise(resolve => { - setTimeout(resolve, 5000); - }).then(() => this.api!.client.request(error.config)); - /*const errorobj = new InternalError( - ErrorCode.HTTP_SERVER_NOT_READY, - { - void: true - }, - res - ); - return Promise.reject(errorobj);*/ - } - default: { - const errorobj = new InternalError( - ErrorCode.UNHANDLED_GLOBAL_RESPONSE, - { - axiosResponse: res - }, - res - ); - return Promise.reject(errorobj); - } - } - } else { - const err = error as Error; - const errorobj = new InternalError( - ErrorCode.AXIOS, - { jsError: err }, - error.response - ); - return Promise.reject(errorobj); - } - } - ); - console.timeEnd("APIInit"); - this.initialized = true; - this.emit("initialized"); - } - - public wait4Init(): Promise { - return new Promise(resolve => { - if (this.initialized) { - resolve(); - return; - } - this.on("initialized", () => resolve()); - }); - } - - public wait4Token() { - return new Promise(resolve => { - if (CredentialsProvider.isTokenValid()) { - resolve(CredentialsProvider.token); - return; - } - LoginHooks.on("loginSuccess", token => { - resolve(token); - }); - }); - } - - public async login( - newCreds?: ICredentials, - savePassword = false - ): Promise> { - await this.wait4Init(); - console.log("Attempting login"); - if (newCreds) { - CredentialsProvider.credentials = newCreds; - } - if (!CredentialsProvider.credentials) - return new InternalStatus({ - code: StatusCode.ERROR, - error: new InternalError(ErrorCode.LOGIN_NOCREDS, { void: true }) - }); - - if (this.loggingIn) { - return await new Promise(resolve => { - const resolver = (info: InternalStatus) => { - resolve(info); - this.removeListener("loadLoginInfo", resolver); - }; - this.on("loadLoginInfo", resolver); - }); - } - this.loggingIn = true; - - let response; - try { - response = await this.apiClient!.HomeController_CreateToken(null, null, { - auth: { - username: CredentialsProvider.credentials.userName, - password: CredentialsProvider.credentials.password - } - }); - } catch (stat) { - return new InternalStatus({ - code: StatusCode.ERROR, - error: stat as InternalError - }); - } finally { - this.loggingIn = false; - } - switch (response.status) { - case 200: { - console.log("Login success"); - const token = response.data as Components.Schemas.Token; - CredentialsProvider.token = token; - - /*if (token.expiresAt) { - const expiry = new Date(token.expiresAt); - const refreshtime = new Date(expiry.getTime() - 60000); //1 minute before expiry - const delta = refreshtime.getTime() - new Date().getTime(); //god damn, dates are hot garbage, get the ms until the refresh time - setInterval(() => this.login(), delta); //this is an arrow function so that "this" remains set - }*/ - if (savePassword) { - try { - window.localStorage.setItem( - "username", - CredentialsProvider.credentials.userName - ); - window.localStorage.setItem( - "password", - CredentialsProvider.credentials.password - ); - } catch (_) { - // eslint-disable-next-line @typescript-eslint/no-empty-function - (() => {})(); //noop - } - } - LoginHooks.runHooks(token); - const res = new InternalStatus({ - code: StatusCode.OK, - payload: token - }); - this.emit("loadLoginInfo", res); - return res; - } - default: { - return new InternalStatus({ - code: StatusCode.ERROR, - error: new InternalError( - ErrorCode.UNHANDLED_RESPONSE, - { axiosResponse: response }, - response - ) - }); - } - } - } - - public logout() { - if (!CredentialsProvider.isTokenValid()) { - return; - } - console.log("Logging out"); - CredentialsProvider.credentials = undefined; - try { - window.localStorage.removeItem("username"); - window.localStorage.removeItem("password"); - } catch (e) { - // eslint-disable-next-line @typescript-eslint/no-empty-function - (() => {})(); - } - CredentialsProvider.token = undefined; - this.emit("purgeCache"); - this.emit("logout"); - } - - public async getServerInfo( - _token?: Components.Schemas.Token, - bypassCache = false - ): Promise> { - await this.wait4Init(); - - if (this._serverInfo && !bypassCache) { - return this._serverInfo; - } - - if (this.loadingServerInfo) { - return new Promise(resolve => { - if (this._serverInfo) { - //race condition if 2 things listen to an event or something - resolve(this._serverInfo); - return; - } - const resolver = ( - info: InternalStatus - ) => { - resolve(info); - this.removeListener("loadServerInfo", resolver); - }; - this.on("loadServerInfo", resolver); - }); - } - - this.loadingServerInfo = true; - - let response; - try { - response = await this.apiClient!.HomeController_Home(); - } catch (stat) { - const res = new InternalStatus({ - code: StatusCode.ERROR, - error: stat as InternalError - }); - this.emit("loadServerInfo", res); - this.loadingServerInfo = false; - return res; - } - switch (response.status) { - case 200: { - const info = response.data as Components.Schemas.ServerInformation; - const cache = new InternalStatus< - Components.Schemas.ServerInformation, - ErrorCode.OK - >({ - code: StatusCode.OK, - payload: info - }); - this.emit("loadServerInfo", cache); - this._serverInfo = cache; - this.loadingServerInfo = false; - return cache; - } - default: { - const res = new InternalStatus< - Components.Schemas.ServerInformation, - ErrorCode.UNHANDLED_RESPONSE - >({ - code: StatusCode.ERROR, - error: new InternalError( - ErrorCode.UNHANDLED_RESPONSE, - { axiosResponse: response }, - response - ) - }); - this.emit("loadServerInfo", res); - this.loadingServerInfo = false; - return res; - } - } - } -})(); diff --git a/src/Tgstation.Server.Host/ClientApp/src/ApiClient/UserClient.ts b/src/Tgstation.Server.Host/ClientApp/src/ApiClient/UserClient.ts deleted file mode 100644 index bb0f892a39..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/ApiClient/UserClient.ts +++ /dev/null @@ -1,300 +0,0 @@ -import { TypedEmitter } from "tiny-typed-emitter/lib"; - -import { AdministrationRights, InstanceManagerRights } from "./generatedcode/_enums"; -import { Components } from "./generatedcode/_generated"; -import InternalError, { ErrorCode, GenericErrors } from "./models/InternalComms/InternalError"; -import InternalStatus, { StatusCode } from "./models/InternalComms/InternalStatus"; -import ServerClient from "./ServerClient"; -import LoginHooks from "./util/LoginHooks"; - -interface IEvents { - loadUserInfo: (user: InternalStatus) => void; -} - -export type EditUserErrors = GenericErrors | ErrorCode.USER_NOT_FOUND; -export type GetUserErrors = GenericErrors | ErrorCode.USER_NOT_FOUND; -export type CreateUserErrors = GenericErrors | ErrorCode.USER_NO_SYS_IDENT; - -//https://stackoverflow.com/questions/40510611/typescript-interface-require-one-of-two-properties-to-exist -//name describes what it does, makes the passed type only require 1 property, the others being optional -type RequireAtLeastOne = Pick> & - { - [K in Keys]-?: Required> & Partial>>; - }[Keys]; - -export default new (class UserClient extends TypedEmitter { - private _cachedUser?: InternalStatus; - public get cachedUser() { - return this._cachedUser; - } - private loadingUserInfo = false; - - public constructor() { - super(); - this.getCurrentUser = this.getCurrentUser.bind(this); - - LoginHooks.addHook(this.getCurrentUser); - ServerClient.on("purgeCache", () => { - this._cachedUser = undefined; - }); - } - - public async editUser( - id: number, - newUser: RequireAtLeastOne<{ - password: string; - enabled: boolean; - administrationRights: AdministrationRights; - instanceManagerRights: InstanceManagerRights; - }> - ): Promise> { - await ServerClient.wait4Init(); - - let response; - try { - response = await ServerClient.apiClient!.UserController_Update(null, { - //@ts-expect-error // name is set as non nullable despite being nullable - name: undefined, - id: id, - //@ts-expect-error // password is set as non nullable despite being nullable - password: newUser.password, - enabled: newUser.enabled, - administrationRights: newUser.administrationRights, - instanceManagerRights: newUser.instanceManagerRights - }); - } catch (stat) { - return new InternalStatus({ - code: StatusCode.ERROR, - error: stat as InternalError - }); - } - // noinspection DuplicatedCode - switch (response.status) { - case 200: { - const current = await this.getCurrentUser(); - if (current.code == StatusCode.OK) { - if (current.payload!.id! == id) { - //if we are editing ourselves, clear cached data to reload permissions on the app - ServerClient.emit("purgeCache"); - } - } else { - return new InternalStatus({ - code: StatusCode.ERROR, - error: current.error! - }); - } - return new InternalStatus({ - code: StatusCode.OK, - payload: response.data as Components.Schemas.User - }); - } - case 404: { - const errorMessage = response.data as Components.Schemas.ErrorMessage; - return new InternalStatus({ - code: StatusCode.ERROR, - error: new InternalError(ErrorCode.USER_NOT_FOUND, { errorMessage }) - }); - } - default: { - return new InternalStatus({ - code: StatusCode.ERROR, - error: new InternalError( - ErrorCode.UNHANDLED_RESPONSE, - { axiosResponse: response }, - response - ) - }); - } - } - } - - public async getCurrentUser(): Promise> { - await ServerClient.wait4Init(); - if (this._cachedUser) { - return this._cachedUser; - } - - if (this.loadingUserInfo) { - return await new Promise(resolve => { - const resolver = (user: InternalStatus) => { - resolve(user); - this.removeListener("loadUserInfo", resolver); - }; - this.on("loadUserInfo", resolver); - }); - } - - this.loadingUserInfo = true; - - let response; - try { - response = await ServerClient.apiClient!.UserController_Read(); - } catch (stat) { - const res = new InternalStatus({ - code: StatusCode.ERROR, - error: stat as InternalError - }); - this.emit("loadUserInfo", res); - this.loadingUserInfo = false; - return res; - } - - switch (response.status) { - case 200: { - const thing = new InternalStatus({ - code: StatusCode.OK, - payload: response.data as Components.Schemas.User - }); - - this._cachedUser = thing; - this.emit("loadUserInfo", thing); - this.loadingUserInfo = false; - return thing; - } - default: { - const res = new InternalStatus< - Components.Schemas.User, - ErrorCode.UNHANDLED_RESPONSE - >({ - code: StatusCode.ERROR, - error: new InternalError( - ErrorCode.UNHANDLED_RESPONSE, - { axiosResponse: response }, - response - ) - }); - this.emit("loadUserInfo", res); - this.loadingUserInfo = false; - return res; - } - } - } - - public async listUsers(): Promise> { - await ServerClient.wait4Init(); - - let response; - try { - response = await ServerClient.apiClient!.UserController_List(); - } catch (stat) { - return new InternalStatus({ - code: StatusCode.ERROR, - error: stat as InternalError - }); - } - - switch (response.status) { - case 200: { - const payload = (response.data as Components.Schemas.User[]).sort( - (a, b) => a.id! - b.id! - ); - - return new InternalStatus({ - code: StatusCode.OK, - payload - }); - } - default: { - return new InternalStatus({ - code: StatusCode.ERROR, - error: new InternalError( - ErrorCode.UNHANDLED_RESPONSE, - { axiosResponse: response }, - response - ) - }); - } - } - } - - public async getUser( - id: number - ): Promise> { - await ServerClient.wait4Init(); - - let response; - try { - response = await ServerClient.apiClient!.UserController_GetId({ id: id }); - } catch (stat) { - return new InternalStatus({ - code: StatusCode.ERROR, - error: stat as InternalError - }); - } - // noinspection DuplicatedCode - switch (response.status) { - case 200: { - return new InternalStatus({ - code: StatusCode.OK, - payload: response.data as Components.Schemas.User - }); - } - case 404: { - const errorMessage = response.data as Components.Schemas.ErrorMessage; - return new InternalStatus({ - code: StatusCode.ERROR, - error: new InternalError(ErrorCode.USER_NOT_FOUND, { errorMessage }) - }); - } - default: { - return new InternalStatus({ - code: StatusCode.ERROR, - error: new InternalError( - ErrorCode.UNHANDLED_RESPONSE, - { axiosResponse: response }, - response - ) - }); - } - } - } - - public async createUser( - newuser: - | { name: string; password: string; enabled?: boolean } - | { systemIdentifier: string; enabled?: boolean } - ): Promise> { - await ServerClient.wait4Init(); - - if (newuser.enabled === undefined) newuser.enabled = true; - - let response; - try { - response = await ServerClient.apiClient!.UserController_Create( - null, - newuser as Components.Schemas.UserUpdate - ); - } catch (stat) { - return new InternalStatus({ - code: StatusCode.ERROR, - error: stat as InternalError - }); - } - - switch (response.status) { - case 201: { - return new InternalStatus({ - code: StatusCode.OK, - payload: response.data as Components.Schemas.User - }); - } - case 410: { - const errorMessage = response.data as Components.Schemas.ErrorMessage; - return new InternalStatus({ - code: StatusCode.ERROR, - error: new InternalError(ErrorCode.USER_NO_SYS_IDENT, { errorMessage }) - }); - } - default: { - return new InternalStatus({ - code: StatusCode.ERROR, - error: new InternalError( - ErrorCode.UNHANDLED_RESPONSE, - { axiosResponse: response }, - response - ) - }); - } - } - } -})(); diff --git a/src/Tgstation.Server.Host/ClientApp/src/ApiClient/generatedcode/.gitkeep b/src/Tgstation.Server.Host/ClientApp/src/ApiClient/generatedcode/.gitkeep deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/Tgstation.Server.Host/ClientApp/src/ApiClient/models/ICredentials.ts b/src/Tgstation.Server.Host/ClientApp/src/ApiClient/models/ICredentials.ts deleted file mode 100644 index 3a68c2da59..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/ApiClient/models/ICredentials.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface ICredentials { - userName: string; - password: string; -} diff --git a/src/Tgstation.Server.Host/ClientApp/src/ApiClient/models/InternalComms/InternalError.ts b/src/Tgstation.Server.Host/ClientApp/src/ApiClient/models/InternalComms/InternalError.ts deleted file mode 100644 index 496db85ea5..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/ApiClient/models/InternalComms/InternalError.ts +++ /dev/null @@ -1,153 +0,0 @@ -import { AxiosResponse } from "axios"; - -import { replaceAll } from "../../../utils/misc"; -import { ErrorCode as TGSErrorCode } from "../../generatedcode/_enums"; -import { Components } from "../../generatedcode/_generated"; -import configOptions from "../../util/config"; -import CredentialsProvider from "../../util/CredentialsProvider"; - -export type GenericErrors = - | ErrorCode.HTTP_BAD_REQUEST - | ErrorCode.HTTP_DATA_INEGRITY - | ErrorCode.HTTP_API_MISMATCH - | ErrorCode.HTTP_SERVER_ERROR - | ErrorCode.HTTP_UNIMPLEMENTED - // | ErrorCode.HTTP_SERVER_NOT_READY - | ErrorCode.AXIOS - | ErrorCode.UNHANDLED_RESPONSE - | ErrorCode.UNHANDLED_GLOBAL_RESPONSE - | ErrorCode.HTTP_ACCESS_DENIED - | ErrorCode.HTTP_NOT_ACCEPTABLE - | ErrorCode.OK; - -export enum ErrorCode { - OK = 'Isnt displayed but is used as an "error" when everything is ok', //void - HTTP_BAD_REQUEST = "error.http.bad_request", //errmessage - HTTP_DATA_INEGRITY = "error.http.data_integrity", //errmessage - HTTP_API_MISMATCH = "error.http.api_mismatch", //void - HTTP_SERVER_ERROR = "error.http.server_error", //errmessage - HTTP_UNIMPLEMENTED = "error.http.unimplemented", //errmessage - //auto retry HTTP_SERVER_NOT_READY = 'error.http.server_not_ready', //void - HTTP_ACCESS_DENIED = "error.http.access_denied", //void - HTTP_NOT_ACCEPTABLE = "error.http.not_acceptable", //void - UNHANDLED_RESPONSE = "error.unhandled_response", //axiosresponse - UNHANDLED_GLOBAL_RESPONSE = "error.unhandled_global_response", //axiosresponse - AXIOS = "error.axios", //jserror - - //Generic errors - GITHUB_FAIL = "error.github", //jserror - APP_FAIL = "error.app", //jserror - - //Login errors - LOGIN_FAIL = "error.login.bad_user_pass", //void - LOGIN_NOCREDS = "error.login.no_creds", //void - LOGIN_DISABLED = "error.login.user_disabled", //void - - //User errors - USER_NO_SYS_IDENT = "error.user.no_sys_ident", //errmessage - USER_NOT_FOUND = "error.user.not_found", //errmessage - - //Administration errors - ADMIN_GITHUB_RATE = "error.admin.rate", //errmessage - ADMIN_GITHUB_ERROR = "error.admin.error", //errmessage - ADMIN_WATCHDOG_UNAVAIL = "error.admin.watchdog.avail", //errmessage - ADMIN_VERSION_NOT_FOUND = "error.admin.update.notfound", //errmessage - ADMIN_LOGS_IO_ERROR = "error.admin.logs.io", //errmessage - - //Job errors - JOB_JOB_NOT_FOUND = "error.job.not_found", //errmessage - JOB_JOB_COMPLETE = "error.job.complete", //void - JOB_INSTANCE_OFFLINE = "error.job.instance_offline", //errmessage - - //Instance errors - INSTANCE_NO_DB_ENTITY = "error.instance.no_db_entity" //errmessage -} - -type errorMessage = { - errorMessage: Components.Schemas.ErrorMessage; -}; -type axiosResponse = { - axiosResponse: AxiosResponse; -}; -type jsError = { - jsError: Error; -}; -type voidError = { - void: true; -}; - -export enum DescType { - LOCALE, - TEXT -} -interface Desc { - type: DescType; - desc: string; -} - -type allAddons = errorMessage | axiosResponse | jsError | voidError; - -export default class InternalError { - public readonly code: T; - public readonly desc?: Desc; - public readonly extendedInfo: string; - - public constructor(code: T, addon: allAddons, origin?: AxiosResponse) { - this.code = code; - if ("errorMessage" in addon) { - const err = addon.errorMessage; - this.desc = { - type: DescType.TEXT, - desc: - TGSErrorCode[err.errorCode] + - ": " + - err.message + - (err.additionalData ? ": " + err.additionalData : "") - }; - if (!err.message) { - this.desc = { - type: DescType.TEXT, - desc: TGSErrorCode[err.errorCode] - }; - } - } - if ("jsError" in addon) { - const err = addon.jsError; - this.desc = { - type: DescType.TEXT, - desc: `${err.name}: ${err.message}` - }; - } - const stack = new Error().stack; - - let debuginfo = JSON.stringify({ addon, origin, config: configOptions, stack }); - debuginfo = debuginfo.replace( - /Basic (?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?/g, - "Basic **************" - ); - debuginfo = debuginfo.replace( - /{"username":".+?","password":".+?"}/g, - '{"username":"*******","password":"*******"}' - ); - if (CredentialsProvider.isTokenValid()) { - debuginfo = replaceAll( - debuginfo, - CredentialsProvider.token?.bearer as string, - "**************" - ); - } - if (configOptions.githubtoken.value) { - debuginfo = replaceAll( - debuginfo, - configOptions.githubtoken.value as string, - "**************" - ); - } - this.extendedInfo = debuginfo; - - console.error( - `Operational error: ${this.code} (${this.desc?.desc || "No description"})`, - this - ); - } -} diff --git a/src/Tgstation.Server.Host/ClientApp/src/ApiClient/models/InternalComms/InternalStatus.ts b/src/Tgstation.Server.Host/ClientApp/src/ApiClient/models/InternalComms/InternalStatus.ts deleted file mode 100644 index 75fdcc460b..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/ApiClient/models/InternalComms/InternalStatus.ts +++ /dev/null @@ -1,38 +0,0 @@ -import InternalError, { ErrorCode } from "./InternalError"; - -export enum StatusCode { - OK, - ERROR -} - -declare interface argsErr { - code: StatusCode.ERROR; - error: InternalError; -} - -declare interface argsOk { - code: StatusCode.OK; - payload: T; -} - -declare type args = argsErr | argsOk; - -class InternalStatus { - public code: StatusCode; - public payload?: T; - public error?: InternalError; - - public constructor(args: args) { - this.code = args.code; - switch (args.code) { - case StatusCode.OK: - this.payload = args.payload; - break; - case StatusCode.ERROR: - this.error = args.error; - break; - } - } -} - -export default InternalStatus; diff --git a/src/Tgstation.Server.Host/ClientApp/src/ApiClient/util/ConfigController.ts b/src/Tgstation.Server.Host/ClientApp/src/ApiClient/util/ConfigController.ts deleted file mode 100644 index 1e0b301893..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/ApiClient/util/ConfigController.ts +++ /dev/null @@ -1,72 +0,0 @@ -import configOptions, { ConfigOption, ConfigValue } from "./config"; - -export default new (class ConfigController { - public loadconfig() { - for (const val of Object.values(configOptions)) { - this.getconfig(val); - } - console.log("Configuration loaded", configOptions); - } - - public saveconfig(newconfig: { [key: string]: ConfigOption }) { - for (const [key, val] of Object.entries(newconfig)) { - this.setconfig(key, val); - } - console.log("Configuration saved", configOptions); - } - - private setconfig(key: string, option: ConfigOption) { - if (option?.value === undefined) return this.deleteconfig(key); - - //safeties - switch (option.type) { - case "num": - //this parses strings and numbers alike to numbers and refuses non numbers - //@ts-expect-error //parseInt can take numbers - option.value = parseInt(option.value); - if (Number.isNaN(option.value)) return; - break; - } - - configOptions[key].value = option.value; - //configOptions[key].persist = option.persist; - - //if (!option.persist) return this.deleteconfig(key); //idiot proofing, alexkar proofing - - try { - localStorage.setItem(option.id, JSON.stringify(option.value)); - //option.persist = true; - } catch (e) { - // eslint-disable-next-line @typescript-eslint/no-empty-function - (() => {})(); //noop - } - } - - private getconfig(option: ConfigOption): void { - try { - const data = localStorage.getItem(option.id); - if (data !== undefined && data !== null) { - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment - const json = JSON.parse(data); - if (json !== null && json !== undefined) { - option.value = json as ConfigValue; - } - //option.persist = true; - } - } catch (e) { - // eslint-disable-next-line @typescript-eslint/no-empty-function - (() => {})(); //noop - } - } - - private deleteconfig(key: string): void { - try { - const option = configOptions[key]; - localStorage.removeItem(option.id); - //option.persist = false; - } catch (e) { - // eslint-disable-next-line @typescript-eslint/no-empty-function - (() => {})(); //noop - } - } -})(); diff --git a/src/Tgstation.Server.Host/ClientApp/src/ApiClient/util/CredentialsProvider.ts b/src/Tgstation.Server.Host/ClientApp/src/ApiClient/util/CredentialsProvider.ts deleted file mode 100644 index cd43d890ab..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/ApiClient/util/CredentialsProvider.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Components } from "../generatedcode/_generated"; -import { ICredentials } from "../models/ICredentials"; - -export default new (class CredentialsProvider { - //token - public token?: Components.Schemas.Token; - - //credentials - public credentials?: ICredentials; - - public isTokenValid() { - return ( - this.credentials && - this.token && - this.token - .bearer /* && - (!this.token.expiresAt || new Date(this.token.expiresAt) > new Date(Date.now()))*/ - ); - } -})(); diff --git a/src/Tgstation.Server.Host/ClientApp/src/ApiClient/util/JobsController.ts b/src/Tgstation.Server.Host/ClientApp/src/ApiClient/util/JobsController.ts deleted file mode 100644 index 0352809251..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/ApiClient/util/JobsController.ts +++ /dev/null @@ -1,350 +0,0 @@ -import { TypedEmitter } from "tiny-typed-emitter"; - -import { - AdministrationRights, - ByondRights, - ChatBotRights, - ConfigurationRights, - DreamDaemonRights, - DreamMakerRights, - InstanceManagerRights, - InstanceUserRights, - RepositoryRights, - RightsType -} from "../generatedcode/_enums"; -import { Components } from "../generatedcode/_generated"; -import InstanceUserClient from "../InstanceUserClient"; -import JobsClient, { getJobErrors, listJobsErrors } from "../JobsClient"; -import InternalError, { ErrorCode } from "../models/InternalComms/InternalError"; -import { StatusCode } from "../models/InternalComms/InternalStatus"; -import ServerClient from "../ServerClient"; -import UserClient from "../UserClient"; -import configOptions from "./config"; - -interface IEvents { - jobsLoaded: () => unknown; -} - -export type CanCancelJob = Components.Schemas.Job & { - canCancel?: boolean; -}; - -export default new (class JobsController extends TypedEmitter { - private _instance: number | undefined; - public set instance(id: number | undefined) { - this._instance = id; - this.reset(); - } - - //This is a special property that gets set by approutes to add a handler for when this needs to change the instance - // This is here as a hack so that JobsController doesnt have to reference files outside the api client - // eslint-disable-next-line @typescript-eslint/no-empty-function - public setInstance: (instance: number | undefined) => void = () => {}; - - private fastmodecount = 0; - public set fastmode(cycles: number) { - console.log(`JobsController going in fastmode for ${cycles} cycles`); - this.fastmodecount = cycles; - this.restartLoop(); - } - - private currentLoop: Date = new Date(0); - - public errors: InternalError[] = []; - public jobs: Map = new Map(); - - private reset() { - this.jobs = new Map(); - this.restartLoop(); - } - - public constructor() { - super(); - - this.loop = this.loop.bind(this); - this.reset = this.reset.bind(this); - - //technically not a "cache" but we might as well reload it - ServerClient.on("purgeCache", this.reset); - } - - public restartLoop() { - //we use an actual date object here because it could help prevent really weird timing - // issues as two different date objects cannot be equal - // despite the date being - const initDate = new Date(Date.now()); - this.currentLoop = initDate; - this.loop(initDate); - } - - private loop(loopid: Date) { - //if we dont got an instance to check, dont check - // normally we should have an instance id, but this is in case we dont - if (this._instance === undefined) { - return; - } - - //so loops get initialiazed with the current time, it keeps track of which loop to run with - // that initialization date in currentLoop if the currentLoop isnt equal to the one provided - // to the loop, it means that the loop was - // replaced so we dont try to call for another one - if (loopid !== this.currentLoop) { - return; - } - - //time to clear out errors - this.errors = []; - - //now since this is async, it still possible that a single fire gets done after the new loop started, theres no really much that can be done about it - JobsClient.listJobs(this._instance) - .then(async value => { - //this check is here because the request itself is async and could return after - // the loop is terminated, we dont want to contaminate the jobs of an instance - // with the jobs of another even if it is for a single fire and would eventually - // get fixed on its own after a few seconds - if (loopid !== this.currentLoop) return; - - if (value.code === StatusCode.OK) { - for (const job of value.payload!) { - this.jobs.set(job.id, job); - } - - //we check all jobs we have locally against the active jobs we got in the reply so - // we can query jobs which we didnt get informed about manually - const localids = Array.from(this.jobs, ([, job]) => job.id); - const remoteids = value.payload!.map(job => job.id); - - const manualids = localids.filter(x => !remoteids.includes(x)); - - const work: Promise[] = []; - for (const id of manualids) { - work.push( - JobsClient.getJob(this._instance!, id).then(status => { - if (loopid !== this.currentLoop) return; - - if (status.code === StatusCode.OK) { - this.jobs.set(id, status.payload!); - } else { - this.errors.push(status.error!); - } - }) - ); - } - //await all jobs to exist - await Promise.all(work); - - if (loopid !== this.currentLoop) return; - - work.length = 0; - for (const _job of this.jobs.values()) { - const job = _job as CanCancelJob; - if (job.progress === undefined) { - work.push( - JobsClient.getJob(this._instance!, job.id).then(progressedjob => { - if (loopid !== this.currentLoop) return; - if (progressedjob.code === StatusCode.OK) { - job.progress = progressedjob.payload!.progress; - } else { - this.errors.push(progressedjob.error!); - } - }) - ); - } - - work.push( - this.canCancel(job, this.errors).then(canCancel => { - if (loopid !== this.currentLoop) return; - job.canCancel = canCancel; - }) - ); - } - - //populate fields on jobs - await Promise.all(work); - - if (loopid !== this.currentLoop) return; - - if (this.fastmodecount && loopid === this.currentLoop) { - window.setTimeout(() => this.loop(loopid), 800); - this.fastmodecount--; - console.log( - `JobsController will remain in fastmode for ${this.fastmodecount} cycles` - ); - } else { - window.setTimeout( - () => this.loop(loopid), - (value.payload!.length - ? (configOptions.jobpollactive.value as number) - : (configOptions.jobpollinactive.value as number)) * 1000 - ); - } - } else { - if (value.error!.code === ErrorCode.JOB_INSTANCE_OFFLINE) { - this.setInstance(undefined); - } - this.errors.push(value.error!); - window.setTimeout(() => this.loop(loopid), 10000); - } - - this.emit("jobsLoaded"); - }) - .catch(reason => { - console.error(reason); - }); - } - - private async canCancel( - job: Readonly, - errors: InternalError[] - ): Promise { - //shouldnt really occur in normal conditions but this is a safety anyways - if (this._instance === undefined) return false; - - //we dont need to reevalutate stuff that we already know - if (job.canCancel !== undefined) return job.canCancel; - - if (job.cancelRightsType === undefined) { - return true; - } - - switch (job.cancelRightsType as RightsType) { - case RightsType.Administration: { - const userInfo = await UserClient.getCurrentUser(); - if (userInfo.code === StatusCode.OK) { - const required = job.cancelRight as AdministrationRights; - return !!(userInfo.payload!.administrationRights! & required); - } else { - errors.push(userInfo.error!); - return false; - } - } - case RightsType.InstanceManager: { - const userInfo = await UserClient.getCurrentUser(); - if (userInfo.code === StatusCode.OK) { - const required = job.cancelRight as InstanceManagerRights; - return !!(userInfo.payload!.instanceManagerRights! & required); - } else { - errors.push(userInfo.error!); - return false; - } - } - case RightsType.Byond: { - const instanceUser = await InstanceUserClient.getCurrentInstanceUser( - this._instance - ); - if (instanceUser.code === StatusCode.OK) { - const required = job.cancelRight as ByondRights; - return !!(instanceUser.payload!.byondRights! & required); - } else { - errors.push(instanceUser.error!); - return false; - } - } - case RightsType.ChatBots: { - const instanceUser = await InstanceUserClient.getCurrentInstanceUser( - this._instance - ); - if (instanceUser.code === StatusCode.OK) { - const required = job.cancelRight as ChatBotRights; - return !!(instanceUser.payload!.chatBotRights! & required); - } else { - errors.push(instanceUser.error!); - return false; - } - } - case RightsType.Configuration: { - const instanceUser = await InstanceUserClient.getCurrentInstanceUser( - this._instance - ); - if (instanceUser.code === StatusCode.OK) { - const required = job.cancelRight as ConfigurationRights; - return !!(instanceUser.payload!.configurationRights! & required); - } else { - errors.push(instanceUser.error!); - return false; - } - } - case RightsType.DreamDaemon: { - const instanceUser = await InstanceUserClient.getCurrentInstanceUser( - this._instance - ); - if (instanceUser.code === StatusCode.OK) { - const required = job.cancelRight as DreamDaemonRights; - return !!(instanceUser.payload!.dreamDaemonRights! & required); - } else { - errors.push(instanceUser.error!); - return false; - } - } - case RightsType.DreamMaker: { - const instanceUser = await InstanceUserClient.getCurrentInstanceUser( - this._instance - ); - if (instanceUser.code === StatusCode.OK) { - const required = job.cancelRight as DreamMakerRights; - return !!(instanceUser.payload!.dreamMakerRights! & required); - } else { - errors.push(instanceUser.error!); - return false; - } - } - case RightsType.InstanceUser: { - const instanceUser = await InstanceUserClient.getCurrentInstanceUser( - this._instance - ); - if (instanceUser.code === StatusCode.OK) { - const required = job.cancelRight as InstanceUserRights; - return !!(instanceUser.payload!.instanceUserRights! & required); - } else { - errors.push(instanceUser.error!); - return false; - } - } - case RightsType.Repository: { - const instanceUser = await InstanceUserClient.getCurrentInstanceUser( - this._instance - ); - if (instanceUser.code === StatusCode.OK) { - const required = job.cancelRight as RepositoryRights; - return !!(instanceUser.payload!.repositoryRights! & required); - } else { - errors.push(instanceUser.error!); - return false; - } - } - } - } - - public async cancelOrClear( - jobid: number, - onError: (error: InternalError) => void - ): Promise { - const job = this.jobs.get(jobid); - - //no we cant cancel jobs we arent aware of yet - if (!job) return false; - - //just clear out the job - if (job.stoppedAt) { - this.jobs.delete(jobid); - return true; - } else { - if (this._instance === undefined) { - onError( - new InternalError(ErrorCode.APP_FAIL, { - jsError: new Error("No instance selected during deletion of a job") - }) - ); - return false; - } else { - const deleteInfo = await JobsClient.deleteJob(this._instance, jobid); - if (deleteInfo.code === StatusCode.OK) { - return true; - } else { - onError(deleteInfo.error!); - return false; - } - } - } - } -})(); diff --git a/src/Tgstation.Server.Host/ClientApp/src/ApiClient/util/LoginHooks.ts b/src/Tgstation.Server.Host/ClientApp/src/ApiClient/util/LoginHooks.ts deleted file mode 100644 index bdcbbabcef..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/ApiClient/util/LoginHooks.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { TypedEmitter } from "tiny-typed-emitter"; - -import { Components } from "../generatedcode/_generated"; - -interface IEvents { - //tasks once the user is fully logged in - loginSuccess: (token: Components.Schemas.Token) => void; -} - -class LoginHooks extends TypedEmitter { - private promiseHooks: Set<(token: Components.Schemas.Token) => Promise> = new Set(); - - public runHooks(token: Components.Schemas.Token) { - console.log("Running login hooks"); - let i = 0; - const work: Array> = []; - for (const hook of this.promiseHooks) { - const id = i; - console.log(`Running hook ${hook.name}(${id})`); - work.push( - new Promise((resolve, reject) => { - hook(token) - .then(() => { - console.log(`Done hook ${hook.name}(${id})`); - resolve(); - }) - .catch(err => { - console.error(`Error running hook ${hook.name}(${id}): `, err); - reject(err); - }); - }) - ); - i++; - } - Promise.all(work) - .then(() => { - console.log("Running post login event"); - this.emit("loginSuccess", token); - }) - .catch(() => console.error("An error occured while running login hooks")); - } - - public addHook(hook: (token: Components.Schemas.Token) => Promise): void { - this.promiseHooks.add(hook); - } - - public removeHook(hook: (token: Components.Schemas.Token) => Promise): void { - this.promiseHooks.delete(hook); - } -} - -export default new LoginHooks(); diff --git a/src/Tgstation.Server.Host/ClientApp/src/ApiClient/util/config.ts b/src/Tgstation.Server.Host/ClientApp/src/ApiClient/util/config.ts deleted file mode 100644 index 9fee34ea17..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/ApiClient/util/config.ts +++ /dev/null @@ -1,71 +0,0 @@ -export type ConfigValue = number | string | boolean; - -export type ConfigOption = BaseConfigOption & - (NumConfigOption | StrConfigOption | PwdConfigOption | BoolConfigOption | EnumConfigOption); - -export interface BaseConfigOption { - id: string; -} - -export interface NumConfigOption extends BaseConfigOption { - type: "num"; - value: number; -} -export interface StrConfigOption extends BaseConfigOption { - type: "str"; - value: string; -} -export interface PwdConfigOption extends BaseConfigOption { - type: "pwd"; - value: string; -} -export interface BoolConfigOption extends BaseConfigOption { - type: "bool"; - value: boolean; -} -export interface EnumConfigOption extends BaseConfigOption { - type: "enum"; - possibleValues: Record; - value: string; -} - -export type ConfigMap = { - [key: string]: ConfigOption; -}; - -export enum jobsWidgetOptions { - ALWAYS = "always", - AUTO = "auto", - NEVER = "never" -} - -const configOptions: ConfigMap = { - githubtoken: { - id: "config.githubtoken", - type: "pwd", - value: "" - }, - apipath: { - id: "config.apipath", - type: "str", - value: "/" - }, - jobpollinactive: { - id: "config.jobpollinactive", - type: "num", - value: 15 - }, - jobpollactive: { - id: "config.jobpollactive", - type: "num", - value: 5 - }, - jobswidgetdisplay: { - id: "config.jobswidgetdisplay", - type: "enum", - possibleValues: jobsWidgetOptions, - value: jobsWidgetOptions.AUTO - } -}; - -export default configOptions; diff --git a/src/Tgstation.Server.Host/ClientApp/src/App.css b/src/Tgstation.Server.Host/ClientApp/src/App.css deleted file mode 100644 index 66256ae0fc..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/App.css +++ /dev/null @@ -1,29 +0,0 @@ -.App { - background-size: 50%; - background: #1e1e1e url(logo.svg) no-repeat center; - position: absolute; - width: 100%; - top: 0; - bottom: 0; - display: grid; -} - -.App-error { - color: red; - font-size: 150%; - margin: auto; -} - -.App-main { - display: grid; -} - -.Root { - overflow: hidden; - display: grid; - grid-template-rows: 9% auto; -} - -.Root-login { - display: grid; -} diff --git a/src/Tgstation.Server.Host/ClientApp/src/App.tsx b/src/Tgstation.Server.Host/ClientApp/src/App.tsx deleted file mode 100644 index 437d2bf573..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/App.tsx +++ /dev/null @@ -1,156 +0,0 @@ -import "./App.css"; - -import * as React from "react"; -import Container from "react-bootstrap/Container"; -import { hot } from "react-hot-loader/root"; -import { IntlProvider } from "react-intl"; -import { BrowserRouter } from "react-router-dom"; - -import { ErrorCode } from "./ApiClient/models/InternalComms/InternalError"; -import { StatusCode } from "./ApiClient/models/InternalComms/InternalStatus"; -import ServerClient from "./ApiClient/ServerClient"; -import UserClient from "./ApiClient/UserClient"; -import configOptions from "./ApiClient/util/config"; -import LoginHooks from "./ApiClient/util/LoginHooks"; -import AppNavbar from "./components/AppNavbar"; -import ErrorBoundary from "./components/utils/ErrorBoundary"; -import JobsList from "./components/utils/JobsList"; -import Loading from "./components/utils/Loading"; -import IAppProps from "./IAppProps"; -import Router from "./Router"; -import ITranslation from "./translations/ITranslation"; -import ITranslationFactory from "./translations/ITranslationFactory"; -import TranslationFactory from "./translations/TranslationFactory"; -import { getSavedCreds } from "./utils/misc"; - -interface IState { - translation?: ITranslation; - translationError?: string; - loggedIn: boolean; - loading: boolean; - autoLogin: boolean; - passdownCat?: { name: string; key: string }; -} - -class App extends React.Component { - private readonly translationFactory: ITranslationFactory; - - public constructor(props: IAppProps) { - super(props); - - this.translationFactory = this.props.translationFactory || new TranslationFactory(); - - this.state = { - loggedIn: false, - loading: true, - autoLogin: false - }; - } - public async componentDidMount(): Promise { - LoginHooks.on("loginSuccess", () => { - console.log("Logging in"); - - void UserClient.getCurrentUser(); //preload the user, we dont particularly care about the content, just that its preloaded - this.setState({ - loggedIn: true, - loading: false, - autoLogin: false - }); - }); - ServerClient.on("logout", () => { - this.setState({ - loggedIn: false - }); - }); - - await this.loadTranslation(); - await ServerClient.initApi(); - - const [usr, pwd] = getSavedCreds() || [undefined, undefined]; - - const autoLogin = !!(usr && pwd); - if (autoLogin) console.log("Logging in with saved credentials"); - - this.setState({ - loading: false, - autoLogin: autoLogin - }); - if (autoLogin) { - const res = await ServerClient.login({ userName: usr!, password: pwd! }); - if (res.code == StatusCode.ERROR) { - this.setState({ - autoLogin: false - }); - if ( - res.error?.code == ErrorCode.LOGIN_DISABLED || - res.error?.code == ErrorCode.LOGIN_FAIL - ) { - try { - window.localStorage.removeItem("username"); - window.localStorage.removeItem("password"); - } catch (e) { - // eslint-disable-next-line @typescript-eslint/no-empty-function - (() => {})(); //noop - } - } - } - } - } - - public render(): React.ReactNode { - if (this.state.translationError != null) - return

{this.state.translationError}

; - - if (this.state.translation == null) return Loading translations...; - return ( - - - - - - {this.state.loading ? ( - - ) : this.state.autoLogin && !this.state.loggedIn ? ( - - ) : ( - { - this.setState({ - passdownCat: { - name: cat, - key: Math.random().toString() - } - }); - }} - /> - )} - - - - - - ); - } - - private async loadTranslation(): Promise { - console.time("LoadTranslations"); - try { - const translation = await this.translationFactory.loadTranslation(this.props.locale); - this.setState({ - translation - }); - } catch (error) { - this.setState({ - translationError: JSON.stringify(error) || "An unknown error occurred" - }); - - return; - } - console.timeEnd("LoadTranslations"); - } -} - -export default hot(App); diff --git a/src/Tgstation.Server.Host/ClientApp/src/IAppProps.ts b/src/Tgstation.Server.Host/ClientApp/src/IAppProps.ts deleted file mode 100644 index 88728bcf5e..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/IAppProps.ts +++ /dev/null @@ -1,8 +0,0 @@ -import ITranslationFactory from "./translations/ITranslationFactory"; - -interface IAppProps { - readonly locale: string; - readonly translationFactory?: ITranslationFactory; -} - -export default IAppProps; diff --git a/src/Tgstation.Server.Host/ClientApp/src/Router.tsx b/src/Tgstation.Server.Host/ClientApp/src/Router.tsx deleted file mode 100644 index 984731e49c..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/Router.tsx +++ /dev/null @@ -1,129 +0,0 @@ -import loadable, { LoadableComponent } from "@loadable/component"; -import { Component, ReactNode } from "react"; -import * as React from "react"; -import { FormattedMessage } from "react-intl"; -import { RouteComponentProps } from "react-router"; -import { Route, Switch, withRouter } from "react-router-dom"; - -import AccessDenied from "./components/utils/AccessDenied"; -import ErrorBoundary from "./components/utils/ErrorBoundary"; -import Loading from "./components/utils/Loading"; -import Reload from "./components/utils/Reload"; -import Login from "./components/views/Login"; -import { matchesPath } from "./utils/misc"; -import RouteController from "./utils/RouteController"; -import { AppRoute } from "./utils/routes"; - -interface IState { - loading: boolean; - routes: Array; - components: Map>; -} -interface IProps extends RouteComponentProps { - loggedIn: boolean; - selectCategory: (category: string) => void; -} - -const LoadSpin = (page: string) => ( - - - -); - -const NotFound = loadable(() => import("./components/views/NotFound"), { - fallback: LoadSpin("loading.page.notfound") -}); - -export default withRouter( - class Router extends Component { - public constructor(props: IProps) { - super(props); - - const components = new Map>(); - - const routes = RouteController.getImmediateRoutes(false); - routes.forEach(route => { - components.set( - route.name, - //*should* always be a react component - // eslint-disable-next-line @typescript-eslint/no-unsafe-return - loadable(() => import(`./components/views/${route.file}`), { - fallback: LoadSpin(route.name) - }) - ); - }); - - this.state = { - loading: false, - routes: [], - components: components - }; - } - - public async componentDidMount() { - RouteController.on("refreshAll", routes => { - this.setState({ - routes - }); - }); - - this.setState({ - routes: await RouteController.getRoutes(false) - }); - - this.props.history.listen(location => { - void this.listener(location.pathname); - }); - await this.listener(this.props.location.pathname); - } - - private async listener(location: string) { - const routes = await RouteController.getRoutes(false); - for (const route of routes) { - if (route.category && route.navbarLoose && matchesPath(location, route.route)) { - this.props.selectCategory(route.category); - break; - } - } - } - - public render(): ReactNode { - return ( - - -
- - {this.state.routes.map(route => { - if (!route.loginless && !this.props.loggedIn) return; - - return ( - { - let Comp; - - if (!route.cachedAuth) { - Comp = AccessDenied; - } else { - Comp = this.state.components.get(route.name)!; - } - - //@ts-expect-error //i cant for the life of me make this shit work so it has to stay like this. - return ; - }} - /> - ); - })} - - {this.props.loggedIn ? : } - - -
-
-
- ); - } - } -); diff --git a/src/Tgstation.Server.Host/ClientApp/src/components/AppNavbar.tsx b/src/Tgstation.Server.Host/ClientApp/src/components/AppNavbar.tsx deleted file mode 100644 index e4d617dfb0..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/components/AppNavbar.tsx +++ /dev/null @@ -1,422 +0,0 @@ -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import * as React from "react"; -import Button from "react-bootstrap/Button"; -import Dropdown from "react-bootstrap/Dropdown"; -import Nav from "react-bootstrap/Nav"; -import Navbar from "react-bootstrap/Navbar"; -import { FormattedMessage } from "react-intl"; -import { RouteComponentProps, withRouter } from "react-router"; -import CSSTransition from "react-transition-group/CSSTransition"; - -import { Components } from "../ApiClient/generatedcode/_generated"; -import InternalError, { GenericErrors } from "../ApiClient/models/InternalComms/InternalError"; -import ServerClient, { ServerInfoErrors } from "../ApiClient/ServerClient"; -import UserClient from "../ApiClient/UserClient"; -import LoginHooks from "../ApiClient/util/LoginHooks"; -import { matchesPath } from "../utils/misc"; -import RouteController from "../utils/RouteController"; -import { AppCategories, AppRoute, AppRoutes } from "../utils/routes"; -import ErrorAlert from "./utils/ErrorAlert"; - -interface IProps extends RouteComponentProps { - category?: { - name: string; - key: string; - }; -} - -interface IState { - currentUser?: Components.Schemas.User; - serverInformation?: Components.Schemas.ServerInformation; - userNameError?: InternalError; - serverInfoError?: InternalError; - loggedIn: boolean; - //so we dont actually use the routes but it allows us to make react update the component - routes: AppRoute[]; - categories: AppCategories; - focusedCategory: string; - focusTimer?: number; -} - -export default withRouter( - class AppNavbar extends React.Component { - public constructor(props: IProps) { - super(props); - this.logoutClick = this.logoutClick.bind(this); - this.loadServerInformation = this.loadServerInformation.bind(this); - this.loadUserInformation = this.loadUserInformation.bind(this); - - this.state = { - loggedIn: false, - routes: [], - categories: RouteController.getCategories(), - focusedCategory: this.props.category?.name || "" - }; - } - - //mamamia, memory leaks go brrrrrrrrrrrr dont they? - //well you see, this component never gets normally unloaded so i dont give a fuck! - public async componentDidMount(): Promise { - LoginHooks.addHook(this.loadServerInformation); - ServerClient.on("loadServerInfo", serverInfo => { - this.setState({ - serverInformation: serverInfo.payload - }); - }); - - LoginHooks.addHook(this.loadUserInformation); - UserClient.on("loadUserInfo", user => { - this.setState({ - currentUser: user.payload - }); - }); - - LoginHooks.on("loginSuccess", () => { - this.setState({ - loggedIn: true - }); - }); - ServerClient.on("logout", () => { - this.setState({ - loggedIn: false - }); - }); - - this.setState({ - routes: await RouteController.getRoutes() - }); - - RouteController.on("refresh", routes => { - this.setState({ - routes - }); - }); - } - - public componentDidUpdate(prevProps: Readonly) { - if ( - this.props.category !== undefined && - this.props.category.key !== prevProps.category?.key - ) { - this.setState({ - focusedCategory: this.props.category.name - }); - } - } - - public render(): React.ReactNode { - return ( - - - { - this.props.history.push( - AppRoutes.home.link || AppRoutes.home.route, - { - reload: true - } - ); - }} - className="mr-auto"> - {this.renderVersion()} - - - - - {this.renderUser()} - - - {this.state.serverInfoError ? ( - - ) : ( - "" - )} - {this.state.userNameError ? ( - - ) : ( - "" - )} - - ); - } - - private renderVersion(): React.ReactNode { - if (!this.state.loggedIn) { - return ; - } - if (this.state.serverInfoError) - return ( -
-
- -
-
- -
-
- ); - if (this.state.serverInformation) - return ( - - - {" v"} - {this.state.serverInformation.version!} - - ); - - return "loading"; //TODO: add a spinner; - } - - private renderUser(): React.ReactNode { - if (!this.state.loggedIn) - return ( - - ); - - return ( - - - - - { - this.props.history.push( - AppRoutes.config.link || AppRoutes.config.route, - { reload: true } - ); - }}> - - - {AppRoutes.passwd.cachedAuth ? ( - { - this.props.history.push( - AppRoutes.passwd.link || AppRoutes.passwd.route, - { reload: true } - ); - }}> - - - ) : ( - "" - )} - { - ServerClient.emit("purgeCache"); - }}> - - - { - this.props.history.replace(this.props.location.pathname, { - reload: true - }); - }}> - - - - - - - - - ); - } - - private logoutClick(): void { - ServerClient.logout(); - } - - private async loadServerInformation(): Promise { - const info = await ServerClient.getServerInfo(); - this.setState({ - serverInformation: info.payload, - serverInfoError: info.error - }); - } - - private async loadUserInformation(): Promise { - const response = await UserClient.getCurrentUser(); - this.setState({ - currentUser: response.payload, - userNameError: response.error - }); - } - } -); diff --git a/src/Tgstation.Server.Host/ClientApp/src/components/utils/AccessDenied.tsx b/src/Tgstation.Server.Host/ClientApp/src/components/utils/AccessDenied.tsx deleted file mode 100644 index f5f44495f8..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/components/utils/AccessDenied.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import React, { ReactNode } from "react"; -import Alert from "react-bootstrap/Alert"; -import Button from "react-bootstrap/Button"; -import { FormattedMessage } from "react-intl"; -import { RouteComponentProps, withRouter } from "react-router"; - -interface IProps extends RouteComponentProps {} - -interface IState { - auth: boolean; -} - -class AccessDenied extends React.Component { - public render(): ReactNode { - const goBack = () => { - this.props.history.goBack(); - }; - return ( - - -
- - -
- ); - } -} - -export default withRouter(AccessDenied); diff --git a/src/Tgstation.Server.Host/ClientApp/src/components/utils/ErrorAlert.tsx b/src/Tgstation.Server.Host/ClientApp/src/components/utils/ErrorAlert.tsx deleted file mode 100644 index 86a28bec1d..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/components/utils/ErrorAlert.tsx +++ /dev/null @@ -1,91 +0,0 @@ -import ClickToSelect from "@mapbox/react-click-to-select"; -import React, { Component, ReactNode } from "react"; -import Alert from "react-bootstrap/Alert"; -import Button from "react-bootstrap/Button"; -import Modal from "react-bootstrap/Modal"; -import { FormattedMessage } from "react-intl"; - -import InternalError, { - DescType, - ErrorCode -} from "../../ApiClient/models/InternalComms/InternalError"; - -interface IProps { - error: InternalError | undefined; - onClose?: () => void; -} - -interface IState { - popup: boolean; -} - -export default class ErrorAlert extends Component { - public constructor(props: IProps) { - super(props); - this.state = { - popup: false - }; - } - public render(): ReactNode { - if (!this.props.error) { - return ""; - } - - const handleClose = () => this.setState({ popup: false }); - const handleOpen = () => this.setState({ popup: true }); - - return ( - - -
- - - - - - - - - - - {this.props.error.desc?.type == DescType.LOCALE ? ( - - ) : this.props.error.desc?.desc ? ( - this.props.error.desc.desc - ) : ( - "" - )} -
- - - {`Control Panel Version: ${VERSION} -Control Panel Mode: ${MODE} -API Version: ${API_VERSION} - -Error Code: ${this.props.error.code} -Error Description: ${this.props.error.desc ? this.props.error.desc.desc : "No description"} - -Additional Information: -${this.props.error.extendedInfo}`.replace(/\\/g, "\\\\")} - - -
- - - - - - -
-
- ); - } -} diff --git a/src/Tgstation.Server.Host/ClientApp/src/components/utils/ErrorBoundary.tsx b/src/Tgstation.Server.Host/ClientApp/src/components/utils/ErrorBoundary.tsx deleted file mode 100644 index 79315c3898..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/components/utils/ErrorBoundary.tsx +++ /dev/null @@ -1,62 +0,0 @@ -import React from "react"; -import Card from "react-bootstrap/Card"; -import { FormattedMessage } from "react-intl"; -import { RouteComponentProps, withRouter } from "react-router"; - -interface IProps extends RouteComponentProps {} -interface IState { - error?: Error; - errorInfo?: React.ErrorInfo; -} - -class ErrorBoundary extends React.Component { - public constructor(props: IProps) { - super(props); - this.state = {}; - } - - public componentDidUpdate(prevProps: IProps): void { - if (this.props.location.key !== prevProps.location.key) { - this.setState({ - error: undefined, - errorInfo: undefined - }); - } - } - - public componentDidCatch(error: Error, errorInfo: React.ErrorInfo): void { - this.setState({ - error, - errorInfo - }); - } - - public render(): React.ReactNode { - if (this.state.error) { - return ( - - - - - - - {this.state.error.name}: {this.state.error.message} - - - - {`Control Panel Version: ${VERSION}\nControl Panel Mode: ${MODE}\nStack trace: ${ - this.state.errorInfo?.componentStack || - "Unable to get stack info" - }`} - - - - - ); - } else { - return this.props.children; - } - } -} - -export default withRouter(ErrorBoundary); diff --git a/src/Tgstation.Server.Host/ClientApp/src/components/utils/JobCard.tsx b/src/Tgstation.Server.Host/ClientApp/src/components/utils/JobCard.tsx deleted file mode 100644 index 46103f2c12..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/components/utils/JobCard.tsx +++ /dev/null @@ -1,173 +0,0 @@ -import React, { ReactNode } from "react"; -import OverlayTrigger from "react-bootstrap/OverlayTrigger"; -import ProgressBar from "react-bootstrap/ProgressBar"; -import Toast from "react-bootstrap/Toast"; -import ToastBody from "react-bootstrap/ToastBody"; -import ToastHeader from "react-bootstrap/ToastHeader"; -import Tooltip from "react-bootstrap/Tooltip"; -import { FormattedMessage, FormattedRelativeTime } from "react-intl"; - -import { ErrorCode as TGSErrorCode } from "../../ApiClient/generatedcode/_enums"; -import { CanCancelJob } from "../../ApiClient/util/JobsController"; - -interface IState {} -interface IProps { - job: CanCancelJob; - width?: string; - onClose: (job: CanCancelJob) => void; -} - -export default class JobCard extends React.Component { - public render(): ReactNode { - const job = this.props.job; - const createddate = new Date(job.startedAt!); - const createddiff = (createddate.getTime() - Date.now()) / 1000; - const variant = - job.errorCode !== undefined || job.exceptionDetails !== undefined - ? "danger" - : job.cancelled - ? "warning" - : job.stoppedAt - ? "success" - : "info"; - - return ( - { - this.props.onClose(job); - }}> - - #{job.id}: {job.description} - - - {/*STARTED AT*/} - - - {createddate.toLocaleString()} - - }> - {({ ref, ...triggerHandler }) => ( - }> - - - )} - -
- {/*CREATED BY*/} - - - - {job.startedBy!.id} - - }> - {({ ref, ...triggerHandler }) => ( - } {...triggerHandler}> - {job.startedBy!.name} - - )} - -
-
- {/*STOPPED AT*/} - {job.stoppedAt ? ( - - - - {createddate.toLocaleString()} - - }> - {({ ref, ...triggerHandler }) => ( - }> - - - )} - -
-
- ) : ( - "" - )} - {/*STOPPED BY*/} - {job.cancelledBy ? ( - - - - - {job.startedBy!.id} - - }> - {({ ref, ...triggerHandler }) => ( - } - {...triggerHandler}> - {job.cancelledBy!.name} - - )} - -
-
- ) : ( - "" - )} - {(job.stoppedAt || job.cancelledBy) && - (job.errorCode !== undefined || job.exceptionDetails !== undefined) ? ( -
- ) : ( - "" - )} - {/*ERROR*/} - {job.errorCode !== undefined || job.exceptionDetails !== undefined ? ( - - - ( - {job.errorCode !== undefined - ? TGSErrorCode[job.errorCode] - : "NoCode"} - ): {job.exceptionDetails} - -
-
- ) : ( - "" - )} - -
-
- ); - } -} diff --git a/src/Tgstation.Server.Host/ClientApp/src/components/utils/JobsList.tsx b/src/Tgstation.Server.Host/ClientApp/src/components/utils/JobsList.tsx deleted file mode 100644 index 1c0a9d782a..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/components/utils/JobsList.tsx +++ /dev/null @@ -1,187 +0,0 @@ -import React, { ReactNode } from "react"; -import { FormattedMessage } from "react-intl"; -import { Rnd } from "react-rnd"; - -import InternalError, { ErrorCode } from "../../ApiClient/models/InternalComms/InternalError"; -import configOptions, { jobsWidgetOptions } from "../../ApiClient/util/config"; -import JobsController, { CanCancelJob } from "../../ApiClient/util/JobsController"; -import { AppCategories } from "../../utils/routes"; -import ErrorAlert from "./ErrorAlert"; -import JobCard from "./JobCard"; -import Loading from "./Loading"; - -interface IProps { - width?: string; - widget: boolean; -} - -interface IState { - jobs: Map; - errors: InternalError[]; - ownerrors: Array | undefined>; - loading: boolean; -} - -export default class JobsList extends React.Component { - public static defaultProps = { - widget: true - }; - - private widgetRef = React.createRef(); - - public constructor(props: IProps) { - super(props); - - this.handleUpdate = this.handleUpdate.bind(this); - this.onCancelorClose = this.onCancelorClose.bind(this); - - this.state = { - jobs: new Map(), - errors: [], - ownerrors: [], - loading: true - }; - } - - private addError(error: InternalError): void { - this.setState(prevState => { - const ownerrors = Array.from(prevState.ownerrors); - ownerrors.push(error); - if (this.widgetRef.current) { - this.widgetRef.current.scrollTop = 0; - } - return { - ownerrors - }; - }); - } - - public componentDidMount(): void { - JobsController.restartLoop(); - JobsController.on("jobsLoaded", this.handleUpdate); - } - - public componentWillUnmount(): void { - JobsController.removeListener("jobsLoaded", this.handleUpdate); - } - - public handleUpdate(): void { - this.setState({ - jobs: JobsController.jobs, - errors: JobsController.errors, - loading: false - }); - } - - private async onCancelorClose(job: CanCancelJob) { - const cancelling = !job.stoppedAt; - const status = await JobsController.cancelOrClear(job.id, error => this.addError(error)); - - if (!status) { - return; - } - //Jobs changed, might as well refresh - if (cancelling) { - JobsController.fastmode = 5; - } else { - JobsController.restartLoop(); - } - } - - public render(): ReactNode { - if (AppCategories.instance.data?.instanceid === undefined) return ""; - - if (!this.props.widget) return this.nested(); - return ( -
- -
-
- -
- {this.nested()} -
-
-
- ); - } - - private nested(): ReactNode { - return ( -
- {this.state.loading ? : ""} - {this.state.ownerrors.map((err, index) => { - if (!err) return; - return ( - - this.setState(prev => { - const newarr = Array.from(prev.ownerrors); - newarr[index] = undefined; - return { - ownerrors: newarr - }; - }) - } - /> - ); - })} - {this.state.errors.map((error, index) => { - return ( -
- -
- ); - })} - {Array.from(this.state.jobs, ([, job]) => job) - .sort((a, b) => b.id - a.id) - .map(job => ( - - ))} -
- ); - } -} diff --git a/src/Tgstation.Server.Host/ClientApp/src/components/utils/Loading.tsx b/src/Tgstation.Server.Host/ClientApp/src/components/utils/Loading.tsx deleted file mode 100644 index 8ee1a04b07..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/components/utils/Loading.tsx +++ /dev/null @@ -1,68 +0,0 @@ -import React, { ReactNode } from "react"; -import Spinner, { SpinnerProps } from "react-bootstrap/Spinner"; -import { FormattedMessage } from "react-intl"; -import CSSTransition from "react-transition-group/CSSTransition"; -import TransitionGroup from "react-transition-group/TransitionGroup"; - -type IProps = SpinnerProps & { - animation: "border" | "grow"; - center: boolean; - width: number; - widthUnit: string; - className?: string; - text?: string; -}; - -interface IState {} - -export default class Loading extends React.Component { - public static defaultProps = { - animation: "border", - width: "50", - widthUnit: "vmin", - center: true - }; - public constructor(props: IProps) { - super(props); - } - - public render(): ReactNode { - const { - variant, - animation, - center, - className, - width, - widthUnit, - text, - children, - ...otherprops - } = this.props; - const styles: React.CSSProperties = { - width: `${width}${widthUnit}`, - height: `${width}${widthUnit}` - } as React.CSSProperties; - return ( - - { - node.addEventListener("transitionend", done, false); - }}> -
- - {text ? : ""} - {children} -
-
-
- ); - } -} diff --git a/src/Tgstation.Server.Host/ClientApp/src/components/utils/Reload.tsx b/src/Tgstation.Server.Host/ClientApp/src/components/utils/Reload.tsx deleted file mode 100644 index f9af4fe8de..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/components/utils/Reload.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import { Component, ReactNode } from "react"; -import { RouteComponentProps, withRouter } from "react-router"; - -interface IProps - extends RouteComponentProps< - Record, - { - statusCode?: number; - }, - { reload?: boolean } - > {} -interface IState { - clear: boolean; -} - -class Reload extends Component { - public constructor(props: IProps) { - super(props); - this.state = { - clear: false - }; - } - public componentDidUpdate(prevProps: IProps): void { - if (this.state.clear) { - this.setState({ - clear: false - }); - return; - } - if ( - prevProps.match.path == this.props.match.path && - prevProps.location.key != this.props.location.key && - this.props.location.state?.reload - ) { - this.setState({ - clear: true - }); - } - } - - public render(): ReactNode { - return this.state.clear ? "" : this.props.children; - } -} - -export default withRouter(Reload); diff --git a/src/Tgstation.Server.Host/ClientApp/src/components/views/Admin/Logs.tsx b/src/Tgstation.Server.Host/ClientApp/src/components/views/Admin/Logs.tsx deleted file mode 100644 index c8e4ac4441..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/components/views/Admin/Logs.tsx +++ /dev/null @@ -1,278 +0,0 @@ -import React, { Component } from "react"; -import Button from "react-bootstrap/Button"; -import OverlayTrigger from "react-bootstrap/OverlayTrigger"; -import Table from "react-bootstrap/Table"; -import Tooltip from "react-bootstrap/Tooltip"; -import { FormattedMessage, FormattedRelativeTime } from "react-intl"; -import { RouteComponentProps, withRouter } from "react-router"; -import { Link } from "react-router-dom"; - -import AdminClient from "../../../ApiClient/AdminClient"; -import { Components } from "../../../ApiClient/generatedcode/_generated"; -import InternalError, { ErrorCode } from "../../../ApiClient/models/InternalComms/InternalError"; -import { StatusCode } from "../../../ApiClient/models/InternalComms/InternalStatus"; -import { download } from "../../../utils/misc"; -import { AppRoutes } from "../../../utils/routes"; -import ErrorAlert from "../../utils/ErrorAlert"; -import Loading from "../../utils/Loading"; - -interface IProps extends RouteComponentProps<{ name: string | undefined }> {} - -interface LogEntry { - time: string; - content: string; -} - -interface Log { - logFile: Components.Schemas.LogFile; - entries: LogEntry[]; -} - -interface IState { - logs: Components.Schemas.LogFile[]; - viewedLog?: Log; - errors: Array | undefined>; - loading: boolean; -} - -export default withRouter( - class Logs extends Component { - public constructor(props: IProps) { - super(props); - - this.state = { - errors: [], - loading: true, - logs: [] - }; - } - public async componentDidMount(): Promise { - const param = this.props.match.params.name; - if (param) { - const res = await AdminClient.getLog(param); - - switch (res.code) { - case StatusCode.OK: { - const regex = RegExp( - /(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{7}-\d{2}:\d{2}) {2}(.*?)(?=(?:\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{7}-\d{2}:\d{2}))/, - "gs" - ); - let match; - const entries: LogEntry[] = []; - while ((match = regex.exec(atob(res.payload!.content!))) !== null) { - entries.push({ - time: match[1], - content: match[2] - }); - } - this.setState({ - viewedLog: { - logFile: res.payload!, - entries: entries - } - }); - break; - } - case StatusCode.ERROR: { - this.addError(res.error!); - break; - } - } - } - const response = await AdminClient.getLogs(); - - switch (response.code) { - case StatusCode.OK: { - this.setState({ - logs: response.payload! - }); - break; - } - case StatusCode.ERROR: { - this.addError(response.error!); - break; - } - } - this.setState({ - loading: false - }); - } - - private addError(error: InternalError): void { - this.setState(prevState => { - const errors = Array.from(prevState.errors); - errors.push(error); - return { - errors - }; - }); - } - - private async downloadLog(name: string): Promise { - const res = await AdminClient.getLog(name); - switch (res.code) { - case StatusCode.OK: { - download(name, atob(res.payload!.content!)); - break; - } - case StatusCode.ERROR: { - this.addError(res.error!); - break; - } - } - } - - public render(): React.ReactNode { - return ( -
- {this.state.errors.map((err, index) => { - if (!err) return; - return ( - - this.setState(prev => { - const newarr = Array.from(prev.errors); - newarr[index] = undefined; - return { - errors: newarr - }; - }) - } - /> - ); - })} - {this.state.loading ? ( - - ) : this.props.match.params.name && this.state.viewedLog ? ( - -

{this.props.match.params.name}

- - -
- - - - - - - {this.state.viewedLog.entries.map(value => { - return ( - - - - - ); - })} - -
- - - -
{value.time} -
{value.content}
-
-
- ) : ( - - - - - - - - - - - {this.state.logs.map((value, index) => { - const logdate = new Date(value.lastModified); - const logdiff = (logdate.getTime() - Date.now()) / 1000; - - return ( - //yes hello this shouldnt be nullable apparently - - - - - {logdate.toLocaleString()} - - }> - {({ ref, ...triggerHandler }) => ( - - )} - - - - ); - })} - -
# - - - - - -
{index}{value.name} - }> - - - - - -
- )} -
- ); - } - } -); diff --git a/src/Tgstation.Server.Host/ClientApp/src/components/views/Admin/Update.tsx b/src/Tgstation.Server.Host/ClientApp/src/components/views/Admin/Update.tsx deleted file mode 100644 index 70c3db54c6..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/components/views/Admin/Update.tsx +++ /dev/null @@ -1,345 +0,0 @@ -import React, { ChangeEvent, ReactNode } from "react"; -import Button from "react-bootstrap/Button"; -import Col from "react-bootstrap/Col"; -import FormControl from "react-bootstrap/FormControl"; -import InputGroup from "react-bootstrap/InputGroup"; -import OverlayTrigger from "react-bootstrap/OverlayTrigger"; -import Tooltip from "react-bootstrap/Tooltip"; -import { FormattedMessage } from "react-intl"; -import ReactMarkdown from "react-markdown"; -import { RouteComponentProps, withRouter } from "react-router-dom"; - -import AdminClient from "../../../ApiClient/AdminClient"; -import InternalError, { ErrorCode } from "../../../ApiClient/models/InternalComms/InternalError"; -import { StatusCode } from "../../../ApiClient/models/InternalComms/InternalStatus"; -import ServerClient from "../../../ApiClient/ServerClient"; -import GithubClient, { TGSVersion } from "../../../utils/GithubClient"; -import { AppRoutes } from "../../../utils/routes"; -import ErrorAlert from "../../utils/ErrorAlert"; -import Loading from "../../utils/Loading"; - -interface IProps - extends RouteComponentProps<{ - all: string; - }> {} -interface IState { - versions: TGSVersion[]; - errors: Array | undefined>; - loading: boolean; - //option is the numerical representation of the version - selectedOption?: string; - //this is the actual version - selectedVersion?: TGSVersion; - //timer used to delay the user on the release notes page - timer?: number | null; - //seconds left for the release notes page - secondsLeft?: number | null; - //redirect to home page - updating?: boolean; - //manual entry -} - -export default withRouter( - class Update extends React.Component { - public constructor(props: IProps) { - super(props); - - this.loadNotes = this.loadNotes.bind(this); - this.updateServer = this.updateServer.bind(this); - - this.state = { - versions: [], - errors: [], - loading: true - }; - } - - public async componentDidMount(): Promise { - const tasks = []; - tasks.push(this.loadVersions()); - - await Promise.all(tasks); - this.setState({ - loading: false - }); - } - - public componentWillUnmount(): void { - if (this.state.timer) { - window.clearInterval(this.state.timer); - } - } - - private addError(error: InternalError): void { - this.setState(prevState => { - const errors = Array.from(prevState.errors); - errors.push(error); - return { - errors - }; - }); - } - - private async loadVersions(): Promise { - const adminInfo = await AdminClient.getAdminInfo(); - - switch (adminInfo.code) { - case StatusCode.ERROR: { - return this.addError(adminInfo.error!); - } - case StatusCode.OK: { - const url = adminInfo.payload!.trackedRepositoryUrl!; - const matcher = /https?:\/\/(github\.com)\/(.*?)\/(.*)/; - const results = matcher.exec(url); - - if (!results) { - return this.addError( - new InternalError(ErrorCode.APP_FAIL, { - jsError: Error(`Unknown repository url format: ${url}`) - }) - ); - } - - if (results[1] !== "github.com") { - this.setState({ - versions: [ - { - body: "Updates unavailable to non github repos", - version: "Updates unavailable to non github repos", - current: true, - old: true - } - ] - }); - return; - } - - const serverInfo = await ServerClient.getServerInfo(); - switch (serverInfo.code) { - case StatusCode.ERROR: { - return this.addError(serverInfo.error!); - } - case StatusCode.OK: { - const versionInfo = await GithubClient.getVersions({ - owner: results[2], - repo: results[3], - current: serverInfo.payload!.version!, - all: !!this.props.match.params.all - }); - console.log("Version info: ", versionInfo); - switch (versionInfo.code) { - case StatusCode.ERROR: { - return this.addError(adminInfo.error!); - } - case StatusCode.OK: { - this.setState({ - versions: versionInfo.payload! - }); - } - } - } - } - } - } - } - - private loadNotes(): void { - for (const version of this.state.versions) { - if (version.version !== this.state.selectedOption) continue; - - const timer = window.setInterval(() => { - this.setState(prevState => { - if (prevState.secondsLeft === undefined || prevState.secondsLeft === null) - return prevState; - //clear the timer if we are ticking the last tick - if (prevState.secondsLeft === 1) { - window.clearInterval(prevState.timer!); - return { - timer: null, - secondsLeft: null - } as IState; - } - - return { - secondsLeft: prevState.secondsLeft - 1 - } as IState; - }); - }, 1000); - - this.setState({ - selectedVersion: version, - timer: timer, - secondsLeft: 10 - }); - return; - } - } - - private async updateServer(): Promise { - if (!this.state.selectedOption) { - console.error("Attempted to update server to a no version"); - this.setState({ - selectedVersion: undefined - }); - return; - } - const response = await AdminClient.updateServer(this.state.selectedOption); - - switch (response.code) { - case StatusCode.ERROR: { - this.addError(response.error!); - break; - } - case StatusCode.OK: { - ServerClient.autoLogin = false; - // i need that timer to be async - // eslint-disable-next-line @typescript-eslint/no-misused-promises - window.setInterval(async () => { - const response = await ServerClient.getServerInfo(undefined, true); - switch (response.code) { - //we wait until we get an error which means either it rebooted and our creds are bullshit, or we rebooted and the api is different - //in both cases, we should reboot - case StatusCode.ERROR: { - window.location.reload(); - } - } - }, 2000); - this.setState({ - updating: true - }); - } - } - } - - public render(): ReactNode { - if (this.state.updating) { - return ; - } - if (this.state.loading) { - return ; - } - const handleChange = (changeEvent: ChangeEvent) => { - this.setState({ - selectedOption: changeEvent.target.value - }); - }; - - const timing = typeof this.state.secondsLeft === "number"; - return ( - -
- {this.state.errors.map((err, index) => { - if (!err) return; - return ( - - this.setState(prev => { - const newarr = Array.from(prev.errors); - newarr[index] = undefined; - return { - errors: newarr - }; - }) - } - /> - ); - })} -
- {this.state.selectedVersion ? ( - -
- - - - - } - show={timing}> - - -

- -

-
-
- -
- ) : ( -
-

- -

- - {this.state.versions.map((version, index) => { - return ( - - - - - - {version.version} - {version.current ? ( - - ) : ( - "" - )} - {index == 0 ? ( - - ) : ( - "" - )} - - - ); - })} - -
- - -
- )} -
- ); - } - } -); diff --git a/src/Tgstation.Server.Host/ClientApp/src/components/views/Administration.tsx b/src/Tgstation.Server.Host/ClientApp/src/components/views/Administration.tsx deleted file mode 100644 index fa4d73db56..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/components/views/Administration.tsx +++ /dev/null @@ -1,280 +0,0 @@ -import { faLinux } from "@fortawesome/free-brands-svg-icons/faLinux"; -import { faWindows } from "@fortawesome/free-brands-svg-icons/faWindows"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import React, { ReactNode } from "react"; -import Button from "react-bootstrap/Button"; -import Modal from "react-bootstrap/Modal"; -import { FormattedMessage } from "react-intl"; -import { RouteComponentProps } from "react-router"; -import { withRouter } from "react-router-dom"; - -import AdminClient from "../../ApiClient/AdminClient"; -import { AdministrationRights } from "../../ApiClient/generatedcode/_enums"; -import { Components } from "../../ApiClient/generatedcode/_generated"; -import InternalError, { ErrorCode } from "../../ApiClient/models/InternalComms/InternalError"; -import { StatusCode } from "../../ApiClient/models/InternalComms/InternalStatus"; -import ServerClient from "../../ApiClient/ServerClient"; -import UserClient from "../../ApiClient/UserClient"; -import { AppRoutes } from "../../utils/routes"; -import ErrorAlert from "../utils/ErrorAlert"; -import Loading from "../utils/Loading"; - -interface IProps extends RouteComponentProps {} -interface IState { - adminInfo?: Components.Schemas.Administration; - serverInfo?: Components.Schemas.ServerInformation; - error?: InternalError; - busy: boolean; - canReboot: boolean; - canUpdate: boolean; - canLogs: boolean; - showRebootModal?: boolean; -} - -export default withRouter( - class Administration extends React.Component { - public constructor(props: IProps) { - super(props); - this.restart = this.restart.bind(this); - - this.state = { - busy: false, - canReboot: false, - canUpdate: false, - canLogs: false - }; - } - - public async componentDidMount(): Promise { - this.setState({ - busy: true - }); - const tasks = []; - - console.time("DataLoad"); - tasks.push(this.loadAdminInfo()); - tasks.push(this.loadServerInfo()); - tasks.push(this.checkRebootRights()); - tasks.push(this.checkUpdateRights()); - tasks.push(this.checkLogsRights()); - - await Promise.all(tasks); - console.timeEnd("DataLoad"); - this.setState({ - busy: false - }); - } - - private async loadServerInfo() { - console.time("ServerLoad"); - const response = await ServerClient.getServerInfo(); - switch (response.code) { - case StatusCode.ERROR: { - this.setState({ - error: response.error - }); - break; - } - case StatusCode.OK: { - this.setState({ - serverInfo: response.payload - }); - break; - } - } - console.timeEnd("ServerLoad"); - } - - private async loadAdminInfo() { - console.time("AdminLoad"); - const response = await AdminClient.getAdminInfo(); - switch (response.code) { - case StatusCode.ERROR: { - this.setState({ - error: response.error - }); - break; - } - case StatusCode.OK: { - this.setState({ - adminInfo: response.payload - }); - break; - } - } - console.timeEnd("AdminLoad"); - } - - private async checkRebootRights() { - const response = await UserClient.getCurrentUser(); - - if (response.code === StatusCode.OK) { - this.setState({ - canReboot: !!( - response.payload!.administrationRights! & AdministrationRights.RestartHost - ) - }); - } - } - - private async checkUpdateRights() { - const response = await UserClient.getCurrentUser(); - - if (response.code === StatusCode.OK) { - this.setState({ - canUpdate: !!( - response.payload!.administrationRights! & AdministrationRights.ChangeVersion - ) - }); - } - } - - private async checkLogsRights() { - const response = await UserClient.getCurrentUser(); - - if (response.code === StatusCode.OK) { - this.setState({ - canLogs: !!( - response.payload!.administrationRights! & AdministrationRights.DownloadLogs - ) - }); - } - } - - private async restart() { - this.setState({ - showRebootModal: false, - busy: true - }); - console.time("Reboot"); - const response = await AdminClient.restartServer(); - switch (response.code) { - case StatusCode.ERROR: { - this.setState({ - error: response.error - }); - break; - } - case StatusCode.OK: { - window.location.reload(); - } - } - this.setState({ - busy: false - }); - console.timeEnd("Reboot"); - } - - public render(): ReactNode { - if (this.state.busy) { - return ; - } - - const handleClose = () => this.setState({ showRebootModal: false }); - const handleOpen = () => this.setState({ showRebootModal: true }); - - return ( - - this.setState({ error: undefined })} - /> - {this.state.adminInfo && this.state.serverInfo ? ( -
-

- - -

-
- - - {this.state.adminInfo.trackedRepositoryUrl!} - -
-

- - - {this.state.serverInfo.version!} - -

-

- - - {this.state.adminInfo.latestVersion!} - -

-
- - - - - - - - - - - - - - - - - -
- ) : ( - "" - )} -
- ); - } - } -); diff --git a/src/Tgstation.Server.Host/ClientApp/src/components/views/ChangePassword.tsx b/src/Tgstation.Server.Host/ClientApp/src/components/views/ChangePassword.tsx deleted file mode 100644 index 4723c8d73a..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/components/views/ChangePassword.tsx +++ /dev/null @@ -1,261 +0,0 @@ -import React, { ChangeEvent, FormEvent } from "react"; -import Button from "react-bootstrap/Button"; -import Col from "react-bootstrap/Col"; -import Form from "react-bootstrap/Form"; -import { FormattedMessage } from "react-intl"; -import { RouteComponentProps } from "react-router"; -import { withRouter } from "react-router-dom"; - -import { Components } from "../../ApiClient/generatedcode/_generated"; -import InternalError, { ErrorCode } from "../../ApiClient/models/InternalComms/InternalError"; -import { StatusCode } from "../../ApiClient/models/InternalComms/InternalStatus"; -import ServerClient from "../../ApiClient/ServerClient"; -import UserClient from "../../ApiClient/UserClient"; -import CredentialsProvider from "../../ApiClient/util/CredentialsProvider"; -import { getSavedCreds } from "../../utils/misc"; -import ErrorAlert from "../utils/ErrorAlert"; -import Loading from "../utils/Loading"; - -interface IProps extends RouteComponentProps<{ id: string }> {} - -interface IState { - errors: Array | undefined>; - password1: string; - password2: string; - matchError?: boolean; - lengthError?: boolean; - serverInfo?: Components.Schemas.ServerInformation; - loading: boolean; - pwdload?: boolean; - user?: Components.Schemas.User; - currentUser?: boolean; -} - -export default withRouter( - class ChangePassword extends React.Component { - public constructor(props: IProps) { - super(props); - - this.state = { - errors: [], - password1: "", - password2: "", - loading: true - }; - - this.submit = this.submit.bind(this); - } - - public async componentDidMount(): Promise { - const res = await ServerClient.getServerInfo(); - - switch (res.code) { - case StatusCode.ERROR: { - this.addError(res.error!); - break; - } - case StatusCode.OK: { - this.setState({ - serverInfo: res.payload! - }); - break; - } - } - - let id: number | undefined = undefined; - const cuser = await UserClient.getCurrentUser(); - if (cuser.code == StatusCode.OK) { - if (this.props.match.params.id) { - id = parseInt(this.props.match.params.id); - } else { - id = cuser.payload!.id!; - } - if (id === cuser.payload!.id!) { - this.setState({ - currentUser: true - }); - } - } else { - this.setState({ - loading: false - }); - return this.addError(cuser.error!); - } - - const user = await UserClient.getUser(id); - if (user.code == StatusCode.OK) { - this.setState({ - user: user.payload! - }); - } else { - this.addError(user.error!); - } - - this.setState({ - loading: false - }); - } - - private addError(error: InternalError): void { - this.setState(prevState => { - const errors = Array.from(prevState.errors); - errors.push(error); - return { - errors - }; - }); - } - - // noinspection DuplicatedCode - private async submit(event: FormEvent): Promise { - event.preventDefault(); - let err = false; - if (this.state.password1.length < this.state.serverInfo!.minimumPasswordLength) { - err = true; - this.setState({ - lengthError: true - }); - } else { - this.setState({ - lengthError: false - }); - } - if (this.state.password2 !== this.state.password1) { - err = true; - this.setState({ - matchError: true - }); - } else { - this.setState({ - matchError: false - }); - } - if (err) return; - - this.setState({ - pwdload: true - }); - - const res = await UserClient.editUser(this.state.user!.id!, { - password: this.state.password1 - }); - switch (res.code) { - case StatusCode.OK: { - if (this.state.currentUser) { - const [usr, pwd] = getSavedCreds() || [undefined, undefined]; - // noinspection ES6MissingAwait //we just dont care about what happens, it can fail or succeed - void ServerClient.login( - { - userName: CredentialsProvider.credentials!.userName, - password: this.state.password1 - }, - !!(usr && pwd) - ); - } - this.props.history.goBack(); - break; - } - case StatusCode.ERROR: { - this.addError(res.error!); - //we only unset it here because its going to get redirected anyways - this.setState({ - pwdload: false - }); - break; - } - } - } - - public render(): React.ReactNode { - if (this.state.loading) { - return ; - } - if (this.state.pwdload) { - return ; - } - - const handlePwd1Input = (event: ChangeEvent) => - this.setState({ password1: event.target.value }); - const handlePwd2Input = (event: ChangeEvent) => - this.setState({ password2: event.target.value }); - - return ( -
- - {this.state.errors.map((err, index) => { - if (!err) return; - return ( - - this.setState(prev => { - const newarr = Array.from(prev.errors); - newarr[index] = undefined; - return { - errors: newarr - }; - }) - } - /> - ); - })} - {this.state.user ? ( - -

- - {this.state.user.name}({this.state.user.id!}) -

-
- - - - - - - {this.state.lengthError ? ( - - - {this.state.serverInfo!.minimumPasswordLength} - - ) : ( - "" - )} - - - - - - - - - {this.state.matchError ? ( - - ) : ( - "" - )} - - - -
- ) : ( - "" - )} - - - ); - } - } -); diff --git a/src/Tgstation.Server.Host/ClientApp/src/components/views/Configuration.tsx b/src/Tgstation.Server.Host/ClientApp/src/components/views/Configuration.tsx deleted file mode 100644 index 4fd241f5cf..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/components/views/Configuration.tsx +++ /dev/null @@ -1,207 +0,0 @@ -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import React, { ReactNode } from "react"; -import Button from "react-bootstrap/Button"; -import Form from "react-bootstrap/Form"; -import FormControl from "react-bootstrap/FormControl"; -import InputGroup from "react-bootstrap/InputGroup"; -import OverlayTrigger from "react-bootstrap/OverlayTrigger"; -import Tooltip from "react-bootstrap/Tooltip"; -import { FormattedMessage } from "react-intl"; - -import configOptions, { ConfigMap, ConfigOption } from "../../ApiClient/util/config"; -import ConfigController from "../../ApiClient/util/ConfigController"; - -interface IProps {} -interface IState { - values: { [key: string]: ConfigOption }; - //if youre adding some state, make sure it doesnt get sent to be saved -} - -export default class Configuration extends React.Component { - public constructor(props: IProps) { - super(props); - this.save = this.save.bind(this); - - this.state = { - values: {} - }; - } - - private save() { - ConfigController.saveconfig(this.state.values); - this.setState({ - values: {} - }); - } - - public render(): ReactNode { - const config = Object.entries(configOptions); - - return ( - - {config.map(([key, currentVal]) => { - //const persistRef = React.createRef(); - const valueRef = React.createRef(); - const enumRef = React.createRef(); - const value = this.state.values[key] || currentVal; - const reset = () => { - this.setState((prevState: IState) => { - const filtered: ConfigMap = {}; - for (const [innerkey, val] of Object.entries(prevState.values)) { - if (innerkey === key) continue; - filtered[innerkey] = val; - } - return { - values: filtered - }; - }); - }; - - const updateValue = () => { - const obj: ConfigOption = this.state.values[key] || { - ...currentVal - }; - //obj.persist = persistRef.current!.checked; - obj.value = - value.type === "enum" - ? enumRef.current!.selectedOptions[0].value - : value.type === "bool" - ? valueRef.current!.checked - : valueRef.current!.value; - this.setState(prevstate => { - return { - values: { - ...prevstate.values, - [key]: obj - } - }; - }); - }; - - const tooltip = (innerid: string) => { - return ( - - - - ); - }; - - const random = Math.random().toString(); - - return ( - - - {/* - } - type="switch" - custom - onChange={updateValue} - ref={persistRef} - checked={value.persist} - value={''} - /> - */} - - {({ ref, ...triggerHandler }) => ( - - -
}> - -
-
- )} -
-
-
- {value.type === "enum" ? ( - - ) : value.type === "bool" ? ( - - ) : ( - - )} - {this.state.values[key] ? ( - - - - - - ) : ( - "" - )} -
-
- ); - })} - -
- -
- -
-
- ); - } -} diff --git a/src/Tgstation.Server.Host/ClientApp/src/components/views/Home.tsx b/src/Tgstation.Server.Host/ClientApp/src/components/views/Home.tsx deleted file mode 100644 index f1b19926c4..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/components/views/Home.tsx +++ /dev/null @@ -1,85 +0,0 @@ -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import * as React from "react"; -import Card from "react-bootstrap/Card"; -import Col from "react-bootstrap/Col"; -import Row from "react-bootstrap/Row"; -import { FormattedMessage } from "react-intl"; -import { Link } from "react-router-dom"; - -import RouteController from "../../utils/RouteController"; -import { AppRoute, AppRoutes } from "../../utils/routes"; - -interface IProps {} -interface IState { - routes: Array; -} - -export default class Home extends React.Component { - public static readonly Route: string = "/"; - - public constructor(props: IProps) { - super(props); - this.setRoutes = this.setRoutes.bind(this); - - this.state = { - routes: [] - }; - } - - private setRoutes(routes: AppRoute[]) { - this.setState({ routes }); - } - - public async componentDidMount(): Promise { - this.setState({ - routes: await RouteController.getRoutes(false) - }); - RouteController.on("refreshAll", this.setRoutes); - } - - public componentWillUnmount(): void { - RouteController.removeListener("refreshAll", this.setRoutes); - } - - public render(): React.ReactNode { - return ( - - {this.state.routes.map(val => { - //this means it shouldnt be displayed on the home screen - if (!val.homeIcon) return; - - if (val === AppRoutes.home) return; - - return ( - - - - - - - - - - - ); - })} - - ); - } -} diff --git a/src/Tgstation.Server.Host/ClientApp/src/components/views/Instance/Jobs.tsx b/src/Tgstation.Server.Host/ClientApp/src/components/views/Instance/Jobs.tsx deleted file mode 100644 index afbc798e75..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/components/views/Instance/Jobs.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import React, { ReactNode } from "react"; -import { FormattedMessage } from "react-intl"; -import { RouteComponentProps, withRouter } from "react-router-dom"; - -import { AppCategories } from "../../../utils/routes"; -import JobsList from "../../utils/JobsList"; - -interface IProps extends RouteComponentProps<{ id: string }> {} -interface IState {} - -export default withRouter( - class Jobs extends React.Component { - public constructor(props: IProps) { - super(props); - - if (!AppCategories.instance.data) AppCategories.instance.data = {}; - AppCategories.instance.data.instanceid = props.match.params.id; - } - - public render(): ReactNode { - return ( -
-

- -

- -
- ); - } - } -); diff --git a/src/Tgstation.Server.Host/ClientApp/src/components/views/Instance/List.tsx b/src/Tgstation.Server.Host/ClientApp/src/components/views/Instance/List.tsx deleted file mode 100644 index 33180cac84..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/components/views/Instance/List.tsx +++ /dev/null @@ -1,298 +0,0 @@ -import React, { ReactNode } from "react"; -import Badge from "react-bootstrap/Badge"; -import Button from "react-bootstrap/Button"; -import Table from "react-bootstrap/Table"; -import { FormattedMessage } from "react-intl"; -import { RouteComponentProps, withRouter } from "react-router-dom"; - -import { InstanceManagerRights } from "../../../ApiClient/generatedcode/_enums"; -import { Components } from "../../../ApiClient/generatedcode/_generated"; -import InstanceClient from "../../../ApiClient/InstanceClient"; -import InstanceUserClient from "../../../ApiClient/InstanceUserClient"; -import InternalError, { ErrorCode } from "../../../ApiClient/models/InternalComms/InternalError"; -import { StatusCode } from "../../../ApiClient/models/InternalComms/InternalStatus"; -import UserClient from "../../../ApiClient/UserClient"; -import { AppCategories, AppRoutes } from "../../../utils/routes"; -import ErrorAlert from "../../utils/ErrorAlert"; -import Loading from "../../utils/Loading"; - -type Instance = Components.Schemas.Instance & { - canAccess: boolean; -}; - -interface IState { - instances: Instance[]; - loading?: boolean; - errors: Array | undefined>; - //isnt directly used but is used to make react rerender when the selected insance is changed - instanceid?: number; - canOnline: boolean; -} -interface IProps extends RouteComponentProps {} - -export default withRouter( - class InstanceList extends React.Component { - public constructor(props: IProps) { - super(props); - - this.setOnline = this.setOnline.bind(this); - - const actualid = - AppCategories.instance.data?.instanceid !== undefined - ? parseInt(AppCategories.instance.data.instanceid as string) - : undefined; - - this.state = { - loading: true, - instances: [], - errors: [], - instanceid: actualid, - canOnline: false - }; - } - - private addError(error: InternalError): void { - this.setState(prevState => { - const errors = Array.from(prevState.errors); - errors.push(error); - return { - errors - }; - }); - } - - private async loadInstances(): Promise { - const instancelist = await InstanceClient.listInstances(); - const modifiedlist: Array = []; - - const work: Array> = []; - for (const instance of instancelist.payload!) { - const modifiedinstance = instance as Instance; - if (instance.online) { - work.push( - InstanceUserClient.getCurrentInstanceUser(instance.id).then( - instanceuser => { - if (instanceuser.code == StatusCode.OK) { - modifiedinstance.canAccess = true; - } else { - modifiedinstance.canAccess = false; - if (instanceuser.error!.code !== ErrorCode.HTTP_ACCESS_DENIED) { - this.addError(instanceuser.error!); - } - } - modifiedlist.push(modifiedinstance); - } - ) - ); - } else { - modifiedinstance.canAccess = false; - modifiedlist.push(modifiedinstance); - } - } - - await Promise.all(work); - - if (instancelist.code == StatusCode.OK) { - this.setState({ - instances: modifiedlist.sort((a, b) => a.id - b.id) - }); - } else { - this.addError(instancelist.error!); - } - } - - public async componentDidMount(): Promise { - await this.loadInstances(); - - await UserClient.getCurrentUser().then(userinfo => { - if (userinfo.code === StatusCode.OK) { - this.setState({ - canOnline: !!( - userinfo.payload!.instanceManagerRights! & - InstanceManagerRights.SetOnline - ) - }); - } else { - this.addError(userinfo.error!); - } - }); - - this.setState({ - loading: false - }); - } - - private async setOnline(instance: Instance) { - //Yes this is desynchronized and will use the last known state of the instance - // to determine what state we should put it in, thats intentional, if the user clicks Set Online, it needs - // to be online, no matter what it previously was - const desiredState = !instance.online; - const instanceedit = await InstanceClient.editInstance(({ - id: instance.id, - online: desiredState - } as unknown) as Components.Schemas.Instance); - if (instanceedit.code === StatusCode.OK) { - await this.loadInstances(); - } else { - this.addError(instanceedit.error!); - } - } - - public render(): ReactNode { - if (this.state.loading) { - return ; - } - - return ( -
- {this.state.errors.map((err, index) => { - if (!err) return; - return ( - - this.setState(prev => { - const newarr = Array.from(prev.errors); - newarr[index] = undefined; - return { - errors: newarr - }; - }) - } - /> - ); - })} -

- -

- - - - - - - - - - - - - {this.state.instances.map(value => { - return ( - - - - - - - - - ); - })} - -
# - - - - - - - - - -
{value.id}{value.name} - {value.online! ? ( - - - - ) : ( - - - - )} - - {value.moveJob ? ( - - ) : ( - value.path - )} - - - - - -
- - - - -
- ); - } - } -); diff --git a/src/Tgstation.Server.Host/ClientApp/src/components/views/Login.tsx b/src/Tgstation.Server.Host/ClientApp/src/components/views/Login.tsx deleted file mode 100644 index aebba084b5..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/components/views/Login.tsx +++ /dev/null @@ -1,119 +0,0 @@ -import React, { ChangeEvent, FormEvent, ReactNode } from "react"; -import Button from "react-bootstrap/Button"; -import Col from "react-bootstrap/Col"; -import Form from "react-bootstrap/Form"; -import { FormattedMessage } from "react-intl"; -import { RouteComponentProps } from "react-router"; -import { withRouter } from "react-router-dom"; - -import InternalError from "../../ApiClient/models/InternalComms/InternalError"; -import { StatusCode } from "../../ApiClient/models/InternalComms/InternalStatus"; -import ServerClient, { LoginErrors } from "../../ApiClient/ServerClient"; -import { getSavedCreds } from "../../utils/misc"; -import ErrorAlert from "../utils/ErrorAlert"; -import Loading from "../utils/Loading"; - -interface IProps extends RouteComponentProps {} -interface IState { - busy: boolean; - validated: boolean; - username: string; - password: string; - save: boolean; - error?: InternalError; -} - -export default withRouter( - class Login extends React.Component { - public constructor(props: IProps) { - super(props); - this.submit = this.submit.bind(this); - - const [usr, pwd] = getSavedCreds() || [undefined, undefined]; - - this.state = { - busy: false, - validated: false, - username: usr || "", - password: pwd || "", - save: !!(usr && pwd) - }; - } - - public render(): ReactNode { - const handleUsrInput = (event: ChangeEvent) => - this.setState({ username: event.target.value }); - const handlePwdInput = (event: ChangeEvent) => - this.setState({ password: event.target.value }); - const handleSaveInput = (event: ChangeEvent) => - this.setState({ save: event.target.checked }); - - if (this.state.busy) { - return ; - } - return ( -
- - this.setState({ error: undefined })} - /> - - - - - - - - - - - - - - - - - - - ); - } - - private async submit(event: FormEvent) { - event.preventDefault(); - this.setState({ - busy: true - }); - const response = await ServerClient.login( - { - userName: this.state.username, - password: this.state.password - }, - this.state.save - ); - if (response.code == StatusCode.ERROR) { - this.setState({ - busy: false, - error: response.error - }); - } - } - } -); diff --git a/src/Tgstation.Server.Host/ClientApp/src/components/views/NotFound.tsx b/src/Tgstation.Server.Host/ClientApp/src/components/views/NotFound.tsx deleted file mode 100644 index 946b35d8e8..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/components/views/NotFound.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import React, { ReactNode } from "react"; -import Card from "react-bootstrap/Card"; -import { FormattedMessage } from "react-intl"; - -export default class NotFound extends React.Component { - public render(): ReactNode { - return ( - - - - - - - - - - - {`Control Panel Version: ${VERSION}\nControl Panel Mode: ${MODE}\nCurrent route: ${window.location.toString()}`} - - - - - ); - } -} diff --git a/src/Tgstation.Server.Host/ClientApp/src/components/views/User/Create.tsx b/src/Tgstation.Server.Host/ClientApp/src/components/views/User/Create.tsx deleted file mode 100644 index 17ab5de4fb..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/components/views/User/Create.tsx +++ /dev/null @@ -1,277 +0,0 @@ -import React, { ChangeEvent, FormEvent, ReactNode } from "react"; -import Button from "react-bootstrap/Button"; -import Col from "react-bootstrap/Col"; -import Form from "react-bootstrap/Form"; -import { FormattedMessage } from "react-intl"; -import { RouteComponentProps, withRouter } from "react-router-dom"; - -import { Components } from "../../../ApiClient/generatedcode/_generated"; -import InternalError, { ErrorCode } from "../../../ApiClient/models/InternalComms/InternalError"; -import { StatusCode } from "../../../ApiClient/models/InternalComms/InternalStatus"; -import ServerClient from "../../../ApiClient/ServerClient"; -import UserClient from "../../../ApiClient/UserClient"; -import { AppCategories, AppRoutes } from "../../../utils/routes"; -import ErrorAlert from "../../utils/ErrorAlert"; -import Loading from "../../utils/Loading"; - -interface IState { - errors: Array | undefined>; - password1: string; - password2: string; - username: string; - sysuser: string; - matchError?: boolean; - lengthError?: boolean; - serverInfo?: Components.Schemas.ServerInformation; - loading: boolean; - creating?: boolean; - redirect?: boolean; -} -interface IProps extends RouteComponentProps {} - -export default withRouter( - class UserCreate extends React.Component { - public constructor(props: IProps) { - super(props); - - this.state = { - errors: [], - password1: "", - password2: "", - username: "", - sysuser: "", - loading: true - }; - - this.submitTGS = this.submitTGS.bind(this); - this.submitSYS = this.submitSYS.bind(this); - } - - public async componentDidMount(): Promise { - const res = await ServerClient.getServerInfo(); - - switch (res.code) { - case StatusCode.ERROR: { - this.addError(res.error!); - break; - } - case StatusCode.OK: { - this.setState({ - serverInfo: res.payload! - }); - break; - } - } - - this.setState({ - loading: false - }); - } - - // noinspection DuplicatedCode - private validate(): boolean { - let err = false; - if (this.state.password1.length < this.state.serverInfo!.minimumPasswordLength) { - err = true; - this.setState({ - lengthError: true - }); - } else { - this.setState({ - lengthError: false - }); - } - if (this.state.password2 !== this.state.password1) { - err = true; - this.setState({ - matchError: true - }); - } else { - this.setState({ - matchError: false - }); - } - return err; - } - - private async submitTGS(event: FormEvent) { - event.preventDefault(); - - //validation - if (this.validate()) return; - if (!this.state.username) return; - - this.setState({ - creating: true - }); - - const user = await UserClient.createUser({ - name: this.state.username, - password: this.state.password1 - }); - // noinspection DuplicatedCode - if (user.code == StatusCode.OK) { - if (!AppCategories.user.data) AppCategories.user.data = {}; - AppCategories.user.data.selectedid = user.payload!.id!; - this.props.history.push(AppRoutes.useredit.link || AppRoutes.useredit.route); - } else { - this.addError(user.error!); - this.setState({ - creating: false - }); - } - } - - private async submitSYS(event: FormEvent) { - event.preventDefault(); - - //validation - if (!this.state.sysuser) return; - - this.setState({ - creating: true - }); - - const user = await UserClient.createUser({ - systemIdentifier: this.state.sysuser - }); - // noinspection DuplicatedCode - if (user.code == StatusCode.OK) { - if (!AppCategories.user.data) AppCategories.user.data = {}; - AppCategories.user.data.selectedid = user.payload!.id!; - this.props.history.push(AppRoutes.useredit.link || AppRoutes.useredit.route); - } else { - this.addError(user.error!); - this.setState({ - creating: false - }); - } - } - - private addError(error: InternalError): void { - this.setState(prevState => { - const errors = Array.from(prevState.errors); - errors.push(error); - return { - errors - }; - }); - } - - public render(): ReactNode { - if (this.state.loading) { - return ; - } - if (this.state.creating) { - return ; - } - - const handleUsernameInput = (event: ChangeEvent) => - this.setState({ username: event.target.value }); - const handleSysuserInput = (event: ChangeEvent) => - this.setState({ sysuser: event.target.value }); - const handlePwd1Input = (event: ChangeEvent) => - this.setState({ password1: event.target.value }); - const handlePwd2Input = (event: ChangeEvent) => - this.setState({ password2: event.target.value }); - - return ( -
- {this.state.errors.map((err, index) => { - if (!err) return; - return ( - - this.setState(prev => { - const newarr = Array.from(prev.errors); - newarr[index] = undefined; - return { - errors: newarr - }; - }) - } - /> - ); - })} -

- -

- -
- - - - - - - - - - - - - {this.state.lengthError ? ( - - - {this.state.serverInfo!.minimumPasswordLength} - - ) : ( - "" - )} - - - - - - - - - {this.state.matchError ? ( - - ) : ( - "" - )} - - - -
-
-
- - - - - - - -
- -
- ); - } - } -); diff --git a/src/Tgstation.Server.Host/ClientApp/src/components/views/User/Edit.tsx b/src/Tgstation.Server.Host/ClientApp/src/components/views/User/Edit.tsx deleted file mode 100644 index 6b114e5380..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/components/views/User/Edit.tsx +++ /dev/null @@ -1,575 +0,0 @@ -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import React from "react"; -import Alert from "react-bootstrap/Alert"; -import Badge from "react-bootstrap/Badge"; -import Button from "react-bootstrap/Button"; -import Col from "react-bootstrap/Col"; -import Form from "react-bootstrap/Form"; -import InputGroup from "react-bootstrap/InputGroup"; -import OverlayTrigger from "react-bootstrap/OverlayTrigger"; -import Row from "react-bootstrap/Row"; -import Tab from "react-bootstrap/Tab"; -import Tabs from "react-bootstrap/Tabs"; -import Tooltip from "react-bootstrap/Tooltip"; -import { FormattedMessage, FormattedRelativeTime } from "react-intl"; -import { RouteComponentProps, withRouter } from "react-router"; -import { Link } from "react-router-dom"; - -import { - AdministrationRights, - InstanceManagerRights -} from "../../../ApiClient/generatedcode/_enums"; -import { Components } from "../../../ApiClient/generatedcode/_generated"; -import InternalError, { ErrorCode } from "../../../ApiClient/models/InternalComms/InternalError"; -import { StatusCode } from "../../../ApiClient/models/InternalComms/InternalStatus"; -import UserClient from "../../../ApiClient/UserClient"; -import { AppCategories, AppRoutes } from "../../../utils/routes"; -import ErrorAlert from "../../utils/ErrorAlert"; -import Loading from "../../utils/Loading"; - -interface IProps extends RouteComponentProps<{ id: string; tab?: string }> {} - -interface IState { - errors: Array | undefined>; - user?: Components.Schemas.User; - loading: boolean; - saving: boolean; - permsadmin: { [key: string]: Permission }; - permsinstance: { [key: string]: Permission }; - canEdit: boolean; - //override for if its the current user and it can edit its own password - canEditOwnPassword: boolean; -} - -interface Permission { - readonly bitflag: number; - readonly currentVal: boolean; -} - -export default withRouter( - class UserEdit extends React.Component { - public constructor(props: IProps) { - super(props); - - this.state = { - errors: [], - loading: true, - saving: false, - permsadmin: {}, - permsinstance: {}, - canEdit: false, - canEditOwnPassword: false - }; - - if (!AppCategories.user.data) AppCategories.user.data = {}; - AppCategories.user.data.selectedid = props.match.params.id; - AppCategories.user.data.tab = props.match.params.tab; - } - - public async componentDidMount(): Promise { - const userid = parseInt(this.props.match.params.id); - const response = await UserClient.getUser(userid); - switch (response.code) { - case StatusCode.ERROR: { - this.addError(response.error!); - break; - } - case StatusCode.OK: { - this.loadUser(response.payload!); - break; - } - } - const currentuser = await UserClient.getCurrentUser(); - if (currentuser.code == StatusCode.OK) { - this.setState({ - canEdit: !!( - currentuser.payload!.administrationRights! & AdministrationRights.WriteUsers - ), - canEditOwnPassword: - !!( - currentuser.payload!.administrationRights! & - AdministrationRights.EditOwnPassword - ) && currentuser.payload!.id! === userid - }); - } - this.setState({ - loading: false - }); - } - - private loadUser(user: Components.Schemas.User) { - this.setState({ - user - }); - this.loadEnums(); - } - - private loadEnums(): void { - // noinspection DuplicatedCode - Object.entries(AdministrationRights).forEach(([k, v]) => { - /* enums are objects that are reverse mapped, for example, an enum with a = 1 and b = 2 would look like this: - * { - * "a": 1, - * "b": 2, - * 1: "a", - * 2: "b" - * } - * so we need to drop everything that doesnt resolve to a string because otherwise we end up with twice the values - */ - if (!isNaN(parseInt(k))) return; - - const key = k.toLowerCase(); - const val = v as number; - - //we dont care about nothing - if (key == "none") return; - - const currentVal = !!(this.state.user!.administrationRights! & val); - this.setState(prevState => { - return { - permsadmin: { - ...prevState.permsadmin, - [key]: { - currentVal, - newVal: currentVal, - bitflag: val - } - } - }; - }); - }); - // noinspection DuplicatedCode - Object.entries(InstanceManagerRights).forEach(([k, v]) => { - if (!isNaN(parseInt(k))) return; - - const key = k.toLowerCase(); - const val = v as number; - - //we dont care about nothing - if (key == "none") return; - - const currentVal = !!(this.state.user!.instanceManagerRights! & val); - this.setState(prevState => { - return { - permsinstance: { - ...prevState.permsinstance, - [key]: { - currentVal, - newVal: currentVal, - bitflag: val - } - } - }; - }); - }); - } - - private addError(error: InternalError): void { - this.setState(prevState => { - const errors = Array.from(prevState.errors); - errors.push(error); - return { - errors - }; - }); - } - - public render(): React.ReactNode { - if (this.state.loading) { - return ; - } - if (this.state.saving) { - return ; - } - - return ( -
- {this.state.errors.map((err, index) => { - if (!err) return; - return ( - - this.setState(prev => { - const newarr = Array.from(prev.errors); - newarr[index] = undefined; - return { - errors: newarr - }; - }) - } - /> - ); - })} - {this.state.user ? ( - - {!this.state.canEdit ? ( - - - - ) : ( - "" - )} - {this.state.user.systemIdentifier ? ( - - - - ) : ( - - - - )}{" "} - {this.state.user.enabled ? ( - - - - ) : ( - - - - )} -

{this.state.user.name}

- - { - if (!newkey) return; - - if (!AppCategories.user.data) AppCategories.user.data = {}; - AppCategories.user.data.selectedid = this.props.match.params.id; - AppCategories.user.data.tab = newkey; - this.props.history.push( - AppRoutes.useredit.link || AppRoutes.useredit.route - ); - }} - id="test" - className="justify-content-center mb-3 mt-4 flex-column flex-md-row"> - }> - {this.props.match.params.tab === "info" || - this.props.match.params.tab === undefined ? ( - - - -
- -
- - - {this.state.user.id} - -
- {this.state.user.systemIdentifier ? ( - - -
- -
- - - {this.state.user.systemIdentifier} - -
- ) : ( - "" - )} - - -
- -
- - - {this.state.user.enabled!.toString()} - -
- - -
- -
- - - {new Date( - this.state.user.createdAt! - ).toLocaleString()} - - }> - {({ ref, ...triggerHandler }) => ( - - - }> - - - - )} - -
- - -
- -
- - - - {this.state.user.createdBy!.id} - - }> - {({ ref, ...triggerHandler }) => ( - - - }> - {this.state.user!.createdBy!.name} - - - )} - -
-
- {this.state.canEdit || - this.state.canEditOwnPassword ? ( - - ) : ( - "" - )} - {this.state.canEdit ? ( - - ) : ( - "" - )} -
- - ) : ( - "" - )} -
- }> - {this.props.match.params.tab === "adminperms" - ? this.renderPerms("permsadmin", "admin") - : ""} - - }> - {this.props.match.params.tab === "instanceperms" - ? this.renderPerms("permsinstance", "instance") - : ""} - -
-
- ) : ( - "" - )} -
- ); - } - - private renderPerms( - enumname: "permsadmin" | "permsinstance", - permprefix: string - ): React.ReactNode { - const inputs: Record> = {}; - const setAll = (val: boolean): (() => void) => { - return () => { - for (const ref of Object.values(inputs)) { - if (ref.current) ref.current.checked = val; - } - }; - }; - const resetAll = () => { - for (const [permname, ref] of Object.entries(inputs)) { - if (!ref.current) continue; - - ref.current.checked = this.state[enumname][permname].currentVal; - } - }; - const save = async () => { - this.setState({ - saving: true - }); - let bitflag = 0; - - for (const [permname, ref] of Object.entries(inputs)) { - if (!ref.current) continue; - - bitflag += ref.current.checked ? this.state[enumname][permname].bitflag : 0; - } - - const response = await UserClient.editUser(this.state.user!.id!, { - [enumname == "permsadmin" - ? "administrationRights" - : "instanceManagerRights"]: bitflag - } as { administrationRights: AdministrationRights } | { instanceManagerRights: InstanceManagerRights }); - if (response.code == StatusCode.OK) { - this.loadUser(response.payload!); - } else { - this.addError(response.error!); - } - this.setState({ - saving: false - }); - }; - return ( - - {this.state.canEdit ? ( - -
- -
- {" "} - {" "} - -
- ) : ( - "" - )} - -
- {Object.entries(this.state[enumname]).map(([perm, value]) => { - const inputref = React.createRef(); - inputs[perm] = inputref; - return ( - - - - - - }> - {({ ref, ...triggerHandler }) => ( - -
- -
-
- -
}> - -
-
-
- )} -
-
-
- ); - })} -
- - {this.state.canEdit ? ( - - ) : ( - "" - )} -
- ); - } - } -); diff --git a/src/Tgstation.Server.Host/ClientApp/src/components/views/User/List.tsx b/src/Tgstation.Server.Host/ClientApp/src/components/views/User/List.tsx deleted file mode 100644 index e24a4e1c39..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/components/views/User/List.tsx +++ /dev/null @@ -1,229 +0,0 @@ -import React from "react"; -import Alert from "react-bootstrap/Alert"; -import Badge from "react-bootstrap/Badge"; -import Button from "react-bootstrap/Button"; -import OverlayTrigger from "react-bootstrap/OverlayTrigger"; -import Table from "react-bootstrap/Table"; -import Tooltip from "react-bootstrap/Tooltip"; -import { FormattedMessage, FormattedRelativeTime } from "react-intl"; -import { Link, RouteComponentProps, withRouter } from "react-router-dom"; - -import { AdministrationRights } from "../../../ApiClient/generatedcode/_enums"; -import { Components } from "../../../ApiClient/generatedcode/_generated"; -import InternalError, { ErrorCode } from "../../../ApiClient/models/InternalComms/InternalError"; -import { StatusCode } from "../../../ApiClient/models/InternalComms/InternalStatus"; -import UserClient from "../../../ApiClient/UserClient"; -import { AppCategories, AppRoutes } from "../../../utils/routes"; -import ErrorAlert from "../../utils/ErrorAlert"; -import Loading from "../../utils/Loading"; - -interface IProps extends RouteComponentProps {} - -interface IState { - errors: Array | undefined>; - users: Components.Schemas.User[]; - loading: boolean; - canList: boolean; -} - -export default withRouter( - class UserList extends React.Component { - public constructor(props: IProps) { - super(props); - - this.state = { - errors: [], - users: [], - loading: true, - canList: false - }; - } - - private addError(error: InternalError): void { - this.setState(prevState => { - const errors = Array.from(prevState.errors); - errors.push(error); - return { - errors - }; - }); - } - - public async componentDidMount(): Promise { - const response = await UserClient.getCurrentUser(); - if (response.code == StatusCode.OK) { - const canList = !!( - response.payload!.administrationRights! & AdministrationRights.ReadUsers - ); - this.setState({ - canList - }); - - if (canList) { - const res = await UserClient.listUsers(); - switch (res.code) { - case StatusCode.OK: { - this.setState({ - users: res.payload! - }); - break; - } - case StatusCode.ERROR: { - this.addError(res.error!); - } - } - } else { - //if we cant list users, add our own user to the list - this.setState({ - users: [response.payload!] - }); - } - } else { - this.addError(response.error!); - } - this.setState({ - loading: false - }); - } - - public render(): React.ReactNode { - if (this.state.loading) { - return ; - } - return ( -
- {!this.state.canList ? ( - - - - ) : ( - "" - )} - {this.state.errors.map((err, index) => { - if (!err) return; - return ( - - this.setState(prev => { - const newarr = Array.from(prev.errors); - newarr[index] = undefined; - return { - errors: newarr - }; - }) - } - /> - ); - })} - - - - - - - - - - - - - {this.state.users.map(value => { - const createddate = new Date(value.createdAt!); - const createddiff = (createddate.getTime() - Date.now()) / 1000; - - return ( - - - - - - {createddate.toLocaleString()} - - }> - {({ ref, ...triggerHandler }) => ( - - )} - - - - {value.createdBy!.id} - - }> - {({ ref, ...triggerHandler }) => ( - - )} - - - - ); - })} - -
# - - - - - - - - - -
{value.id!}{value.name} - {value.systemIdentifier! ? ( - - - - ) : ( - - - - )}{" "} - {value.enabled! ? ( - - - - ) : ( - - - - )} - - }> - - - - }> - {value.createdBy!.name} - - - -
- -
- ); - } - } -); diff --git a/src/Tgstation.Server.Host/ClientApp/src/definitions/globals.d.ts b/src/Tgstation.Server.Host/ClientApp/src/definitions/globals.d.ts deleted file mode 100644 index bfa2217f72..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/definitions/globals.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -declare const API_VERSION: string; -declare const VERSION: string; -declare const MODE: string; -declare const DEFAULT_BASEPATH: string; diff --git a/src/Tgstation.Server.Host/ClientApp/src/definitions/mapbox__react-click-to-select.d.ts b/src/Tgstation.Server.Host/ClientApp/src/definitions/mapbox__react-click-to-select.d.ts deleted file mode 100644 index dee6051515..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/definitions/mapbox__react-click-to-select.d.ts +++ /dev/null @@ -1 +0,0 @@ -declare module "@mapbox/react-click-to-select"; diff --git a/src/Tgstation.Server.Host/ClientApp/src/definitions/scss.d.ts b/src/Tgstation.Server.Host/ClientApp/src/definitions/scss.d.ts deleted file mode 100644 index 4db27c8e8c..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/definitions/scss.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare module "*.scss" { - const content: { [className: string]: string }; - // noinspection JSDuplicatedDeclaration - export default content; -} diff --git a/src/Tgstation.Server.Host/ClientApp/src/index.html b/src/Tgstation.Server.Host/ClientApp/src/index.html deleted file mode 100644 index f874be98af..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/index.html +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - <%= htmlWebpackPlugin.options.title%> - - - - - - - - - - <% for (var css in htmlWebpackPlugin.files.css) { %> - - <% } %> - - -
- - <% for (var chunk in htmlWebpackPlugin.files.chunks) { %> - - <% } %> - - diff --git a/src/Tgstation.Server.Host/ClientApp/src/index.tsx b/src/Tgstation.Server.Host/ClientApp/src/index.tsx deleted file mode 100644 index 346dbe70fe..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/index.tsx +++ /dev/null @@ -1,30 +0,0 @@ -//definition files -import "./definitions/scss.d"; -import "./definitions/globals.d"; -//css -import "./styles/dark.scss"; -//polyfills -import "@formatjs/intl-relativetimeformat/polyfill"; -import "@formatjs/intl-relativetimeformat/locale-data/en"; -import "@formatjs/intl-pluralrules/polyfill"; -import "@formatjs/intl-pluralrules/locale-data/en"; - -import * as React from "react"; -import * as ReactDOM from "react-dom"; - -import ConfigController from "./ApiClient/util/ConfigController"; -import App from "./App"; -import Locales from "./translations/Locales"; -import initIcons from "./utils/icolibrary"; - -initIcons(); -ConfigController.loadconfig(); - -const rootNode = document.getElementById("root") as HTMLElement; -const appTsx = ( - - - -); - -ReactDOM.render(appTsx, rootNode); diff --git a/src/Tgstation.Server.Host/ClientApp/src/logo.svg b/src/Tgstation.Server.Host/ClientApp/src/logo.svg deleted file mode 100644 index d16dcf85d1..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/logo.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/Tgstation.Server.Host/ClientApp/src/react-app-env.d.ts b/src/Tgstation.Server.Host/ClientApp/src/react-app-env.d.ts deleted file mode 100644 index 6431bc5fc6..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/react-app-env.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// diff --git a/src/Tgstation.Server.Host/ClientApp/src/styles/dark.scss b/src/Tgstation.Server.Host/ClientApp/src/styles/dark.scss deleted file mode 100644 index 32fed12967..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/styles/dark.scss +++ /dev/null @@ -1,349 +0,0 @@ -.navbar { - font-weight: 600; -} -$enable-shadows: true; -$enable-gradients: true; - -.vmin-50 { - width: 50vmin !important; - height: 50vmin !important; -} - -$theme-colors: ( - //02549a - "primary": #02549a, - "secondary": #2576bc, - "transparent": transparent, - "background": #212529, - "darker": darken(#212529, 5%) -); - -$sizes: ( - 40: 40% -); - -@import "~bootstrap/scss/functions"; - -$white: #fff !default; -$gray-100: #f8f9fa !default; -$gray-200: #e9ecef !default; -$gray-300: #dee2e6 !default; -$gray-400: #ced4da !default; -$gray-500: #adb5bd !default; -$gray-600: #6c757d !default; -$gray-700: #495057 !default; -$gray-800: #343a40 !default; -$gray-900: #212529 !default; -$black: #000 !default; - -$grays: () !default; -// stylelint-disable-next-line scss/dollar-variable-default -$grays: map-merge( - ( - "100": $gray-100, - "200": $gray-200, - "300": $gray-300, - "400": $gray-400, - "500": $gray-500, - "600": $gray-600, - "700": $gray-700, - "800": $gray-800, - "900": $gray-900 - ), - $grays -); - -$blue: #007bff !default; -$indigo: #6610f2 !default; -$purple: #6f42c1 !default; -$pink: #e83e8c !default; -$red: #dc3545 !default; -$orange: #fd7e14 !default; -$yellow: #ffc107 !default; -$green: #28a745 !default; -$teal: #20c997 !default; -$cyan: #17a2b8 !default; - -$colors: () !default; -// stylelint-disable-next-line scss/dollar-variable-default -$colors: map-merge( - ( - "blue": $blue, - "indigo": $indigo, - "purple": $purple, - "pink": $pink, - "red": $red, - "orange": $orange, - "yellow": $yellow, - "green": $green, - "teal": $teal, - "cyan": $cyan, - "white": $white, - "gray": $gray-600, - "gray-dark": $gray-800 - ), - $colors -); - -$primary: $blue !default; -$secondary: $gray-600 !default; -$success: $green !default; -$info: $cyan !default; -$warning: $yellow !default; -$danger: $red !default; -$light: $gray-100 !default; -$dark: $gray-800 !default; - -$theme-colors: () !default; -// stylelint-disable-next-line scss/dollar-variable-default -$theme-colors: map-merge( - ( - "primary": $primary, - "secondary": $secondary, - "success": $success, - "info": $info, - "warning": $warning, - "danger": $danger, - "light": $light, - "dark": $dark - ), - $theme-colors -); - -$border-color: $gray-800; -$alert-border-radius: 3px; - -$body-bg: $gray-900; -$body-color: $gray-200; - -$card-bg: $gray-700; -$card-cap-color: $white; - -$code-color: inherit; - -$dropdown-bg: $gray-700; -$dropdown-color: $black; -$dropdown-link-color: $black; -$dropdown-link-hover-color: $black; -$dropdown-link-hover-bg: darken($dropdown-bg, 5%); - -$hr-border-color: rgba($white, 0.2); - -$link-color: theme-color("secondary"); - -$modal-content-bg: $dark; - -$navbar-dark-color: rgba($white, 0.75); -.navbar-dark > .navbar-nav > .nav-link.active { - font-weight: bold; -} - -$nav-tabs-border-color: $gray-700; -$nav-tabs-link-hover-border-color: $gray-700 $gray-700 $nav-tabs-border-color; -$nav-tabs-link-active-color: theme-color("secondary"); //$gray-200; -$nav-tabs-link-active-bg: $body-bg; -$nav-tabs-link-active-border-color: $gray-500 $gray-500 $nav-tabs-link-active-bg; - -$pre-color: inherit; - -$progress-bar-color: $black; - -$toast-color: $black; -$toast-background-color: $gray-700; -$toast-header-color: $toast-color; -$toast-header-background-color: $gray-600; - - - -@import "~bootstrap/scss/variables"; - -@import "~bootstrap/scss/mixins"; -@import "~bootstrap/scss/root"; -@import "~bootstrap/scss/reboot"; -@import "~bootstrap/scss/type"; - -//@import "~bootstrap/scss/images"; -@import "~bootstrap/scss/code"; -@import "~bootstrap/scss/grid"; -@import "~bootstrap/scss/tables"; -@import "~bootstrap/scss/forms"; -@import "~bootstrap/scss/buttons"; -@import "~bootstrap/scss/transitions"; -@import "~bootstrap/scss/dropdown"; -//@import "~bootstrap/scss/button-group"; -@import "~bootstrap/scss/input-group"; -@import "~bootstrap/scss/custom-forms"; -@import "~bootstrap/scss/nav"; -@import "~bootstrap/scss/navbar"; -@import "~bootstrap/scss/card"; -//@import "~bootstrap/scss/breadcrumb"; -//@import "~bootstrap/scss/pagination"; -@import "~bootstrap/scss/badge"; -//@import "~bootstrap/scss/jumbotron"; -@import "~bootstrap/scss/alert"; -@import "~bootstrap/scss/progress"; -//@import "~bootstrap/scss/media"; -//@import "~bootstrap/scss/list-group"; -@import "~bootstrap/scss/close"; -@import "~bootstrap/scss/toasts"; -@import "~bootstrap/scss/modal"; -@import "~bootstrap/scss/tooltip"; -//@import "~bootstrap/scss/popover"; -//@import "~bootstrap/scss/carousel"; -@import "~bootstrap/scss/spinners"; -@import "~bootstrap/scss/utilities"; -//@import "~bootstrap/scss/print"; - -.text-secondary { - color: #3b93de !important; -} - -.nav-tabs .nav-link { - color: $gray-200; - border: $nav-tabs-border-width solid $gray-700; - margin-right: 0.10rem; - margin-left: 0.10rem; -} - -@include media-breakpoint-down("sm") { - .nav-tabs .nav-link{ - margin-bottom: 0; - } -} - - -.alert-error { - @include alert-variant($dark, $danger, $white); -} - -.alert-dismissible { - padding-right: $alert-padding-x !important; -} - -.pre-wrap { - white-space: pre-wrap; -} - -@each $breakpoint in map-keys($grid-breakpoints) { - @include media-breakpoint-up($breakpoint) { - $infix: breakpoint-infix($breakpoint, $grid-breakpoints); - - @each $prop, $abbrev in (width: w, height: h) { - @each $size, $length in $sizes { - .#{$abbrev}#{$infix}-#{$size} { - #{$prop}: $length !important; - } - } - } - } -} - -@each $breakpoint in map-keys($grid-breakpoints) { - @include media-breakpoint-down($breakpoint) { - $infix: breakpoint-infix($breakpoint, $grid-breakpoints); - - .text#{$infix}-break { - word-wrap: break-word !important; - } - } -} - -.toast-header { - .close { - margin-left: auto !important; - span { - margin-left: 0.5rem !important; - } - } -} - - - -.anim-fade-appear { - opacity: 0; -} -.anim-fade-appear-active { - opacity: 1; -} - -.anim-fade-exit { - opacity: 1; -} -.anim-fade-exit-active { - opacity: 0; -} - -.anim-fade-appear-active, .anim-fade-exit-active { - transition: opacity 600ms; -} - -.anim-collapse-all { - display: none; -} - -.anim-collapse-enter { - flex-grow: 0; - flex-basis: 0; - min-width: 0; - overflow: hidden; - display: unset !important; -} -.anim-collapse-enter-active { - flex-grow: 1; - display: unset !important; -} -.anim-collapse-enter-done { - flex-grow: 1; - display: unset !important; -} - -.anim-collapse-exit { - flex-grow: 1; - display: unset !important; -} -.anim-collapse-exit-active { - flex-grow: 0; - flex-basis: 0; - overflow: hidden; -} -.anim-collapse-exit-done { - flex-grow: 0; - flex-basis: 0; - overflow: hidden; -} - -.anim-collapse-enter-active, .anim-collapse-exit-active { - transition: flex-grow 200ms; -} - -.nowrap { - white-space: nowrap; -} - -//these exists on firefox -//noinspection CssUnknownProperty -.fancyscroll { - scrollbar-width: thin; - scrollbar-color: $gray-800 rgba($gray-600, 0.5); -} - -//chrome/safari -.fancyscroll::-webkit-scrollbar { - height: 8px; - width: 8px; -} -.fancyscroll::-webkit-scrollbar-track { - background: rgba($gray-600, 0.5); -} -.fancyscroll::-webkit-scrollbar-thumb { - background-color: $gray-800; -} - -.jobswidget { - border: $gray-600 double; - background: rgba($gray-600, 0.5); - - h5 { - background: rgba($gray-800, 0.2); - } -} diff --git a/src/Tgstation.Server.Host/ClientApp/src/translations/ILocalization.ts b/src/Tgstation.Server.Host/ClientApp/src/translations/ILocalization.ts deleted file mode 100644 index b20b8456b0..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/translations/ILocalization.ts +++ /dev/null @@ -1,3 +0,0 @@ -export default interface ILocalization { - [stringID: string]: string; -} diff --git a/src/Tgstation.Server.Host/ClientApp/src/translations/ITranslation.ts b/src/Tgstation.Server.Host/ClientApp/src/translations/ITranslation.ts deleted file mode 100644 index df03dbe13f..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/translations/ITranslation.ts +++ /dev/null @@ -1,8 +0,0 @@ -import ILocalization from "./ILocalization"; - -interface ITranslation { - readonly locale: string; - readonly messages: ILocalization; -} - -export default ITranslation; diff --git a/src/Tgstation.Server.Host/ClientApp/src/translations/ITranslationFactory.ts b/src/Tgstation.Server.Host/ClientApp/src/translations/ITranslationFactory.ts deleted file mode 100644 index 334081f71b..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/translations/ITranslationFactory.ts +++ /dev/null @@ -1,7 +0,0 @@ -import ITranslation from "./ITranslation"; - -interface ITranslationFactory { - loadTranslation(locale: string): Promise; -} - -export default ITranslationFactory; diff --git a/src/Tgstation.Server.Host/ClientApp/src/translations/Locales.ts b/src/Tgstation.Server.Host/ClientApp/src/translations/Locales.ts deleted file mode 100644 index a46d255de1..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/translations/Locales.ts +++ /dev/null @@ -1,5 +0,0 @@ -class Locales { - public static readonly en: string = "en"; -} - -export default Locales; diff --git a/src/Tgstation.Server.Host/ClientApp/src/translations/Translation.ts b/src/Tgstation.Server.Host/ClientApp/src/translations/Translation.ts deleted file mode 100644 index 9755a9e913..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/translations/Translation.ts +++ /dev/null @@ -1,6 +0,0 @@ -import ILocalization from "./ILocalization"; -import ITranslation from "./ITranslation"; - -export default class Translation implements ITranslation { - public constructor(public readonly locale: string, public readonly messages: ILocalization) {} -} diff --git a/src/Tgstation.Server.Host/ClientApp/src/translations/TranslationFactory.ts b/src/Tgstation.Server.Host/ClientApp/src/translations/TranslationFactory.ts deleted file mode 100644 index 8452b09ee3..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/translations/TranslationFactory.ts +++ /dev/null @@ -1,40 +0,0 @@ -import ITranslation from "./ITranslation"; -import ITranslationFactory from "./ITranslationFactory"; -import Locales from "./Locales"; -import Translation from "./Translation"; - -class TranslationFactory implements ITranslationFactory { - private static readonly fallbackLocale: string = Locales.en; - - private static getShortHandedLocale(locale: string): string { - return locale.split("-")[0]; - } - - public async loadTranslation(locale: string): Promise { - //fancy type annotations but its just load the json file in this variable as a map of strings to strings - const localization: { [key: string]: string } = (await import( - `./locales/${locale}.json` - )) as { [key: string]: string }; - - if (!localization) { - let shortHandedLocale = TranslationFactory.getShortHandedLocale(locale); - if (shortHandedLocale === locale) { - if (shortHandedLocale === TranslationFactory.fallbackLocale) - throw new Error("Invalid locale: " + locale); - shortHandedLocale = TranslationFactory.fallbackLocale; - } - return await this.loadTranslation(shortHandedLocale); - } - - let model: ITranslation | null = null; - try { - model = new Translation(locale, localization); - } catch (e) { - throw Error(`Error loading localization for locale '${locale}': ${JSON.stringify(e)}`); - } - - return model; - } -} - -export default TranslationFactory; diff --git a/src/Tgstation.Server.Host/ClientApp/src/translations/locales/en.json b/src/Tgstation.Server.Host/ClientApp/src/translations/locales/en.json deleted file mode 100644 index 7e0a56b733..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/translations/locales/en.json +++ /dev/null @@ -1,205 +0,0 @@ -{ - "routes.home": "Home", - "routes.user_manager": "User Manager", - "routes.login": "Log In", - "routes.admin": "Administration", - "routes.admin.update": "TGS Update", - "routes.admin.logs": "TGS Logs", - "routes.config": "Configuration", - "routes.passwd": "Change Password", - "routes.usermanager": "Users", - "routes.useredit": "User Editor", - "routes.usercreate": "Create User", - "routes.instancelist": "Instances", - "routes.instancecode": "Code", - "routes.instancehosting": "Hosting", - "routes.instanceconfig": "Configuration", - "routes.instancejobs": "Jobs", - "login.submit": "Login", - "login.password": "Password", - "login.password.repeat": "Confirm Password", - "login.password.repeat.match": "Passwords do not match!", - "login.password.repeat.short": "Password is too short! It must have a length of atleast ", - "login.title": "Login", - "login.username": "Username", - "navbar.user_error": "Error loading current user", - "navbar.server_error": "Error loading server information", - "navbar.home": "Home", - "navbar.purgecache": "Purge client cache", - "navbar.refresh": "Refresh", - "navbar.logout": "Logout", - "app.job.started": "Started: ", - "app.job.startedby": "Started By: ", - "app.job.stopped": "Stopped: ", - "app.job.stoppedby": "Stopped By: ", - "error.http.access_denied.desc": "Access to this resource is denied", - "error.unhandled_response.desc": "The application received an unexpected response", - "error.unhandled_global_response.desc": "The application received an unexpected global response", - "error.login.no_creds.desc": "Attempted to login without any credentials", - "error.login.bad_user_pass.desc": "Invalid username/password!", - "error.login.user_disabled.desc": "This user account is disabled", - "error.user.no_sys_ident.desc": "This system user was not found", - "error.user.not_found.desc": "This TGS user was not found", - "error.http.bad_request": "BUG: Bad Request", - "error.http.data_integrity": "A data integrity check failed while performing the operation", - "error.http.api_mismatch": "API version mismatch", - "error.http.server_error": "BUG: Server error", - "error.http.unimplemented": "This feature is unimplemented.", - "error.http.server_not_ready": "The server is still starting/stoping!", - "error.http.access_denied": "Access denied", - "error.http.not_acceptable": "BUG: The server has found the request to be unacceptable.", - "error.axios": "Axios error", - "error.unhandled_response": "The application received an unexpected response", - "error.unhandled_global_response": "The application received an unexpected global response", - "error.login.no_creds": "Attempted to login without any credentials", - "error.login.bad_user_pass": "Invalid username/password!", - "error.login.user_disabled": "This user account is disabled", - "error.user.no_sys_ident": "This system user was not found", - "error.user.not_found": "This TGS user was not found", - "error.admin.rate": "The server has exceeded github's rate limiting. Please try again later.", - "error.admin.error": "The server has ran into an error while using github's API.", - "error.admin.watchdog.avail": "This operation is unavailable due to the launch configuration of TGS.", - "error.admin.update.notfound": "This TGS version does not seem to exist.", - "error.admin.logs.io": "An IO error occured while processing logs", - "error.somethingwentwrong": "Uh oh.... Something went wrong!", - "error.notfound": "This page has not been found!", - "error.github": "An error occured while interacting with the Github API", - "error.app": "An error occured in the application", - "error.job.not_found": "The specified job could not be found", - "error.job.complete": "Unable to delete the job, perhaps it already completed", - "error.job.instance_offline": "The instance is offline", - "error.instance.no_db_entity": "The database entity for the requested instance could not be retrieved. The instance was likely detached", - "error.api.empty": "No description available", - "generic.save": "Save", - "generic.savepage": "Save Page", - "generic.saveall": "Save All", - "generic.details": "Details", - "generic.debugwarn": "Be careful to censor out any credentials or tokens when copying errors!", - "generic.close": "Close", - "generic.goback": "Go Back", - "generic.accessdenied": "This user does not have access to this page. ", - "generic.persist": "Persist", - "generic.continue": "Continue", - "generic.view": "View", - "generic.download": "Download", - "generic.name": "Name", - "generic.datetime": "Date/Time", - "generic.entry": "Entry", - "generic.action": "Action", - "generic.createdby": "Created By", - "generic.created": "Created", - "generic.disabled": "Disabled", - "generic.enabled": "Enabled", - "generic.tgs": "TGS", - "generic.info": "Info", - "generic.system.short": "SYS", - "generic.edit": "Edit", - "generic.systemidentifier": "System Identifier", - "generic.appname": "tgstation-server", - "generic.userid": "User ID ", - "generic.setall": "Set all", - "generic.true": "True", - "generic.false": "False", - "generic.reset": "Reset", - "generic.disable": "Disable", - "generic.enable": "Enable", - "generic.configmode": "Configuration Mode", - "generic.online": "Online", - "generic.offline": "Offline", - "generic.path": "Path", - "generic.select": "Select", - "view.admin.hostos": "Host Machine OS: ", - "view.admin.remote": "Remote repository: ", - "view.admin.version.current": "Current Version: ", - "view.admin.version.latest": "Latest Version: ", - "view.admin.reboot.button": "Restart TGS", - "view.admin.reboot.modal.title": "Confirmation", - "view.admin.reboot.modal.body": "Are you sure you wish to restart TGS?", - "view.admin.update.button": "Update TGS", - "view.admin.update.selectversion": "Select Version", - "view.admin.update.latest": " (Latest)", - "view.admin.update.current": " (Current)", - "view.admin.update.releasenotes": "Release Notes", - "view.admin.update.wait": "Please take the time to read the release notes before proceeding", - "view.admin.update.showall": "Show all versions", - "view.admin.logs.button": "TGS Logs", - "view.user.list.cantlist": "This user does not have the permission to list users, only the current user is listed/editable.", - "view.user.edit.cantedit": "This user does not have the permission to edit users.", - "view.user.passwd.title": "Editing password for ", - "view.user.create.tgs": "Create user with TGS identifier", - "view.user.create.sys": "Create user with system identifier", - "view.instance.list.title": "Instance List", - "view.instance.list.set.online": "Set Online", - "view.instance.list.set.offline": "Set Offline", - "view.instance.configmode.0": "Disabled", - "view.instance.configmode.1": "Authorized users can read/write", - "view.instance.configmode.2": "Authorized users can read/write using their system user", - "view.instance.jobs.title": "Job list", - "view.instance.jobs.error": "An error occured", - "view.instance.moving": "[MOVING INSTANCE...]", - "perms.admin": "Administration Permissions", - "perms.admin.writeusers": "Edit Users", - "perms.admin.writeusers.desc": "Ability to edit users, if View Users is granted, all users can be edited, otherwise, only the current user can be edited", - "perms.admin.restarthost": "Restart TGS", - "perms.admin.restarthost.desc": "Ability to restart TGS", - "perms.admin.changeversion": "Update TGS", - "perms.admin.changeversion.desc": "Abilty to update TGS to a newer version", - "perms.admin.editownpassword": "Change Own Password", - "perms.admin.editownpassword.desc": "Ability to change their own password", - "perms.admin.readusers": "View Users", - "perms.admin.readusers.desc": "Ability to view all users", - "perms.admin.downloadlogs": "Access TGS logs", - "perms.admin.downloadlogs.desc": "Ability to view and download all TGS logs", - "perms.instance": "Instance Manager Permissions", - "perms.instance.read": "Read Accessible Instances", - "perms.instance.read.desc": "Ability to list and view instances the user is allowed access to. WARNING: Users who know the instance ID can still use the API to edit it using other permissions even if they lack this one.", - "perms.instance.create": "Create Instances", - "perms.instance.create.desc": "Ability to create new instances", - "perms.instance.rename": "Rename Instances", - "perms.instance.rename.desc": "Ability to rename instances", - "perms.instance.relocate": "Relocate Instances", - "perms.instance.relocate.desc": "Ablity to change the located of an instance on the file system", - "perms.instance.setonline": "Change Instance Online Status", - "perms.instance.setonline.desc": "Ability to set an instance as online or offline", - "perms.instance.delete": "Delete Instance", - "perms.instance.delete.desc": "Ablity to delete an instance", - "perms.instance.list": "Read All Instances", - "perms.instance.list.desc": "Ability to list and view all instances", - "perms.instance.setconfiguration": "Set Instance Configuration Mode", - "perms.instance.setconfiguration.desc": "Ability to set an instance's static file editing mode", - "perms.instance.setautoupdate": "Set Instance Autoupdate Interval", - "perms.instance.setautoupdate.desc": "Ability to set an instance's interval for automatic code updates", - "perms.instance.setchatbotlimit": "Set Instance Chatbot Limit", - "perms.instance.setchatbotlimit.desc": "Ability to change an instance's maximum amounts of bots", - "perms.instance.grantpermissions": "Grant All Permissions", - "perms.instance.grantpermissions.desc": "Ability to grant themselves all permissions on any instance", - "config.githubtoken": "Github token", - "config.githubtoken.desc": "You can supply a private authorization token for github to bypass some rate limiting on the github API.", - "config.apipath": "(Advanced) TGS API Path", - "config.apipath.desc": "Sets the API client server's path. Applies on next refresh.", - "config.jobpollinactive": "Inactive job poll delay (s)", - "config.jobpollinactive.desc": "After how many seconds should we check for new jobs if we dont have any active jobs", - "config.jobpollactive": "Active job poll delay (s)", - "config.jobpollactive.desc": "After how many seconds should we check for new jobs if we know about a job", - "config.jobswidgetdisplay": "Jobs Widget Display", - "config.jobswidgetdisplay.desc": "Display mode for the instance jobs widget", - "config.jobswidgetdisplay.enum.always": "Always display", - "config.jobswidgetdisplay.enum.auto": "Display when there are jobs", - "config.jobswidgetdisplay.enum.never": "Never display", - "loading.login": "Logging in...", - "loading.page": "Loading page: ", - "loading.page.notfound": "Loading page: NotFound", - "loading.app": "Loading app...", - "loading.admin": "Loading admin info...", - "loading.version": "Loading versions...", - "loading.updating": "Updating server...", - "loading.logs": "Loading Log(s)...", - "loading.info": "Loading Information...", - "loading.passwd": "Changing password...", - "loading.userlist": "Loading user list...", - "loading.user.load": "Loading user information...", - "loading.user.save": "Saving user information...", - "loading.user.create": "Creating user...", - "loading.instance.list": "Loading instance list...", - "loading.instance.jobs.list": "Loading job list..." -} diff --git a/src/Tgstation.Server.Host/ClientApp/src/utils/GithubClient.ts b/src/Tgstation.Server.Host/ClientApp/src/utils/GithubClient.ts deleted file mode 100644 index 2ae543f9da..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/utils/GithubClient.ts +++ /dev/null @@ -1,150 +0,0 @@ -import { retry } from "@octokit/plugin-retry"; -import { throttling } from "@octokit/plugin-throttling"; -import { RequestError } from "@octokit/request-error"; -import { Octokit } from "@octokit/rest"; -import { TypedEmitter } from "tiny-typed-emitter/lib"; - -import InternalError, { ErrorCode } from "../ApiClient/models/InternalComms/InternalError"; -import InternalStatus, { StatusCode } from "../ApiClient/models/InternalComms/InternalStatus"; -import configOptions from "../ApiClient/util/config"; - -export interface TGSVersion { - version: string; - body: string; - current: boolean; - old: boolean; -} - -interface IEvents {} - -/* eslint-disable */ - -async function hook(request: any, route: any, parameters?: any): Promise { - const endpoint = request.endpoint.merge(route as string, parameters); - - if (configOptions.githubtoken.value) { - endpoint.headers.authorization = `token ${configOptions.githubtoken.value}`; - } - - return request(endpoint); -} - -async function auth(): Promise { - if (configOptions.githubtoken.value) { - return { - type: "token", - tokenType: "pat", - token: configOptions.githubtoken.value - }; - } else { - return { - type: "unauthenticated" - }; - } -} - -const authStrategy = () => { - return Object.assign(auth.bind(null), { - hook: hook.bind(null) - }); -}; - -/* eslint-enable */ - -const e = new (class GithubClient extends TypedEmitter { - private readonly apiClient: Octokit; - - public constructor() { - super(); - - const octo = Octokit.plugin(retry, throttling); - - this.apiClient = new octo({ - authStrategy, - userAgent: "tgstation-server-control-panel/" + VERSION, - baseUrl: "https://api.github.com", - throttle: { - onRateLimit: ( - retryAfter: number, - options: { method: string; url: string; request: { retryCount: number } } - ) => { - console.warn( - `Request quota exhausted for request ${options.method} ${options.url}` - ); - - if (options.request.retryCount === 0) { - // only retries once - console.log(`Retrying after ${retryAfter} seconds!`); - return true; - } - return false; - }, - onAbuseLimit: (retryAfter: number, options: { method: string; url: string }) => { - // does not retry, only logs a warning - console.warn(`Abuse detected for request ${options.method} ${options.url}`); - } - } - }); - } - - public async getVersions({ - owner, - repo, - current, - all - }: { - owner: string; - repo: string; - current: string; - all?: boolean; - }): Promise> { - let payload: TGSVersion[]; - let oldversions = 0; - try { - payload = await this.apiClient.paginate( - this.apiClient.repos.listReleases, - { owner, repo }, - (response, done) => { - return response.data.reduce((result, release) => { - const match = /tgstation-server-v([\d.]+)/.exec(release.name); - if (!match) return result; - if (match[1][0] !== "4") return result; - - const version = match[1]; - let old = false; - - //show 3 outdated versions(2 if you count the current one) - if (version <= current) { - if (oldversions >= 3 && !all) { - (done as () => void)(); - return result; - } - oldversions++; - old = true; - } - - result.push({ - version, - body: release.body, - current: version === current, - old - }); - return result; - }, [] as TGSVersion[]); - } - ); - } catch (e) { - return new InternalStatus({ - code: StatusCode.ERROR, - error: new InternalError(ErrorCode.GITHUB_FAIL, { - jsError: e as RequestError - }) - }); - } - return new InternalStatus({ - code: StatusCode.OK, - payload - }); - } -})(); -export default e; diff --git a/src/Tgstation.Server.Host/ClientApp/src/utils/RouteController.ts b/src/Tgstation.Server.Host/ClientApp/src/utils/RouteController.ts deleted file mode 100644 index d9edfa0997..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/utils/RouteController.ts +++ /dev/null @@ -1,131 +0,0 @@ -import { TypedEmitter } from "tiny-typed-emitter/lib"; - -import LoginHooks from "../ApiClient/util/LoginHooks"; -import { AppCategories, AppRoute, AppRoutes, UnpopulatedAppCategory } from "./routes"; - -interface IEvents { - refresh: (routes: Array) => void; //auth - refreshAll: (routes: Array) => void; //noauth+auth -} - -//helper class to process AppRoutes -class RouteController extends TypedEmitter { - private refreshing = false; - - public constructor() { - super(); - this.refreshRoutes = this.refreshRoutes.bind(this); - - LoginHooks.addHook(this.refreshRoutes); - this.refreshRoutes().catch(console.error); - - //process categories - console.time("Category mapping"); - const catmap = new Map(); - - for (const val of Object.values(AppCategories)) { - val.routes = []; - //null asserted the name because that one is everywhere, even if the rest is partial - catmap.set(val.name!, val); - } - - for (const route of Object.values(AppRoutes)) { - if (!route.category) continue; - - const cat = catmap.get(route.category); - if (!cat) { - console.error("Route has invalid category", route); - continue; - } - - //this is guaranteed to be an array as its set in the loop above - cat.routes!.push(route); - - if (route.catleader) { - if (cat.leader) { - console.error("Category has two leaders", cat.leader, route); - continue; - } - cat.leader = route; - } - } - console.log("Categories mapped", catmap); - console.timeEnd("Category mapping"); - } - - public async refreshRoutes() { - if (this.refreshing) { - console.log("Already refreshing"); - return; - } //no need to refresh twice - - this.refreshing = true; - - const work = []; // we get all hidden routes no matter the authentification without waiting for the refresh - const routes = this.getImmediateRoutes(false); - - for (const route of routes) { - route.cachedAuth = undefined; - if (route.isAuthorized) { - work.push( - route.isAuthorized().then(auth => { - route.cachedAuth = auth; - }) - ); - } - } - - await Promise.all(work); //wait for all the authorized calls to complete - - this.emit("refresh", this.getImmediateRoutes(true)); - const routesNoAuth = this.getImmediateRoutes(false); - this.emit("refreshAll", routesNoAuth); - this.refreshing = false; - - console.log("Routes refreshed", routesNoAuth); - return await this.getRoutes(); - } - - private wait4refresh() { - return new Promise(resolve => { - if (!this.refreshing) { - resolve(); - return; - } - this.on("refresh", () => { - resolve(); - }); - }); - } - - public async getRoutes(auth = true): Promise { - await this.wait4refresh(); - - return this.getImmediateRoutes(auth); - } - - public getImmediateRoutes(auth = true) { - const results: Array = []; - - const propNames = Object.getOwnPropertyNames(AppRoutes); - for (let i = 0; i < propNames.length; i++) { - const name = propNames[i]; - const val = AppRoutes[name]; - - //we check for isauthorized here without calling because routes that lack the function are public - if (val.isAuthorized && !val.cachedAuth && auth) continue; //if not authorized and we only show authorized routes - - results.push(val); - } - - return results; - } - - //this is to ensure that the constructor(and that the categories are populated) is finished running before we try to access categories - public getCategories() { - //the second AppCategories here is a type that refers to { [key: string]: AppCategory } - return AppCategories as AppCategories; - } -} - -export default new RouteController(); diff --git a/src/Tgstation.Server.Host/ClientApp/src/utils/delay.ts b/src/Tgstation.Server.Host/ClientApp/src/utils/delay.ts deleted file mode 100644 index d07b5a3958..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/utils/delay.ts +++ /dev/null @@ -1,7 +0,0 @@ -const delay = (milliseconds: number): Promise => { - return new Promise(resolve => { - setTimeout(resolve, milliseconds); - }); -}; - -export default delay; diff --git a/src/Tgstation.Server.Host/ClientApp/src/utils/globalObjects.ts b/src/Tgstation.Server.Host/ClientApp/src/utils/globalObjects.ts deleted file mode 100644 index 033b0bf15b..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/utils/globalObjects.ts +++ /dev/null @@ -1,8 +0,0 @@ -//this should be a proper data store thing eventually but it will do 4 now -import Translation from "../translations/Translation"; - -export interface GlobalObjects { - translation: Translation; -} - -export const GlobalObjects = {}; diff --git a/src/Tgstation.Server.Host/ClientApp/src/utils/icolibrary.ts b/src/Tgstation.Server.Host/ClientApp/src/utils/icolibrary.ts deleted file mode 100644 index 51f2d24bfa..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/utils/icolibrary.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { library } from "@fortawesome/fontawesome-svg-core"; -import { faAngleRight } from "@fortawesome/free-solid-svg-icons/faAngleRight"; -import { faCheck } from "@fortawesome/free-solid-svg-icons/faCheck"; -import { faCogs } from "@fortawesome/free-solid-svg-icons/faCogs"; -import { faExclamationCircle } from "@fortawesome/free-solid-svg-icons/faExclamationCircle"; -import { faGripLinesVertical } from "@fortawesome/free-solid-svg-icons/faGripLinesVertical"; -import { faHdd } from "@fortawesome/free-solid-svg-icons/faHdd"; -import { faHome } from "@fortawesome/free-solid-svg-icons/faHome"; -import { faInfo } from "@fortawesome/free-solid-svg-icons/faInfo"; -import { faKey } from "@fortawesome/free-solid-svg-icons/faKey"; -import { faPen } from "@fortawesome/free-solid-svg-icons/faPen"; -import { faPlus } from "@fortawesome/free-solid-svg-icons/faPlus"; -import { faQuestion } from "@fortawesome/free-solid-svg-icons/faQuestion"; -import { faSync } from "@fortawesome/free-solid-svg-icons/faSync"; -import { faTimes } from "@fortawesome/free-solid-svg-icons/faTimes"; -import { faTools } from "@fortawesome/free-solid-svg-icons/faTools"; -import { faUndo } from "@fortawesome/free-solid-svg-icons/faUndo"; -import { faUser } from "@fortawesome/free-solid-svg-icons/faUser"; -import { faUserSlash } from "@fortawesome/free-solid-svg-icons/faUserSlash"; - -export default function () { - library.add( - faCheck, - faTimes, - faExclamationCircle, - faUser, - faUserSlash, - faHdd, - faSync, - faPlus, - faQuestion, - faHome, - faTools, - faCogs, - faUndo, - faInfo, - faGripLinesVertical, - faAngleRight, - faKey, - faPen - ); -} diff --git a/src/Tgstation.Server.Host/ClientApp/src/utils/misc.ts b/src/Tgstation.Server.Host/ClientApp/src/utils/misc.ts deleted file mode 100644 index b417d32ec8..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/utils/misc.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { pathToRegexp } from "path-to-regexp"; - -function getSavedCreds(): string[] | null { - let usr: string | null = null; - let pwd: string | null = null; - try { - //private browsing on safari can throw when using storage - usr = window.localStorage.getItem("username"); - pwd = window.localStorage.getItem("password"); - } catch (e) { - // eslint-disable-next-line @typescript-eslint/no-empty-function - (() => {})(); //noop - } - - if (usr && pwd) { - return [usr, pwd]; - } else { - return null; - } -} - -function download(filename: string, text: string): void { - const element = document.createElement("a"); - element.setAttribute("href", "data:text/plain;charset=utf-8," + encodeURIComponent(text)); - element.setAttribute("download", filename); - - element.style.display = "none"; - document.body.appendChild(element); - - element.click(); - - document.body.removeChild(element); -} - -function replaceAll(str: string, find: string, replace: string, ignore?: boolean): string { - return str.replace( - new RegExp(find.replace(/([/,!\\^${}[\]().*+?|<>\-&])/g, "\\$&"), ignore ? "gi" : "g"), - replace.replace(/\$/g, "$$$$") - ); -} - -function matchesPath(path: string, target: string, exact = false): boolean { - //remove trailing slashes - if (path.slice(-1) === "/") path = path.slice(0, -1); - if (target.slice(-1) === "/") target = target.slice(0, -1); - - return pathToRegexp(target, undefined, { end: exact }).test(path); -} - -export { getSavedCreds, download, replaceAll, matchesPath }; diff --git a/src/Tgstation.Server.Host/ClientApp/src/utils/routes.ts b/src/Tgstation.Server.Host/ClientApp/src/utils/routes.ts deleted file mode 100644 index 7bdb97d127..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/src/utils/routes.ts +++ /dev/null @@ -1,397 +0,0 @@ -import { IconProp } from "@fortawesome/fontawesome-svg-core"; - -import { AdministrationRights, InstanceManagerRights } from "../ApiClient/generatedcode/_enums"; -import { StatusCode } from "../ApiClient/models/InternalComms/InternalStatus"; -import UserClient from "../ApiClient/UserClient"; -import CredentialsProvider from "../ApiClient/util/CredentialsProvider"; -import JobsController from "../ApiClient/util/JobsController"; - -export interface AppRoute { - ///Base parameters - //must be unique, also is the id of the route name message - name: string; - //must be unique, url to access - route: string; - //link to link to when linking to the route, defaults to the "route" - link?: string; - //filename in components/view that the route should display - file: string; - - ///Path parameters - //If subpaths should route here - loose: boolean; - //If subpaths should light up the navbar button - navbarLoose: boolean; - - ///Authentication - //if we can route to it even on the login page - loginless?: boolean; - //function to tell if we are authorized - isAuthorized: () => Promise; - //result of isAuthorized() after RouteController runs it, can be used by components but only set by RouteController - cachedAuth?: boolean; - - ///Visibility - //if this shows up on the navbar - visibleNavbar: boolean; - //serves two purposes, first one is to give it an icon, the second one is to not display it if the icon is undefined - homeIcon?: IconProp; - - ///Categories - //name of the category it belongs to - category?: string; - //if this is the main button in the category - catleader?: boolean; -} - -function adminRight(right: AdministrationRights) { - return async (): Promise => { - if (!CredentialsProvider.isTokenValid()) return false; - const response = await UserClient.getCurrentUser(); - - if (response.code == StatusCode.OK) { - return !!(response.payload!.administrationRights! & right); - } - return false; - }; -} - -function instanceManagerRight(right: InstanceManagerRights) { - return async (): Promise => { - if (!CredentialsProvider.isTokenValid()) return false; - const response = await UserClient.getCurrentUser(); - - if (response.code == StatusCode.OK) { - return !!(response.payload!.instanceManagerRights! & right); - } - return false; - }; -} - -const AppRoutes: { - [id: string]: AppRoute; -} = { - home: { - name: "routes.home", - route: "/", - file: "Home", - - loose: false, - navbarLoose: false, - - isAuthorized: (): Promise => Promise.resolve(true), - - visibleNavbar: true, - homeIcon: undefined, - - category: "home", - catleader: true - }, - instancelist: { - name: "routes.instancelist", - route: "/instances/", - file: "Instance/List", - - loose: false, - navbarLoose: true, - - isAuthorized: instanceManagerRight(InstanceManagerRights.List | InstanceManagerRights.Read), - - visibleNavbar: true, - homeIcon: "hdd", - - category: "instance", - catleader: true - }, - instancecode: { - name: "routes.instancecode", - route: "/instances/code/:id(\\d+)/", - file: "Instance/CodeDeployment", - - get link(): string { - return AppCategories.instance.data?.instanceid !== undefined - ? `/instances/code/${AppCategories.instance.data.instanceid}/` - : AppRoutes.instancelist.link || AppRoutes.instancelist.route; - }, - - loose: false, - navbarLoose: true, - - isAuthorized: (): Promise => Promise.resolve(true), - - visibleNavbar: true, - homeIcon: undefined, - - category: "instance" - }, - instancehosting: { - name: "routes.instancehosting", - route: "/instances/hosting/:id(\\d+)/", - file: "Instance/Hosting", - - get link(): string { - return AppCategories.instance.data?.instanceid !== undefined - ? `/instances/hosting/${AppCategories.instance.data.instanceid}/` - : AppRoutes.instancelist.link || AppRoutes.instancelist.route; - }, - - loose: false, - navbarLoose: true, - - isAuthorized: (): Promise => Promise.resolve(true), - - visibleNavbar: true, - homeIcon: undefined, - - category: "instance" - }, - instancejobs: { - name: "routes.instancejobs", - route: "/instances/jobs/:id(\\d+)/:jobid(\\d+)?/", - file: "Instance/Jobs", - - get link(): string { - return AppCategories.instance.data?.instanceid !== undefined - ? `/instances/jobs/${AppCategories.instance.data.instanceid}/${ - AppCategories.instance.data.lastjob !== undefined - ? `${AppCategories.instance.data.lastjob}/` - : "" - }` - : AppRoutes.instancelist.link || AppRoutes.instancelist.route; - }, - - loose: false, - navbarLoose: true, - - isAuthorized: (): Promise => Promise.resolve(true), - - visibleNavbar: true, - homeIcon: undefined, - - category: "instance" - }, - instanceconfig: { - name: "routes.instanceconfig", - route: "/instances/config/:id(\\d+)/", - file: "Instance/Config", - - get link(): string { - return AppCategories.instance.data?.instanceid !== undefined - ? `/instances/config/${AppCategories.instance.data.instanceid}/` - : AppRoutes.instancelist.link || AppRoutes.instancelist.route; - }, - - loose: false, - navbarLoose: true, - - isAuthorized: (): Promise => Promise.resolve(true), - - visibleNavbar: true, - homeIcon: undefined, - - category: "instance" - }, - userlist: { - name: "routes.usermanager", - route: "/users/", - file: "User/List", - - loose: false, - navbarLoose: true, - - //you can always read your own user - isAuthorized: (): Promise => Promise.resolve(true), - - visibleNavbar: true, - homeIcon: "user", - - category: "user", - catleader: true - }, - useredit: { - name: "routes.useredit", - route: "/users/edit/:id(\\d+)/:tab?/", - - //whole lot of bullshit just to make it that if you have an id, link to the edit page, otherwise link to the list page, and if you link to the user page, put the tab in - get link(): string { - return AppCategories.user.data?.selectedid !== undefined - ? `/users/edit/${AppCategories.user.data?.selectedid}/${ - AppCategories.user.data?.tab !== undefined - ? `${AppCategories.user.data?.tab}/` - : "" - }` - : AppRoutes.userlist.link || AppRoutes.userlist.route; - }, - file: "User/Edit", - - loose: true, - navbarLoose: true, - - //you can always read your own user - isAuthorized: (): Promise => Promise.resolve(true), - - visibleNavbar: true, - homeIcon: undefined, - - category: "user" - }, - usercreate: { - name: "routes.usercreate", - route: "/users/create/", - - link: "/users/create/", - file: "User/Create", - - loose: true, - navbarLoose: true, - - isAuthorized: adminRight(AdministrationRights.WriteUsers), - - visibleNavbar: true, - homeIcon: undefined, - - category: "user" - }, - admin: { - name: "routes.admin", - route: "/admin/", - file: "Administration", - - loose: false, - navbarLoose: true, - - isAuthorized: (): Promise => Promise.resolve(true), - - visibleNavbar: true, - homeIcon: "tools", - - category: "admin", - catleader: true - }, - admin_update: { - name: "routes.admin.update", - route: "/admin/update/:all?/", - file: "Admin/Update", - - link: "/admin/update/", - - loose: true, - navbarLoose: true, - - isAuthorized: adminRight(AdministrationRights.ChangeVersion), - visibleNavbar: true, - homeIcon: undefined, - - category: "admin" - }, - admin_logs: { - name: "routes.admin.logs", - route: "/admin/logs/:name?/", - link: "/admin/logs/", - file: "Admin/Logs", - - loose: false, - navbarLoose: true, - - isAuthorized: adminRight(AdministrationRights.DownloadLogs), - visibleNavbar: true, - homeIcon: undefined, - - category: "admin" - }, - passwd: { - name: "routes.passwd", - route: "/users/passwd/:id(\\d+)?/", - link: "/users/passwd/", - file: "ChangePassword", - - loose: true, - navbarLoose: true, - - isAuthorized: adminRight(AdministrationRights.EditOwnPassword), - - visibleNavbar: false, - homeIcon: "key" - }, - config: { - name: "routes.config", - route: "/config/", - file: "Configuration", - - loose: true, - navbarLoose: true, - - loginless: true, - isAuthorized: (): Promise => Promise.resolve(true), - - visibleNavbar: false, - homeIcon: "cogs" - } -}; - -export { AppRoutes }; - -export type UnpopulatedAppCategory = Partial; - -export interface AppCategory { - name: string; //doesnt really matter, kinda bullshit - routes: AppRoute[]; - leader: AppRoute; - data: Record; -} - -export type UnpopulatedAppCategories = { - [key: string]: UnpopulatedAppCategory; -}; - -export type AppCategories = { - [key: string]: AppCategory; -}; - -export const AppCategories: UnpopulatedAppCategories = { - home: { - name: "home" - }, - instance: { - name: "instance", - - data: { - _instanceid: undefined as number | undefined, - set instanceid(newval: string | undefined) { - let id: number | undefined; - //Undefined as a value is ok - if (newval === undefined) { - id = undefined; - } else { - //check if its a number - id = parseInt(newval); - if (Number.isNaN(id)) { - return; - } - } - - //setting the instance id causes the thing to drop all jobs its aware of, so avoid when possible - if (this._instanceid == id) { - return; - } - - this._instanceid = id; - JobsController.instance = id; - }, - get instanceid(): string | undefined { - return this._instanceid?.toString(); - } - } - }, - user: { - name: "user" - }, - admin: { - name: "admin" - } -}; - -//Either pass the instance id or pass an empty string -JobsController.setInstance = instance => { - AppCategories.instance.data!.instanceid = instance?.toString(); -}; diff --git a/src/Tgstation.Server.Host/ClientApp/tsconfig.json b/src/Tgstation.Server.Host/ClientApp/tsconfig.json deleted file mode 100644 index f94aff668f..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/tsconfig.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "compilerOptions": { - "outDir": "build/lib", - "module": "esnext", - "target": "es6", - "lib": [ - "es5", - "es6", - "dom", - "dom.iterable" - ], - "sourceMap": true, - "allowJs": false, - "jsx": "react", - "moduleResolution": "node", - "forceConsistentCasingInFileNames": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noImplicitAny": true, - "importHelpers": true, - "strictNullChecks": true, - "strict": true, - "skipLibCheck": true, - "esModuleInterop": true, - "resolveJsonModule": true, - "noEmit": true, - "isolatedModules": true, - "allowSyntheticDefaultImports": true - }, - "exclude": [ - "node_modules", - "build", - "dist", - "src/ApiClient/generatedcode" - ], - "include": [ - "src" - ] -} diff --git a/src/Tgstation.Server.Host/ClientApp/webpack.common.js b/src/Tgstation.Server.Host/ClientApp/webpack.common.js deleted file mode 100644 index 164fcdc621..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/webpack.common.js +++ /dev/null @@ -1,126 +0,0 @@ -const HtmlWebpackPlugin = require("html-webpack-plugin"); -const { CleanWebpackPlugin } = require("clean-webpack-plugin"); -const CopyPlugin = require("copy-webpack-plugin"); - -module.exports = { - context: __dirname, - entry: { - //babel: '@babel/polyfill', - main: "./src/index.tsx" - }, - - optimization: { - runtimeChunk: "single", - splitChunks: { - chunks: "all", - cacheGroups: { - /* - packages: { - test: /[\\/]node_modules[\\/]/, - name: 'packages' - },*/ - api: { - priority: 1, - test: /[\\/]ApiClient[\\/]/, - enforce: true - } - } - } - }, - - resolve: { - extensions: [".ts", ".tsx", ".js"], - symlinks: false - }, - - module: { - rules: [ - { - test: /\.css$/, - exclude: /node_modules/, - loader: ["style-loader", "css-loader"], - sideEffects: true - }, - { - test: /\.(scss)$/, - use: [ - { - loader: "style-loader" - }, - { - loader: "css-loader" - }, - { - loader: "postcss-loader", - options: { - plugins: function () { - return [require("autoprefixer")]; - } - } - }, - { - loader: "fast-sass-loader" - } - ], - sideEffects: true - }, - { - test: /\.svg$/, - exclude: /node_modules/, - loader: "svg-loader" - }, - { - test: /\.[jt]sx?$/, - exclude: /node_modules/, - use: { - loader: "babel-loader", - options: { - cacheDirectory: true, - babelrc: false, - presets: [ - [ - "@babel/preset-env", - { - modules: false, - exclude: ["transform-regenerator"] - } - ], - "@babel/preset-typescript", - "@babel/preset-react" - ], - plugins: [ - ["@babel/plugin-proposal-class-properties", { loose: true }], - /*[ - '@babel/plugin-transform-runtime', - { - regenerator: false - } - ],*/ - "react-hot-loader/babel" - ] - } - } - } - ] - }, - - plugins: [ - new CleanWebpackPlugin(), - new HtmlWebpackPlugin({ - title: "TG Server Control Panel v0.4.0", - filename: "index.html", - template: "src/index.html" - }), - new CopyPlugin({ - patterns: [ - { - from: "public", - toType: "dir" - } - ] - }) - ], - node: { - fs: "empty" - } -}; diff --git a/src/Tgstation.Server.Host/ClientApp/webpack.dev.js b/src/Tgstation.Server.Host/ClientApp/webpack.dev.js deleted file mode 100644 index 228ab579c6..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/webpack.dev.js +++ /dev/null @@ -1,89 +0,0 @@ -const webpack = require("webpack"); - -const { merge } = require("webpack-merge"); -const common = require("./webpack.common.js"); -const path = require("path"); -const SpeedMeasurePlugin = require("speed-measure-webpack-plugin"); - -const profile = false; - -let smp; - -if (profile) { - smp = new SpeedMeasurePlugin({ - granularLoaderData: false - }); -} else { - smp = { - wrap: function (thing) { - return thing; - } - }; -} - -const publicPath = process.env.TGS_OVERRIDE_DEFAULT_BASEPATH || "/"; - -module.exports = smp.wrap( - merge(common, { - mode: "development", - devtool: "source-map", - - output: { - publicPath: publicPath, - filename: "[name].js", - path: path.resolve(__dirname, "dist") - }, - - optimization: { - removeAvailableModules: false, - removeEmptyChunks: false, - splitChunks: { - chunks: "all", - cacheGroups: { - packages: { - test: /[\\/]node_modules[\\/]/, - name: "packages" - } - } - } - }, - - devServer: { - contentBase: path.join(__dirname, "dist"), - compress: true, - hot: true, - overlay: true, - host: "0.0.0.0", //technically insecure? don't put nudes in your app, helps to test with mobile - port: 8080, - historyApiFallback: true - }, - - resolve: { - alias: { - "react-dom": "@hot-loader/react-dom" - } - }, - - module: { - rules: [ - // All output '.js' files will have any sourcemaps re-processed by 'source-map-loader'. - { - enforce: "pre", - exclude: /node_modules/, - test: /\.js$/, - loader: "source-map-loader" - } - ] - }, - - plugins: [ - new webpack.HotModuleReplacementPlugin({}), - new webpack.DefinePlugin({ - API_VERSION: JSON.stringify(require("./package.json").tgs_api_version), - VERSION: JSON.stringify(require("./package.json").version), - MODE: JSON.stringify("DEV"), - DEFAULT_BASEPATH: JSON.stringify(publicPath) - }) - ] - }) -); diff --git a/src/Tgstation.Server.Host/ClientApp/webpack.prod.js b/src/Tgstation.Server.Host/ClientApp/webpack.prod.js deleted file mode 100644 index 9bd590f90c..0000000000 --- a/src/Tgstation.Server.Host/ClientApp/webpack.prod.js +++ /dev/null @@ -1,79 +0,0 @@ -const ForkTsCheckerWebpackPlugin = require("fork-ts-checker-webpack-plugin"); -const TerserPlugin = require("terser-webpack-plugin"); -const webpack = require("webpack"); - -const { merge } = require("webpack-merge"); -const common = require("./webpack.common.js"); -const path = require("path"); - -const SpeedMeasurePlugin = require("speed-measure-webpack-plugin"); - -const profile = false; - -let smp; - -if (profile) { - smp = new SpeedMeasurePlugin({ - granularLoaderData: false - }); -} else { - smp = { - wrap: function (thing) { - return thing; - } - }; -} - -const publicPath = process.env.TGS_OVERRIDE_DEFAULT_BASEPATH || "/app/"; - -module.exports = smp.wrap( - merge(common, { - mode: "production", - optimization: { - minimize: true, - minimizer: [ - new TerserPlugin({ - test: /\.[jt]sx?$/ - }) - ], - splitChunks: { - cacheGroups: { - chunks: "all", - packages: { - maxInitialRequests: Infinity, - minSize: 5000, - priority: 3, - test: new RegExp("[\\/]node_modules[\\/]"), - name(module) { - // get the name. E.g. node_modules/packageName/not/this/part.js - // or node_modules/packageName - const packageName = module.context.match( - /[\\/]node_modules[\\/](.*?)([\\/]|$)/ - )[1]; - - // npm package names are URL-safe, but some servers don't like @ symbols - return `vendors/npm.${packageName.replace("@", "")}`; - } - } - } - } - }, - output: { - publicPath: publicPath, - filename: "[name].[contenthash].js", - path: path.resolve(__dirname, "dist") - }, - plugins: [ - new ForkTsCheckerWebpackPlugin(), - /*new webpack.debug.ProfilingPlugin({ - outputPath: 'profile.json' - }),*/ - new webpack.DefinePlugin({ - API_VERSION: JSON.stringify(require("./package.json").tgs_api_version), - VERSION: JSON.stringify(require("./package.json").version), - MODE: JSON.stringify("PROD"), - DEFAULT_BASEPATH: JSON.stringify(publicPath) - }) - ] - }) -); From fbe3ea3e7adf78f1c2529199330720a3c6642956 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Mon, 12 Oct 2020 15:16:19 -0400 Subject: [PATCH 11/18] Ignore entire ClientApp directory --- .gitignore | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 9b47efb6f7..c09ef4b2ac 100644 --- a/.gitignore +++ b/.gitignore @@ -16,8 +16,7 @@ artifacts/ /tests/DMAPI/travistester.dmb /src/Tgstation.Server.Host/appsettings.*.json /src/Tgstation.Server.Host/wwwroot -/src/Tgstation.Server.Host/ClientApp/node_modules -/src/Tgstation.Server.Host/ClientApp/build +/src/Tgstation.Server.Host/ClientApp /tools/ReleaseNotes/release_notes.md /tools/ReleaseNotes/Properties/launchSettings.json release_notes.md From f05b460e968fbaed440aedb257af8c75ec1b5af0 Mon Sep 17 00:00:00 2001 From: alexkar598 <25136265+alexkar598@users.noreply.github.com> Date: Mon, 12 Oct 2020 19:30:45 -0400 Subject: [PATCH 12/18] Maybe fixes the test unit? --- build/Version.props | 2 +- tests/Tgstation.Server.Tests/VersionsTest.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build/Version.props b/build/Version.props index af9216cd7e..b1c5e45de4 100644 --- a/build/Version.props +++ b/build/Version.props @@ -7,7 +7,7 @@ 7.3.2 8.3.2 5.2.6 - 0.4.0 + 1.0.1 1.1.0 diff --git a/tests/Tgstation.Server.Tests/VersionsTest.cs b/tests/Tgstation.Server.Tests/VersionsTest.cs index e3523c3d0d..2394fa0cb6 100644 --- a/tests/Tgstation.Server.Tests/VersionsTest.cs +++ b/tests/Tgstation.Server.Tests/VersionsTest.cs @@ -111,7 +111,7 @@ namespace Tgstation.Server.Tests dynamic json = JObject.Parse(jsonText); - string cpVersionString = json.dependencies["tgstation-server-control-panel"]; + string cpVersionString = json.version; Assert.IsTrue(Version.TryParse(cpVersionString, out var actual)); Assert.AreEqual(expected, actual); From 1953ed45cb83409e15af2a56727812dc25f8f5b9 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Mon, 12 Oct 2020 20:19:51 -0400 Subject: [PATCH 13/18] Incremental control panel building --- build/ControlPanelVersion.props | 6 ++++++ build/Version.props | 6 +++--- .../Tgstation.Server.Host.csproj | 20 +++++++++++++------ tests/Tgstation.Server.Tests/VersionsTest.cs | 10 +++++++--- tgstation-server.sln | 1 + tools/ReleaseNotes/Program.cs | 15 +++++++++++--- 6 files changed, 43 insertions(+), 15 deletions(-) create mode 100644 build/ControlPanelVersion.props diff --git a/build/ControlPanelVersion.props b/build/ControlPanelVersion.props new file mode 100644 index 0000000000..b37f46f016 --- /dev/null +++ b/build/ControlPanelVersion.props @@ -0,0 +1,6 @@ + + + + 1.0.1 + + diff --git a/build/Version.props b/build/Version.props index af9216cd7e..839609eafe 100644 --- a/build/Version.props +++ b/build/Version.props @@ -1,13 +1,13 @@ + + + - - 4.5.4 2.1.0 7.3.2 8.3.2 5.2.6 - 0.4.0 1.1.0 diff --git a/src/Tgstation.Server.Host/Tgstation.Server.Host.csproj b/src/Tgstation.Server.Host/Tgstation.Server.Host.csproj index 89e0133ed9..586ef980f6 100644 --- a/src/Tgstation.Server.Host/Tgstation.Server.Host.csproj +++ b/src/Tgstation.Server.Host/Tgstation.Server.Host.csproj @@ -1,4 +1,4 @@ - + @@ -17,15 +17,23 @@ true - + ClientApp/node_modules + ClientApp/.install-stamp ClientApp/node_modules/.install-stamp Linux ..\.. - - + + + + + + + + + @@ -35,7 +43,7 @@ - + @@ -109,7 +117,7 @@ - + PreserveNewest diff --git a/tests/Tgstation.Server.Tests/VersionsTest.cs b/tests/Tgstation.Server.Tests/VersionsTest.cs index e3523c3d0d..3216f5375d 100644 --- a/tests/Tgstation.Server.Tests/VersionsTest.cs +++ b/tests/Tgstation.Server.Tests/VersionsTest.cs @@ -1,4 +1,4 @@ -using Microsoft.VisualStudio.TestTools.UnitTesting; +using Microsoft.VisualStudio.TestTools.UnitTesting; using Newtonsoft.Json.Linq; using System; using System.IO; @@ -103,7 +103,11 @@ namespace Tgstation.Server.Tests [TestMethod] public void TestControlPanelVersion() { - var versionString = versionsPropertyGroup.Element(xmlNamespace + "TgsControlPanelVersion").Value; + var doc = XDocument.Load("../../../../../build/ControlPanelVersion.props"); + var project = doc.Root; + var controlPanelXmlNamespace = project.GetDefaultNamespace(); + var controlPanelVersionsPropertyGroup = project.Elements().First(); + var versionString = controlPanelVersionsPropertyGroup.Element(xmlNamespace + "TgsControlPanelVersion").Value; Assert.IsNotNull(versionString); Assert.IsTrue(Version.TryParse(versionString, out var expected)); @@ -111,7 +115,7 @@ namespace Tgstation.Server.Tests dynamic json = JObject.Parse(jsonText); - string cpVersionString = json.dependencies["tgstation-server-control-panel"]; + string cpVersionString = json.version; Assert.IsTrue(Version.TryParse(cpVersionString, out var actual)); Assert.AreEqual(expected, actual); diff --git a/tgstation-server.sln b/tgstation-server.sln index a42b049c29..a5009739d6 100644 --- a/tgstation-server.sln +++ b/tgstation-server.sln @@ -26,6 +26,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{6FF654E6 ProjectSection(SolutionItems) = preProject build\analyzers.ruleset = build\analyzers.ruleset build\BuildDox.ps1 = build\BuildDox.ps1 + build\ControlPanelVersion.props = build\ControlPanelVersion.props build\Dockerfile = build\Dockerfile build\GenerateMigrations.sh = build\GenerateMigrations.sh build\OpenApiValidationSettings.json = build\OpenApiValidationSettings.json diff --git a/tools/ReleaseNotes/Program.cs b/tools/ReleaseNotes/Program.cs index a068afd658..c997c7cee8 100644 --- a/tools/ReleaseNotes/Program.cs +++ b/tools/ReleaseNotes/Program.cs @@ -34,10 +34,14 @@ namespace ReleaseNotes var doNotCloseMilestone = args.Length > 1 && args[1].ToUpperInvariant() == "--NO-CLOSE"; - string propsPath = "../../../../../build/Version.props"; + var propsPath = "../../../../../build/Version.props"; if (args.Length > 1 && !doNotCloseMilestone) propsPath = args[1]; + var controlPanelPropsPath = "../../../../../build/Version.props"; + if (args.Length > 2 && !doNotCloseMilestone) + propsPath = args[2]; + const string ReleaseNotesEnvVar = "TGS4_RELEASE_NOTES_TOKEN"; var githubToken = Environment.GetEnvironmentVariable(ReleaseNotesEnvVar); if (String.IsNullOrWhiteSpace(githubToken) && !doNotCloseMilestone) @@ -49,7 +53,7 @@ namespace ReleaseNotes try { var client = new GitHubClient(new ProductHeaderValue("tgs_release_notes")); - if (!String.IsNullOrWhiteSpace(githubToken)) + if (!String.IsNullOrWhiteSpace(githubToken)) { client.Credentials = new Credentials(githubToken); } @@ -242,6 +246,11 @@ namespace ReleaseNotes var xmlNamespace = project.GetDefaultNamespace(); var versionsPropertyGroup = project.Elements().First(); + var doc2 = XDocument.Load(controlPanelPropsPath); + var project2 = doc.Root; + var controlPanelXmlNamespace = project.GetDefaultNamespace(); + var controlPanelVersionsPropertyGroup = project.Elements().First(); + var coreVersion = Version.Parse(versionsPropertyGroup.Element(xmlNamespace + "TgsCoreVersion").Value); if(coreVersion != version) { @@ -252,7 +261,7 @@ namespace ReleaseNotes var apiVersion = Version.Parse(versionsPropertyGroup.Element(xmlNamespace + "TgsApiVersion").Value); var configVersion = Version.Parse(versionsPropertyGroup.Element(xmlNamespace + "TgsConfigVersion").Value); var dmApiVersion = Version.Parse(versionsPropertyGroup.Element(xmlNamespace + "TgsDmapiVersion").Value); - var webControlVersion = Version.Parse(versionsPropertyGroup.Element(xmlNamespace + "TgsControlPanelVersion").Value); + var webControlVersion = Version.Parse(controlPanelVersionsPropertyGroup.Element(controlPanelXmlNamespace + "TgsControlPanelVersion").Value); var hostWatchdogVersion = Version.Parse(versionsPropertyGroup.Element(xmlNamespace + "TgsHostWatchdogVersion").Value); if (webControlVersion.Major == 0) From bb3b01087e1d7834d7f1b52d35f488ca5c78e7b0 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Mon, 12 Oct 2020 20:25:46 -0400 Subject: [PATCH 14/18] Fix Docker build --- build/Dockerfile | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/build/Dockerfile b/build/Dockerfile index db8ab3763e..5a1dd891fc 100644 --- a/build/Dockerfile +++ b/build/Dockerfile @@ -25,11 +25,10 @@ COPY build/Version.props Version.props WORKDIR /repo/src/Tgstation.Server.Host -COPY src/Tgstation.Server.Host/ClientApp ClientApp COPY src/Tgstation.Server.Host/Tgstation.Server.Host.csproj ./ # I cant figure out how to run npm as non root so eh -RUN npm set unsafe-perm true +RUN npm set unsafe-perm true RUN dotnet msbuild -target:NpmBuild RUN npm set unsafe-perm false @@ -64,7 +63,7 @@ RUN apt-get update \ gcc-multilib \ gdb \ && rm -rf /var/lib/apt/lists/* - + EXPOSE 5000 ENV General__ValidInstancePaths__0 /tgs4_instances From 3997203a4b7a52320ce258014f1f2ed58a674463 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Mon, 12 Oct 2020 20:35:57 -0400 Subject: [PATCH 15/18] Merge ClientPull and NpmInstall tasks --- src/Tgstation.Server.Host/Tgstation.Server.Host.csproj | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/Tgstation.Server.Host/Tgstation.Server.Host.csproj b/src/Tgstation.Server.Host/Tgstation.Server.Host.csproj index 586ef980f6..640122f0fc 100644 --- a/src/Tgstation.Server.Host/Tgstation.Server.Host.csproj +++ b/src/Tgstation.Server.Host/Tgstation.Server.Host.csproj @@ -20,26 +20,21 @@ ClientApp/node_modules - ClientApp/.install-stamp ClientApp/node_modules/.install-stamp Linux ..\.. - + - - - - - + From 3e9b75a48fd5e25293d15afd6cdfa1a64f782f76 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Mon, 12 Oct 2020 20:49:00 -0400 Subject: [PATCH 16/18] Add ControlPanelVersion.props to Docker build --- .dockerignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.dockerignore b/.dockerignore index d16f53ed31..d140bacc5d 100644 --- a/.dockerignore +++ b/.dockerignore @@ -20,6 +20,7 @@ build/** !build/tgs.png !build/stylecop.json !build/Version.props +!build/ControlPanelVersion.props docs src/DMAPI src/Tgstation.Server.Host/ClientApp/build From e6fffdde393e09ea3e1f99acbf183b0bc595039c Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Mon, 12 Oct 2020 20:49:19 -0400 Subject: [PATCH 17/18] Fix some versions XML navigation issues --- tests/Tgstation.Server.Tests/VersionsTest.cs | 6 +++--- tools/ReleaseNotes/Program.cs | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/Tgstation.Server.Tests/VersionsTest.cs b/tests/Tgstation.Server.Tests/VersionsTest.cs index 3216f5375d..bb9c7b4320 100644 --- a/tests/Tgstation.Server.Tests/VersionsTest.cs +++ b/tests/Tgstation.Server.Tests/VersionsTest.cs @@ -27,7 +27,7 @@ namespace Tgstation.Server.Tests var doc = XDocument.Load("../../../../../build/Version.props"); var project = doc.Root; xmlNamespace = project.GetDefaultNamespace(); - versionsPropertyGroup = project.Elements().First(); + versionsPropertyGroup = project.Elements().First(x => x.Name == xmlNamespace + "PropertyGroup"); Assert.IsNotNull(versionsPropertyGroup); } @@ -106,8 +106,8 @@ namespace Tgstation.Server.Tests var doc = XDocument.Load("../../../../../build/ControlPanelVersion.props"); var project = doc.Root; var controlPanelXmlNamespace = project.GetDefaultNamespace(); - var controlPanelVersionsPropertyGroup = project.Elements().First(); - var versionString = controlPanelVersionsPropertyGroup.Element(xmlNamespace + "TgsControlPanelVersion").Value; + var controlPanelVersionsPropertyGroup = project.Elements().First(x => x.Name == controlPanelXmlNamespace + "PropertyGroup"); + var versionString = controlPanelVersionsPropertyGroup.Element(controlPanelXmlNamespace + "TgsControlPanelVersion").Value; Assert.IsNotNull(versionString); Assert.IsTrue(Version.TryParse(versionString, out var expected)); diff --git a/tools/ReleaseNotes/Program.cs b/tools/ReleaseNotes/Program.cs index c997c7cee8..c6be5059df 100644 --- a/tools/ReleaseNotes/Program.cs +++ b/tools/ReleaseNotes/Program.cs @@ -1,4 +1,4 @@ -using Octokit; +using Octokit; using System; using System.Collections.Generic; using System.IO; @@ -244,12 +244,12 @@ namespace ReleaseNotes var doc = XDocument.Load(propsPath); var project = doc.Root; var xmlNamespace = project.GetDefaultNamespace(); - var versionsPropertyGroup = project.Elements().First(); + var versionsPropertyGroup = project.Elements().First(x => x.Name == xmlNamespace + "PropertyGroup"); var doc2 = XDocument.Load(controlPanelPropsPath); var project2 = doc.Root; var controlPanelXmlNamespace = project.GetDefaultNamespace(); - var controlPanelVersionsPropertyGroup = project.Elements().First(); + var controlPanelVersionsPropertyGroup = project.Elements().First(x => x.Name == controlPanelXmlNamespace + "PropertyGroup"); var coreVersion = Version.Parse(versionsPropertyGroup.Element(xmlNamespace + "TgsCoreVersion").Value); if(coreVersion != version) From f9e83c7aab4252c525d814fc4c3a6ae600ab620e Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Mon, 12 Oct 2020 21:14:57 -0400 Subject: [PATCH 18/18] Fix Docker build for real this time --- .dockerignore | 5 ++--- build/Dockerfile | 1 + 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.dockerignore b/.dockerignore index d140bacc5d..de4eb887ed 100644 --- a/.dockerignore +++ b/.dockerignore @@ -23,13 +23,12 @@ build/** !build/ControlPanelVersion.props docs src/DMAPI -src/Tgstation.Server.Host/ClientApp/build -src/Tgstation.Server.Host/ClientApp/node_modules +src/Tgstation.Server.Host/ClientApp src/Tgstation.Server.Host/wwwroot src/Tgstation.Server.Host/appsettings.Development.json src/Tgstation.Server.Host/tgs.bat src/Tgstation.Server.Host/tgs.sh -src/Tgstation.Server.Host.Client +src/Tgstation.Server.Client src/Tgstation.Server.Host.Service tests tools diff --git a/build/Dockerfile b/build/Dockerfile index 5a1dd891fc..63efba1465 100644 --- a/build/Dockerfile +++ b/build/Dockerfile @@ -22,6 +22,7 @@ ENV PATH $NVM_DIR/versions/node/v$NODE_VERSION/bin:$PATH WORKDIR /repo/build COPY build/Version.props Version.props +COPY build/ControlPanelVersion.props ControlPanelVersion.props WORKDIR /repo/src/Tgstation.Server.Host