From a5a470b1537699ba29ee9f57d7ae0e3264ba513d Mon Sep 17 00:00:00 2001 From: Kim Myeongil <67570061+username1103@users.noreply.github.com> Date: Tue, 15 Nov 2022 21:36:11 +0900 Subject: [PATCH 001/142] =?UTF-8?q?[Feature]=20=EB=B0=B1=EC=97=94=EB=93=9C?= =?UTF-8?q?=20=ED=99=98=EA=B2=BD=20=EC=85=8B=ED=8C=85=20(#16)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * โœจ feature: nestjs ์ดˆ๊ธฐํ™” * ๐Ÿฅ… chore: eslint no-console ๊ฒฝ๊ณ  ์ถ”๊ฐ€ --- backend/.eslintrc.js | 26 + backend/.gitignore | 4 + backend/.prettierrc | 4 + backend/README.md | 73 + backend/nest-cli.json | 5 + backend/package-lock.json | 14582 +++++++++++++++++++++++++++ backend/package.json | 72 + backend/src/app.controller.spec.ts | 22 + backend/src/app.controller.ts | 12 + backend/src/app.module.ts | 10 + backend/src/app.service.ts | 8 + backend/src/main.ts | 8 + backend/test/app.e2e-spec.ts | 24 + backend/test/jest-e2e.json | 9 + backend/tsconfig.build.json | 4 + backend/tsconfig.json | 21 + 16 files changed, 14884 insertions(+) create mode 100644 backend/.eslintrc.js create mode 100644 backend/.gitignore create mode 100644 backend/.prettierrc create mode 100644 backend/README.md create mode 100644 backend/nest-cli.json create mode 100644 backend/package-lock.json create mode 100644 backend/package.json create mode 100644 backend/src/app.controller.spec.ts create mode 100644 backend/src/app.controller.ts create mode 100644 backend/src/app.module.ts create mode 100644 backend/src/app.service.ts create mode 100644 backend/src/main.ts create mode 100644 backend/test/app.e2e-spec.ts create mode 100644 backend/test/jest-e2e.json create mode 100644 backend/tsconfig.build.json create mode 100644 backend/tsconfig.json diff --git a/backend/.eslintrc.js b/backend/.eslintrc.js new file mode 100644 index 00000000..eb266cfb --- /dev/null +++ b/backend/.eslintrc.js @@ -0,0 +1,26 @@ +module.exports = { + parser: '@typescript-eslint/parser', + parserOptions: { + project: 'tsconfig.json', + tsconfigRootDir: __dirname, + sourceType: 'module', + }, + plugins: ['@typescript-eslint/eslint-plugin'], + extends: [ + 'plugin:@typescript-eslint/recommended', + 'plugin:prettier/recommended', + ], + root: true, + env: { + node: true, + jest: true, + }, + ignorePatterns: ['.eslintrc.js'], + rules: { + '@typescript-eslint/interface-name-prefix': 'off', + '@typescript-eslint/explicit-function-return-type': 'off', + '@typescript-eslint/explicit-module-boundary-types': 'off', + '@typescript-eslint/no-explicit-any': 'off', + 'no-console': 'warn', + }, +}; diff --git a/backend/.gitignore b/backend/.gitignore new file mode 100644 index 00000000..f44b766e --- /dev/null +++ b/backend/.gitignore @@ -0,0 +1,4 @@ +node_modules + +.DS.Store +dist \ No newline at end of file diff --git a/backend/.prettierrc b/backend/.prettierrc new file mode 100644 index 00000000..dcb72794 --- /dev/null +++ b/backend/.prettierrc @@ -0,0 +1,4 @@ +{ + "singleQuote": true, + "trailingComma": "all" +} \ No newline at end of file diff --git a/backend/README.md b/backend/README.md new file mode 100644 index 00000000..00a13b11 --- /dev/null +++ b/backend/README.md @@ -0,0 +1,73 @@ +

+ Nest Logo +

+ +[circleci-image]: https://img.shields.io/circleci/build/github/nestjs/nest/master?token=abc123def456 +[circleci-url]: https://circleci.com/gh/nestjs/nest + +

A progressive Node.js framework for building efficient and scalable server-side applications.

+

+NPM Version +Package License +NPM Downloads +CircleCI +Coverage +Discord +Backers on Open Collective +Sponsors on Open Collective + + Support us + +

+ + +## Description + +[Nest](https://github.com/nestjs/nest) framework TypeScript starter repository. + +## Installation + +```bash +$ npm install +``` + +## Running the app + +```bash +# development +$ npm run start + +# watch mode +$ npm run start:dev + +# production mode +$ npm run start:prod +``` + +## Test + +```bash +# unit tests +$ npm run test + +# e2e tests +$ npm run test:e2e + +# test coverage +$ npm run test:cov +``` + +## Support + +Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you'd like to join them, please [read more here](https://docs.nestjs.com/support). + +## Stay in touch + +- Author - [Kamil Myล›liwiec](https://kamilmysliwiec.com) +- Website - [https://nestjs.com](https://nestjs.com/) +- Twitter - [@nestframework](https://twitter.com/nestframework) + +## License + +Nest is [MIT licensed](LICENSE). diff --git a/backend/nest-cli.json b/backend/nest-cli.json new file mode 100644 index 00000000..25664811 --- /dev/null +++ b/backend/nest-cli.json @@ -0,0 +1,5 @@ +{ + "$schema": "https://json.schemastore.org/nest-cli", + "collection": "@nestjs/schematics", + "sourceRoot": "src" +} diff --git a/backend/package-lock.json b/backend/package-lock.json new file mode 100644 index 00000000..6bf81cbf --- /dev/null +++ b/backend/package-lock.json @@ -0,0 +1,14582 @@ +{ + "name": "backend", + "version": "0.0.1", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "backend", + "version": "0.0.1", + "license": "UNLICENSED", + "dependencies": { + "@nestjs/common": "^9.0.0", + "@nestjs/core": "^9.0.0", + "@nestjs/platform-express": "^9.0.0", + "reflect-metadata": "^0.1.13", + "rimraf": "^3.0.2", + "rxjs": "^7.2.0" + }, + "devDependencies": { + "@nestjs/cli": "^9.0.0", + "@nestjs/schematics": "^9.0.0", + "@nestjs/testing": "^9.0.0", + "@types/express": "^4.17.13", + "@types/jest": "28.1.8", + "@types/node": "^16.0.0", + "@types/supertest": "^2.0.11", + "@typescript-eslint/eslint-plugin": "^5.0.0", + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^8.0.1", + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-prettier": "^4.0.0", + "jest": "28.1.3", + "prettier": "^2.3.2", + "source-map-support": "^0.5.20", + "supertest": "^6.1.3", + "ts-jest": "28.0.8", + "ts-loader": "^9.2.3", + "ts-node": "^10.0.0", + "tsconfig-paths": "4.1.0", + "typescript": "^4.7.4" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@angular-devkit/core": { + "version": "14.2.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-14.2.2.tgz", + "integrity": "sha512-ofDhTmJqoAkmkJP0duwUaCxDBMxPlc+AWYwgs3rKKZeJBb0d+tchEXHXevD5bYbbRfXtnwM+Vye2XYHhA4nWAA==", + "dev": true, + "dependencies": { + "ajv": "8.11.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.1.0", + "rxjs": "6.6.7", + "source-map": "0.7.4" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/core/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@angular-devkit/core/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@angular-devkit/schematics": { + "version": "14.2.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-14.2.2.tgz", + "integrity": "sha512-90hseNg1yQ2AR+lVr/NByZRHnYAlzCL6hr9p9q1KPHxA3Owo04yX6n6dvR/xf27hCopXInXKPsasR59XCx5ZOQ==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "14.2.2", + "jsonc-parser": "3.1.0", + "magic-string": "0.26.2", + "ora": "5.4.1", + "rxjs": "6.6.7" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/schematics-cli": { + "version": "14.2.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics-cli/-/schematics-cli-14.2.2.tgz", + "integrity": "sha512-timCty5tO1A5VOcy8nVJ+jL98i6+ct5/Hg+4rQxc3J6agmmNL9fALboJBEz1ckTt7MewlGtrpohMMy+YGhuWOg==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "14.2.2", + "@angular-devkit/schematics": "14.2.2", + "ansi-colors": "4.1.3", + "inquirer": "8.2.4", + "symbol-observable": "4.0.0", + "yargs-parser": "21.1.1" + }, + "bin": { + "schematics": "bin/schematics.js" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/schematics-cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@angular-devkit/schematics-cli/node_modules/inquirer": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", + "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@angular-devkit/schematics/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@angular-devkit/schematics/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", + "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.2.tgz", + "integrity": "sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.2", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-module-transforms": "^7.20.2", + "@babel/helpers": "^7.20.1", + "@babel/parser": "^7.20.2", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.2", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.20.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz", + "integrity": "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.2", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", + "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.20.0", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "dev": true, + "dependencies": { + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", + "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz", + "integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/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==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.20.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", + "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", + "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", + "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.1", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.20.1", + "@babel/types": "^7.20.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", + "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@eslint/eslintrc/node_modules/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==", + "dev": true + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", + "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/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, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/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, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/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, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/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, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", + "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "slash": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/console/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/core": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz", + "integrity": "sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA==", + "dev": true, + "dependencies": { + "@jest/console": "^28.1.3", + "@jest/reporters": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^28.1.3", + "jest-config": "^28.1.3", + "jest-haste-map": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.3", + "jest-resolve-dependencies": "^28.1.3", + "jest-runner": "^28.1.3", + "jest-runtime": "^28.1.3", + "jest-snapshot": "^28.1.3", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "jest-watcher": "^28.1.3", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/core/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/environment": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz", + "integrity": "sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "jest-mock": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.3.tgz", + "integrity": "sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw==", + "dev": true, + "dependencies": { + "expect": "^28.1.3", + "jest-snapshot": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz", + "integrity": "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==", + "dev": true, + "dependencies": { + "jest-get-type": "^28.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz", + "integrity": "sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.3", + "@sinonjs/fake-timers": "^9.1.2", + "@types/node": "*", + "jest-message-util": "^28.1.3", + "jest-mock": "^28.1.3", + "jest-util": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.3.tgz", + "integrity": "sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA==", + "dev": true, + "dependencies": { + "@jest/environment": "^28.1.3", + "@jest/expect": "^28.1.3", + "@jest/types": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz", + "integrity": "sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@jridgewell/trace-mapping": "^0.3.13", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz", + "integrity": "sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.13", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", + "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", + "dev": true, + "dependencies": { + "@jest/console": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz", + "integrity": "sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^28.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "slash": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", + "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^28.1.3", + "@jridgewell/trace-mapping": "^0.3.13", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/transform/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@nestjs/cli": { + "version": "9.1.5", + "resolved": "https://registry.npmjs.org/@nestjs/cli/-/cli-9.1.5.tgz", + "integrity": "sha512-rSp26+Nv7PFtYrRSP18Gv5ZK8rRSc2SCCF5wh4SdZaVGgkxShpNq9YEfI+ik/uziN3KC5o74ppYRXGj+aHGVsA==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "14.2.2", + "@angular-devkit/schematics": "14.2.2", + "@angular-devkit/schematics-cli": "14.2.2", + "@nestjs/schematics": "^9.0.0", + "chalk": "3.0.0", + "chokidar": "3.5.3", + "cli-table3": "0.6.2", + "commander": "4.1.1", + "fork-ts-checker-webpack-plugin": "7.2.13", + "inquirer": "7.3.3", + "node-emoji": "1.11.0", + "ora": "5.4.1", + "os-name": "4.0.1", + "rimraf": "3.0.2", + "shelljs": "0.8.5", + "source-map-support": "0.5.21", + "tree-kill": "1.2.2", + "tsconfig-paths": "4.1.0", + "tsconfig-paths-webpack-plugin": "4.0.0", + "typescript": "4.8.4", + "webpack": "5.74.0", + "webpack-node-externals": "3.0.0" + }, + "bin": { + "nest": "bin/nest.js" + }, + "engines": { + "node": ">= 12.9.0" + } + }, + "node_modules/@nestjs/cli/node_modules/webpack": { + "version": "5.74.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", + "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/@nestjs/common": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-9.2.0.tgz", + "integrity": "sha512-Ndcqak/ETYi+n1c5lFRPbxKLyUuM6DIOxcvfEFGfi0f6ad4dWDXRDx7z/n8V0l8+Y8djvvOHgf3t0e93w963Qg==", + "dependencies": { + "iterare": "1.2.1", + "tslib": "2.4.1", + "uuid": "9.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "cache-manager": "<=5", + "class-transformer": "*", + "class-validator": "*", + "reflect-metadata": "^0.1.12", + "rxjs": "^7.1.0" + }, + "peerDependenciesMeta": { + "cache-manager": { + "optional": true + }, + "class-transformer": { + "optional": true + }, + "class-validator": { + "optional": true + } + } + }, + "node_modules/@nestjs/core": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-9.2.0.tgz", + "integrity": "sha512-eVN7aXAavV+ImVt8mO+rQ5YyUP6lJtQKUtQHxHKzz6Wg+9Y67WWZS2uDcDX5NNcNijbWky5bqad86fgcK9Oqig==", + "hasInstallScript": true, + "dependencies": { + "@nuxtjs/opencollective": "0.3.2", + "fast-safe-stringify": "2.1.1", + "iterare": "1.2.1", + "object-hash": "3.0.0", + "path-to-regexp": "3.2.0", + "tslib": "2.4.1", + "uuid": "9.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "@nestjs/common": "^9.0.0", + "@nestjs/microservices": "^9.0.0", + "@nestjs/platform-express": "^9.0.0", + "@nestjs/websockets": "^9.0.0", + "reflect-metadata": "^0.1.12", + "rxjs": "^7.1.0" + }, + "peerDependenciesMeta": { + "@nestjs/microservices": { + "optional": true + }, + "@nestjs/platform-express": { + "optional": true + }, + "@nestjs/websockets": { + "optional": true + } + } + }, + "node_modules/@nestjs/platform-express": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-9.2.0.tgz", + "integrity": "sha512-J1+nnzjC9ATSb0jSHBqAE6D4o+PIbGPItEfYTOZ0rkE5bvqnRfgO4q94SXhfri+5PaNx2vM8tOZsKaD0QmQRGQ==", + "dependencies": { + "body-parser": "1.20.1", + "cors": "2.8.5", + "express": "4.18.2", + "multer": "1.4.4-lts.1", + "tslib": "2.4.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "@nestjs/common": "^9.0.0", + "@nestjs/core": "^9.0.0" + } + }, + "node_modules/@nestjs/schematics": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-9.0.3.tgz", + "integrity": "sha512-kZrU/lrpVd2cnK8I3ibDb3Wi1ppl3wX3U3lVWoL+DzRRoezWKkh8upEL4q0koKmuXnsmLiu3UPxFeMOrJV7TSA==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "14.2.1", + "@angular-devkit/schematics": "14.2.1", + "fs-extra": "10.1.0", + "jsonc-parser": "3.2.0", + "pluralize": "8.0.0" + }, + "peerDependencies": { + "typescript": "^4.3.5" + } + }, + "node_modules/@nestjs/schematics/node_modules/@angular-devkit/core": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-14.2.1.tgz", + "integrity": "sha512-lW8oNGuJqr4r31FWBjfWQYkSXdiOHBGOThIEtHvUVBKfPF/oVrupLueCUgBPel+NvxENXdo93uPsqHN7bZbmsQ==", + "dev": true, + "dependencies": { + "ajv": "8.11.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.1.0", + "rxjs": "6.6.7", + "source-map": "0.7.4" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@nestjs/schematics/node_modules/@angular-devkit/core/node_modules/jsonc-parser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.1.0.tgz", + "integrity": "sha512-DRf0QjnNeCUds3xTjKlQQ3DpJD51GvDjJfnxUVWg6PZTo2otSm+slzNAxU/35hF8/oJIKoG9slq30JYOsF2azg==", + "dev": true + }, + "node_modules/@nestjs/schematics/node_modules/@angular-devkit/schematics": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-14.2.1.tgz", + "integrity": "sha512-0U18FwDYt4zROBPrvewH6iBTkf2ozVHN4/gxUb9jWrqVw8mPU5AWc/iYxQLHBSinkr2Egjo1H/i9aBqgJSeh3g==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "14.2.1", + "jsonc-parser": "3.1.0", + "magic-string": "0.26.2", + "ora": "5.4.1", + "rxjs": "6.6.7" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@nestjs/schematics/node_modules/@angular-devkit/schematics/node_modules/jsonc-parser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.1.0.tgz", + "integrity": "sha512-DRf0QjnNeCUds3xTjKlQQ3DpJD51GvDjJfnxUVWg6PZTo2otSm+slzNAxU/35hF8/oJIKoG9slq30JYOsF2azg==", + "dev": true + }, + "node_modules/@nestjs/schematics/node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, + "node_modules/@nestjs/schematics/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@nestjs/schematics/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@nestjs/testing": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-9.2.0.tgz", + "integrity": "sha512-Lj6UXmBJKcXB16bZzu0IG7GpH7hl5Cn71OcPSrVVuPrFd5kDYqFbodfE9OkAKaHjEhOvZ2ynoo/i6cyfX4yOvQ==", + "dev": true, + "dependencies": { + "tslib": "2.4.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "@nestjs/common": "^9.0.0", + "@nestjs/core": "^9.0.0", + "@nestjs/microservices": "^9.0.0", + "@nestjs/platform-express": "^9.0.0" + }, + "peerDependenciesMeta": { + "@nestjs/microservices": { + "optional": true + }, + "@nestjs/platform-express": { + "optional": true + } + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nuxtjs/opencollective": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@nuxtjs/opencollective/-/opencollective-0.3.2.tgz", + "integrity": "sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==", + "dependencies": { + "chalk": "^4.1.0", + "consola": "^2.15.0", + "node-fetch": "^2.6.1" + }, + "bin": { + "opencollective": "bin/opencollective.js" + }, + "engines": { + "node": ">=8.0.0", + "npm": ">=5.0.0" + } + }, + "node_modules/@nuxtjs/opencollective/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==", + "dev": true + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.5.tgz", + "integrity": "sha512-rTpCA0wG1wUxglBSFdMMY0oTrKYvgf4fNgv/sXbfCVAdf+FnPBdKJR/7XbpTCwbCrvCbdPYnlWaUUYz4V2fPDA==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", + "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "dev": true + }, + "node_modules/@types/babel__core": { + "version": "7.1.20", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.20.tgz", + "integrity": "sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.2.tgz", + "integrity": "sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.3.0" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/cookiejar": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.2.tgz", + "integrity": "sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==", + "dev": true + }, + "node_modules/@types/eslint": { + "version": "8.4.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", + "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true + }, + "node_modules/@types/express": { + "version": "4.17.14", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz", + "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.31", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", + "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "28.1.8", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-28.1.8.tgz", + "integrity": "sha512-8TJkV++s7B6XqnDrzR1m/TT0A0h948Pnl/097veySPN67VRAgQ4gZ7n2KfJo2rVq6njQjdxU3GCCyDvAeuHoiw==", + "dev": true, + "dependencies": { + "expect": "^28.0.0", + "pretty-format": "^28.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "node_modules/@types/mime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", + "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "16.18.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", + "dev": true + }, + "node_modules/@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 + }, + "node_modules/@types/prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==", + "dev": true + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "node_modules/@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, + "node_modules/@types/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", + "dev": true, + "dependencies": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, + "node_modules/@types/superagent": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.15.tgz", + "integrity": "sha512-mu/N4uvfDN2zVQQ5AYJI/g4qxn2bHB6521t1UuH09ShNWjebTqN0ZFuYK9uYjcgmI0dTQEs+Owi1EO6U0OkOZQ==", + "dev": true, + "dependencies": { + "@types/cookiejar": "*", + "@types/node": "*" + } + }, + "node_modules/@types/supertest": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.12.tgz", + "integrity": "sha512-X3HPWTwXRerBZS7Mo1k6vMVR1Z6zmJcDVn5O/31whe0tnjE4te6ZJSJGq1RiqHPjzPdMTfjCFogDJmwng9xHaQ==", + "dev": true, + "dependencies": { + "@types/superagent": "*" + } + }, + "node_modules/@types/yargs": { + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.43.0.tgz", + "integrity": "sha512-wNPzG+eDR6+hhW4yobEmpR36jrqqQv1vxBq5LJO3fBAktjkvekfr4BRl+3Fn1CM/A+s8/EiGUbOMDoYqWdbtXA==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/type-utils": "5.43.0", + "@typescript-eslint/utils": "5.43.0", + "debug": "^4.3.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.43.0.tgz", + "integrity": "sha512-2iHUK2Lh7PwNUlhFxxLI2haSDNyXvebBO9izhjhMoDC+S3XI9qt2DGFUsiJ89m2k7gGYch2aEpYqV5F/+nwZug==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/typescript-estree": "5.43.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.43.0.tgz", + "integrity": "sha512-XNWnGaqAtTJsUiZaoiGIrdJYHsUOd3BZ3Qj5zKp9w6km6HsrjPk/TGZv0qMTWyWj0+1QOqpHQ2gZOLXaGA9Ekw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/visitor-keys": "5.43.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.43.0.tgz", + "integrity": "sha512-K21f+KY2/VvYggLf5Pk4tgBOPs2otTaIHy2zjclo7UZGLyFH86VfUOm5iq+OtDtxq/Zwu2I3ujDBykVW4Xtmtg==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.43.0", + "@typescript-eslint/utils": "5.43.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.43.0.tgz", + "integrity": "sha512-jpsbcD0x6AUvV7tyOlyvon0aUsQpF8W+7TpJntfCUWU1qaIKu2K34pMwQKSzQH8ORgUrGYY6pVIh1Pi8TNeteg==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.43.0.tgz", + "integrity": "sha512-BZ1WVe+QQ+igWal2tDbNg1j2HWUkAa+CVqdU79L4HP9izQY6CNhXfkNwd1SS4+sSZAP/EthI1uiCSY/+H0pROg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/visitor-keys": "5.43.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.43.0.tgz", + "integrity": "sha512-8nVpA6yX0sCjf7v/NDfeaOlyaIIqL7OaIGOWSPFqUKK59Gnumd3Wa+2l8oAaYO2lk0sO+SbWFWRSvhu8gLGv4A==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/typescript-estree": "5.43.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.43.0.tgz", + "integrity": "sha512-icl1jNH/d18OVHLfcwdL3bWUKsBeIiKYTGxMJCoGe7xFht+E4QgzOqoWYrU8XSLJWhVw8nTacbm03v23J/hFTg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.43.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@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 + }, + "node_modules/@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 + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==" + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/babel-jest": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz", + "integrity": "sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q==", + "dev": true, + "dependencies": { + "@jest/transform": "^28.1.3", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^28.1.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz", + "integrity": "sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz", + "integrity": "sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^28.1.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/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, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001431", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz", + "integrity": "sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, + "node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.6.1.tgz", + "integrity": "sha512-up5ggbaDqOqJ4UqLKZ2naVkyqSJQgJi5lwD6b6mM748ysrghDBX0bx/qJTUHzw7zu6Mq4gycviSF5hJnwceD8w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "dev": true + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", + "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-table3": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.2.tgz", + "integrity": "sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, + "node_modules/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/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==" + }, + "node_modules/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, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/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 + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/cookiejar": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", + "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==", + "dev": true + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "node_modules/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, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dezalgo": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", + "integrity": "sha512-K7i4zNfT2kgQz3GylDw40ot9GAE47sFZ9EXHFSPP6zONLgH6kWXE0KWJchkbQJLBkRazq4APwZ4OwiFFlT95OQ==", + "dev": true, + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diff-sequences": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", + "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/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, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", + "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", + "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/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, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.27.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.27.0.tgz", + "integrity": "sha512-0y1bfG2ho7mty+SiILVf9PfuRA49ek4Nc60Wmmu62QlobNR+CeXa4xXIJgcuwSQgZiWaPH+5BDsctpIW0PR/wQ==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.3.3", + "@humanwhocodes/config-array": "^0.11.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.15.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "eslint": ">=7.28.0", + "prettier": ">=2.0.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/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==", + "dev": true + }, + "node_modules/espree": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz", + "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^28.1.3", + "jest-get-type": "^28.0.2", + "jest-matcher-utils": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/express/node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/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 + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/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==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/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, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "7.2.13", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-7.2.13.tgz", + "integrity": "sha512-fR3WRkOb4bQdWB/y7ssDUlVdrclvwtyCUIHCfivAoYxq9dF7XfrDKbMdZIfwJ7hxIAqkYSGeU7lLJE6xrxIBdg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "cosmiconfig": "^7.0.1", + "deepmerge": "^4.2.2", + "fs-extra": "^10.0.0", + "memfs": "^3.4.1", + "minimatch": "^3.0.4", + "node-abort-controller": "^3.0.1", + "schema-utils": "^3.1.1", + "semver": "^7.3.5", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">=12.13.0", + "yarn": ">=1.0.0" + }, + "peerDependencies": { + "typescript": ">3.6.0", + "vue-template-compiler": "*", + "webpack": "^5.11.0" + }, + "peerDependenciesMeta": { + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/formidable": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.0.1.tgz", + "integrity": "sha512-rjTMNbp2BpfQShhFbR3Ruk3qk2y9jKpvMW78nJgx8QKtxjDVrwbZG+wvDOmVbifHyOUOQJXxqEy6r0faRrPzTQ==", + "dev": true, + "dependencies": { + "dezalgo": "1.0.3", + "hexoid": "1.0.0", + "once": "1.4.0", + "qs": "6.9.3" + }, + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, + "node_modules/formidable/node_modules/qs": { + "version": "6.9.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.3.tgz", + "integrity": "sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw==", + "dev": true, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/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, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/globals": { + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/inquirer/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/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==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/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, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/iterare": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iterare/-/iterare-1.2.1.tgz", + "integrity": "sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/jest": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest/-/jest-28.1.3.tgz", + "integrity": "sha512-N4GT5on8UkZgH0O5LUavMRV1EDEhNTL0KEfRmDIeZHSV7p2XgLoY9t9VDUgL6o+yfdgYHVxuz81G8oB9VG5uyA==", + "dev": true, + "dependencies": { + "@jest/core": "^28.1.3", + "@jest/types": "^28.1.3", + "import-local": "^3.0.2", + "jest-cli": "^28.1.3" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz", + "integrity": "sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA==", + "dev": true, + "dependencies": { + "execa": "^5.0.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-circus": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.3.tgz", + "integrity": "sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow==", + "dev": true, + "dependencies": { + "@jest/environment": "^28.1.3", + "@jest/expect": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^28.1.3", + "jest-matcher-utils": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-runtime": "^28.1.3", + "jest-snapshot": "^28.1.3", + "jest-util": "^28.1.3", + "p-limit": "^3.1.0", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-circus/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-cli": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz", + "integrity": "sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==", + "dev": true, + "dependencies": { + "@jest/core": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^28.1.3", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "prompts": "^2.0.1", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-config": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz", + "integrity": "sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^28.1.3", + "@jest/types": "^28.1.3", + "babel-jest": "^28.1.3", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^28.1.3", + "jest-environment-node": "^28.1.3", + "jest-get-type": "^28.0.2", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.3", + "jest-runner": "^28.1.3", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-diff": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", + "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^28.1.1", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-docblock": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz", + "integrity": "sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-each": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz", + "integrity": "sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.3", + "chalk": "^4.0.0", + "jest-get-type": "^28.0.2", + "jest-util": "^28.1.3", + "pretty-format": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-each/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-environment-node": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz", + "integrity": "sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==", + "dev": true, + "dependencies": { + "@jest/environment": "^28.1.3", + "@jest/fake-timers": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "jest-mock": "^28.1.3", + "jest-util": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", + "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-leak-detector": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz", + "integrity": "sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA==", + "dev": true, + "dependencies": { + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", + "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^28.1.3", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-message-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-message-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-mock": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz", + "integrity": "sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz", + "integrity": "sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz", + "integrity": "sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA==", + "dev": true, + "dependencies": { + "jest-regex-util": "^28.0.2", + "jest-snapshot": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-resolve/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runner": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.3.tgz", + "integrity": "sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA==", + "dev": true, + "dependencies": { + "@jest/console": "^28.1.3", + "@jest/environment": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.10.2", + "graceful-fs": "^4.2.9", + "jest-docblock": "^28.1.1", + "jest-environment-node": "^28.1.3", + "jest-haste-map": "^28.1.3", + "jest-leak-detector": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-resolve": "^28.1.3", + "jest-runtime": "^28.1.3", + "jest-util": "^28.1.3", + "jest-watcher": "^28.1.3", + "jest-worker": "^28.1.3", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runner/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-runner/node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/jest-runtime": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.3.tgz", + "integrity": "sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw==", + "dev": true, + "dependencies": { + "@jest/environment": "^28.1.3", + "@jest/fake-timers": "^28.1.3", + "@jest/globals": "^28.1.3", + "@jest/source-map": "^28.1.2", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-mock": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.3", + "jest-snapshot": "^28.1.3", + "jest-util": "^28.1.3", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runtime/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-snapshot": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz", + "integrity": "sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/babel__traverse": "^7.0.6", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^28.1.3", + "graceful-fs": "^4.2.9", + "jest-diff": "^28.1.3", + "jest-get-type": "^28.0.2", + "jest-haste-map": "^28.1.3", + "jest-matcher-utils": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "natural-compare": "^1.4.0", + "pretty-format": "^28.1.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-validate": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz", + "integrity": "sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^28.0.2", + "leven": "^3.1.0", + "pretty-format": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-validate/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-watcher": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", + "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", + "dev": true, + "dependencies": { + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.10.2", + "jest-util": "^28.1.3", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watcher/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-worker": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", + "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-sdsl": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", + "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/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": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.1.0.tgz", + "integrity": "sha512-DRf0QjnNeCUds3xTjKlQQ3DpJD51GvDjJfnxUVWg6PZTo2otSm+slzNAxU/35hF8/oJIKoG9slq30JYOsF2azg==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/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==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/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, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/macos-release": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.0.tgz", + "integrity": "sha512-EIgv+QZ9r+814gjJj0Bt5vSLJLzswGmSUbUpbi9AIr/fsN2IWFBl2NucV9PAiek+U1STK468tEkxmVYUtuAN3g==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/magic-string": { + "version": "0.26.2", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.2.tgz", + "integrity": "sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/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, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.4.11", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.11.tgz", + "integrity": "sha512-GvsCITGAyDCxxsJ+X6prJexFQEhOCJaIlUbsAvjzSI5o5O7j2dle3jWvz5Z5aOdpOxW6ol3vI1+0ut+641F1+w==", + "dev": true, + "dependencies": { + "fs-monkey": "^1.0.3" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/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 + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/multer": { + "version": "1.4.4-lts.1", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.4-lts.1.tgz", + "integrity": "sha512-WeSGziVj6+Z2/MwQo3GvqzgR+9Uc+qt8SwHKh3gvNPiISKfsMfG4SvCOFYlxxgkXt7yIV2i1yczehm0EOKIxIg==", + "dependencies": { + "append-field": "^1.0.0", + "busboy": "^1.0.0", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.4", + "object-assign": "^4.1.1", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/node-abort-controller": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.0.1.tgz", + "integrity": "sha512-/ujIVxthRs+7q6hsdjHMaj8hRG9NuWmwrz+JdRwZ14jdFoKSkm+vDsCbF9PLpnSqjaWQJuTmVtcWHNLr+vrOFw==", + "dev": true + }, + "node_modules/node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "dev": true, + "dependencies": { + "lodash": "^4.17.21" + } + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "dev": true + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/os-name": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-4.0.1.tgz", + "integrity": "sha512-xl9MAoU97MH1Xt5K9ERft2YfCAoaO6msy1OBA0ozxEC0x0TmIoE6K3QvgJMMZA9yKGLmHXNY/YZoDbiGDj4zYw==", + "dev": true, + "dependencies": { + "macos-release": "^2.5.0", + "windows-release": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-to-regexp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.2.0.tgz", + "integrity": "sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA==" + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/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, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/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, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/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, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/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, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/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, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/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, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/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, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/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==" + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/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==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/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==" + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "dev": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve.exports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", + "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz", + "integrity": "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/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==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/schema-utils/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/schema-utils/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/schema-utils/node_modules/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==", + "dev": true + }, + "node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/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, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "dev": true, + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/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==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/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==" + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/superagent": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.3.tgz", + "integrity": "sha512-oBC+aNsCjzzjmO5AOPBPFS+Z7HPzlx+DQr/aHwM08kI+R24gsDmAS1LMfza1fK+P+SKlTAoNZpOvooE/pRO1HA==", + "dev": true, + "dependencies": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.3", + "debug": "^4.3.4", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^2.0.1", + "methods": "^1.1.2", + "mime": "2.6.0", + "qs": "^6.11.0", + "semver": "^7.3.8" + }, + "engines": { + "node": ">=6.4.0 <13 || >=14" + } + }, + "node_modules/superagent/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/supertest": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.1.tgz", + "integrity": "sha512-hRohNeIfk/cA48Cxpa/w48hktP6ZaRqXb0QV5rLvW0C7paRsBU3Q5zydzYrslOJtj/gd48qx540jKtcs6vG1fQ==", + "dev": true, + "dependencies": { + "methods": "^1.1.2", + "superagent": "^8.0.3" + }, + "engines": { + "node": ">=6.4.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-observable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.15.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", + "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", + "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.14", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.14.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/terser/node_modules/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==", + "dev": true + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/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, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/ts-jest": { + "version": "28.0.8", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-28.0.8.tgz", + "integrity": "sha512-5FaG0lXmRPzApix8oFG8RKjAz4ehtm8yMKOTy5HX3fY6W8kmvOrmcY0hKDElW52FJov+clhUbrKAqofnj4mXTg==", + "dev": true, + "dependencies": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^28.0.0", + "json5": "^2.2.1", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "7.x", + "yargs-parser": "^21.0.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/types": "^28.0.0", + "babel-jest": "^28.0.0", + "jest": "^28.0.0", + "typescript": ">=4.3" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/ts-loader": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.1.tgz", + "integrity": "sha512-384TYAqGs70rn9F0VBnh6BPTfhga7yFNdC5gXbQpDrBj9/KsT4iRkGqKXhziofHOlE2j6YEaiTYVGKKvPhGWvw==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" + } + }, + "node_modules/ts-loader/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/tsconfig-paths": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.1.0.tgz", + "integrity": "sha512-AHx4Euop/dXFC+Vx589alFba8QItjF+8hf8LtmuiCwHyI4rHXQtOOENaM8kvYf5fR0dRChy3wzWIZ9WbB7FWow==", + "dev": true, + "dependencies": { + "json5": "^2.2.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tsconfig-paths-webpack-plugin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-4.0.0.tgz", + "integrity": "sha512-fw/7265mIWukrSHd0i+wSwx64kYUSAKPfxRDksjKIYTxSAp9W9/xcZVBF4Kl0eqQd5eBpAQ/oQrc5RyM/0c1GQ==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.7.0", + "tsconfig-paths": "^4.0.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/tsconfig-paths-webpack-plugin/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/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, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + }, + "node_modules/typescript": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", + "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "node_modules/v8-to-istanbul": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", + "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/webpack": { + "version": "5.75.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", + "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", + "dev": true, + "peer": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-node-externals": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz", + "integrity": "sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/windows-release": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz", + "integrity": "sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==", + "dev": true, + "dependencies": { + "execa": "^4.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/windows-release/node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/windows-release/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/windows-release/node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "17.6.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", + "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@angular-devkit/core": { + "version": "14.2.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-14.2.2.tgz", + "integrity": "sha512-ofDhTmJqoAkmkJP0duwUaCxDBMxPlc+AWYwgs3rKKZeJBb0d+tchEXHXevD5bYbbRfXtnwM+Vye2XYHhA4nWAA==", + "dev": true, + "requires": { + "ajv": "8.11.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.1.0", + "rxjs": "6.6.7", + "source-map": "0.7.4" + }, + "dependencies": { + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@angular-devkit/schematics": { + "version": "14.2.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-14.2.2.tgz", + "integrity": "sha512-90hseNg1yQ2AR+lVr/NByZRHnYAlzCL6hr9p9q1KPHxA3Owo04yX6n6dvR/xf27hCopXInXKPsasR59XCx5ZOQ==", + "dev": true, + "requires": { + "@angular-devkit/core": "14.2.2", + "jsonc-parser": "3.1.0", + "magic-string": "0.26.2", + "ora": "5.4.1", + "rxjs": "6.6.7" + }, + "dependencies": { + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@angular-devkit/schematics-cli": { + "version": "14.2.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics-cli/-/schematics-cli-14.2.2.tgz", + "integrity": "sha512-timCty5tO1A5VOcy8nVJ+jL98i6+ct5/Hg+4rQxc3J6agmmNL9fALboJBEz1ckTt7MewlGtrpohMMy+YGhuWOg==", + "dev": true, + "requires": { + "@angular-devkit/core": "14.2.2", + "@angular-devkit/schematics": "14.2.2", + "ansi-colors": "4.1.3", + "inquirer": "8.2.4", + "symbol-observable": "4.0.0", + "yargs-parser": "21.1.1" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "inquirer": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", + "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" + } + } + } + }, + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/compat-data": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", + "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==", + "dev": true + }, + "@babel/core": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.2.tgz", + "integrity": "sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.2", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-module-transforms": "^7.20.2", + "@babel/helpers": "^7.20.1", + "@babel/parser": "^7.20.2", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.2", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.20.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz", + "integrity": "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==", + "dev": true, + "requires": { + "@babel/types": "^7.20.2", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@babel/helper-compilation-targets": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", + "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.20.0", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "dev": true, + "requires": { + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-transforms": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", + "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.2" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + }, + "@babel/helper-simple-access": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "dev": true, + "requires": { + "@babel/types": "^7.20.2" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true + }, + "@babel/helpers": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz", + "integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==", + "dev": true, + "requires": { + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.0" + } + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "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==", + "dev": true, + "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.20.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", + "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==", + "dev": true + }, + "@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==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", + "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.19.0" + } + }, + "@babel/template": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + } + }, + "@babel/traverse": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", + "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.1", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.20.1", + "@babel/types": "^7.20.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "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.20.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", + "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "optional": true + }, + "@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + } + } + }, + "@eslint/eslintrc": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "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" + } + }, + "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==", + "dev": true + } + } + }, + "@humanwhocodes/config-array": { + "version": "0.11.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", + "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "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" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^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" + } + }, + "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" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, + "@jest/console": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", + "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", + "dev": true, + "requires": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "slash": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "@jest/core": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz", + "integrity": "sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA==", + "dev": true, + "requires": { + "@jest/console": "^28.1.3", + "@jest/reporters": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^28.1.3", + "jest-config": "^28.1.3", + "jest-haste-map": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.3", + "jest-resolve-dependencies": "^28.1.3", + "jest-runner": "^28.1.3", + "jest-runtime": "^28.1.3", + "jest-snapshot": "^28.1.3", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "jest-watcher": "^28.1.3", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "@jest/environment": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz", + "integrity": "sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA==", + "dev": true, + "requires": { + "@jest/fake-timers": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "jest-mock": "^28.1.3" + } + }, + "@jest/expect": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.3.tgz", + "integrity": "sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw==", + "dev": true, + "requires": { + "expect": "^28.1.3", + "jest-snapshot": "^28.1.3" + } + }, + "@jest/expect-utils": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz", + "integrity": "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==", + "dev": true, + "requires": { + "jest-get-type": "^28.0.2" + } + }, + "@jest/fake-timers": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz", + "integrity": "sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw==", + "dev": true, + "requires": { + "@jest/types": "^28.1.3", + "@sinonjs/fake-timers": "^9.1.2", + "@types/node": "*", + "jest-message-util": "^28.1.3", + "jest-mock": "^28.1.3", + "jest-util": "^28.1.3" + } + }, + "@jest/globals": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.3.tgz", + "integrity": "sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA==", + "dev": true, + "requires": { + "@jest/environment": "^28.1.3", + "@jest/expect": "^28.1.3", + "@jest/types": "^28.1.3" + } + }, + "@jest/reporters": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz", + "integrity": "sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@jridgewell/trace-mapping": "^0.3.13", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dev": true, + "requires": { + "@sinclair/typebox": "^0.24.1" + } + }, + "@jest/source-map": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz", + "integrity": "sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.13", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + } + }, + "@jest/test-result": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", + "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", + "dev": true, + "requires": { + "@jest/console": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz", + "integrity": "sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw==", + "dev": true, + "requires": { + "@jest/test-result": "^28.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "slash": "^3.0.0" + } + }, + "@jest/transform": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", + "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/types": "^28.1.3", + "@jridgewell/trace-mapping": "^0.3.13", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.1" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dev": true, + "requires": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "@nestjs/cli": { + "version": "9.1.5", + "resolved": "https://registry.npmjs.org/@nestjs/cli/-/cli-9.1.5.tgz", + "integrity": "sha512-rSp26+Nv7PFtYrRSP18Gv5ZK8rRSc2SCCF5wh4SdZaVGgkxShpNq9YEfI+ik/uziN3KC5o74ppYRXGj+aHGVsA==", + "dev": true, + "requires": { + "@angular-devkit/core": "14.2.2", + "@angular-devkit/schematics": "14.2.2", + "@angular-devkit/schematics-cli": "14.2.2", + "@nestjs/schematics": "^9.0.0", + "chalk": "3.0.0", + "chokidar": "3.5.3", + "cli-table3": "0.6.2", + "commander": "4.1.1", + "fork-ts-checker-webpack-plugin": "7.2.13", + "inquirer": "7.3.3", + "node-emoji": "1.11.0", + "ora": "5.4.1", + "os-name": "4.0.1", + "rimraf": "3.0.2", + "shelljs": "0.8.5", + "source-map-support": "0.5.21", + "tree-kill": "1.2.2", + "tsconfig-paths": "4.1.0", + "tsconfig-paths-webpack-plugin": "4.0.0", + "typescript": "4.8.4", + "webpack": "5.74.0", + "webpack-node-externals": "3.0.0" + }, + "dependencies": { + "webpack": { + "version": "5.74.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", + "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + } + } + } + }, + "@nestjs/common": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-9.2.0.tgz", + "integrity": "sha512-Ndcqak/ETYi+n1c5lFRPbxKLyUuM6DIOxcvfEFGfi0f6ad4dWDXRDx7z/n8V0l8+Y8djvvOHgf3t0e93w963Qg==", + "requires": { + "iterare": "1.2.1", + "tslib": "2.4.1", + "uuid": "9.0.0" + } + }, + "@nestjs/core": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-9.2.0.tgz", + "integrity": "sha512-eVN7aXAavV+ImVt8mO+rQ5YyUP6lJtQKUtQHxHKzz6Wg+9Y67WWZS2uDcDX5NNcNijbWky5bqad86fgcK9Oqig==", + "requires": { + "@nuxtjs/opencollective": "0.3.2", + "fast-safe-stringify": "2.1.1", + "iterare": "1.2.1", + "object-hash": "3.0.0", + "path-to-regexp": "3.2.0", + "tslib": "2.4.1", + "uuid": "9.0.0" + } + }, + "@nestjs/platform-express": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-9.2.0.tgz", + "integrity": "sha512-J1+nnzjC9ATSb0jSHBqAE6D4o+PIbGPItEfYTOZ0rkE5bvqnRfgO4q94SXhfri+5PaNx2vM8tOZsKaD0QmQRGQ==", + "requires": { + "body-parser": "1.20.1", + "cors": "2.8.5", + "express": "4.18.2", + "multer": "1.4.4-lts.1", + "tslib": "2.4.1" + } + }, + "@nestjs/schematics": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-9.0.3.tgz", + "integrity": "sha512-kZrU/lrpVd2cnK8I3ibDb3Wi1ppl3wX3U3lVWoL+DzRRoezWKkh8upEL4q0koKmuXnsmLiu3UPxFeMOrJV7TSA==", + "dev": true, + "requires": { + "@angular-devkit/core": "14.2.1", + "@angular-devkit/schematics": "14.2.1", + "fs-extra": "10.1.0", + "jsonc-parser": "3.2.0", + "pluralize": "8.0.0" + }, + "dependencies": { + "@angular-devkit/core": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-14.2.1.tgz", + "integrity": "sha512-lW8oNGuJqr4r31FWBjfWQYkSXdiOHBGOThIEtHvUVBKfPF/oVrupLueCUgBPel+NvxENXdo93uPsqHN7bZbmsQ==", + "dev": true, + "requires": { + "ajv": "8.11.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.1.0", + "rxjs": "6.6.7", + "source-map": "0.7.4" + }, + "dependencies": { + "jsonc-parser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.1.0.tgz", + "integrity": "sha512-DRf0QjnNeCUds3xTjKlQQ3DpJD51GvDjJfnxUVWg6PZTo2otSm+slzNAxU/35hF8/oJIKoG9slq30JYOsF2azg==", + "dev": true + } + } + }, + "@angular-devkit/schematics": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-14.2.1.tgz", + "integrity": "sha512-0U18FwDYt4zROBPrvewH6iBTkf2ozVHN4/gxUb9jWrqVw8mPU5AWc/iYxQLHBSinkr2Egjo1H/i9aBqgJSeh3g==", + "dev": true, + "requires": { + "@angular-devkit/core": "14.2.1", + "jsonc-parser": "3.1.0", + "magic-string": "0.26.2", + "ora": "5.4.1", + "rxjs": "6.6.7" + }, + "dependencies": { + "jsonc-parser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.1.0.tgz", + "integrity": "sha512-DRf0QjnNeCUds3xTjKlQQ3DpJD51GvDjJfnxUVWg6PZTo2otSm+slzNAxU/35hF8/oJIKoG9slq30JYOsF2azg==", + "dev": true + } + } + }, + "jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@nestjs/testing": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-9.2.0.tgz", + "integrity": "sha512-Lj6UXmBJKcXB16bZzu0IG7GpH7hl5Cn71OcPSrVVuPrFd5kDYqFbodfE9OkAKaHjEhOvZ2ynoo/i6cyfX4yOvQ==", + "dev": true, + "requires": { + "tslib": "2.4.1" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@nuxtjs/opencollective": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@nuxtjs/opencollective/-/opencollective-0.3.2.tgz", + "integrity": "sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==", + "requires": { + "chalk": "^4.1.0", + "consola": "^2.15.0", + "node-fetch": "^2.6.1" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==", + "dev": true + }, + "@sinonjs/commons": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.5.tgz", + "integrity": "sha512-rTpCA0wG1wUxglBSFdMMY0oTrKYvgf4fNgv/sXbfCVAdf+FnPBdKJR/7XbpTCwbCrvCbdPYnlWaUUYz4V2fPDA==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", + "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true + }, + "@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "dev": true + }, + "@types/babel__core": { + "version": "7.1.20", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.20.tgz", + "integrity": "sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.2.tgz", + "integrity": "sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg==", + "dev": true, + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/cookiejar": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.2.tgz", + "integrity": "sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==", + "dev": true + }, + "@types/eslint": { + "version": "8.4.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", + "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true + }, + "@types/express": { + "version": "4.17.14", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz", + "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.31", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", + "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/jest": { + "version": "28.1.8", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-28.1.8.tgz", + "integrity": "sha512-8TJkV++s7B6XqnDrzR1m/TT0A0h948Pnl/097veySPN67VRAgQ4gZ7n2KfJo2rVq6njQjdxU3GCCyDvAeuHoiw==", + "dev": true, + "requires": { + "expect": "^28.0.0", + "pretty-format": "^28.0.0" + } + }, + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "@types/mime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", + "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", + "dev": true + }, + "@types/node": { + "version": "16.18.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", + "dev": true + }, + "@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/prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==", + "dev": true + }, + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, + "@types/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", + "dev": true, + "requires": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, + "@types/superagent": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.15.tgz", + "integrity": "sha512-mu/N4uvfDN2zVQQ5AYJI/g4qxn2bHB6521t1UuH09ShNWjebTqN0ZFuYK9uYjcgmI0dTQEs+Owi1EO6U0OkOZQ==", + "dev": true, + "requires": { + "@types/cookiejar": "*", + "@types/node": "*" + } + }, + "@types/supertest": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.12.tgz", + "integrity": "sha512-X3HPWTwXRerBZS7Mo1k6vMVR1Z6zmJcDVn5O/31whe0tnjE4te6ZJSJGq1RiqHPjzPdMTfjCFogDJmwng9xHaQ==", + "dev": true, + "requires": { + "@types/superagent": "*" + } + }, + "@types/yargs": { + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.43.0.tgz", + "integrity": "sha512-wNPzG+eDR6+hhW4yobEmpR36jrqqQv1vxBq5LJO3fBAktjkvekfr4BRl+3Fn1CM/A+s8/EiGUbOMDoYqWdbtXA==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/type-utils": "5.43.0", + "@typescript-eslint/utils": "5.43.0", + "debug": "^4.3.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/parser": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.43.0.tgz", + "integrity": "sha512-2iHUK2Lh7PwNUlhFxxLI2haSDNyXvebBO9izhjhMoDC+S3XI9qt2DGFUsiJ89m2k7gGYch2aEpYqV5F/+nwZug==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/typescript-estree": "5.43.0", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.43.0.tgz", + "integrity": "sha512-XNWnGaqAtTJsUiZaoiGIrdJYHsUOd3BZ3Qj5zKp9w6km6HsrjPk/TGZv0qMTWyWj0+1QOqpHQ2gZOLXaGA9Ekw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/visitor-keys": "5.43.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.43.0.tgz", + "integrity": "sha512-K21f+KY2/VvYggLf5Pk4tgBOPs2otTaIHy2zjclo7UZGLyFH86VfUOm5iq+OtDtxq/Zwu2I3ujDBykVW4Xtmtg==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "5.43.0", + "@typescript-eslint/utils": "5.43.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/types": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.43.0.tgz", + "integrity": "sha512-jpsbcD0x6AUvV7tyOlyvon0aUsQpF8W+7TpJntfCUWU1qaIKu2K34pMwQKSzQH8ORgUrGYY6pVIh1Pi8TNeteg==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.43.0.tgz", + "integrity": "sha512-BZ1WVe+QQ+igWal2tDbNg1j2HWUkAa+CVqdU79L4HP9izQY6CNhXfkNwd1SS4+sSZAP/EthI1uiCSY/+H0pROg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/visitor-keys": "5.43.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/utils": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.43.0.tgz", + "integrity": "sha512-8nVpA6yX0sCjf7v/NDfeaOlyaIIqL7OaIGOWSPFqUKK59Gnumd3Wa+2l8oAaYO2lk0sO+SbWFWRSvhu8gLGv4A==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/typescript-estree": "5.43.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.43.0.tgz", + "integrity": "sha512-icl1jNH/d18OVHLfcwdL3bWUKsBeIiKYTGxMJCoGe7xFht+E4QgzOqoWYrU8XSLJWhVw8nTacbm03v23J/hFTg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.43.0", + "eslint-visitor-keys": "^3.3.0" + } + }, + "@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@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 + }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "dev": true + }, + "acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true, + "requires": {} + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "requires": { + "ajv": "^8.0.0" + } + }, + "ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + } + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==" + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "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 + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "babel-jest": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz", + "integrity": "sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q==", + "dev": true, + "requires": { + "@jest/transform": "^28.1.3", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^28.1.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + } + }, + "babel-plugin-jest-hoist": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz", + "integrity": "sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q==", + "dev": true, + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "requires": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + } + }, + "babel-preset-jest": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz", + "integrity": "sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A==", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^28.1.3", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.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" + } + } + } + }, + "body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "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==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "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" + } + }, + "browserslist": { + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" + } + }, + "bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "requires": { + "fast-json-stable-stringify": "2.x" + } + }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "requires": { + "streamsearch": "^1.1.0" + } + }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001431", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz", + "integrity": "sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==", + "dev": true + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true + }, + "ci-info": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.6.1.tgz", + "integrity": "sha512-up5ggbaDqOqJ4UqLKZ2naVkyqSJQgJi5lwD6b6mM748ysrghDBX0bx/qJTUHzw7zu6Mq4gycviSF5hJnwceD8w==", + "dev": true + }, + "cjs-module-lexer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-spinners": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", + "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==", + "dev": true + }, + "cli-table3": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.2.tgz", + "integrity": "sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw==", + "dev": true, + "requires": { + "@colors/colors": "1.5.0", + "string-width": "^4.2.0" + } + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true + }, + "collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "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": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true + }, + "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 + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "requires": { + "safe-buffer": "5.2.1" + } + }, + "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==" + }, + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "cookiejar": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", + "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==", + "dev": true + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "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" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "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 + }, + "defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + }, + "detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true + }, + "dezalgo": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", + "integrity": "sha512-K7i4zNfT2kgQz3GylDw40ot9GAE47sFZ9EXHFSPP6zONLgH6kWXE0KWJchkbQJLBkRazq4APwZ4OwiFFlT95OQ==", + "dev": true, + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "diff-sequences": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", + "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", + "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" + } + }, + "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" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "electron-to-chromium": { + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", + "dev": true + }, + "emittery": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", + "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + }, + "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==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enhanced-resolve": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", + "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "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-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint": { + "version": "8.27.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.27.0.tgz", + "integrity": "sha512-0y1bfG2ho7mty+SiILVf9PfuRA49ek4Nc60Wmmu62QlobNR+CeXa4xXIJgcuwSQgZiWaPH+5BDsctpIW0PR/wQ==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.3.3", + "@humanwhocodes/config-array": "^0.11.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.15.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "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" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "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==", + "dev": true + } + } + }, + "eslint-config-prettier": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "dev": true, + "requires": {} + }, + "eslint-plugin-prettier": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + }, + "espree": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "dev": true, + "requires": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.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==", + "dev": true + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "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==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true + }, + "expect": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz", + "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==", + "dev": true, + "requires": { + "@jest/expect-utils": "^28.1.3", + "jest-get-type": "^28.0.2", + "jest-matcher-utils": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3" + } + }, + "express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "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==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + } + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "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.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "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==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "requires": { + "bser": "2.1.1" + } + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + }, + "dependencies": { + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + } + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "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" + } + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "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==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "fork-ts-checker-webpack-plugin": { + "version": "7.2.13", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-7.2.13.tgz", + "integrity": "sha512-fR3WRkOb4bQdWB/y7ssDUlVdrclvwtyCUIHCfivAoYxq9dF7XfrDKbMdZIfwJ7hxIAqkYSGeU7lLJE6xrxIBdg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "cosmiconfig": "^7.0.1", + "deepmerge": "^4.2.2", + "fs-extra": "^10.0.0", + "memfs": "^3.4.1", + "minimatch": "^3.0.4", + "node-abort-controller": "^3.0.1", + "schema-utils": "^3.1.1", + "semver": "^7.3.5", + "tapable": "^2.2.1" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "formidable": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.0.1.tgz", + "integrity": "sha512-rjTMNbp2BpfQShhFbR3Ruk3qk2y9jKpvMW78nJgx8QKtxjDVrwbZG+wvDOmVbifHyOUOQJXxqEy6r0faRrPzTQ==", + "dev": true, + "requires": { + "dezalgo": "1.0.3", + "hexoid": "1.0.0", + "once": "1.4.0", + "qs": "6.9.3" + }, + "dependencies": { + "qs": { + "version": "6.9.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.3.tgz", + "integrity": "sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw==", + "dev": true + } + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" + }, + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs-monkey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "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-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "globals": { + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", + "dev": true + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "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==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "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==" + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "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" + } + }, + "is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true + }, + "is-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-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "iterare": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iterare/-/iterare-1.2.1.tgz", + "integrity": "sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==" + }, + "jest": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest/-/jest-28.1.3.tgz", + "integrity": "sha512-N4GT5on8UkZgH0O5LUavMRV1EDEhNTL0KEfRmDIeZHSV7p2XgLoY9t9VDUgL6o+yfdgYHVxuz81G8oB9VG5uyA==", + "dev": true, + "requires": { + "@jest/core": "^28.1.3", + "@jest/types": "^28.1.3", + "import-local": "^3.0.2", + "jest-cli": "^28.1.3" + } + }, + "jest-changed-files": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz", + "integrity": "sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA==", + "dev": true, + "requires": { + "execa": "^5.0.0", + "p-limit": "^3.1.0" + } + }, + "jest-circus": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.3.tgz", + "integrity": "sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow==", + "dev": true, + "requires": { + "@jest/environment": "^28.1.3", + "@jest/expect": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^28.1.3", + "jest-matcher-utils": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-runtime": "^28.1.3", + "jest-snapshot": "^28.1.3", + "jest-util": "^28.1.3", + "p-limit": "^3.1.0", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "jest-cli": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz", + "integrity": "sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==", + "dev": true, + "requires": { + "@jest/core": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^28.1.3", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "prompts": "^2.0.1", + "yargs": "^17.3.1" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "jest-config": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz", + "integrity": "sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^28.1.3", + "@jest/types": "^28.1.3", + "babel-jest": "^28.1.3", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^28.1.3", + "jest-environment-node": "^28.1.3", + "jest-get-type": "^28.0.2", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.3", + "jest-runner": "^28.1.3", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "jest-diff": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", + "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^28.1.1", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "jest-docblock": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz", + "integrity": "sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==", + "dev": true, + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz", + "integrity": "sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g==", + "dev": true, + "requires": { + "@jest/types": "^28.1.3", + "chalk": "^4.0.0", + "jest-get-type": "^28.0.2", + "jest-util": "^28.1.3", + "pretty-format": "^28.1.3" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "jest-environment-node": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz", + "integrity": "sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==", + "dev": true, + "requires": { + "@jest/environment": "^28.1.3", + "@jest/fake-timers": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "jest-mock": "^28.1.3", + "jest-util": "^28.1.3" + } + }, + "jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true + }, + "jest-haste-map": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", + "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", + "dev": true, + "requires": { + "@jest/types": "^28.1.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + } + }, + "jest-leak-detector": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz", + "integrity": "sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA==", + "dev": true, + "requires": { + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + } + }, + "jest-matcher-utils": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", + "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^28.1.3", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "jest-message-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "jest-mock": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz", + "integrity": "sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA==", + "dev": true, + "requires": { + "@jest/types": "^28.1.3", + "@types/node": "*" + } + }, + "jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "requires": {} + }, + "jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "dev": true + }, + "jest-resolve": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz", + "integrity": "sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "jest-resolve-dependencies": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz", + "integrity": "sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA==", + "dev": true, + "requires": { + "jest-regex-util": "^28.0.2", + "jest-snapshot": "^28.1.3" + } + }, + "jest-runner": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.3.tgz", + "integrity": "sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA==", + "dev": true, + "requires": { + "@jest/console": "^28.1.3", + "@jest/environment": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.10.2", + "graceful-fs": "^4.2.9", + "jest-docblock": "^28.1.1", + "jest-environment-node": "^28.1.3", + "jest-haste-map": "^28.1.3", + "jest-leak-detector": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-resolve": "^28.1.3", + "jest-runtime": "^28.1.3", + "jest-util": "^28.1.3", + "jest-watcher": "^28.1.3", + "jest-worker": "^28.1.3", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.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 + }, + "source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + } + } + }, + "jest-runtime": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.3.tgz", + "integrity": "sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw==", + "dev": true, + "requires": { + "@jest/environment": "^28.1.3", + "@jest/fake-timers": "^28.1.3", + "@jest/globals": "^28.1.3", + "@jest/source-map": "^28.1.2", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-mock": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.3", + "jest-snapshot": "^28.1.3", + "jest-util": "^28.1.3", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "jest-snapshot": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz", + "integrity": "sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/babel__traverse": "^7.0.6", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^28.1.3", + "graceful-fs": "^4.2.9", + "jest-diff": "^28.1.3", + "jest-get-type": "^28.0.2", + "jest-haste-map": "^28.1.3", + "jest-matcher-utils": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "natural-compare": "^1.4.0", + "pretty-format": "^28.1.3", + "semver": "^7.3.5" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dev": true, + "requires": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "jest-validate": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz", + "integrity": "sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA==", + "dev": true, + "requires": { + "@jest/types": "^28.1.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^28.0.2", + "leven": "^3.1.0", + "pretty-format": "^28.1.3" + }, + "dependencies": { + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "jest-watcher": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", + "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", + "dev": true, + "requires": { + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.10.2", + "jest-util": "^28.1.3", + "string-length": "^4.0.1" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "jest-worker": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", + "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-sdsl": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", + "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==", + "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==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true + }, + "jsonc-parser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.1.0.tgz", + "integrity": "sha512-DRf0QjnNeCUds3xTjKlQQ3DpJD51GvDjJfnxUVWg6PZTo2otSm+slzNAxU/35hF8/oJIKoG9slq30JYOsF2azg==", + "dev": true + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "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==", + "dev": true + }, + "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.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "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" + } + }, + "macos-release": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.0.tgz", + "integrity": "sha512-EIgv+QZ9r+814gjJj0Bt5vSLJLzswGmSUbUpbi9AIr/fsN2IWFBl2NucV9PAiek+U1STK468tEkxmVYUtuAN3g==", + "dev": true + }, + "magic-string": { + "version": "0.26.2", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.2.tgz", + "integrity": "sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.8" + } + }, + "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" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "requires": { + "tmpl": "1.0.5" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" + }, + "memfs": { + "version": "3.4.11", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.11.tgz", + "integrity": "sha512-GvsCITGAyDCxxsJ+X6prJexFQEhOCJaIlUbsAvjzSI5o5O7j2dle3jWvz5Z5aOdpOxW6ol3vI1+0ut+641F1+w==", + "dev": true, + "requires": { + "fs-monkey": "^1.0.3" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "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": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "requires": { + "minimist": "^1.2.6" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "multer": { + "version": "1.4.4-lts.1", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.4-lts.1.tgz", + "integrity": "sha512-WeSGziVj6+Z2/MwQo3GvqzgR+9Uc+qt8SwHKh3gvNPiISKfsMfG4SvCOFYlxxgkXt7yIV2i1yczehm0EOKIxIg==", + "requires": { + "append-field": "^1.0.0", + "busboy": "^1.0.0", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.4", + "object-assign": "^4.1.1", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + } + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node-abort-controller": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.0.1.tgz", + "integrity": "sha512-/ujIVxthRs+7q6hsdjHMaj8hRG9NuWmwrz+JdRwZ14jdFoKSkm+vDsCbF9PLpnSqjaWQJuTmVtcWHNLr+vrOFw==", + "dev": true + }, + "node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "dev": true, + "requires": { + "lodash": "^4.17.21" + } + }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "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 + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + }, + "object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==" + }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.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" + } + }, + "ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "requires": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "os-name": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-4.0.1.tgz", + "integrity": "sha512-xl9MAoU97MH1Xt5K9ERft2YfCAoaO6msy1OBA0ozxEC0x0TmIoE6K3QvgJMMZA9yKGLmHXNY/YZoDbiGDj4zYw==", + "dev": true, + "requires": { + "macos-release": "^2.5.0", + "windows-release": "^4.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "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 + }, + "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-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "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 + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + }, + "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 + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-to-regexp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.2.0.tgz", + "integrity": "sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA==" + }, + "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 + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "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" + }, + "dependencies": { + "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" + } + }, + "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" + } + } + } + }, + "pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "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.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "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-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dev": true, + "requires": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "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==", + "dev": true + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "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==" + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "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": { + "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==" + } + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "dev": true, + "requires": { + "resolve": "^1.1.6" + } + }, + "reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "resolve.exports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", + "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", + "dev": true + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "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": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + } + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rxjs": { + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz", + "integrity": "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==", + "requires": { + "tslib": "^2.1.0" + } + }, + "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==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "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-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "requires": {} + }, + "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==", + "dev": true + } + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "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 + }, + "shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "dev": true, + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "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 + } + } + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + } + } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + }, + "streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + }, + "dependencies": { + "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==" + } + } + }, + "string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "requires": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "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 + }, + "superagent": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.3.tgz", + "integrity": "sha512-oBC+aNsCjzzjmO5AOPBPFS+Z7HPzlx+DQr/aHwM08kI+R24gsDmAS1LMfza1fK+P+SKlTAoNZpOvooE/pRO1HA==", + "dev": true, + "requires": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.3", + "debug": "^4.3.4", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^2.0.1", + "methods": "^1.1.2", + "mime": "2.6.0", + "qs": "^6.11.0", + "semver": "^7.3.8" + }, + "dependencies": { + "mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true + } + } + }, + "supertest": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.1.tgz", + "integrity": "sha512-hRohNeIfk/cA48Cxpa/w48hktP6ZaRqXb0QV5rLvW0C7paRsBU3Q5zydzYrslOJtj/gd48qx540jKtcs6vG1fQ==", + "dev": true, + "requires": { + "methods": "^1.1.2", + "superagent": "^8.0.3" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "dev": true, + "requires": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "symbol-observable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", + "dev": true + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + }, + "terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + } + }, + "terser": { + "version": "5.15.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", + "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "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==", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", + "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.14", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.14.1" + }, + "dependencies": { + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "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": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true + }, + "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" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true + }, + "ts-jest": { + "version": "28.0.8", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-28.0.8.tgz", + "integrity": "sha512-5FaG0lXmRPzApix8oFG8RKjAz4ehtm8yMKOTy5HX3fY6W8kmvOrmcY0hKDElW52FJov+clhUbrKAqofnj4mXTg==", + "dev": true, + "requires": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^28.0.0", + "json5": "^2.2.1", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "7.x", + "yargs-parser": "^21.0.1" + } + }, + "ts-loader": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.1.tgz", + "integrity": "sha512-384TYAqGs70rn9F0VBnh6BPTfhga7yFNdC5gXbQpDrBj9/KsT4iRkGqKXhziofHOlE2j6YEaiTYVGKKvPhGWvw==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dev": true, + "requires": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + } + }, + "tsconfig-paths": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.1.0.tgz", + "integrity": "sha512-AHx4Euop/dXFC+Vx589alFba8QItjF+8hf8LtmuiCwHyI4rHXQtOOENaM8kvYf5fR0dRChy3wzWIZ9WbB7FWow==", + "dev": true, + "requires": { + "json5": "^2.2.1", + "minimist": "^1.2.6", + "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": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true + } + } + }, + "tsconfig-paths-webpack-plugin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-4.0.0.tgz", + "integrity": "sha512-fw/7265mIWukrSHd0i+wSwx64kYUSAKPfxRDksjKIYTxSAp9W9/xcZVBF4Kl0eqQd5eBpAQ/oQrc5RyM/0c1GQ==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.7.0", + "tsconfig-paths": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "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-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "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==", + "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": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + }, + "typescript": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", + "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", + "dev": true + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" + }, + "update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" + }, + "uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" + }, + "v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "v8-to-istanbul": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", + "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" + }, + "walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "requires": { + "makeerror": "1.0.12" + } + }, + "watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "webpack": { + "version": "5.75.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", + "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", + "dev": true, + "peer": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + } + }, + "webpack-node-externals": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz", + "integrity": "sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==", + "dev": true + }, + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.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" + } + }, + "windows-release": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz", + "integrity": "sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==", + "dev": true, + "requires": { + "execa": "^4.0.2" + }, + "dependencies": { + "execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true + } + } + }, + "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 + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "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 + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + }, + "yargs": { + "version": "17.6.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", + "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", + "dev": true, + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + } + } +} diff --git a/backend/package.json b/backend/package.json new file mode 100644 index 00000000..223f9200 --- /dev/null +++ b/backend/package.json @@ -0,0 +1,72 @@ +{ + "name": "backend", + "version": "0.0.1", + "description": "", + "author": "", + "private": true, + "license": "UNLICENSED", + "scripts": { + "prebuild": "rimraf dist", + "build": "nest build", + "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", + "start": "nest start", + "start:dev": "nest start --watch", + "start:debug": "nest start --debug --watch", + "start:prod": "node dist/main", + "lint:fix": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", + "lint": "eslint \"{src,apps,libs,test}/**/*.ts\"", + "test": "jest", + "test:watch": "jest --watch", + "test:cov": "jest --coverage", + "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", + "test:e2e": "jest --config ./test/jest-e2e.json" + }, + "dependencies": { + "@nestjs/common": "^9.0.0", + "@nestjs/core": "^9.0.0", + "@nestjs/platform-express": "^9.0.0", + "reflect-metadata": "^0.1.13", + "rimraf": "^3.0.2", + "rxjs": "^7.2.0" + }, + "devDependencies": { + "@nestjs/cli": "^9.0.0", + "@nestjs/schematics": "^9.0.0", + "@nestjs/testing": "^9.0.0", + "@types/express": "^4.17.13", + "@types/jest": "28.1.8", + "@types/node": "^16.0.0", + "@types/supertest": "^2.0.11", + "@typescript-eslint/eslint-plugin": "^5.0.0", + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^8.0.1", + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-prettier": "^4.0.0", + "jest": "28.1.3", + "prettier": "^2.3.2", + "source-map-support": "^0.5.20", + "supertest": "^6.1.3", + "ts-jest": "28.0.8", + "ts-loader": "^9.2.3", + "ts-node": "^10.0.0", + "tsconfig-paths": "4.1.0", + "typescript": "^4.7.4" + }, + "jest": { + "moduleFileExtensions": [ + "js", + "json", + "ts" + ], + "rootDir": "src", + "testRegex": ".*\\.spec\\.ts$", + "transform": { + "^.+\\.(t|j)s$": "ts-jest" + }, + "collectCoverageFrom": [ + "**/*.(t|j)s" + ], + "coverageDirectory": "../coverage", + "testEnvironment": "node" + } +} diff --git a/backend/src/app.controller.spec.ts b/backend/src/app.controller.spec.ts new file mode 100644 index 00000000..d22f3890 --- /dev/null +++ b/backend/src/app.controller.spec.ts @@ -0,0 +1,22 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { AppController } from './app.controller'; +import { AppService } from './app.service'; + +describe('AppController', () => { + let appController: AppController; + + beforeEach(async () => { + const app: TestingModule = await Test.createTestingModule({ + controllers: [AppController], + providers: [AppService], + }).compile(); + + appController = app.get(AppController); + }); + + describe('root', () => { + it('should return "Hello World!"', () => { + expect(appController.getHello()).toBe('Hello World!'); + }); + }); +}); diff --git a/backend/src/app.controller.ts b/backend/src/app.controller.ts new file mode 100644 index 00000000..cce879ee --- /dev/null +++ b/backend/src/app.controller.ts @@ -0,0 +1,12 @@ +import { Controller, Get } from '@nestjs/common'; +import { AppService } from './app.service'; + +@Controller() +export class AppController { + constructor(private readonly appService: AppService) {} + + @Get() + getHello(): string { + return this.appService.getHello(); + } +} diff --git a/backend/src/app.module.ts b/backend/src/app.module.ts new file mode 100644 index 00000000..86628031 --- /dev/null +++ b/backend/src/app.module.ts @@ -0,0 +1,10 @@ +import { Module } from '@nestjs/common'; +import { AppController } from './app.controller'; +import { AppService } from './app.service'; + +@Module({ + imports: [], + controllers: [AppController], + providers: [AppService], +}) +export class AppModule {} diff --git a/backend/src/app.service.ts b/backend/src/app.service.ts new file mode 100644 index 00000000..927d7cca --- /dev/null +++ b/backend/src/app.service.ts @@ -0,0 +1,8 @@ +import { Injectable } from '@nestjs/common'; + +@Injectable() +export class AppService { + getHello(): string { + return 'Hello World!'; + } +} diff --git a/backend/src/main.ts b/backend/src/main.ts new file mode 100644 index 00000000..13cad38c --- /dev/null +++ b/backend/src/main.ts @@ -0,0 +1,8 @@ +import { NestFactory } from '@nestjs/core'; +import { AppModule } from './app.module'; + +async function bootstrap() { + const app = await NestFactory.create(AppModule); + await app.listen(3000); +} +bootstrap(); diff --git a/backend/test/app.e2e-spec.ts b/backend/test/app.e2e-spec.ts new file mode 100644 index 00000000..50cda623 --- /dev/null +++ b/backend/test/app.e2e-spec.ts @@ -0,0 +1,24 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { INestApplication } from '@nestjs/common'; +import * as request from 'supertest'; +import { AppModule } from './../src/app.module'; + +describe('AppController (e2e)', () => { + let app: INestApplication; + + beforeEach(async () => { + const moduleFixture: TestingModule = await Test.createTestingModule({ + imports: [AppModule], + }).compile(); + + app = moduleFixture.createNestApplication(); + await app.init(); + }); + + it('/ (GET)', () => { + return request(app.getHttpServer()) + .get('/') + .expect(200) + .expect('Hello World!'); + }); +}); diff --git a/backend/test/jest-e2e.json b/backend/test/jest-e2e.json new file mode 100644 index 00000000..e9d912f3 --- /dev/null +++ b/backend/test/jest-e2e.json @@ -0,0 +1,9 @@ +{ + "moduleFileExtensions": ["js", "json", "ts"], + "rootDir": ".", + "testEnvironment": "node", + "testRegex": ".e2e-spec.ts$", + "transform": { + "^.+\\.(t|j)s$": "ts-jest" + } +} diff --git a/backend/tsconfig.build.json b/backend/tsconfig.build.json new file mode 100644 index 00000000..64f86c6b --- /dev/null +++ b/backend/tsconfig.build.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "exclude": ["node_modules", "test", "dist", "**/*spec.ts"] +} diff --git a/backend/tsconfig.json b/backend/tsconfig.json new file mode 100644 index 00000000..adb614ca --- /dev/null +++ b/backend/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "module": "commonjs", + "declaration": true, + "removeComments": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "allowSyntheticDefaultImports": true, + "target": "es2017", + "sourceMap": true, + "outDir": "./dist", + "baseUrl": "./", + "incremental": true, + "skipLibCheck": true, + "strictNullChecks": false, + "noImplicitAny": false, + "strictBindCallApply": false, + "forceConsistentCasingInFileNames": false, + "noFallthroughCasesInSwitch": false + } +} From 506a0a46e3bd5710cbafebbf1e1490eabc57de82 Mon Sep 17 00:00:00 2001 From: yangseungchan Date: Wed, 16 Nov 2022 11:06:57 +0900 Subject: [PATCH 002/142] =?UTF-8?q?[Feature]=20=ED=94=84=EB=A1=A0=ED=8A=B8?= =?UTF-8?q?=EC=97=94=EB=93=9C=20=ED=99=98=EA=B2=BD=20=EC=84=B8=ED=8C=85=20?= =?UTF-8?q?1=EC=B0=A8=20(#19)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :sparkles: feature: next, ts, prettier, eslint ์„ค * :sparkles: feature: husky ์—ฐ๋™, eslint rule ์ˆ˜์ • * :goal_net: chore: import ์ ˆ๋Œ€ ๊ฒฝ๋กœ * :goal_net: chore: import ์ ˆ๋Œ€๊ฒฝ๋กœ ์„ค์ • * :goal_net: chore: eslint ๋ฒ„์ „ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ ๋ฐ ๋ฃจํŠธ์— .gitignore ์ถ”๊ฐ€ * :goal_net: chore: eslint no-console ์˜ต์…˜ ์ถ”๊ฐ€ Co-authored-by: kong430 --- .gitignore | 1 + frontend/.eslintignore | 12 + frontend/.eslintrc.json | 25 + frontend/.gitignore | 38 + frontend/.husky/pre-commit | 36 + frontend/.husky/pre-push | 15 + frontend/.prettierignore | 12 + frontend/.prettierrc | 10 + frontend/README.md | 34 + frontend/next.config.js | 7 + frontend/package-lock.json | 5774 +++++++++++++++++++++++++++ frontend/package.json | 40 + frontend/public/favicon.ico | Bin 0 -> 25931 bytes frontend/public/vercel.svg | 4 + frontend/src/components/Title.tsx | 5 + frontend/src/pages/_app.tsx | 6 + frontend/src/pages/index.tsx | 65 + frontend/src/styles/Home.module.css | 129 + frontend/src/styles/globals.css | 26 + frontend/tsconfig.json | 31 + 20 files changed, 6270 insertions(+) create mode 100644 .gitignore create mode 100644 frontend/.eslintignore create mode 100644 frontend/.eslintrc.json create mode 100644 frontend/.gitignore create mode 100755 frontend/.husky/pre-commit create mode 100755 frontend/.husky/pre-push create mode 100644 frontend/.prettierignore create mode 100644 frontend/.prettierrc create mode 100644 frontend/README.md create mode 100644 frontend/next.config.js create mode 100644 frontend/package-lock.json create mode 100644 frontend/package.json create mode 100644 frontend/public/favicon.ico create mode 100644 frontend/public/vercel.svg create mode 100644 frontend/src/components/Title.tsx create mode 100644 frontend/src/pages/_app.tsx create mode 100644 frontend/src/pages/index.tsx create mode 100644 frontend/src/styles/Home.module.css create mode 100644 frontend/src/styles/globals.css create mode 100644 frontend/tsconfig.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..485dee64 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.idea diff --git a/frontend/.eslintignore b/frontend/.eslintignore new file mode 100644 index 00000000..6b23c880 --- /dev/null +++ b/frontend/.eslintignore @@ -0,0 +1,12 @@ +.next +next-env.d.ts +node_modules +yarn.lock +package-lock.json +public +next.config.js +README.md +Dockerfile +.nvmrc +.vscode +.idea \ No newline at end of file diff --git a/frontend/.eslintrc.json b/frontend/.eslintrc.json new file mode 100644 index 00000000..f9d066a2 --- /dev/null +++ b/frontend/.eslintrc.json @@ -0,0 +1,25 @@ +{ + "env": { + "browser": true, + "es2021": true + }, + "extends": ["plugin:react/recommended", "standard-with-typescript", "next/core-web-vitals"], + "parser": "@typescript-eslint/parser", + "overrides": [], + "parserOptions": { + "project": ["tsconfig.json"], + "ecmaFeatures": { + "jsx": true + }, + "ecmaVersion": "latest", + "sourceType": "module" + }, + "plugins": ["react", "@typescript-eslint", "prettier"], + "rules": { + "quotes": ["error", "single"], // ๋ฌธ์ž์—ด ๋“ค์„ ์Œ๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ธ๋„๋ก ๊ฐ•์ œ, + "@typescript-eslint/explicit-function-return-type": "off", + "@typescript-eslint/semi": "off", + "@typescript-eslint/space-before-function-paren": "off", + "no-console": "warn" + } +} diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 00000000..4f360c89 --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,38 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts + +.vscode diff --git a/frontend/.husky/pre-commit b/frontend/.husky/pre-commit new file mode 100755 index 00000000..90da8bac --- /dev/null +++ b/frontend/.husky/pre-commit @@ -0,0 +1,36 @@ +#!/bin/sh +. "$(dirname "$0")/_/husky.sh" + +echo '๐Ÿ—๏ธ๐Ÿ‘ท Before commit, Checking format, linting and typing your project.' + +cd frontend + +# Check Prettier standards +echo '๐Ÿ”Ž Check formatting...' +npm run check-format || +( + echo '๐Ÿคฃ๐Ÿคฃ๐Ÿคฃ๐Ÿคฃ Prettier Check Failed.๐Ÿคฃ๐Ÿคฃ๐Ÿคฃ๐Ÿคฃ + Run npm run format, add changes and try commit again.'; + false; +) + +# Check ESLint Standards +echo '๐Ÿ”Ž Check linting...' +npm run check-lint || +( + echo '๐Ÿ˜ค๐Ÿ€๐Ÿ‘‹๐Ÿ˜ค Get that weak s**t out of here! ๐Ÿ˜ค๐Ÿ€๐Ÿ‘‹๐Ÿ˜ค + ESLint Check Failed. Make the required changes listed above, add changes and try to commit again.' + false; +) + +# Check tsconfig standards +echo '๐Ÿ”Ž Check typing...' +npm run check-types || +( + echo '๐Ÿคก๐Ÿ˜‚โŒ๐Ÿคก Failed Type check. ๐Ÿคก๐Ÿ˜‚โŒ๐Ÿคก + Are you seriously trying to write that? Make the changes required above.' + false; +) + +# If everything passes... Now we can commit +echo 'โœ…โœ…โœ…โœ… You win this time... I am committing this now. โœ…โœ…โœ…โœ…' \ No newline at end of file diff --git a/frontend/.husky/pre-push b/frontend/.husky/pre-push new file mode 100755 index 00000000..b8861b7d --- /dev/null +++ b/frontend/.husky/pre-push @@ -0,0 +1,15 @@ +. "$(dirname -- "$0")/_/husky.sh" + +echo '๐Ÿ›๐Ÿ›๐Ÿ›๐Ÿ›... Before push, Trying to build now. ๐Ÿ›๐Ÿ›๐Ÿ›๐Ÿ›' + +cd frontend + +npm run build || +( + echo 'โŒ๐Ÿ‘ท๐Ÿ”จโŒ Better call Bob... Because your build failed โŒ๐Ÿ‘ท๐Ÿ”จโŒ + Next build failed: View the errors above to see why. + ' + false; +) + +echo 'โœ…โœ…โœ…โœ… You win this time... I am pushing this now. โœ…โœ…โœ…โœ…' \ No newline at end of file diff --git a/frontend/.prettierignore b/frontend/.prettierignore new file mode 100644 index 00000000..6b23c880 --- /dev/null +++ b/frontend/.prettierignore @@ -0,0 +1,12 @@ +.next +next-env.d.ts +node_modules +yarn.lock +package-lock.json +public +next.config.js +README.md +Dockerfile +.nvmrc +.vscode +.idea \ No newline at end of file diff --git a/frontend/.prettierrc b/frontend/.prettierrc new file mode 100644 index 00000000..ee2c1faf --- /dev/null +++ b/frontend/.prettierrc @@ -0,0 +1,10 @@ +{ + "printWidth": 100, + "semi": true, + "singleQuote": true, + "tabWidth": 2, + "trailingComma": "es5", + "arrowParens": "always", + "bracketSpacing": true, + "endOfLine": "auto" +} diff --git a/frontend/README.md b/frontend/README.md new file mode 100644 index 00000000..c87e0421 --- /dev/null +++ b/frontend/README.md @@ -0,0 +1,34 @@ +This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). + +## Getting Started + +First, run the development server: + +```bash +npm run dev +# or +yarn dev +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + +You can start editing the page by modifying `pages/index.tsx`. The page auto-updates as you edit the file. + +[API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.ts`. + +The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages. + +## Learn More + +To learn more about Next.js, take a look at the following resources: + +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. + +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! + +## Deploy on Vercel + +The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. + +Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. diff --git a/frontend/next.config.js b/frontend/next.config.js new file mode 100644 index 00000000..ae887958 --- /dev/null +++ b/frontend/next.config.js @@ -0,0 +1,7 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = { + reactStrictMode: true, + swcMinify: true, +} + +module.exports = nextConfig diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 00000000..9e18c97e --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,5774 @@ +{ + "name": "frontend", + "version": "0.1.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "frontend", + "version": "0.1.0", + "dependencies": { + "next": "^12.3.3", + "react": "^17.0.2", + "react-dom": "^17.0.2" + }, + "devDependencies": { + "@types/node": "^18.11.9", + "@types/react": "^18.0.25", + "@types/react-dom": "^18.0.9", + "@typescript-eslint/eslint-plugin": "^5.43.0", + "eslint": "8.22.0", + "eslint-config-next": "^13.0.3", + "eslint-config-standard-with-typescript": "^23.0.0", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-n": "^15.5.1", + "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-promise": "^6.1.1", + "eslint-plugin-react": "^7.31.10", + "husky": "^8.0.2", + "prettier": "^2.7.1", + "typescript": "^4.8.4" + } + }, + "node_modules/@babel/runtime": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", + "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.13.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime-corejs3": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.20.1.tgz", + "integrity": "sha512-CGulbEDcg/ND1Im7fUNRZdGXmX2MTWVVZacQi/6DiKE5HNwZ3aVTm5PV4lO8HHz0B2h8WQyvKKjbX5XgTtydsg==", + "dev": true, + "dependencies": { + "core-js-pure": "^3.25.1", + "regenerator-runtime": "^0.13.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.10.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz", + "integrity": "sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/gitignore-to-minimatch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", + "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@next/env": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/env/-/env-12.3.3.tgz", + "integrity": "sha512-H2pKuOasV9RgvVaWosB2rGSNeQShQpiDaF4EEjLyagIc3HwqdOw2/VAG/8Lq+adOwPv2P73O1hulTNad3k5MDw==" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.0.3.tgz", + "integrity": "sha512-slmTAHNKDyc7jhx4VF8lFbmOPWJ3PShtUUWpb6x9+ga59CyOxgP6AdcDhxfapnWYACKe/TwYiaveufu7LqXgZg==", + "dev": true, + "dependencies": { + "glob": "7.1.7" + } + }, + "node_modules/@next/swc-android-arm-eabi": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.3.3.tgz", + "integrity": "sha512-5O/ZIX6hlIRGMy1R2f/8WiCZ4Hp4WTC0FcTuz8ycQ28j/mzDnmzjVoayVVr+ZmfEKQayFrRu+vxHjFyY0JGQlQ==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-android-arm64": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.3.3.tgz", + "integrity": "sha512-2QWreRmlxYRDtnLYn+BI8oukHwcP7W0zGIY5R2mEXRjI4ARqCLdu8RmcT9Vemw7RfeAVKA/4cv/9PY0pCcQpNA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.3.3.tgz", + "integrity": "sha512-GtZdDLerM+VToCMFp+W+WhnT6sxHePQH4xZZiYD/Y8KFiwHbDRcJr2FPG0bAJnGNiSvv/QQnBq74wjZ9+7vhcQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.3.3.tgz", + "integrity": "sha512-gRYvTKrRYynjFQUDJ+upHMcBiNz0ii0m7zGgmUTlTSmrBWqVSzx79EHYT7Nn4GWHM+a/W+2VXfu+lqHcJeQ9gQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-freebsd-x64": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.3.3.tgz", + "integrity": "sha512-r+GLATzCjjQI82bgrIPXWEYBwZonSO64OThk5wU6HduZlDYTEDxZsFNoNoesCDWCgRrgg+OXj7WLNy1WlvfX7w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm-gnueabihf": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.3.3.tgz", + "integrity": "sha512-juvRj1QX9jmQScL4nV0rROtYUFgWP76zfdn1fdfZ2BhvwUugIAq8x+jLVGlnXKUhDrP9+RrAufqXjjVkK+uBxA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.3.3.tgz", + "integrity": "sha512-hzinybStPB+SzS68hR5rzOngOH7Yd/jFuWGeg9qS5WifYXHpqwGH2BQeKpjVV0iJuyO9r309JKrRWMrbfhnuBA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.3.3.tgz", + "integrity": "sha512-oyfQYljCwf+9zUu1YkTZbRbyxmcHzvJPMGOxC3kJOReh3kCUoGcmvAxUPMtFD6FSYjJ+eaog4+2IFHtYuAw/bQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.3.3.tgz", + "integrity": "sha512-epv4FMazj/XG70KTTnrZ0H1VtL6DeWOvyHLHYy7f5PdgDpBXpDTFjVqhP8NFNH8HmaDDdeL1NvQD07AXhyvUKA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.3.3.tgz", + "integrity": "sha512-bG5QODFy59XnSFTiPyIAt+rbPdphtvQMibtOVvyjwIwsBUw7swJ6k+6PSPVYEYpi6SHzi3qYBsro39ayGJKQJg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.3.3.tgz", + "integrity": "sha512-FbnT3reJ3MbTJ5W0hvlCCGGVDSpburzT5XGC9ljBJ4kr+85iNTLjv7+vrPeDdwHEqtGmdZgnabkLVCI4yFyCag==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.3.3.tgz", + "integrity": "sha512-M/fKZC2tMGWA6eTsIniNEBpx2prdR8lIxvSO3gv5P6ymZOGVWCvEMksnTkPAjHnU6d8r8eCiuGKm3UNo7zCTpQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.3.3.tgz", + "integrity": "sha512-Ku9mfGwmNtk44o4B/jEWUxBAT4tJ3S7QbBMLJdL1GmtRZ05LGL36OqWjLvBPr8dFiHOQQbYoAmYfQw7zeGypYA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", + "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==", + "dev": true + }, + "node_modules/@swc/helpers": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.11.tgz", + "integrity": "sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "18.11.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", + "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", + "dev": true + }, + "node_modules/@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", + "dev": true + }, + "node_modules/@types/react": { + "version": "18.0.25", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.25.tgz", + "integrity": "sha512-xD6c0KDT4m7n9uD4ZHi02lzskaiqcBxf4zi+tXZY98a04wvc0hi/TcCPC2FOESZi51Nd7tlUeOJY8RofL799/g==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.0.9", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.9.tgz", + "integrity": "sha512-qnVvHxASt/H7i+XG1U1xMiY5t+IHcPGUK7TDMDzom08xa7e86eCeKOiLZezwCKVxJn6NEiiy2ekgX8aQssjIKg==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", + "dev": true + }, + "node_modules/@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.43.0.tgz", + "integrity": "sha512-wNPzG+eDR6+hhW4yobEmpR36jrqqQv1vxBq5LJO3fBAktjkvekfr4BRl+3Fn1CM/A+s8/EiGUbOMDoYqWdbtXA==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/type-utils": "5.43.0", + "@typescript-eslint/utils": "5.43.0", + "debug": "^4.3.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.43.0.tgz", + "integrity": "sha512-2iHUK2Lh7PwNUlhFxxLI2haSDNyXvebBO9izhjhMoDC+S3XI9qt2DGFUsiJ89m2k7gGYch2aEpYqV5F/+nwZug==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/typescript-estree": "5.43.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.43.0.tgz", + "integrity": "sha512-XNWnGaqAtTJsUiZaoiGIrdJYHsUOd3BZ3Qj5zKp9w6km6HsrjPk/TGZv0qMTWyWj0+1QOqpHQ2gZOLXaGA9Ekw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/visitor-keys": "5.43.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.43.0.tgz", + "integrity": "sha512-K21f+KY2/VvYggLf5Pk4tgBOPs2otTaIHy2zjclo7UZGLyFH86VfUOm5iq+OtDtxq/Zwu2I3ujDBykVW4Xtmtg==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.43.0", + "@typescript-eslint/utils": "5.43.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.43.0.tgz", + "integrity": "sha512-jpsbcD0x6AUvV7tyOlyvon0aUsQpF8W+7TpJntfCUWU1qaIKu2K34pMwQKSzQH8ORgUrGYY6pVIh1Pi8TNeteg==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.43.0.tgz", + "integrity": "sha512-BZ1WVe+QQ+igWal2tDbNg1j2HWUkAa+CVqdU79L4HP9izQY6CNhXfkNwd1SS4+sSZAP/EthI1uiCSY/+H0pROg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/visitor-keys": "5.43.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.43.0.tgz", + "integrity": "sha512-8nVpA6yX0sCjf7v/NDfeaOlyaIIqL7OaIGOWSPFqUKK59Gnumd3Wa+2l8oAaYO2lk0sO+SbWFWRSvhu8gLGv4A==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/typescript-estree": "5.43.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.43.0.tgz", + "integrity": "sha512-icl1jNH/d18OVHLfcwdL3bWUKsBeIiKYTGxMJCoGe7xFht+E4QgzOqoWYrU8XSLJWhVw8nTacbm03v23J/hFTg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.43.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/array-includes": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", + "dev": true + }, + "node_modules/axe-core": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.5.2.tgz", + "integrity": "sha512-u2MVsXfew5HBvjsczCv+xlwdNnB1oQR9HlAcsejZttNjKKSkeDNVwB1vMThIUIFI9GoT57Vtk8iQLwqOfAkboA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", + "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", + "dev": true + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/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, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001431", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz", + "integrity": "sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/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 + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/core-js-pure": { + "version": "3.26.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.26.1.tgz", + "integrity": "sha512-VVXcDpp/xJ21KdULRq/lXdLzQAtX7+37LzpyfFM973il0tWSsDEoyzG38G14AjTpK9VTfiNM9jnFauq/CpaWGQ==", + "dev": true, + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/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, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", + "dev": true + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/es-abstract": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", + "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/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, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.22.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.22.0.tgz", + "integrity": "sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.10.4", + "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.3", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "globby": "^11.1.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-next": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.0.3.tgz", + "integrity": "sha512-i2JoQP8gGv303GjXTonA27fm1ckRRkRoAP1WYEQgN0D2DDoFeBPqlJgHlMHnXKWjmNct/sW8jQEvy9am2juc8g==", + "dev": true, + "dependencies": { + "@next/eslint-plugin-next": "13.0.3", + "@rushstack/eslint-patch": "^1.1.3", + "@typescript-eslint/parser": "^5.42.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^2.7.1", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.31.7", + "eslint-plugin-react-hooks": "^4.5.0" + }, + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-config-standard": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz", + "integrity": "sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peerDependencies": { + "eslint": "^8.0.1", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-n": "^15.0.0", + "eslint-plugin-promise": "^6.0.0" + } + }, + "node_modules/eslint-config-standard-with-typescript": { + "version": "23.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-23.0.0.tgz", + "integrity": "sha512-iaaWifImn37Z1OXbNW1es7KI+S7D408F9ys0bpaQf2temeBWlvb0Nc5qHkOgYaRb5QxTZT32GGeN1gtswASOXA==", + "dev": true, + "dependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint-config-standard": "17.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^5.0.0", + "eslint": "^8.0.1", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-n": "^15.0.0", + "eslint-plugin-promise": "^6.0.0", + "typescript": "*" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz", + "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "glob": "^7.2.0", + "is-glob": "^4.0.3", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*" + } + }, + "node_modules/eslint-import-resolver-typescript/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", + "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", + "dev": true, + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-es": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", + "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", + "dev": true, + "dependencies": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" + } + }, + "node_modules/eslint-plugin-es/node_modules/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, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-plugin-es/node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", + "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", + "has": "^1.0.3", + "is-core-module": "^2.8.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.5", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz", + "integrity": "sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.18.9", + "aria-query": "^4.2.2", + "array-includes": "^3.1.5", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.4.3", + "axobject-query": "^2.2.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.3.2", + "language-tags": "^1.0.5", + "minimatch": "^3.1.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-n": { + "version": "15.5.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.5.1.tgz", + "integrity": "sha512-kAd+xhZm7brHoFLzKLB7/FGRFJNg/srmv67mqb7tto22rpr4wv/LV6RuXzAfv3jbab7+k1wi42PsIhGviywaaw==", + "dev": true, + "dependencies": { + "builtins": "^5.0.1", + "eslint-plugin-es": "^4.1.0", + "eslint-utils": "^3.0.0", + "ignore": "^5.1.1", + "is-core-module": "^2.11.0", + "minimatch": "^3.1.2", + "resolve": "^1.22.1", + "semver": "^7.3.8" + }, + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "eslint": ">=7.28.0", + "prettier": ">=2.0.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-promise": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", + "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.31.10", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.10.tgz", + "integrity": "sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.5", + "array.prototype.flatmap": "^1.3.0", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.5", + "object.fromentries": "^2.0.5", + "object.hasown": "^1.1.1", + "object.values": "^1.1.5", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.3", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/espree": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/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 + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/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==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/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, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/husky": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.2.tgz", + "integrity": "sha512-Tkv80jtvbnkK3mYWxPZePGFpQ/tT3HNSs/sasF9P2YfkMezDl3ON37YN6jUUI4eTg5LcyVynlb6r4eyvOmspvg==", + "dev": true, + "bin": { + "husky": "lib/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/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==", + "dev": true + }, + "node_modules/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": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", + "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.5", + "object.assign": "^4.1.3" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", + "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", + "dev": true + }, + "node_modules/language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "dev": true, + "dependencies": { + "language-subtag-registry": "~0.3.2" + } + }, + "node_modules/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, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/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==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/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, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "node_modules/next": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/next/-/next-12.3.3.tgz", + "integrity": "sha512-Rx2Y6Wl5R8E77NOfBupp/B9OPCklqfqD0yN2+rDivhMjd6hjVFH5n0WTDI4PWwDmZsdNcYt6NV85kJ3PLR+eNQ==", + "dependencies": { + "@next/env": "12.3.3", + "@swc/helpers": "0.4.11", + "caniuse-lite": "^1.0.30001406", + "postcss": "8.4.14", + "styled-jsx": "5.0.7", + "use-sync-external-store": "1.2.0" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": ">=12.22.0" + }, + "optionalDependencies": { + "@next/swc-android-arm-eabi": "12.3.3", + "@next/swc-android-arm64": "12.3.3", + "@next/swc-darwin-arm64": "12.3.3", + "@next/swc-darwin-x64": "12.3.3", + "@next/swc-freebsd-x64": "12.3.3", + "@next/swc-linux-arm-gnueabihf": "12.3.3", + "@next/swc-linux-arm64-gnu": "12.3.3", + "@next/swc-linux-arm64-musl": "12.3.3", + "@next/swc-linux-x64-gnu": "12.3.3", + "@next/swc-linux-x64-musl": "12.3.3", + "@next/swc-win32-arm64-msvc": "12.3.3", + "@next/swc-win32-ia32-msvc": "12.3.3", + "@next/swc-win32-x64-msvc": "12.3.3" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^6.0.0 || ^7.0.0", + "react": "^17.0.2 || ^18.0.0-0", + "react-dom": "^17.0.2 || ^18.0.0-0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", + "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", + "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.hasown": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", + "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/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, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.4.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", + "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/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, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/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, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/react": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + }, + "peerDependencies": { + "react": "17.0.2" + } + }, + "node_modules/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==", + "dev": true + }, + "node_modules/regenerator-runtime": { + "version": "0.13.10", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz", + "integrity": "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==", + "dev": true + }, + "node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/scheduler": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/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, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", + "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/styled-jsx": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.7.tgz", + "integrity": "sha512-b3sUzamS086YLRuvnaDigdAewz1/EFYlHpYBP5mZovKEdQQOIIYq8lApylub3HHZ6xFjV051kkGU7cudJmrXEA==", + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/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, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/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, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", + "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@babel/runtime": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", + "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.10" + } + }, + "@babel/runtime-corejs3": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.20.1.tgz", + "integrity": "sha512-CGulbEDcg/ND1Im7fUNRZdGXmX2MTWVVZacQi/6DiKE5HNwZ3aVTm5PV4lO8HHz0B2h8WQyvKKjbX5XgTtydsg==", + "dev": true, + "requires": { + "core-js-pure": "^3.25.1", + "regenerator-runtime": "^0.13.10" + } + }, + "@eslint/eslintrc": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + } + }, + "@humanwhocodes/config-array": { + "version": "0.10.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz", + "integrity": "sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/gitignore-to-minimatch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", + "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@next/env": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/env/-/env-12.3.3.tgz", + "integrity": "sha512-H2pKuOasV9RgvVaWosB2rGSNeQShQpiDaF4EEjLyagIc3HwqdOw2/VAG/8Lq+adOwPv2P73O1hulTNad3k5MDw==" + }, + "@next/eslint-plugin-next": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.0.3.tgz", + "integrity": "sha512-slmTAHNKDyc7jhx4VF8lFbmOPWJ3PShtUUWpb6x9+ga59CyOxgP6AdcDhxfapnWYACKe/TwYiaveufu7LqXgZg==", + "dev": true, + "requires": { + "glob": "7.1.7" + } + }, + "@next/swc-android-arm-eabi": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.3.3.tgz", + "integrity": "sha512-5O/ZIX6hlIRGMy1R2f/8WiCZ4Hp4WTC0FcTuz8ycQ28j/mzDnmzjVoayVVr+ZmfEKQayFrRu+vxHjFyY0JGQlQ==", + "optional": true + }, + "@next/swc-android-arm64": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.3.3.tgz", + "integrity": "sha512-2QWreRmlxYRDtnLYn+BI8oukHwcP7W0zGIY5R2mEXRjI4ARqCLdu8RmcT9Vemw7RfeAVKA/4cv/9PY0pCcQpNA==", + "optional": true + }, + "@next/swc-darwin-arm64": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.3.3.tgz", + "integrity": "sha512-GtZdDLerM+VToCMFp+W+WhnT6sxHePQH4xZZiYD/Y8KFiwHbDRcJr2FPG0bAJnGNiSvv/QQnBq74wjZ9+7vhcQ==", + "optional": true + }, + "@next/swc-darwin-x64": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.3.3.tgz", + "integrity": "sha512-gRYvTKrRYynjFQUDJ+upHMcBiNz0ii0m7zGgmUTlTSmrBWqVSzx79EHYT7Nn4GWHM+a/W+2VXfu+lqHcJeQ9gQ==", + "optional": true + }, + "@next/swc-freebsd-x64": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.3.3.tgz", + "integrity": "sha512-r+GLATzCjjQI82bgrIPXWEYBwZonSO64OThk5wU6HduZlDYTEDxZsFNoNoesCDWCgRrgg+OXj7WLNy1WlvfX7w==", + "optional": true + }, + "@next/swc-linux-arm-gnueabihf": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.3.3.tgz", + "integrity": "sha512-juvRj1QX9jmQScL4nV0rROtYUFgWP76zfdn1fdfZ2BhvwUugIAq8x+jLVGlnXKUhDrP9+RrAufqXjjVkK+uBxA==", + "optional": true + }, + "@next/swc-linux-arm64-gnu": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.3.3.tgz", + "integrity": "sha512-hzinybStPB+SzS68hR5rzOngOH7Yd/jFuWGeg9qS5WifYXHpqwGH2BQeKpjVV0iJuyO9r309JKrRWMrbfhnuBA==", + "optional": true + }, + "@next/swc-linux-arm64-musl": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.3.3.tgz", + "integrity": "sha512-oyfQYljCwf+9zUu1YkTZbRbyxmcHzvJPMGOxC3kJOReh3kCUoGcmvAxUPMtFD6FSYjJ+eaog4+2IFHtYuAw/bQ==", + "optional": true + }, + "@next/swc-linux-x64-gnu": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.3.3.tgz", + "integrity": "sha512-epv4FMazj/XG70KTTnrZ0H1VtL6DeWOvyHLHYy7f5PdgDpBXpDTFjVqhP8NFNH8HmaDDdeL1NvQD07AXhyvUKA==", + "optional": true + }, + "@next/swc-linux-x64-musl": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.3.3.tgz", + "integrity": "sha512-bG5QODFy59XnSFTiPyIAt+rbPdphtvQMibtOVvyjwIwsBUw7swJ6k+6PSPVYEYpi6SHzi3qYBsro39ayGJKQJg==", + "optional": true + }, + "@next/swc-win32-arm64-msvc": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.3.3.tgz", + "integrity": "sha512-FbnT3reJ3MbTJ5W0hvlCCGGVDSpburzT5XGC9ljBJ4kr+85iNTLjv7+vrPeDdwHEqtGmdZgnabkLVCI4yFyCag==", + "optional": true + }, + "@next/swc-win32-ia32-msvc": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.3.3.tgz", + "integrity": "sha512-M/fKZC2tMGWA6eTsIniNEBpx2prdR8lIxvSO3gv5P6ymZOGVWCvEMksnTkPAjHnU6d8r8eCiuGKm3UNo7zCTpQ==", + "optional": true + }, + "@next/swc-win32-x64-msvc": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.3.3.tgz", + "integrity": "sha512-Ku9mfGwmNtk44o4B/jEWUxBAT4tJ3S7QbBMLJdL1GmtRZ05LGL36OqWjLvBPr8dFiHOQQbYoAmYfQw7zeGypYA==", + "optional": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@rushstack/eslint-patch": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", + "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==", + "dev": true + }, + "@swc/helpers": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.11.tgz", + "integrity": "sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==", + "requires": { + "tslib": "^2.4.0" + } + }, + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "@types/node": { + "version": "18.11.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", + "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", + "dev": true + }, + "@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", + "dev": true + }, + "@types/react": { + "version": "18.0.25", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.25.tgz", + "integrity": "sha512-xD6c0KDT4m7n9uD4ZHi02lzskaiqcBxf4zi+tXZY98a04wvc0hi/TcCPC2FOESZi51Nd7tlUeOJY8RofL799/g==", + "dev": true, + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-dom": { + "version": "18.0.9", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.9.tgz", + "integrity": "sha512-qnVvHxASt/H7i+XG1U1xMiY5t+IHcPGUK7TDMDzom08xa7e86eCeKOiLZezwCKVxJn6NEiiy2ekgX8aQssjIKg==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, + "@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", + "dev": true + }, + "@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.43.0.tgz", + "integrity": "sha512-wNPzG+eDR6+hhW4yobEmpR36jrqqQv1vxBq5LJO3fBAktjkvekfr4BRl+3Fn1CM/A+s8/EiGUbOMDoYqWdbtXA==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/type-utils": "5.43.0", + "@typescript-eslint/utils": "5.43.0", + "debug": "^4.3.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/parser": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.43.0.tgz", + "integrity": "sha512-2iHUK2Lh7PwNUlhFxxLI2haSDNyXvebBO9izhjhMoDC+S3XI9qt2DGFUsiJ89m2k7gGYch2aEpYqV5F/+nwZug==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/typescript-estree": "5.43.0", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.43.0.tgz", + "integrity": "sha512-XNWnGaqAtTJsUiZaoiGIrdJYHsUOd3BZ3Qj5zKp9w6km6HsrjPk/TGZv0qMTWyWj0+1QOqpHQ2gZOLXaGA9Ekw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/visitor-keys": "5.43.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.43.0.tgz", + "integrity": "sha512-K21f+KY2/VvYggLf5Pk4tgBOPs2otTaIHy2zjclo7UZGLyFH86VfUOm5iq+OtDtxq/Zwu2I3ujDBykVW4Xtmtg==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "5.43.0", + "@typescript-eslint/utils": "5.43.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/types": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.43.0.tgz", + "integrity": "sha512-jpsbcD0x6AUvV7tyOlyvon0aUsQpF8W+7TpJntfCUWU1qaIKu2K34pMwQKSzQH8ORgUrGYY6pVIh1Pi8TNeteg==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.43.0.tgz", + "integrity": "sha512-BZ1WVe+QQ+igWal2tDbNg1j2HWUkAa+CVqdU79L4HP9izQY6CNhXfkNwd1SS4+sSZAP/EthI1uiCSY/+H0pROg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/visitor-keys": "5.43.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/utils": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.43.0.tgz", + "integrity": "sha512-8nVpA6yX0sCjf7v/NDfeaOlyaIIqL7OaIGOWSPFqUKK59Gnumd3Wa+2l8oAaYO2lk0sO+SbWFWRSvhu8gLGv4A==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/typescript-estree": "5.43.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" + }, + "dependencies": { + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.43.0.tgz", + "integrity": "sha512-icl1jNH/d18OVHLfcwdL3bWUKsBeIiKYTGxMJCoGe7xFht+E4QgzOqoWYrU8XSLJWhVw8nTacbm03v23J/hFTg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.43.0", + "eslint-visitor-keys": "^3.3.0" + } + }, + "acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "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" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + } + }, + "array-includes": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "is-string": "^1.0.7" + } + }, + "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 + }, + "array.prototype.flat": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + } + }, + "array.prototype.flatmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + } + }, + "ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", + "dev": true + }, + "axe-core": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.5.2.tgz", + "integrity": "sha512-u2MVsXfew5HBvjsczCv+xlwdNnB1oQR9HlAcsejZttNjKKSkeDNVwB1vMThIUIFI9GoT57Vtk8iQLwqOfAkboA==", + "dev": true + }, + "axobject-query": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", + "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "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" + } + }, + "builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "requires": { + "semver": "^7.0.0" + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001431", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz", + "integrity": "sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==" + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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 + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "core-js-pure": { + "version": "3.26.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.26.1.tgz", + "integrity": "sha512-VVXcDpp/xJ21KdULRq/lXdLzQAtX7+37LzpyfFM973il0tWSsDEoyzG38G14AjTpK9VTfiNM9jnFauq/CpaWGQ==", + "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" + } + }, + "csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", + "dev": true + }, + "damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "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" + } + }, + "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" + } + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "es-abstract": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", + "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + } + }, + "es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "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" + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint": { + "version": "8.22.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.22.0.tgz", + "integrity": "sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.10.4", + "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.3", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "globby": "^11.1.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + } + }, + "eslint-config-next": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.0.3.tgz", + "integrity": "sha512-i2JoQP8gGv303GjXTonA27fm1ckRRkRoAP1WYEQgN0D2DDoFeBPqlJgHlMHnXKWjmNct/sW8jQEvy9am2juc8g==", + "dev": true, + "requires": { + "@next/eslint-plugin-next": "13.0.3", + "@rushstack/eslint-patch": "^1.1.3", + "@typescript-eslint/parser": "^5.42.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^2.7.1", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.31.7", + "eslint-plugin-react-hooks": "^4.5.0" + } + }, + "eslint-config-standard": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz", + "integrity": "sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==", + "dev": true, + "requires": {} + }, + "eslint-config-standard-with-typescript": { + "version": "23.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-23.0.0.tgz", + "integrity": "sha512-iaaWifImn37Z1OXbNW1es7KI+S7D408F9ys0bpaQf2temeBWlvb0Nc5qHkOgYaRb5QxTZT32GGeN1gtswASOXA==", + "dev": true, + "requires": { + "@typescript-eslint/parser": "^5.0.0", + "eslint-config-standard": "17.0.0" + } + }, + "eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-import-resolver-typescript": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz", + "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==", + "dev": true, + "requires": { + "debug": "^4.3.4", + "glob": "^7.2.0", + "is-glob": "^4.0.3", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "eslint-module-utils": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", + "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", + "dev": true, + "requires": { + "debug": "^3.2.7" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-plugin-es": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", + "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", + "dev": true, + "requires": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "dependencies": { + "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 + } + } + }, + "eslint-plugin-import": { + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", + "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "dev": true, + "requires": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", + "has": "^1.0.3", + "is-core-module": "^2.8.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.5", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.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" + } + }, + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "eslint-plugin-jsx-a11y": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz", + "integrity": "sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==", + "dev": true, + "requires": { + "@babel/runtime": "^7.18.9", + "aria-query": "^4.2.2", + "array-includes": "^3.1.5", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.4.3", + "axobject-query": "^2.2.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.3.2", + "language-tags": "^1.0.5", + "minimatch": "^3.1.2", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "eslint-plugin-n": { + "version": "15.5.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.5.1.tgz", + "integrity": "sha512-kAd+xhZm7brHoFLzKLB7/FGRFJNg/srmv67mqb7tto22rpr4wv/LV6RuXzAfv3jbab7+k1wi42PsIhGviywaaw==", + "dev": true, + "requires": { + "builtins": "^5.0.1", + "eslint-plugin-es": "^4.1.0", + "eslint-utils": "^3.0.0", + "ignore": "^5.1.1", + "is-core-module": "^2.11.0", + "minimatch": "^3.1.2", + "resolve": "^1.22.1", + "semver": "^7.3.8" + } + }, + "eslint-plugin-prettier": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, + "eslint-plugin-promise": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", + "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", + "dev": true, + "requires": {} + }, + "eslint-plugin-react": { + "version": "7.31.10", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.10.tgz", + "integrity": "sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA==", + "dev": true, + "requires": { + "array-includes": "^3.1.5", + "array.prototype.flatmap": "^1.3.0", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.5", + "object.fromentries": "^2.0.5", + "object.hasown": "^1.1.1", + "object.values": "^1.1.5", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.3", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.7" + }, + "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" + } + }, + "resolve": { + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.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 + } + } + }, + "eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, + "requires": {} + }, + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + }, + "espree": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "dev": true, + "requires": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + } + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "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.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.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==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "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" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "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": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "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": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "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-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true + }, + "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 + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "husky": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.2.tgz", + "integrity": "sha512-Tkv80jtvbnkK3mYWxPZePGFpQ/tT3HNSs/sasF9P2YfkMezDl3ON37YN6jUUI4eTg5LcyVynlb6r4eyvOmspvg==", + "dev": true + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "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==", + "dev": true + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true + }, + "is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true + }, + "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-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "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": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "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==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "jsx-ast-utils": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", + "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", + "dev": true, + "requires": { + "array-includes": "^3.1.5", + "object.assign": "^4.1.3" + } + }, + "language-subtag-registry": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", + "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", + "dev": true + }, + "language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "dev": true, + "requires": { + "language-subtag-registry": "~0.3.2" + } + }, + "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" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "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" + } + }, + "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" + } + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "next": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/next/-/next-12.3.3.tgz", + "integrity": "sha512-Rx2Y6Wl5R8E77NOfBupp/B9OPCklqfqD0yN2+rDivhMjd6hjVFH5n0WTDI4PWwDmZsdNcYt6NV85kJ3PLR+eNQ==", + "requires": { + "@next/env": "12.3.3", + "@next/swc-android-arm-eabi": "12.3.3", + "@next/swc-android-arm64": "12.3.3", + "@next/swc-darwin-arm64": "12.3.3", + "@next/swc-darwin-x64": "12.3.3", + "@next/swc-freebsd-x64": "12.3.3", + "@next/swc-linux-arm-gnueabihf": "12.3.3", + "@next/swc-linux-arm64-gnu": "12.3.3", + "@next/swc-linux-arm64-musl": "12.3.3", + "@next/swc-linux-x64-gnu": "12.3.3", + "@next/swc-linux-x64-musl": "12.3.3", + "@next/swc-win32-arm64-msvc": "12.3.3", + "@next/swc-win32-ia32-msvc": "12.3.3", + "@next/swc-win32-x64-msvc": "12.3.3", + "@swc/helpers": "0.4.11", + "caniuse-lite": "^1.0.30001406", + "postcss": "8.4.14", + "styled-jsx": "5.0.7", + "use-sync-external-store": "1.2.0" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "object.entries": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", + "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "object.fromentries": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", + "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "object.hasown": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", + "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", + "dev": true, + "requires": { + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "object.values": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "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" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "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" + } + }, + "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 + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "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 + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "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 + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "postcss": { + "version": "8.4.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", + "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "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.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "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" + } + }, + "prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.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==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "react": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "react-dom": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + } + }, + "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==", + "dev": true + }, + "regenerator-runtime": { + "version": "0.13.10", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz", + "integrity": "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==", + "dev": true + }, + "regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^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 + }, + "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": "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" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + } + }, + "scheduler": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "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 + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + }, + "string.prototype.matchall": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", + "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4" + } + }, + "string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "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 + }, + "styled-jsx": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.7.tgz", + "integrity": "sha512-b3sUzamS086YLRuvnaDigdAewz1/EFYlHpYBP5mZovKEdQQOIIYq8lApylub3HHZ6xFjV051kkGU7cudJmrXEA==", + "requires": {} + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "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" + } + }, + "tsconfig-paths": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "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.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "typescript": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", + "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", + "dev": true + }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "requires": {} + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "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" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "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 + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "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 + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + } + } +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 00000000..4e24a563 --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,40 @@ +{ + "name": "frontend", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint", + "commit": "gitmoji -c", + "prepare": "cd .. && husky install frontend/.husky", + "check-types": "tsc --pretty --noEmit", + "check-format": "prettier --check .", + "check-lint": "eslint . --ext ts --ext tsx --ext js", + "format": "prettier --write .", + "test-all": "npm run check-format && npm run check-lint && npm run check-types && npm run build" + }, + "dependencies": { + "next": "^12.3.3", + "react": "^17.0.2", + "react-dom": "^17.0.2" + }, + "devDependencies": { + "@types/node": "^18.11.9", + "@types/react": "^18.0.25", + "@types/react-dom": "^18.0.9", + "@typescript-eslint/eslint-plugin": "^5.43.0", + "eslint": "8.22.0", + "eslint-config-next": "^13.0.3", + "eslint-config-standard-with-typescript": "^23.0.0", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-n": "^15.5.1", + "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-promise": "^6.1.1", + "eslint-plugin-react": "^7.31.10", + "husky": "^8.0.2", + "prettier": "^2.7.1", + "typescript": "^4.8.4" + } +} diff --git a/frontend/public/favicon.ico b/frontend/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..718d6fea4835ec2d246af9800eddb7ffb276240c GIT binary patch literal 25931 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 LrJugUA?W`A8`#=m literal 0 HcmV?d00001 diff --git a/frontend/public/vercel.svg b/frontend/public/vercel.svg new file mode 100644 index 00000000..fbf0e25a --- /dev/null +++ b/frontend/public/vercel.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/frontend/src/components/Title.tsx b/frontend/src/components/Title.tsx new file mode 100644 index 00000000..28113720 --- /dev/null +++ b/frontend/src/components/Title.tsx @@ -0,0 +1,5 @@ +const Title = () => { + return
Title
; +}; + +export default Title; diff --git a/frontend/src/pages/_app.tsx b/frontend/src/pages/_app.tsx new file mode 100644 index 00000000..45580992 --- /dev/null +++ b/frontend/src/pages/_app.tsx @@ -0,0 +1,6 @@ +import '@styles/globals.css'; +import type { AppProps } from 'next/app'; + +export default function App({ Component, pageProps }: AppProps) { + return ; +} diff --git a/frontend/src/pages/index.tsx b/frontend/src/pages/index.tsx new file mode 100644 index 00000000..c422f753 --- /dev/null +++ b/frontend/src/pages/index.tsx @@ -0,0 +1,65 @@ +import Head from 'next/head'; +import Image from 'next/image'; +import styles from '@styles/Home.module.css'; + +export default function Home() { + return ( + + ); +} diff --git a/frontend/src/styles/Home.module.css b/frontend/src/styles/Home.module.css new file mode 100644 index 00000000..bd50f42f --- /dev/null +++ b/frontend/src/styles/Home.module.css @@ -0,0 +1,129 @@ +.container { + padding: 0 2rem; +} + +.main { + min-height: 100vh; + padding: 4rem 0; + flex: 1; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.footer { + display: flex; + flex: 1; + padding: 2rem 0; + border-top: 1px solid #eaeaea; + justify-content: center; + align-items: center; +} + +.footer a { + display: flex; + justify-content: center; + align-items: center; + flex-grow: 1; +} + +.title a { + color: #0070f3; + text-decoration: none; +} + +.title a:hover, +.title a:focus, +.title a:active { + text-decoration: underline; +} + +.title { + margin: 0; + line-height: 1.15; + font-size: 4rem; +} + +.title, +.description { + text-align: center; +} + +.description { + margin: 4rem 0; + line-height: 1.5; + font-size: 1.5rem; +} + +.code { + background: #fafafa; + border-radius: 5px; + padding: 0.75rem; + font-size: 1.1rem; + font-family: Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, + Bitstream Vera Sans Mono, Courier New, monospace; +} + +.grid { + display: flex; + align-items: center; + justify-content: center; + flex-wrap: wrap; + max-width: 800px; +} + +.card { + margin: 1rem; + padding: 1.5rem; + text-align: left; + color: inherit; + text-decoration: none; + border: 1px solid #eaeaea; + border-radius: 10px; + transition: color 0.15s ease, border-color 0.15s ease; + max-width: 300px; +} + +.card:hover, +.card:focus, +.card:active { + color: #0070f3; + border-color: #0070f3; +} + +.card h2 { + margin: 0 0 1rem 0; + font-size: 1.5rem; +} + +.card p { + margin: 0; + font-size: 1.25rem; + line-height: 1.5; +} + +.logo { + height: 1em; + margin-left: 0.5rem; +} + +@media (max-width: 600px) { + .grid { + width: 100%; + flex-direction: column; + } +} + +@media (prefers-color-scheme: dark) { + .card, + .footer { + border-color: #222; + } + .code { + background: #111; + } + .logo img { + filter: invert(1); + } +} diff --git a/frontend/src/styles/globals.css b/frontend/src/styles/globals.css new file mode 100644 index 00000000..36aac7e7 --- /dev/null +++ b/frontend/src/styles/globals.css @@ -0,0 +1,26 @@ +html, +body { + padding: 0; + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, + Fira Sans, Droid Sans, Helvetica Neue, sans-serif; +} + +a { + color: inherit; + text-decoration: none; +} + +* { + box-sizing: border-box; +} + +@media (prefers-color-scheme: dark) { + html { + color-scheme: dark; + } + body { + color: white; + background: black; + } +} diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json new file mode 100644 index 00000000..9aff2a97 --- /dev/null +++ b/frontend/tsconfig.json @@ -0,0 +1,31 @@ +{ + "compilerOptions": { + "allowJs": true, + "allowUnreachableCode": false, + "allowUnusedLabels": false, + "declaration": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "isolatedModules": true, + "jsx": "preserve", + "lib": ["dom", "dom.iterable", "esnext"], + "module": "esnext", + "moduleResolution": "node", + "noEmit": true, + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "pretty": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "target": "es2018", + "incremental": true, + "baseUrl": "src", + "paths": { + "@*": ["*"] + } + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], + "exclude": ["node_modules"] +} From afd65cf71ef415d2805c3fb823f42a08077cf4b2 Mon Sep 17 00:00:00 2001 From: yangseungchan Date: Wed, 16 Nov 2022 21:02:05 +0900 Subject: [PATCH 003/142] =?UTF-8?q?[Feature]=20=ED=94=84=EB=A1=A0=ED=8A=B8?= =?UTF-8?q?=EC=97=94=EB=93=9C=20=ED=99=98=EA=B2=BD=20=EC=84=B8=ED=8C=85=20?= =?UTF-8?q?2=EC=B0=A8=20-=20mantine,=20storybook=20(#21)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :sparkles: feature: mantine ์„ค์น˜ ๋ฐ ๊ธฐ๋ณธํ…Œ๋งˆ ์ ์šฉ * :sparkles: feature: ์™ธ๋ถ€ ํฐํŠธ ์ถ”๊ฐ€ ๋ฐ eslint quote ์„ค์ • ๋ณ€๊ฒฝ * :sparkles: feature: tabler icon ์ถ”๊ฐ€ * :sparkles: feature: RouterTransition ํšจ๊ณผ ์ถ”๊ฐ€ * :sparkles: feature: Storybook ๋„์ž…, StatCounter ์ปดํฌ๋„ŒํŠธ * :goal_net: chore: theme ํ•„์š”์—†๋Š” ์†์„ฑ ์‚ญ์ œ * :goal_net: chore: StatCounter props ์„ค๋ช… ์ถ”๊ฐ€ * :goal_net: chore: tsconfig.json ์ ์šฉ๋ฒ”์œ„ ์ˆ˜์ •, main.ts ํŒŒ์ผ ์ˆ˜์ • * :goal_net: chore: eslint ์˜ต์…˜๋“ค ์„ธ๋ถ€ ์กฐ์ • type-assertion:off -> storiesํŒŒ์ผ๋งŒ ์ ์šฉ, no-floating promises warn์œผ๋กœ ๋ณ€๊ฒฝ --- frontend/.eslintrc.json | 29 +- frontend/.npmrc | 1 + frontend/.storybook/main.ts | 14 + frontend/.storybook/preview.tsx | 13 + frontend/fonts.d.ts | 1 + frontend/package-lock.json | 46120 ++++++++++++++-- frontend/package.json | 26 +- .../public/fonts/NanumSquareNeo-Bold.woff2 | Bin 0 -> 384992 bytes .../fonts/NanumSquareNeo-ExtraBold.woff2 | Bin 0 -> 388128 bytes .../public/fonts/NanumSquareNeo-Heavy.woff2 | Bin 0 -> 361340 bytes .../public/fonts/NanumSquareNeo-Light.woff2 | Bin 0 -> 339380 bytes .../public/fonts/NanumSquareNeo-Regular.woff2 | Bin 0 -> 387104 bytes frontend/src/components/RouterTransition.tsx | 29 + .../components/StatCounter/index.stories.tsx | 27 + frontend/src/components/StatCounter/index.tsx | 47 + frontend/src/pages/_app.tsx | 23 +- frontend/src/pages/_document.tsx | 20 + frontend/src/pages/index.tsx | 94 +- frontend/src/styles/CustomFont.tsx | 47 + frontend/src/styles/Home.module.css | 129 - frontend/src/styles/globals.css | 26 - frontend/src/styles/theme.ts | 49 + frontend/src/typings/emotion.d.ts | 6 + frontend/tsconfig.json | 3 +- 24 files changed, 42472 insertions(+), 4232 deletions(-) create mode 100644 frontend/.npmrc create mode 100644 frontend/.storybook/main.ts create mode 100644 frontend/.storybook/preview.tsx create mode 100644 frontend/fonts.d.ts create mode 100755 frontend/public/fonts/NanumSquareNeo-Bold.woff2 create mode 100755 frontend/public/fonts/NanumSquareNeo-ExtraBold.woff2 create mode 100755 frontend/public/fonts/NanumSquareNeo-Heavy.woff2 create mode 100755 frontend/public/fonts/NanumSquareNeo-Light.woff2 create mode 100755 frontend/public/fonts/NanumSquareNeo-Regular.woff2 create mode 100644 frontend/src/components/RouterTransition.tsx create mode 100644 frontend/src/components/StatCounter/index.stories.tsx create mode 100644 frontend/src/components/StatCounter/index.tsx create mode 100644 frontend/src/pages/_document.tsx create mode 100644 frontend/src/styles/CustomFont.tsx delete mode 100644 frontend/src/styles/Home.module.css delete mode 100644 frontend/src/styles/globals.css create mode 100644 frontend/src/styles/theme.ts create mode 100644 frontend/src/typings/emotion.d.ts diff --git a/frontend/.eslintrc.json b/frontend/.eslintrc.json index f9d066a2..a88da503 100644 --- a/frontend/.eslintrc.json +++ b/frontend/.eslintrc.json @@ -3,9 +3,21 @@ "browser": true, "es2021": true }, - "extends": ["plugin:react/recommended", "standard-with-typescript", "next/core-web-vitals"], + "extends": [ + "plugin:react/recommended", + "standard-with-typescript", + "next/core-web-vitals", + "prettier" + ], "parser": "@typescript-eslint/parser", - "overrides": [], + "overrides": [ + { + "files": ["*.stories.tsx"], + "rules": { + "@typescript-eslint/consistent-type-assertions": "off" + } + } + ], "parserOptions": { "project": ["tsconfig.json"], "ecmaFeatures": { @@ -16,10 +28,19 @@ }, "plugins": ["react", "@typescript-eslint", "prettier"], "rules": { - "quotes": ["error", "single"], // ๋ฌธ์ž์—ด ๋“ค์„ ์Œ๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ธ๋„๋ก ๊ฐ•์ œ, + "quotes": [ + "error", + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ], // ๋ฌธ์ž์—ด ๋“ค์„ ์Œ๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ธ๋„๋ก ๊ฐ•์ œ, + "no-console": "warn", "@typescript-eslint/explicit-function-return-type": "off", "@typescript-eslint/semi": "off", "@typescript-eslint/space-before-function-paren": "off", - "no-console": "warn" + "@typescript-eslint/strict-boolean-expressions": "off", + "@typescript-eslint/no-floating-promises": "warn" } } diff --git a/frontend/.npmrc b/frontend/.npmrc new file mode 100644 index 00000000..521a9f7c --- /dev/null +++ b/frontend/.npmrc @@ -0,0 +1 @@ +legacy-peer-deps=true diff --git a/frontend/.storybook/main.ts b/frontend/.storybook/main.ts new file mode 100644 index 00000000..dbac2282 --- /dev/null +++ b/frontend/.storybook/main.ts @@ -0,0 +1,14 @@ +module.exports = { + stories: ['../src/**/*.stories.mdx', '../src/**/*.stories.@(js|jsx|ts|tsx)'], + addons: [ + '@storybook/addon-links', + '@storybook/addon-essentials', + '@storybook/addon-interactions', + 'storybook-addon-next', + 'storybook-addon-mantine', + ], + framework: '@storybook/react', + core: { + builder: '@storybook/builder-webpack5', + }, +}; diff --git a/frontend/.storybook/preview.tsx b/frontend/.storybook/preview.tsx new file mode 100644 index 00000000..04469395 --- /dev/null +++ b/frontend/.storybook/preview.tsx @@ -0,0 +1,13 @@ +import { ReactNode } from 'react'; +import { MantineProvider } from '@mantine/core'; +import theme from '../src/styles/theme'; + +const ThemeWrapper = (props: { children: ReactNode }) => { + return ( + + {props.children} + + ); +}; + +export const decorators = [(renderStory: Function) => {renderStory()}]; diff --git a/frontend/fonts.d.ts b/frontend/fonts.d.ts new file mode 100644 index 00000000..77664a92 --- /dev/null +++ b/frontend/fonts.d.ts @@ -0,0 +1 @@ +declare module '*.woff2'; diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 9e18c97e..0cb923ad 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -8,4324 +8,41595 @@ "name": "frontend", "version": "0.1.0", "dependencies": { + "@emotion/react": "^11.10.5", + "@emotion/server": "^11.10.0", + "@emotion/styled": "^11.10.5", + "@mantine/core": "^5.7.2", + "@mantine/hooks": "^5.7.2", + "@mantine/next": "^5.7.2", + "@mantine/nprogress": "^5.7.2", + "@tabler/icons": "^1.111.0", "next": "^12.3.3", "react": "^17.0.2", "react-dom": "^17.0.2" }, "devDependencies": { + "@babel/core": "^7.20.2", + "@storybook/addon-actions": "^6.5.13", + "@storybook/addon-essentials": "^6.5.13", + "@storybook/addon-interactions": "^6.5.13", + "@storybook/addon-links": "^6.5.13", + "@storybook/builder-webpack5": "^6.5.13", + "@storybook/manager-webpack5": "^6.5.13", + "@storybook/react": "^6.5.13", + "@storybook/testing-library": "^0.0.13", "@types/node": "^18.11.9", "@types/react": "^18.0.25", "@types/react-dom": "^18.0.9", "@typescript-eslint/eslint-plugin": "^5.43.0", + "babel-loader": "^8.3.0", "eslint": "8.22.0", "eslint-config-next": "^13.0.3", + "eslint-config-prettier": "^8.5.0", "eslint-config-standard-with-typescript": "^23.0.0", "eslint-plugin-import": "^2.26.0", "eslint-plugin-n": "^15.5.1", "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-promise": "^6.1.1", "eslint-plugin-react": "^7.31.10", + "eslint-plugin-storybook": "^0.6.7", "husky": "^8.0.2", "prettier": "^2.7.1", + "storybook-addon-mantine": "^1.2.0", + "storybook-addon-next": "^1.6.10", "typescript": "^4.8.4" } }, - "node_modules/@babel/runtime": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", - "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", "dev": true, "dependencies": { - "regenerator-runtime": "^0.13.10" + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { - "node": ">=6.9.0" + "node": ">=6.0.0" } }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.20.1.tgz", - "integrity": "sha512-CGulbEDcg/ND1Im7fUNRZdGXmX2MTWVVZacQi/6DiKE5HNwZ3aVTm5PV4lO8HHz0B2h8WQyvKKjbX5XgTtydsg==", + "node_modules/@babel/cli": { + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.19.3.tgz", + "integrity": "sha512-643/TybmaCAe101m2tSVHi9UKpETXP9c/Ff4mD2tAwkdP6esKIfaauZFc67vGEM6r9fekbEGid+sZhbEnSe3dg==", "dev": true, "dependencies": { - "core-js-pure": "^3.25.1", - "regenerator-runtime": "^0.13.10" + "@jridgewell/trace-mapping": "^0.3.8", + "commander": "^4.0.1", + "convert-source-map": "^1.1.0", + "fs-readdir-recursive": "^1.1.0", + "glob": "^7.2.0", + "make-dir": "^2.1.0", + "slash": "^2.0.0" + }, + "bin": { + "babel": "bin/babel.js", + "babel-external-helpers": "bin/babel-external-helpers.js" }, "engines": { "node": ">=6.9.0" + }, + "optionalDependencies": { + "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.3", + "chokidar": "^3.4.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@eslint/eslintrc": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", - "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", + "node_modules/@babel/cli/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@babel/cli/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "*" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.10.7", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz", - "integrity": "sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==", + "node_modules/@babel/cli/node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" + "@babel/highlight": "^7.18.6" }, "engines": { - "node": ">=10.10.0" + "node": ">=6.9.0" } }, - "node_modules/@humanwhocodes/gitignore-to-minimatch": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", - "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "node_modules/@babel/compat-data": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", + "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==", "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "node_modules/@next/env": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/env/-/env-12.3.3.tgz", - "integrity": "sha512-H2pKuOasV9RgvVaWosB2rGSNeQShQpiDaF4EEjLyagIc3HwqdOw2/VAG/8Lq+adOwPv2P73O1hulTNad3k5MDw==" - }, - "node_modules/@next/eslint-plugin-next": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.0.3.tgz", - "integrity": "sha512-slmTAHNKDyc7jhx4VF8lFbmOPWJ3PShtUUWpb6x9+ga59CyOxgP6AdcDhxfapnWYACKe/TwYiaveufu7LqXgZg==", + "node_modules/@babel/core": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.2.tgz", + "integrity": "sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==", "dev": true, "dependencies": { - "glob": "7.1.7" + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.2", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-module-transforms": "^7.20.2", + "@babel/helpers": "^7.20.1", + "@babel/parser": "^7.20.2", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.2", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "node_modules/@next/swc-android-arm-eabi": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.3.3.tgz", - "integrity": "sha512-5O/ZIX6hlIRGMy1R2f/8WiCZ4Hp4WTC0FcTuz8ycQ28j/mzDnmzjVoayVVr+ZmfEKQayFrRu+vxHjFyY0JGQlQ==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], + "node_modules/@babel/core/node_modules/json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, "engines": { - "node": ">= 10" + "node": ">=6" } }, - "node_modules/@next/swc-android-arm64": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.3.3.tgz", - "integrity": "sha512-2QWreRmlxYRDtnLYn+BI8oukHwcP7W0zGIY5R2mEXRjI4ARqCLdu8RmcT9Vemw7RfeAVKA/4cv/9PY0pCcQpNA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/@next/swc-darwin-arm64": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.3.3.tgz", - "integrity": "sha512-GtZdDLerM+VToCMFp+W+WhnT6sxHePQH4xZZiYD/Y8KFiwHbDRcJr2FPG0bAJnGNiSvv/QQnBq74wjZ9+7vhcQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], + "node_modules/@babel/generator": { + "version": "7.20.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz", + "integrity": "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.2", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, "engines": { - "node": ">= 10" + "node": ">=6.9.0" } }, - "node_modules/@next/swc-darwin-x64": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.3.3.tgz", - "integrity": "sha512-gRYvTKrRYynjFQUDJ+upHMcBiNz0ii0m7zGgmUTlTSmrBWqVSzx79EHYT7Nn4GWHM+a/W+2VXfu+lqHcJeQ9gQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, "engines": { - "node": ">= 10" + "node": ">=6.0.0" } }, - "node_modules/@next/swc-freebsd-x64": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.3.3.tgz", - "integrity": "sha512-r+GLATzCjjQI82bgrIPXWEYBwZonSO64OThk5wU6HduZlDYTEDxZsFNoNoesCDWCgRrgg+OXj7WLNy1WlvfX7w==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, "engines": { - "node": ">= 10" + "node": ">=6.9.0" } }, - "node_modules/@next/swc-linux-arm-gnueabihf": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.3.3.tgz", - "integrity": "sha512-juvRj1QX9jmQScL4nV0rROtYUFgWP76zfdn1fdfZ2BhvwUugIAq8x+jLVGlnXKUhDrP9+RrAufqXjjVkK+uBxA==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", + "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", + "dev": true, + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.9" + }, "engines": { - "node": ">= 10" + "node": ">=6.9.0" } }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.3.3.tgz", - "integrity": "sha512-hzinybStPB+SzS68hR5rzOngOH7Yd/jFuWGeg9qS5WifYXHpqwGH2BQeKpjVV0iJuyO9r309JKrRWMrbfhnuBA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], + "node_modules/@babel/helper-compilation-targets": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", + "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.20.0", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "semver": "^6.3.0" + }, "engines": { - "node": ">= 10" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.3.3.tgz", - "integrity": "sha512-oyfQYljCwf+9zUu1YkTZbRbyxmcHzvJPMGOxC3kJOReh3kCUoGcmvAxUPMtFD6FSYjJ+eaog4+2IFHtYuAw/bQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.3.3.tgz", - "integrity": "sha512-epv4FMazj/XG70KTTnrZ0H1VtL6DeWOvyHLHYy7f5PdgDpBXpDTFjVqhP8NFNH8HmaDDdeL1NvQD07AXhyvUKA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.2.tgz", + "integrity": "sha512-k22GoYRAHPYr9I+Gvy2ZQlAe5mGy8BqWst2wRt8cwIufWTxrsVshhIBvYNqC80N0GSFWTsqRVexOtfzlgOEDvA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.19.1", + "@babel/helper-split-export-declaration": "^7.18.6" + }, "engines": { - "node": ">= 10" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.3.3.tgz", - "integrity": "sha512-bG5QODFy59XnSFTiPyIAt+rbPdphtvQMibtOVvyjwIwsBUw7swJ6k+6PSPVYEYpi6SHzi3qYBsro39ayGJKQJg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz", + "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.1.0" + }, "engines": { - "node": ">= 10" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.3.3.tgz", - "integrity": "sha512-FbnT3reJ3MbTJ5W0hvlCCGGVDSpburzT5XGC9ljBJ4kr+85iNTLjv7+vrPeDdwHEqtGmdZgnabkLVCI4yFyCag==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" } }, - "node_modules/@next/swc-win32-ia32-msvc": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.3.3.tgz", - "integrity": "sha512-M/fKZC2tMGWA6eTsIniNEBpx2prdR8lIxvSO3gv5P6ymZOGVWCvEMksnTkPAjHnU6d8r8eCiuGKm3UNo7zCTpQ==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" + "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.3.3.tgz", - "integrity": "sha512-Ku9mfGwmNtk44o4B/jEWUxBAT4tJ3S7QbBMLJdL1GmtRZ05LGL36OqWjLvBPr8dFiHOQQbYoAmYfQw7zeGypYA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], + "node_modules/@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true, "engines": { - "node": ">= 10" + "node": ">=6.9.0" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", + "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", "dev": true, "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "@babel/types": "^7.18.6" }, "engines": { - "node": ">= 8" + "node": ">=6.9.0" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/@babel/helper-function-name": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", "dev": true, + "dependencies": { + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" + }, "engines": { - "node": ">= 8" + "node": ">=6.9.0" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", "dev": true, "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "@babel/types": "^7.18.6" }, "engines": { - "node": ">= 8" + "node": ">=6.9.0" } }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", - "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==", - "dev": true - }, - "node_modules/@swc/helpers": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.11.tgz", - "integrity": "sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==", + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", + "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", + "dev": true, "dependencies": { - "tslib": "^2.4.0" + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "node_modules/@types/node": { - "version": "18.11.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", - "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", - "dev": true - }, - "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "dev": true + "node_modules/@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } }, - "node_modules/@types/react": { - "version": "18.0.25", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.25.tgz", - "integrity": "sha512-xD6c0KDT4m7n9uD4ZHi02lzskaiqcBxf4zi+tXZY98a04wvc0hi/TcCPC2FOESZi51Nd7tlUeOJY8RofL799/g==", + "node_modules/@babel/helper-module-transforms": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", + "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", "dev": true, "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@types/react-dom": { - "version": "18.0.9", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.9.tgz", - "integrity": "sha512-qnVvHxASt/H7i+XG1U1xMiY5t+IHcPGUK7TDMDzom08xa7e86eCeKOiLZezwCKVxJn6NEiiy2ekgX8aQssjIKg==", + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", "dev": true, "dependencies": { - "@types/react": "*" + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", - "dev": true - }, - "node_modules/@types/semver": { - "version": "7.3.13", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", - "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", - "dev": true + "node_modules/@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "engines": { + "node": ">=6.9.0" + } }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.43.0.tgz", - "integrity": "sha512-wNPzG+eDR6+hhW4yobEmpR36jrqqQv1vxBq5LJO3fBAktjkvekfr4BRl+3Fn1CM/A+s8/EiGUbOMDoYqWdbtXA==", + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", + "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.43.0", - "@typescript-eslint/type-utils": "5.43.0", - "@typescript-eslint/utils": "5.43.0", - "debug": "^4.3.4", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=6.9.0" }, "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "@babel/core": "^7.0.0" } }, - "node_modules/@typescript-eslint/parser": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.43.0.tgz", - "integrity": "sha512-2iHUK2Lh7PwNUlhFxxLI2haSDNyXvebBO9izhjhMoDC+S3XI9qt2DGFUsiJ89m2k7gGYch2aEpYqV5F/+nwZug==", + "node_modules/@babel/helper-replace-supers": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", + "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.43.0", - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/typescript-estree": "5.43.0", - "debug": "^4.3.4" + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/traverse": "^7.19.1", + "@babel/types": "^7.19.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=6.9.0" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.43.0.tgz", - "integrity": "sha512-XNWnGaqAtTJsUiZaoiGIrdJYHsUOd3BZ3Qj5zKp9w6km6HsrjPk/TGZv0qMTWyWj0+1QOqpHQ2gZOLXaGA9Ekw==", + "node_modules/@babel/helper-simple-access": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/visitor-keys": "5.43.0" + "@babel/types": "^7.20.2" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=6.9.0" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.43.0.tgz", - "integrity": "sha512-K21f+KY2/VvYggLf5Pk4tgBOPs2otTaIHy2zjclo7UZGLyFH86VfUOm5iq+OtDtxq/Zwu2I3ujDBykVW4Xtmtg==", + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", + "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.43.0", - "@typescript-eslint/utils": "5.43.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" + "@babel/types": "^7.20.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=6.9.0" } }, - "node_modules/@typescript-eslint/types": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.43.0.tgz", - "integrity": "sha512-jpsbcD0x6AUvV7tyOlyvon0aUsQpF8W+7TpJntfCUWU1qaIKu2K34pMwQKSzQH8ORgUrGYY6pVIh1Pi8TNeteg==", + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=6.9.0" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.43.0.tgz", - "integrity": "sha512-BZ1WVe+QQ+igWal2tDbNg1j2HWUkAa+CVqdU79L4HP9izQY6CNhXfkNwd1SS4+sSZAP/EthI1uiCSY/+H0pROg==", + "node_modules/@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz", + "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/visitor-keys": "5.43.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "@babel/helper-function-name": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=6.9.0" } }, - "node_modules/@typescript-eslint/utils": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.43.0.tgz", - "integrity": "sha512-8nVpA6yX0sCjf7v/NDfeaOlyaIIqL7OaIGOWSPFqUKK59Gnumd3Wa+2l8oAaYO2lk0sO+SbWFWRSvhu8gLGv4A==", + "node_modules/@babel/helpers": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz", + "integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.43.0", - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/typescript-estree": "5.43.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0", - "semver": "^7.3.7" + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/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==", + "dependencies": { + "color-convert": "^1.9.0" }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "engines": { + "node": ">=4" } }, - "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=4" } }, - "node_modules/@typescript-eslint/utils/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, + "node_modules/@babel/highlight/node_modules/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==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "engines": { - "node": ">=4.0" + "node": ">=0.8.0" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.43.0.tgz", - "integrity": "sha512-icl1jNH/d18OVHLfcwdL3bWUKsBeIiKYTGxMJCoGe7xFht+E4QgzOqoWYrU8XSLJWhVw8nTacbm03v23J/hFTg==", - "dev": true, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dependencies": { - "@typescript-eslint/types": "5.43.0", - "eslint-visitor-keys": "^3.3.0" + "has-flag": "^3.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=4" } }, - "node_modules/acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "node_modules/@babel/parser": { + "version": "7.20.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", + "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==", "dev": true, "bin": { - "acorn": "bin/acorn" + "parser": "bin/babel-parser.js" }, "engines": { - "node": ">=0.4.0" + "node": ">=6.0.0" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", + "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "@babel/core": "^7.0.0" } }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", + "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-proposal-optional-chaining": "^7.18.9" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.1.tgz", + "integrity": "sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g==", "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, "engines": { - "node": ">=8" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { - "node": ">=8" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", + "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", "dev": true, "dependencies": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "engines": { - "node": ">=6.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" } }, - "node_modules/array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.20.2.tgz", + "integrity": "sha512-nkBH96IBmgKnbHQ5gXFrcmez+Z9S2EIDKDQGp005ROqBigc88Tky4rzCnlP/lnlj245dCEQl4/YyV0V1kYh5dw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "is-string": "^1.0.7" + "@babel/helper-create-class-features-plugin": "^7.20.2", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-replace-supers": "^7.19.1", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/plugin-syntax-decorators": "^7.19.0" }, "engines": { - "node": ">= 0.4" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/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==", + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", + "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, "engines": { - "node": ">=8" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "node_modules/@babel/plugin-proposal-export-default-from": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.18.10.tgz", + "integrity": "sha512-5H2N3R2aQFxkV4PIBUR/i7PUSwgTZjouJKzI8eKswfIjT0PhvzkPn0t0wIS5zn6maQuvtT0t1oHtMUz61LOuow==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-default-from": "^7.18.6" }, "engines": { - "node": ">= 0.4" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", + "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { - "node": ">= 0.4" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", - "dev": true + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", + "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/axe-core": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.5.2.tgz", - "integrity": "sha512-u2MVsXfew5HBvjsczCv+xlwdNnB1oQR9HlAcsejZttNjKKSkeDNVwB1vMThIUIFI9GoT57Vtk8iQLwqOfAkboA==", + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", + "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, "engines": { - "node": ">=4" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/axobject-query": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", - "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", - "dev": true - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { - "node": ">=8" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz", + "integrity": "sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==", "dev": true, "dependencies": { - "semver": "^7.0.0" + "@babel/compat-data": "^7.20.1", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", + "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, "engines": { - "node": ">=6" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001431", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz", - "integrity": "sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ] - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { - "node": ">=10" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/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==", + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", + "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", "dev": true, "dependencies": { - "color-name": "~1.1.4" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { - "node": ">=7.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/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 - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/core-js-pure": { - "version": "3.26.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.26.1.tgz", - "integrity": "sha512-VVXcDpp/xJ21KdULRq/lXdLzQAtX7+37LzpyfFM973il0tWSsDEoyzG38G14AjTpK9VTfiNM9jnFauq/CpaWGQ==", + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", "dev": true, - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/@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==", "dev": true, "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">= 8" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", - "dev": true - }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" + "@babel/helper-plugin-utils": "^7.12.13" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { - "node": ">= 0.4" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.19.0.tgz", + "integrity": "sha512-xaBZUEDntt4faL1yN8oIFlhfXeQAWJW7CLKYsHTUqriCUbj8xOra8bfxxKGi/UwExPFBuPdH4XfHc9rGQhrVkQ==", "dev": true, "dependencies": { - "path-type": "^4.0.0" + "@babel/helper-plugin-utils": "^7.19.0" }, "engines": { - "node": ">=8" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "node_modules/@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==", "dev": true, "dependencies": { - "esutils": "^2.0.2" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">=6.0.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/es-abstract": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", - "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", + "node_modules/@babel/plugin-syntax-export-default-from": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.18.6.tgz", + "integrity": "sha512-Kr//z3ujSVNx6E9z9ih5xXXMqK07VVTuqPmqGe6Mss/zW5XPeLZeSDZoP9ab/hT4wPKqAgjl2PnhPrcpk8Seew==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { - "node": ">= 0.4" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, "dependencies": { - "has": "^1.0.3" + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/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==", + "node_modules/@babel/plugin-syntax-flow": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz", + "integrity": "sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==", "dev": true, "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { - "node": ">= 0.4" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", + "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.19.0" + }, "engines": { - "node": ">=10" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/eslint": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.22.0.tgz", - "integrity": "sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA==", + "node_modules/@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==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.10.4", - "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.3", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "globby": "^11.1.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "@babel/helper-plugin-utils": "^7.8.0" }, - "bin": { - "eslint": "bin/eslint.js" + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=6.9.0" }, - "funding": { - "url": "https://opencollective.com/eslint" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/eslint-config-next": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.0.3.tgz", - "integrity": "sha512-i2JoQP8gGv303GjXTonA27fm1ckRRkRoAP1WYEQgN0D2DDoFeBPqlJgHlMHnXKWjmNct/sW8jQEvy9am2juc8g==", + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, "dependencies": { - "@next/eslint-plugin-next": "13.0.3", - "@rushstack/eslint-patch": "^1.1.3", - "@typescript-eslint/parser": "^5.42.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^2.7.1", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.31.7", - "eslint-plugin-react-hooks": "^4.5.0" + "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { - "eslint": "^7.23.0 || ^8.0.0", - "typescript": ">=3.3.1" + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/eslint-config-standard": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz", - "integrity": "sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==", + "node_modules/@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==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, "peerDependencies": { - "eslint": "^8.0.1", - "eslint-plugin-import": "^2.25.2", - "eslint-plugin-n": "^15.0.0", - "eslint-plugin-promise": "^6.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/eslint-config-standard-with-typescript": { - "version": "23.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-23.0.0.tgz", - "integrity": "sha512-iaaWifImn37Z1OXbNW1es7KI+S7D408F9ys0bpaQf2temeBWlvb0Nc5qHkOgYaRb5QxTZT32GGeN1gtswASOXA==", + "node_modules/@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==", "dev": true, "dependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint-config-standard": "17.0.0" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^5.0.0", - "eslint": "^8.0.1", - "eslint-plugin-import": "^2.25.2", - "eslint-plugin-n": "^15.0.0", - "eslint-plugin-promise": "^6.0.0", - "typescript": "*" + "@babel/core": "^7.0.0-0" } }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "node_modules/@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==", "dev": true, "dependencies": { - "debug": "^3.2.7", - "resolve": "^1.20.0" + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/@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==", "dev": true, "dependencies": { - "ms": "^2.1.1" + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/eslint-import-resolver-typescript": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz", - "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==", + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, "dependencies": { - "debug": "^4.3.4", - "glob": "^7.2.0", - "is-glob": "^4.0.3", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { - "node": ">=4" + "node": ">=6.9.0" }, "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*" + "@babel/core": "^7.0.0-0" } }, - "node_modules/eslint-import-resolver-typescript/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { - "node": "*" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/eslint-module-utils": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", - "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", + "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", "dev": true, "dependencies": { - "debug": "^3.2.7" + "@babel/helper-plugin-utils": "^7.19.0" }, "engines": { - "node": ">=4" + "node": ">=6.9.0" }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", + "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", "dev": true, "dependencies": { - "ms": "^2.1.1" + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/eslint-plugin-es": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", - "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", + "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", "dev": true, "dependencies": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6" }, "engines": { - "node": ">=8.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "node": ">=6.9.0" }, "peerDependencies": { - "eslint": ">=4.19.1" + "@babel/core": "^7.0.0-0" } }, - "node_modules/eslint-plugin-es/node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^1.1.0" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { - "node": ">=6" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/eslint-plugin-es/node_modules/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==", + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.2.tgz", + "integrity": "sha512-y5V15+04ry69OV2wULmwhEA6jwSWXO1TwAtIwiPXcvHcoOQUqpyMVd2bDsQJMW8AurjulIyUV8kDqtjSwHy1uQ==", "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, "engines": { - "node": ">=4" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/eslint-plugin-import": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", - "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "node_modules/@babel/plugin-transform-classes": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz", + "integrity": "sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==", "dev": true, "dependencies": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", - "has": "^1.0.3", - "is-core-module": "^2.8.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-replace-supers": "^7.19.1", + "@babel/helper-split-export-declaration": "^7.18.6", + "globals": "^11.1.0" }, "engines": { - "node": ">=4" + "node": ">=6.9.0" }, "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + "@babel/core": "^7.0.0-0" } }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/@babel/plugin-transform-classes/node_modules/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, - "dependencies": { - "ms": "2.0.0" + "engines": { + "node": ">=4" } }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", + "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", "dev": true, "dependencies": { - "esutils": "^2.0.2" + "@babel/helper-plugin-utils": "^7.18.9" }, "engines": { - "node": ">=0.10.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/eslint-plugin-import/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz", - "integrity": "sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==", + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz", + "integrity": "sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==", "dev": true, "dependencies": { - "@babel/runtime": "^7.18.9", - "aria-query": "^4.2.2", - "array-includes": "^3.1.5", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.4.3", - "axobject-query": "^2.2.0", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.2", - "language-tags": "^1.0.5", - "minimatch": "^3.1.2", - "semver": "^6.3.0" + "@babel/helper-plugin-utils": "^7.20.2" }, "engines": { - "node": ">=4.0" + "node": ">=6.9.0" }, "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" + "@babel/core": "^7.0.0-0" } }, - "node_modules/eslint-plugin-n": { - "version": "15.5.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.5.1.tgz", - "integrity": "sha512-kAd+xhZm7brHoFLzKLB7/FGRFJNg/srmv67mqb7tto22rpr4wv/LV6RuXzAfv3jbab7+k1wi42PsIhGviywaaw==", + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", + "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", "dev": true, "dependencies": { - "builtins": "^5.0.1", - "eslint-plugin-es": "^4.1.0", - "eslint-utils": "^3.0.0", - "ignore": "^5.1.1", - "is-core-module": "^2.11.0", - "minimatch": "^3.1.2", - "resolve": "^1.22.1", - "semver": "^7.3.8" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { - "node": ">=12.22.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "node": ">=6.9.0" }, "peerDependencies": { - "eslint": ">=7.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/eslint-plugin-prettier": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", - "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", + "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", "dev": true, "dependencies": { - "prettier-linter-helpers": "^1.0.0" + "@babel/helper-plugin-utils": "^7.18.9" }, "engines": { - "node": ">=12.0.0" + "node": ">=6.9.0" }, "peerDependencies": { - "eslint": ">=7.28.0", - "prettier": ">=2.0.0" - }, - "peerDependenciesMeta": { - "eslint-config-prettier": { - "optional": true - } + "@babel/core": "^7.0.0-0" } }, - "node_modules/eslint-plugin-promise": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", - "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=6.9.0" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/eslint-plugin-react": { - "version": "7.31.10", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.10.tgz", - "integrity": "sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA==", + "node_modules/@babel/plugin-transform-flow-strip-types": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.19.0.tgz", + "integrity": "sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg==", "dev": true, "dependencies": { - "array-includes": "^3.1.5", - "array.prototype.flatmap": "^1.3.0", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.5", - "object.fromentries": "^2.0.5", - "object.hasown": "^1.1.1", - "object.values": "^1.1.5", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.3", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.7" + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-flow": "^7.18.6" }, "engines": { - "node": ">=4" + "node": ">=6.9.0" }, "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "@babel/core": "^7.0.0-0" } }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", + "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, "engines": { - "node": ">=10" + "node": ">=6.9.0" }, "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", + "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", "dev": true, "dependencies": { - "esutils": "^2.0.2" + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" }, "engines": { - "node": ">=0.10.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "node_modules/@babel/plugin-transform-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", + "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", "dev": true, "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "@babel/helper-plugin-utils": "^7.18.9" }, - "bin": { - "resolve": "bin/resolve" + "engines": { + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", + "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz", + "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==", "dev": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", + "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^2.0.0" + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-simple-access": "^7.19.4" }, "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "node": ">=6.9.0" }, "peerDependencies": { - "eslint": ">=5" + "@babel/core": "^7.0.0-0" } }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz", + "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==", "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-validator-identifier": "^7.19.1" + }, "engines": { - "node": ">=10" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", + "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz", + "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==", "dev": true, "dependencies": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" + "@babel/helper-create-regexp-features-plugin": "^7.19.0", + "@babel/helper-plugin-utils": "^7.19.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=6.9.0" }, - "funding": { - "url": "https://opencollective.com/eslint" + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", + "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", "dev": true, "dependencies": { - "estraverse": "^5.1.0" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { - "node": ">=0.10" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", "dev": true, "dependencies": { - "estraverse": "^5.2.0" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" }, "engines": { - "node": ">=4.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.20.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.3.tgz", + "integrity": "sha512-oZg/Fpx0YDrj13KsLyO8I/CX3Zdw7z0O9qOd95SqcoIzuqy/WTGWvePeHAnZCN54SfdyjHcb1S30gc8zlzlHcA==", "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, "engines": { - "node": ">=4.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, "engines": { - "node": ">=0.10.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/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 - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", + "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", "dev": true, "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { - "node": ">=8.6.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", + "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", "dev": true, "dependencies": { - "is-glob": "^4.0.1" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/types": "^7.19.0" }, "engines": { - "node": ">= 6" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/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==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", + "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", "dev": true, "dependencies": { - "reusify": "^1.0.4" + "@babel/plugin-transform-react-jsx": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", + "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", "dev": true, "dependencies": { - "flat-cache": "^3.0.4" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/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==", + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", + "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", "dev": true, "dependencies": { - "to-regex-range": "^5.0.1" + "@babel/helper-plugin-utils": "^7.18.6", + "regenerator-transform": "^0.15.0" }, "engines": { - "node": ">=8" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", + "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", "dev": true, "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { - "node": ">=10" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", "dev": true, "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "node_modules/@babel/plugin-transform-spread": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", + "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" }, "engines": { - "node": ">= 0.4" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/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": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" + "@babel/helper-plugin-utils": "^7.18.6" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", + "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "@babel/helper-plugin-utils": "^7.18.9" }, "engines": { - "node": ">= 0.4" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", + "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "@babel/helper-plugin-utils": "^7.18.9" }, "engines": { - "node": "*" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.2.tgz", + "integrity": "sha512-jvS+ngBfrnTUBfOQq8NfGnSbF9BrqlR6hjJ2yVxMkmO5nL/cdifNbI30EfjRlN4g5wYWNnMPyj5Sa6R1pbLeag==", "dev": true, "dependencies": { - "is-glob": "^4.0.3" + "@babel/helper-create-class-features-plugin": "^7.20.2", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-typescript": "^7.20.0" }, "engines": { - "node": ">=10.13.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", + "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", "dev": true, "dependencies": { - "type-fest": "^0.20.2" + "@babel/helper-plugin-utils": "^7.18.9" }, "engines": { - "node": ">=8" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", "dev": true, "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { - "node": ">=10" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "node_modules/@babel/preset-env": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", + "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", "dev": true, "dependencies": { - "function-bind": "^1.1.1" + "@babel/compat-data": "^7.20.1", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-async-generator-functions": "^7.20.1", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.20.2", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.20.0", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.18.6", + "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.20.2", + "@babel/plugin-transform-classes": "^7.20.2", + "@babel/plugin-transform-computed-properties": "^7.18.9", + "@babel/plugin-transform-destructuring": "^7.20.2", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.18.8", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.19.6", + "@babel/plugin-transform-modules-commonjs": "^7.19.6", + "@babel/plugin-transform-modules-systemjs": "^7.19.6", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.20.1", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.19.0", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.18.10", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.20.2", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "core-js-compat": "^3.25.1", + "semver": "^6.3.0" }, "engines": { - "node": ">= 0.4.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/@babel/preset-flow": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.18.6.tgz", + "integrity": "sha512-E7BDhL64W6OUqpuyHnSroLnqyRTcG6ZdOBl1OKI/QK/HJfplqK/S3sq1Cckx7oTodJ5yOXyfw7rEADJ6UjoQDQ==", "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-flow-strip-types": "^7.18.6" + }, "engines": { - "node": ">=8" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "node_modules/@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.1" + "@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" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "node_modules/@babel/preset-react": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", + "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-react-display-name": "^7.18.6", + "@babel/plugin-transform-react-jsx": "^7.18.6", + "@babel/plugin-transform-react-jsx-development": "^7.18.6", + "@babel/plugin-transform-react-pure-annotations": "^7.18.6" + }, "engines": { - "node": ">= 0.4" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "node_modules/@babel/preset-typescript": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", + "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", "dev": true, "dependencies": { - "has-symbols": "^1.0.2" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-typescript": "^7.18.6" }, "engines": { - "node": ">= 0.4" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/husky": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.2.tgz", - "integrity": "sha512-Tkv80jtvbnkK3mYWxPZePGFpQ/tT3HNSs/sasF9P2YfkMezDl3ON37YN6jUUI4eTg5LcyVynlb6r4eyvOmspvg==", + "node_modules/@babel/register": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.18.9.tgz", + "integrity": "sha512-ZlbnXDcNYHMR25ITwwNKT88JiaukkdVj/nG7r3wnuXkOTHc60Uy05PwMCPre0hSkY68E6zK3xz+vUJSP2jWmcw==", "dev": true, - "bin": { - "husky": "lib/bin.js" + "dependencies": { + "clone-deep": "^4.0.1", + "find-cache-dir": "^2.0.0", + "make-dir": "^2.1.0", + "pirates": "^4.0.5", + "source-map-support": "^0.5.16" }, "engines": { - "node": ">=14" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/sponsors/typicode" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true, + "node_modules/@babel/runtime": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", + "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", + "dependencies": { + "regenerator-runtime": "^0.13.10" + }, "engines": { - "node": ">= 4" + "node": ">=6.9.0" } }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "node_modules/@babel/runtime-corejs3": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.20.1.tgz", + "integrity": "sha512-CGulbEDcg/ND1Im7fUNRZdGXmX2MTWVVZacQi/6DiKE5HNwZ3aVTm5PV4lO8HHz0B2h8WQyvKKjbX5XgTtydsg==", "dev": true, "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "core-js-pure": "^3.25.1", + "regenerator-runtime": "^0.13.10" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6.9.0" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "node_modules/@babel/template": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + }, "engines": { - "node": ">=0.8.19" + "node": ">=6.9.0" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "node_modules/@babel/traverse": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", + "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", "dev": true, "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.1", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.20.1", + "@babel/types": "^7.20.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "node_modules/@babel/traverse/node_modules/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, - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, "engines": { - "node": ">= 0.4" + "node": ">=4" } }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, + "node_modules/@babel/types": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", + "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", "dependencies": { - "has-bigints": "^1.0.1" + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "node_modules/@base2/pretty-print-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@base2/pretty-print-object/-/pretty-print-object-1.0.1.tgz", + "integrity": "sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==", + "dev": true + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@cnakazawa/watch": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", + "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" }, - "engines": { - "node": ">= 0.4" + "bin": { + "watch": "cli.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=0.1.95" } }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "dev": true, + "optional": true, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.1.90" } }, - "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "node_modules/@design-systems/utils": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@design-systems/utils/-/utils-2.12.0.tgz", + "integrity": "sha512-Y/d2Zzr+JJfN6u1gbuBUb1ufBuLMJJRZQk+dRmw8GaTpqKx5uf7cGUYGTwN02dIb3I+Tf+cW8jcGBTRiFxdYFg==", "dev": true, "dependencies": { - "has": "^1.0.3" + "@babel/runtime": "^7.11.2", + "clsx": "^1.0.4", + "focus-lock": "^0.8.0", + "react-merge-refs": "^1.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@types/react": "*", + "react": ">= 16.8.6", + "react-dom": ">= 16.8.6" } }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "node_modules/@devtools-ds/object-inspector": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@devtools-ds/object-inspector/-/object-inspector-1.2.0.tgz", + "integrity": "sha512-VztcwqVwScSvYdvJVZBJYsVO/2Pew3JPpFV3T9fuCHQLlHcLYOV3aU/kBS2ScuE2O1JN0ZbobLqFLa3vQF54Fw==", "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" + "@babel/runtime": "7.7.2", + "@devtools-ds/object-parser": "^1.2.0", + "@devtools-ds/themes": "^1.2.0", + "@devtools-ds/tree": "^1.2.0", + "clsx": "1.1.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "react": ">= 16.8.6" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "node_modules/@devtools-ds/object-inspector/node_modules/@babel/runtime": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.7.2.tgz", + "integrity": "sha512-JONRbXbTXc9WQE2mAZd1p0Z3DZ/6vaQIkgYMSTP3KjRCyd7rCZCcfhCyX+YjwcKxcZ82UrxbRD358bpExNgrjw==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "regenerator-runtime": "^0.13.2" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/@devtools-ds/object-inspector/node_modules/clsx": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.0.tgz", + "integrity": "sha512-3avwM37fSK5oP6M5rQ9CNe99lwxhXDOeSWVPAOYF6OazUTgZCMb0yWlJpmdD74REy1gkEaFiub2ULv4fq9GUhA==", "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "node_modules/@devtools-ds/object-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@devtools-ds/object-parser/-/object-parser-1.2.0.tgz", + "integrity": "sha512-SjGGyiFFY8dtUpiWXAvRSzRT+hE11EAAysrq2PsC/GVLf2ZLyT2nHlQO5kDStywyTz+fjw7S7pyDRj1HG9YTTA==", "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "@babel/runtime": "~7.5.4" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/@devtools-ds/object-parser/node_modules/@babel/runtime": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", + "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", "dev": true, - "engines": { - "node": ">=0.12.0" + "dependencies": { + "regenerator-runtime": "^0.13.2" } }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "node_modules/@devtools-ds/themes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@devtools-ds/themes/-/themes-1.2.0.tgz", + "integrity": "sha512-LimEITorE6yWZWWuMc6OiBfLQgPrQqWbyMEmfRUDPa3PHXoAY4SpDxczfg31fgyRDUNWnZhjaJH5bBbu8VEbIw==", "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" + "@babel/runtime": "~7.5.4", + "@design-systems/utils": "2.12.0", + "clsx": "1.1.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "react": ">= 16.8.6" } }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "node_modules/@devtools-ds/themes/node_modules/@babel/runtime": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", + "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, + "regenerator-runtime": "^0.13.2" + } + }, + "node_modules/@devtools-ds/themes/node_modules/clsx": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.0.tgz", + "integrity": "sha512-3avwM37fSK5oP6M5rQ9CNe99lwxhXDOeSWVPAOYF6OazUTgZCMb0yWlJpmdD74REy1gkEaFiub2ULv4fq9GUhA==", + "dev": true, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6" } }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "node_modules/@devtools-ds/tree": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@devtools-ds/tree/-/tree-1.2.0.tgz", + "integrity": "sha512-hC4g4ocuo2eg7jsnzKdauxH0sDQiPW3KSM2+uK3kRgcmr9PzpBD5Kob+Y/WFSVKswFleftOGKL4BQLuRv0sPxA==", "dev": true, "dependencies": { - "call-bind": "^1.0.2" + "@babel/runtime": "7.7.2", + "@devtools-ds/themes": "^1.2.0", + "clsx": "1.1.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "react": ">= 16.8.6" } }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "node_modules/@devtools-ds/tree/node_modules/@babel/runtime": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.7.2.tgz", + "integrity": "sha512-JONRbXbTXc9WQE2mAZd1p0Z3DZ/6vaQIkgYMSTP3KjRCyd7rCZCcfhCyX+YjwcKxcZ82UrxbRD358bpExNgrjw==", "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "regenerator-runtime": "^0.13.2" } }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "node_modules/@devtools-ds/tree/node_modules/clsx": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.0.tgz", + "integrity": "sha512-3avwM37fSK5oP6M5rQ9CNe99lwxhXDOeSWVPAOYF6OazUTgZCMb0yWlJpmdD74REy1gkEaFiub2ULv4fq9GUhA==", "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6" } }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@emotion/babel-plugin": { + "version": "11.10.5", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.5.tgz", + "integrity": "sha512-xE7/hyLHJac7D2Ve9dKroBBZqBT7WuPQmWcq7HSGb84sUuP4mlOWoB8dvVfD9yk5DHkU1m6RW7xSoDtnQHNQeA==", "dependencies": { - "call-bind": "^1.0.2" + "@babel/helper-module-imports": "^7.16.7", + "@babel/plugin-syntax-jsx": "^7.17.12", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.0", + "@emotion/memoize": "^0.8.0", + "@emotion/serialize": "^1.1.1", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.1.3" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "node_modules/@emotion/cache": { + "version": "11.10.5", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.5.tgz", + "integrity": "sha512-dGYHWyzTdmK+f2+EnIGBpkz1lKc4Zbj2KHd4cX3Wi8/OWr5pKslNjc3yABKH4adRGCvSX4VDC0i04mrrq0aiRA==", + "dependencies": { + "@emotion/memoize": "^0.8.0", + "@emotion/sheet": "^1.2.1", + "@emotion/utils": "^1.2.0", + "@emotion/weak-memoize": "^0.3.0", + "stylis": "4.1.3" + } }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "node_modules/@emotion/hash": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.0.tgz", + "integrity": "sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==" }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, + "node_modules/@emotion/is-prop-valid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz", + "integrity": "sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==", "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "@emotion/memoize": "^0.8.0" } }, - "node_modules/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==", - "dev": true + "node_modules/@emotion/memoize": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.0.tgz", + "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==" }, - "node_modules/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": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "node_modules/@emotion/react": { + "version": "11.10.5", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.5.tgz", + "integrity": "sha512-TZs6235tCJ/7iF6/rvTaOH4oxQg2gMAcdHemjwLKIjKz4rRuYe1HJ2TQJKnAcRAfOUDdU8XoDadCe1rl72iv8A==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.10.5", + "@emotion/cache": "^11.10.5", + "@emotion/serialize": "^1.1.1", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@emotion/utils": "^1.2.0", + "@emotion/weak-memoize": "^0.3.0", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@types/react": { + "optional": true + } + } }, - "node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, + "node_modules/@emotion/serialize": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.1.tgz", + "integrity": "sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA==", "dependencies": { - "minimist": "^1.2.0" + "@emotion/hash": "^0.9.0", + "@emotion/memoize": "^0.8.0", + "@emotion/unitless": "^0.8.0", + "@emotion/utils": "^1.2.0", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/server": { + "version": "11.10.0", + "resolved": "https://registry.npmjs.org/@emotion/server/-/server-11.10.0.tgz", + "integrity": "sha512-MTvJ21JPo9aS02GdjFW4nhdwOi2tNNpMmAM/YED0pkxzjDNi5WbiTwXqaCnvLc2Lr8NFtjhT0az1vTJyLIHYcw==", + "dependencies": { + "@emotion/utils": "^1.2.0", + "html-tokenize": "^2.0.0", + "multipipe": "^1.0.2", + "through": "^2.3.8" }, - "bin": { - "json5": "lib/cli.js" + "peerDependencies": { + "@emotion/css": "^11.0.0-rc.0" + }, + "peerDependenciesMeta": { + "@emotion/css": { + "optional": true + } } }, - "node_modules/jsx-ast-utils": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", - "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", + "node_modules/@emotion/sheet": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.1.tgz", + "integrity": "sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA==" + }, + "node_modules/@emotion/styled": { + "version": "11.10.5", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.10.5.tgz", + "integrity": "sha512-8EP6dD7dMkdku2foLoruPCNkRevzdcBaY6q0l0OsbyJK+x8D9HWjX27ARiSIKNF634hY9Zdoedh8bJCiva8yZw==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.10.5", + "@emotion/is-prop-valid": "^1.2.0", + "@emotion/serialize": "^1.1.1", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@emotion/utils": "^1.2.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/unitless": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", + "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz", + "integrity": "sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz", + "integrity": "sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz", + "integrity": "sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==" + }, + "node_modules/@eslint/eslintrc": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", "dev": true, "dependencies": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" }, "engines": { - "node": ">=4.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", + "node_modules/@floating-ui/core": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.0.1.tgz", + "integrity": "sha512-bO37brCPfteXQfFY0DyNDGB3+IMe4j150KFQcgJ5aBP295p9nBGeHEs/p0czrRbtlHq4Px/yoPXO/+dOCcF4uA==" + }, + "node_modules/@floating-ui/dom": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.0.4.tgz", + "integrity": "sha512-maYJRv+sAXTy4K9mzdv0JPyNW5YPVHrqtY90tEdI6XNpuLOP26Ci2pfwPsKBA/Wh4Z3FX5sUrtUFTdMYj9v+ug==", + "dependencies": { + "@floating-ui/core": "^1.0.1" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-1.0.0.tgz", + "integrity": "sha512-uiOalFKPG937UCLm42RxjESTWUVpbbatvlphQAU6bsv+ence6IoVG8JOUZcy8eW81NkU+Idiwvx10WFLmR4MIg==", + "dependencies": { + "@floating-ui/dom": "^1.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/react-dom-interactions": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom-interactions/-/react-dom-interactions-0.10.3.tgz", + "integrity": "sha512-UEHqdnzyoiWNU5az/tAljr9iXFzN18DcvpMqW+/cXz4FEhDEB1ogLtWldOWCujLerPBnSRocADALafelOReMpw==", + "dependencies": { + "@floating-ui/react-dom": "^1.0.0", + "aria-hidden": "^1.1.3" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", "dev": true }, - "node_modules/language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "node_modules/@humanwhocodes/config-array": { + "version": "0.10.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz", + "integrity": "sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==", "dev": true, "dependencies": { - "language-subtag-registry": "~0.3.2" + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" } }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "node_modules/@humanwhocodes/gitignore-to-minimatch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", + "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=8" } }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "dependencies": { - "p-locate": "^5.0.0" + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/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, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/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==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, "bin": { - "loose-envify": "cli.js" + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/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==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/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, "dependencies": { - "yallist": "^4.0.0" + "p-locate": "^4.1.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/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, + "dependencies": { + "p-try": "^2.0.0" + }, "engines": { - "node": ">= 8" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/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, "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" + "p-limit": "^2.2.0" }, "engines": { - "node": ">=8.6" + "node": ">=8" } }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/transform": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", + "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "@babel/core": "^7.1.0", + "@jest/types": "^26.6.2", + "babel-plugin-istanbul": "^6.0.0", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-util": "^26.6.2", + "micromatch": "^4.0.2", + "pirates": "^4.0.1", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" }, "engines": { - "node": "*" + "node": ">= 10.14.2" } }, - "node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "node_modules/@jest/transform/node_modules/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, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "node_modules/@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } }, - "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "bin": { - "nanoid": "bin/nanoid.cjs" + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" }, "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "node": ">=6.0.0" } }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, - "node_modules/next": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/next/-/next-12.3.3.tgz", - "integrity": "sha512-Rx2Y6Wl5R8E77NOfBupp/B9OPCklqfqD0yN2+rDivhMjd6hjVFH5n0WTDI4PWwDmZsdNcYt6NV85kJ3PLR+eNQ==", - "dependencies": { - "@next/env": "12.3.3", - "@swc/helpers": "0.4.11", - "caniuse-lite": "^1.0.30001406", - "postcss": "8.4.14", - "styled-jsx": "5.0.7", - "use-sync-external-store": "1.2.0" - }, - "bin": { - "next": "dist/bin/next" - }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, "engines": { - "node": ">=12.22.0" - }, - "optionalDependencies": { - "@next/swc-android-arm-eabi": "12.3.3", - "@next/swc-android-arm64": "12.3.3", - "@next/swc-darwin-arm64": "12.3.3", - "@next/swc-darwin-x64": "12.3.3", - "@next/swc-freebsd-x64": "12.3.3", - "@next/swc-linux-arm-gnueabihf": "12.3.3", - "@next/swc-linux-arm64-gnu": "12.3.3", - "@next/swc-linux-arm64-musl": "12.3.3", - "@next/swc-linux-x64-gnu": "12.3.3", - "@next/swc-linux-x64-musl": "12.3.3", - "@next/swc-win32-arm64-msvc": "12.3.3", - "@next/swc-win32-ia32-msvc": "12.3.3", - "@next/swc-win32-x64-msvc": "12.3.3" - }, - "peerDependencies": { - "fibers": ">= 3.1.0", - "node-sass": "^6.0.0 || ^7.0.0", - "react": "^17.0.2 || ^18.0.0-0", - "react-dom": "^17.0.2 || ^18.0.0-0", - "sass": "^1.3.0" - }, - "peerDependenciesMeta": { - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - } + "node": ">=6.0.0" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=6.0.0" } }, - "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" } }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, "engines": { - "node": ">= 0.4" + "node": ">=6.0.0" } }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" } }, - "node_modules/object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", - "dev": true, + "node_modules/@mantine/core": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@mantine/core/-/core-5.7.2.tgz", + "integrity": "sha512-cDDvlYhDCzREfIZ33CRLQpXlv+UXRb4VBZWbfYxWXTRPV6gKNGXwlVmXcdDUJCcjRWLh9Wc4erWT8gdTAbvzsQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "@floating-ui/react-dom-interactions": "^0.10.1", + "@mantine/styles": "5.7.2", + "@mantine/utils": "5.7.2", + "@radix-ui/react-scroll-area": "1.0.0", + "react-textarea-autosize": "8.3.4" }, - "engines": { - "node": ">= 0.4" + "peerDependencies": { + "@mantine/hooks": "5.7.2", + "react": ">=16.8.0", + "react-dom": ">=16.8.0" } }, - "node_modules/object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", - "dev": true, + "node_modules/@mantine/hooks": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-5.7.2.tgz", + "integrity": "sha512-g+fxcnQwEeVM/5h+SAX/rDNL2s1652DGbP4xxfNg6yFqqhQzmtxQN7xsmkZ+ffx8wKhbsP5z13x6WZoxuJQh9Q==", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@mantine/next": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@mantine/next/-/next-5.7.2.tgz", + "integrity": "sha512-rcGmr2u7SwG+/Zw/eZPmr/jloiHdeW+rW66q+MtUCoVdMD4ik9fXrOFRcIhDmeSFmE6aQ4hPFwXdSY3AdEYGQg==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" + "@mantine/ssr": "5.7.2", + "@mantine/styles": "5.7.2" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "next": "*", + "react": ">=16.8.0", + "react-dom": ">=16.8.0" } }, - "node_modules/object.hasown": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", - "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", - "dev": true, + "node_modules/@mantine/nprogress": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@mantine/nprogress/-/nprogress-5.7.2.tgz", + "integrity": "sha512-PdVB8PImiz3TawFyNRgIrD/7t2pMfxmB6d+JPfs5+UZcG0nbATF17wvop+YsjsQ92LmEMby5sYIgH7qEhze1Sw==", "dependencies": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "@mantine/utils": "5.7.2" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@mantine/core": "5.7.2", + "@mantine/hooks": "5.7.2", + "react": ">=16.8.0", + "react-dom": ">=16.8.0" } }, - "node_modules/object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", - "dev": true, + "node_modules/@mantine/ssr": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@mantine/ssr/-/ssr-5.7.2.tgz", + "integrity": "sha512-2DB5Df6eR4C9/V7lpmwQE8jVkSHSJBTqkZxjsYa1HsKeX4cNFM0SbRsNYk1bQHSq377DXh6PkVMqTzSDqGcFgw==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" + "@mantine/styles": "5.7.2", + "html-react-parser": "1.4.12" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@emotion/react": ">=11.9.0", + "@emotion/server": ">=11.4.0", + "react": ">=16.8.0", + "react-dom": ">=16.8.0" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, + "node_modules/@mantine/styles": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@mantine/styles/-/styles-5.7.2.tgz", + "integrity": "sha512-z5Mxf6Zp7lXzfIM77XkZ68Wp62lDSMJwEMoKm0Kz5tRGV4oMQwirbZf4ZJznZKK3HkaT7ct1ScxnCouEWzlKUg==", "dependencies": { - "wrappy": "1" + "clsx": "1.1.1", + "csstype": "3.0.9" + }, + "peerDependencies": { + "@emotion/react": ">=11.9.0", + "react": ">=16.8.0", + "react-dom": ">=16.8.0" } }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "node_modules/@mantine/styles/node_modules/csstype": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.9.tgz", + "integrity": "sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw==" + }, + "node_modules/@mantine/utils": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@mantine/utils/-/utils-5.7.2.tgz", + "integrity": "sha512-LE/ckEX+d1f5GOP1ARNEldUYybOp3Tualx5IYgeV06oyBOaeJaXs9Tco2NTM6j+opZwUbNuYEUmtp4bkArhpOg==", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@mdx-js/mdx": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", + "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", "dev": true, "dependencies": { - "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" + "@babel/core": "7.12.9", + "@babel/plugin-syntax-jsx": "7.12.1", + "@babel/plugin-syntax-object-rest-spread": "7.8.3", + "@mdx-js/util": "1.6.22", + "babel-plugin-apply-mdx-type-prop": "1.6.22", + "babel-plugin-extract-import-names": "1.6.22", + "camelcase-css": "2.0.1", + "detab": "2.0.4", + "hast-util-raw": "6.0.1", + "lodash.uniq": "4.5.0", + "mdast-util-to-hast": "10.0.1", + "remark-footnotes": "2.0.0", + "remark-mdx": "1.6.22", + "remark-parse": "8.0.3", + "remark-squeeze-paragraphs": "4.0.0", + "style-to-object": "0.3.0", + "unified": "9.2.0", + "unist-builder": "2.0.3", + "unist-util-visit": "2.0.3" }, - "engines": { - "node": ">= 0.8.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/@mdx-js/mdx/node_modules/@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", "dev": true, "dependencies": { - "yocto-queue": "^0.1.0" + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" }, "engines": { - "node": ">=10" + "node": ">=6.9.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "node_modules/@mdx-js/mdx/node_modules/@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", "dev": true, "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" + "@babel/helper-plugin-utils": "^7.10.4" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/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==", + "node_modules/@mdx-js/mdx/node_modules/json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", "dev": true, - "dependencies": { - "callsites": "^3.0.0" + "bin": { + "json5": "lib/cli.js" }, "engines": { "node": ">=6" } }, - "node_modules/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==", + "node_modules/@mdx-js/mdx/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, - "engines": { - "node": ">=8" + "bin": { + "semver": "bin/semver" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "node_modules/@mdx-js/react": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", + "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", "dev": true, - "engines": { - "node": ">=0.10.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "react": "^16.13.1 || ^17.0.0" } }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/@mdx-js/util": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", + "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", + "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", "dev": true, + "dependencies": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "node_modules/@mrmlnc/readdir-enhanced/node_modules/glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==", "dev": true }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "node_modules/@next/env": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/env/-/env-12.3.3.tgz", + "integrity": "sha512-H2pKuOasV9RgvVaWosB2rGSNeQShQpiDaF4EEjLyagIc3HwqdOw2/VAG/8Lq+adOwPv2P73O1hulTNad3k5MDw==" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.0.3.tgz", + "integrity": "sha512-slmTAHNKDyc7jhx4VF8lFbmOPWJ3PShtUUWpb6x9+ga59CyOxgP6AdcDhxfapnWYACKe/TwYiaveufu7LqXgZg==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "glob": "7.1.7" } }, - "node_modules/picocolors": { + "node_modules/@next/swc-android-arm-eabi": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.3.3.tgz", + "integrity": "sha512-5O/ZIX6hlIRGMy1R2f/8WiCZ4Hp4WTC0FcTuz8ycQ28j/mzDnmzjVoayVVr+ZmfEKQayFrRu+vxHjFyY0JGQlQ==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-android-arm64": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.3.3.tgz", + "integrity": "sha512-2QWreRmlxYRDtnLYn+BI8oukHwcP7W0zGIY5R2mEXRjI4ARqCLdu8RmcT9Vemw7RfeAVKA/4cv/9PY0pCcQpNA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.3.3.tgz", + "integrity": "sha512-GtZdDLerM+VToCMFp+W+WhnT6sxHePQH4xZZiYD/Y8KFiwHbDRcJr2FPG0bAJnGNiSvv/QQnBq74wjZ9+7vhcQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.3.3.tgz", + "integrity": "sha512-gRYvTKrRYynjFQUDJ+upHMcBiNz0ii0m7zGgmUTlTSmrBWqVSzx79EHYT7Nn4GWHM+a/W+2VXfu+lqHcJeQ9gQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-freebsd-x64": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.3.3.tgz", + "integrity": "sha512-r+GLATzCjjQI82bgrIPXWEYBwZonSO64OThk5wU6HduZlDYTEDxZsFNoNoesCDWCgRrgg+OXj7WLNy1WlvfX7w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm-gnueabihf": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.3.3.tgz", + "integrity": "sha512-juvRj1QX9jmQScL4nV0rROtYUFgWP76zfdn1fdfZ2BhvwUugIAq8x+jLVGlnXKUhDrP9+RrAufqXjjVkK+uBxA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.3.3.tgz", + "integrity": "sha512-hzinybStPB+SzS68hR5rzOngOH7Yd/jFuWGeg9qS5WifYXHpqwGH2BQeKpjVV0iJuyO9r309JKrRWMrbfhnuBA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.3.3.tgz", + "integrity": "sha512-oyfQYljCwf+9zUu1YkTZbRbyxmcHzvJPMGOxC3kJOReh3kCUoGcmvAxUPMtFD6FSYjJ+eaog4+2IFHtYuAw/bQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.3.3.tgz", + "integrity": "sha512-epv4FMazj/XG70KTTnrZ0H1VtL6DeWOvyHLHYy7f5PdgDpBXpDTFjVqhP8NFNH8HmaDDdeL1NvQD07AXhyvUKA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.3.3.tgz", + "integrity": "sha512-bG5QODFy59XnSFTiPyIAt+rbPdphtvQMibtOVvyjwIwsBUw7swJ6k+6PSPVYEYpi6SHzi3qYBsro39ayGJKQJg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.3.3.tgz", + "integrity": "sha512-FbnT3reJ3MbTJ5W0hvlCCGGVDSpburzT5XGC9ljBJ4kr+85iNTLjv7+vrPeDdwHEqtGmdZgnabkLVCI4yFyCag==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.3.3.tgz", + "integrity": "sha512-M/fKZC2tMGWA6eTsIniNEBpx2prdR8lIxvSO3gv5P6ymZOGVWCvEMksnTkPAjHnU6d8r8eCiuGKm3UNo7zCTpQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.3.3.tgz", + "integrity": "sha512-Ku9mfGwmNtk44o4B/jEWUxBAT4tJ3S7QbBMLJdL1GmtRZ05LGL36OqWjLvBPr8dFiHOQQbYoAmYfQw7zeGypYA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nicolo-ribaudo/chokidar-2": { + "version": "2.1.8-no-fsevents.3", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", + "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==", + "dev": true, + "optional": true + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "dev": true, + "dependencies": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "node_modules/@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "deprecated": "This functionality has been moved to @npmcli/fs", + "dev": true, + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.9.tgz", + "integrity": "sha512-7QV4cqUwhkDIHpMAZ9mestSJ2DMIotVTbOUwbiudhjCRTAWWKIaBecELiEM2LT3AHFeOAaHIcFu4dbXjX+9GBA==", + "dev": true, + "dependencies": { + "ansi-html-community": "^0.0.8", + "common-path-prefix": "^3.0.0", + "core-js-pure": "^3.23.3", + "error-stack-parser": "^2.0.6", + "find-up": "^5.0.0", + "html-entities": "^2.1.0", + "loader-utils": "^2.0.3", + "schema-utils": "^3.0.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">= 10.13" + }, + "peerDependencies": { + "@types/webpack": "4.x || 5.x", + "react-refresh": ">=0.10.0 <1.0.0", + "sockjs-client": "^1.4.0", + "type-fest": ">=0.17.0 <4.0.0", + "webpack": ">=4.43.0 <6.0.0", + "webpack-dev-server": "3.x || 4.x", + "webpack-hot-middleware": "2.x", + "webpack-plugin-serve": "0.x || 1.x" + }, + "peerDependenciesMeta": { + "@types/webpack": { + "optional": true + }, + "sockjs-client": { + "optional": true + }, + "type-fest": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + }, + "webpack-hot-middleware": { + "optional": true + }, + "webpack-plugin-serve": { + "optional": true + } + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@radix-ui/number": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.0.0.tgz", + "integrity": "sha512-Ofwh/1HX69ZfJRiRBMTy7rgjAzHmwe4kW9C9Y99HTRUcYLUuVT0KESFj15rPjRgKJs20GPq8Bm5aEDJ8DuA3vA==", + "dependencies": { + "@babel/runtime": "^7.13.10" + } + }, + "node_modules/@radix-ui/primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.0.tgz", + "integrity": "sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==", + "dependencies": { + "@babel/runtime": "^7.13.10" + } + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.0.tgz", + "integrity": "sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-context": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.0.tgz", + "integrity": "sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-direction": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.0.tgz", + "integrity": "sha512-2HV05lGUgYcA6xgLQ4BKPDmtL+QbIZYH5fCOTAOOcJ5O0QbWS3i9lKaurLzliYUDhORI2Qr3pyjhJh44lKA3rQ==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-presence": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.0.tgz", + "integrity": "sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-use-layout-effect": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.0.tgz", + "integrity": "sha512-EyXe6mnRlHZ8b6f4ilTDrXmkLShICIuOTTj0GX4w1rp+wSxf3+TD05u1UOITC8VsJ2a9nwHvdXtOXEOl0Cw/zQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-scroll-area": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.0.0.tgz", + "integrity": "sha512-3SNFukAjS5remgtpAVR9m3Zgo23ZojBZ8V3TCyR3A+56x2mtVqKlPV4+e8rScZUFMuvtbjIdQCmsJBFBazKZig==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/number": "1.0.0", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-direction": "1.0.0", + "@radix-ui/react-presence": "1.0.0", + "@radix-ui/react-primitive": "1.0.0", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-layout-effect": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.0.tgz", + "integrity": "sha512-3mrKauI/tWXo1Ll+gN5dHcxDPdm/Df1ufcDLCecn+pnCIVcdWE7CujXo8QaXOWRJyZyQWWbpB8eFwHzWXlv5mQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.0.tgz", + "integrity": "sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.0.tgz", + "integrity": "sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", + "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==", + "dev": true + }, + "node_modules/@storybook/addon-actions": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-6.5.13.tgz", + "integrity": "sha512-3Tji0gIy95havhTpSc6CsFl5lNxGn4O5Y1U9fyji+GRkKqDFOrvVLYAHPtLOpYdEI5tF0bDo+akiqfDouY8+eA==", + "dev": true, + "dependencies": { + "@storybook/addons": "6.5.13", + "@storybook/api": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/components": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/theming": "6.5.13", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "polished": "^4.2.2", + "prop-types": "^15.7.2", + "react-inspector": "^5.1.0", + "regenerator-runtime": "^0.13.7", + "telejson": "^6.0.8", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "uuid-browser": "^3.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@storybook/addon-backgrounds": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-6.5.13.tgz", + "integrity": "sha512-b4JX7JMY7e50y1l6g71D+2XWV3GO0TO2z1ta8J6W4OQt8f44V7sSkRQaJUzXdLjQMrA+Anojuy1ZwPjVeLC6vg==", + "dev": true, + "dependencies": { + "@storybook/addons": "6.5.13", + "@storybook/api": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/components": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/theming": "6.5.13", + "core-js": "^3.8.2", + "global": "^4.4.0", + "memoizerific": "^1.11.3", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@storybook/addon-controls": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-6.5.13.tgz", + "integrity": "sha512-lYq3uf2mlVevm0bi6ueL3H6TpUMRYW9s/pTNTVJT225l27kLdFR9wEKxAkCBrlKaTgDLJmzzDRsJE3NLZlR/5Q==", + "dev": true, + "dependencies": { + "@storybook/addons": "6.5.13", + "@storybook/api": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/components": "6.5.13", + "@storybook/core-common": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/node-logger": "6.5.13", + "@storybook/store": "6.5.13", + "@storybook/theming": "6.5.13", + "core-js": "^3.8.2", + "lodash": "^4.17.21", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@storybook/addon-docs": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-6.5.13.tgz", + "integrity": "sha512-RG/NjsheD9FixZ789RJlNyNccaR2Cuy7CtAwph4oUNi3aDFjtOI8Oe9L+FOT7qtVnZLw/YMjF+pZxoDqJNKLPw==", + "dev": true, + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.12.12", + "@babel/preset-env": "^7.12.11", + "@jest/transform": "^26.6.2", + "@mdx-js/react": "^1.6.22", + "@storybook/addons": "6.5.13", + "@storybook/api": "6.5.13", + "@storybook/components": "6.5.13", + "@storybook/core-common": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/docs-tools": "6.5.13", + "@storybook/mdx1-csf": "^0.0.1", + "@storybook/node-logger": "6.5.13", + "@storybook/postinstall": "6.5.13", + "@storybook/preview-web": "6.5.13", + "@storybook/source-loader": "6.5.13", + "@storybook/store": "6.5.13", + "@storybook/theming": "6.5.13", + "babel-loader": "^8.0.0", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "regenerator-runtime": "^0.13.7", + "remark-external-links": "^8.0.0", + "remark-slug": "^6.0.0", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "@storybook/mdx2-csf": "^0.0.3", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@storybook/mdx2-csf": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@storybook/addon-essentials": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-6.5.13.tgz", + "integrity": "sha512-G9FVAWV7ixjVLWeLgIX+VT90tcAk6yQxfZQegfg5ucRilGysJCDaNnoab4xuuvm1R40TfFhba3iAGZtQYsddmw==", + "dev": true, + "dependencies": { + "@storybook/addon-actions": "6.5.13", + "@storybook/addon-backgrounds": "6.5.13", + "@storybook/addon-controls": "6.5.13", + "@storybook/addon-docs": "6.5.13", + "@storybook/addon-measure": "6.5.13", + "@storybook/addon-outline": "6.5.13", + "@storybook/addon-toolbars": "6.5.13", + "@storybook/addon-viewport": "6.5.13", + "@storybook/addons": "6.5.13", + "@storybook/api": "6.5.13", + "@storybook/core-common": "6.5.13", + "@storybook/node-logger": "6.5.13", + "core-js": "^3.8.2", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "@babel/core": "^7.9.6" + }, + "peerDependenciesMeta": { + "@storybook/angular": { + "optional": true + }, + "@storybook/builder-manager4": { + "optional": true + }, + "@storybook/builder-manager5": { + "optional": true + }, + "@storybook/builder-webpack4": { + "optional": true + }, + "@storybook/builder-webpack5": { + "optional": true + }, + "@storybook/html": { + "optional": true + }, + "@storybook/vue": { + "optional": true + }, + "@storybook/vue3": { + "optional": true + }, + "@storybook/web-components": { + "optional": true + }, + "lit": { + "optional": true + }, + "lit-html": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "svelte": { + "optional": true + }, + "sveltedoc-parser": { + "optional": true + }, + "vue": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/@storybook/addon-interactions": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-6.5.13.tgz", + "integrity": "sha512-FPOeS7AT/Odxl6z7E0qYI4F0Sh06jFRttRvSgpKC5P2lYUWUstLP5TC8N+F5ijBeLfIdIsf5zBK7l5Y/cluueg==", + "dev": true, + "dependencies": { + "@devtools-ds/object-inspector": "^1.1.2", + "@storybook/addons": "6.5.13", + "@storybook/api": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/components": "6.5.13", + "@storybook/core-common": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/instrumenter": "6.5.13", + "@storybook/theming": "6.5.13", + "core-js": "^3.8.2", + "global": "^4.4.0", + "jest-mock": "^27.0.6", + "polished": "^4.2.2", + "ts-dedent": "^2.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@storybook/addon-links": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-6.5.13.tgz", + "integrity": "sha512-K/LYYu9R/Xoah5h9MNh4mSHOic3q5csqjderLqr2YW/KPYiuNubgvzEbAAbzI5xq5JrtAZqnINrZUv2A4CyYbQ==", + "dev": true, + "dependencies": { + "@storybook/addons": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/router": "6.5.13", + "@types/qs": "^6.9.5", + "core-js": "^3.8.2", + "global": "^4.4.0", + "prop-types": "^15.7.2", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@storybook/addon-measure": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-6.5.13.tgz", + "integrity": "sha512-pi5RFB9YTnESRFtYHAVRUrgEI5to0TFc4KndtwcCKt1fMJ8OFjXQeznEfdj95PFeUvW5TNUwjL38vK4LhicB+g==", + "dev": true, + "dependencies": { + "@storybook/addons": "6.5.13", + "@storybook/api": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/components": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "core-js": "^3.8.2", + "global": "^4.4.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@storybook/addon-outline": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-6.5.13.tgz", + "integrity": "sha512-8d8taPheO/tryflzXbj2QRuxHOIS8CtzRzcaglCcioqHEMhOIDOx9BdXKdheq54gdk/UN94HdGJUoVxYyXwZ4Q==", + "dev": true, + "dependencies": { + "@storybook/addons": "6.5.13", + "@storybook/api": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/components": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "core-js": "^3.8.2", + "global": "^4.4.0", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@storybook/addon-toolbars": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-6.5.13.tgz", + "integrity": "sha512-Qgr4wKRSP+gY1VaN7PYT4TM1um7KY341X3GHTglXLFHd8nDsCweawfV2shaX3WxCfZmVro8g4G+Oest30kLLCw==", + "dev": true, + "dependencies": { + "@storybook/addons": "6.5.13", + "@storybook/api": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/components": "6.5.13", + "@storybook/theming": "6.5.13", + "core-js": "^3.8.2", + "regenerator-runtime": "^0.13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@storybook/addon-viewport": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-6.5.13.tgz", + "integrity": "sha512-KSfeuCSIjncwWGnUu6cZBx8WNqYvm5gHyFvkSPKEu0+MJtgncbUy7pl53lrEEr6QmIq0GRXvS3A0XzV8RCnrSA==", + "dev": true, + "dependencies": { + "@storybook/addons": "6.5.13", + "@storybook/api": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/components": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/theming": "6.5.13", + "core-js": "^3.8.2", + "global": "^4.4.0", + "memoizerific": "^1.11.3", + "prop-types": "^15.7.2", + "regenerator-runtime": "^0.13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@storybook/addons": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-6.5.13.tgz", + "integrity": "sha512-18CqzNnrGMfeZtiKz+R/3rHtSNnfNwz6y6prIQIbWseK16jY8ELTfIFGviwO5V2OqpbHDQi5+xQQ63QAIb89YA==", + "dev": true, + "dependencies": { + "@storybook/api": "6.5.13", + "@storybook/channels": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/router": "6.5.13", + "@storybook/theming": "6.5.13", + "@types/webpack-env": "^1.16.0", + "core-js": "^3.8.2", + "global": "^4.4.0", + "regenerator-runtime": "^0.13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/api": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/api/-/api-6.5.13.tgz", + "integrity": "sha512-xVSmB7/IuFd6G7eiJjbI2MuS7SZunoUM6d+YCWpjiehfMeX47MXt1gZtOwFrgJC1ShZlefXFahq/dvxwtmWs+w==", + "dev": true, + "dependencies": { + "@storybook/channels": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/router": "6.5.13", + "@storybook/semver": "^7.3.2", + "@storybook/theming": "6.5.13", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "regenerator-runtime": "^0.13.7", + "store2": "^2.12.0", + "telejson": "^6.0.8", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/builder-webpack4": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/builder-webpack4/-/builder-webpack4-6.5.13.tgz", + "integrity": "sha512-Agqy3IKPv3Nl8QqdS7PjtqLp+c0BD8+/3A2ki/YfKqVz+F+J34EpbZlh3uU053avm1EoNQHSmhZok3ZlWH6O7A==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.10", + "@storybook/addons": "6.5.13", + "@storybook/api": "6.5.13", + "@storybook/channel-postmessage": "6.5.13", + "@storybook/channels": "6.5.13", + "@storybook/client-api": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/components": "6.5.13", + "@storybook/core-common": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/node-logger": "6.5.13", + "@storybook/preview-web": "6.5.13", + "@storybook/router": "6.5.13", + "@storybook/semver": "^7.3.2", + "@storybook/store": "6.5.13", + "@storybook/theming": "6.5.13", + "@storybook/ui": "6.5.13", + "@types/node": "^14.0.10 || ^16.0.0", + "@types/webpack": "^4.41.26", + "autoprefixer": "^9.8.6", + "babel-loader": "^8.0.0", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "core-js": "^3.8.2", + "css-loader": "^3.6.0", + "file-loader": "^6.2.0", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^4.1.6", + "glob": "^7.1.6", + "glob-promise": "^3.4.0", + "global": "^4.4.0", + "html-webpack-plugin": "^4.0.0", + "pnp-webpack-plugin": "1.6.4", + "postcss": "^7.0.36", + "postcss-flexbugs-fixes": "^4.2.1", + "postcss-loader": "^4.2.0", + "raw-loader": "^4.0.2", + "stable": "^0.1.8", + "style-loader": "^1.3.0", + "terser-webpack-plugin": "^4.2.3", + "ts-dedent": "^2.0.0", + "url-loader": "^4.1.1", + "util-deprecate": "^1.0.2", + "webpack": "4", + "webpack-dev-middleware": "^3.7.3", + "webpack-filter-warnings-plugin": "^1.2.1", + "webpack-hot-middleware": "^2.25.1", + "webpack-virtual-modules": "^0.2.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/@types/html-minifier-terser": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", + "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==", + "dev": true + }, + "node_modules/@storybook/builder-webpack4/node_modules/@types/node": { + "version": "16.18.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", + "dev": true + }, + "node_modules/@storybook/builder-webpack4/node_modules/@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, + "dependencies": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/@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 + }, + "node_modules/@storybook/builder-webpack4/node_modules/@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 + }, + "node_modules/@storybook/builder-webpack4/node_modules/@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 + }, + "node_modules/@storybook/builder-webpack4/node_modules/@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, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/@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, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/@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, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/@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 + }, + "node_modules/@storybook/builder-webpack4/node_modules/@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, + "dependencies": { + "@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" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/@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, + "dependencies": { + "@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" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/@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, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/@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, + "dependencies": { + "@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" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/@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, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/@storybook/builder-webpack4/node_modules/clean-css": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", + "dev": true, + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/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==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@storybook/builder-webpack4/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/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, + "dependencies": { + "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" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/css-loader/node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/css-loader/node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/enhanced-resolve/node_modules/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, + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + }, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/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, + "dependencies": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/fork-ts-checker-webpack-plugin": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz", + "integrity": "sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.5.5", + "chalk": "^2.4.1", + "micromatch": "^3.1.10", + "minimatch": "^3.0.4", + "semver": "^5.6.0", + "tapable": "^1.0.0", + "worker-rpc": "^0.1.0" + }, + "engines": { + "node": ">=6.11.5", + "yarn": ">=1.0.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/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, + "dependencies": { + "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" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/html-minifier-terser/node_modules/terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/html-minifier-terser/node_modules/terser/node_modules/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==", + "dev": true + }, + "node_modules/@storybook/builder-webpack4/node_modules/html-webpack-plugin": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz", + "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==", + "dev": true, + "dependencies": { + "@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.20", + "pretty-error": "^2.1.1", + "tapable": "^1.1.3", + "util.promisify": "1.0.0" + }, + "engines": { + "node": ">=6.9" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/html-webpack-plugin/node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/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, + "dependencies": { + "postcss": "^7.0.14" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/@storybook/builder-webpack4/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/@storybook/builder-webpack4/node_modules/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, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/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, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/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, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/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, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/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, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/p-locate/node_modules/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, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/@storybook/builder-webpack4/node_modules/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, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/pkg-dir/node_modules/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, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/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, + "dependencies": { + "postcss": "^7.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/postcss-modules-local-by-default": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", + "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", + "dev": true, + "dependencies": { + "icss-utils": "^4.1.1", + "postcss": "^7.0.32", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/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, + "dependencies": { + "postcss": "^7.0.6", + "postcss-selector-parser": "^6.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/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, + "dependencies": { + "icss-utils": "^4.0.0", + "postcss": "^7.0.6" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/pretty-error": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", + "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^2.0.4" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/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, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/renderkid": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", + "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", + "dev": true, + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^3.0.1" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, + "dependencies": { + "figgy-pudding": "^3.5.1" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/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, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/style-loader": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.3.0.tgz", + "integrity": "sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^2.7.0" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/style-loader/node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/terser-webpack-plugin": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz", + "integrity": "sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==", + "dev": true, + "dependencies": { + "cacache": "^15.0.5", + "find-cache-dir": "^3.3.1", + "jest-worker": "^26.5.0", + "p-limit": "^3.0.2", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", + "source-map": "^0.6.1", + "terser": "^5.3.4", + "webpack-sources": "^1.4.3" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + }, + "optionalDependencies": { + "chokidar": "^3.4.1", + "watchpack-chokidar2": "^2.0.1" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/webpack": { + "version": "4.46.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", + "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "dev": true, + "dependencies": { + "@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.5.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" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + }, + "webpack-command": { + "optional": true + } + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/webpack-dev-middleware": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", + "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", + "dev": true, + "dependencies": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/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, + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/webpack-virtual-modules": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.2.2.tgz", + "integrity": "sha512-kDUmfm3BZrei0y+1NTHJInejzxfhtU8eDj2M7OKb2IWrPFAeO1SOH2KuQ68MSZu9IGEHcxbkKKR1v18FrUSOmA==", + "dev": true, + "dependencies": { + "debug": "^3.0.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/webpack/node_modules/cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dev": true, + "dependencies": { + "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" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/webpack/node_modules/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==", + "dev": true + }, + "node_modules/@storybook/builder-webpack4/node_modules/webpack/node_modules/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==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/webpack/node_modules/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, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/webpack/node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/webpack/node_modules/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, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/webpack/node_modules/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==", + "dev": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/webpack/node_modules/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, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/webpack/node_modules/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, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/webpack/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/webpack/node_modules/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==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/webpack/node_modules/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, + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/webpack/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/webpack/node_modules/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, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/webpack/node_modules/terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/webpack/node_modules/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, + "dependencies": { + "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" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "webpack": "^4.0.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/@storybook/builder-webpack4/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/@storybook/builder-webpack5": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-6.5.13.tgz", + "integrity": "sha512-juNH31ZljWbaoBD6Yx2/iQ4G66UBkwq+cFUqLzgVROKMXmYaT0AJYbfyY8CgGqcXkc+sqNA63yWaLWd8/K9vTg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.10", + "@storybook/addons": "6.5.13", + "@storybook/api": "6.5.13", + "@storybook/channel-postmessage": "6.5.13", + "@storybook/channels": "6.5.13", + "@storybook/client-api": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/components": "6.5.13", + "@storybook/core-common": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/node-logger": "6.5.13", + "@storybook/preview-web": "6.5.13", + "@storybook/router": "6.5.13", + "@storybook/semver": "^7.3.2", + "@storybook/store": "6.5.13", + "@storybook/theming": "6.5.13", + "@types/node": "^14.0.10 || ^16.0.0", + "babel-loader": "^8.0.0", + "babel-plugin-named-exports-order": "^0.0.2", + "browser-assert": "^1.2.1", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "core-js": "^3.8.2", + "css-loader": "^5.0.1", + "fork-ts-checker-webpack-plugin": "^6.0.4", + "glob": "^7.1.6", + "glob-promise": "^3.4.0", + "html-webpack-plugin": "^5.0.0", + "path-browserify": "^1.0.1", + "process": "^0.11.10", + "stable": "^0.1.8", + "style-loader": "^2.0.0", + "terser-webpack-plugin": "^5.0.3", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "webpack": "^5.9.0", + "webpack-dev-middleware": "^4.1.0", + "webpack-hot-middleware": "^2.25.1", + "webpack-virtual-modules": "^0.4.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/@types/node": { + "version": "16.18.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", + "dev": true + }, + "node_modules/@storybook/channel-postmessage": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-6.5.13.tgz", + "integrity": "sha512-R79MBs0mQ7TV8M/a6x/SiTRyvZBidDfMEEthG7Cyo9p35JYiKOhj2535zhW4qlVMESBu95pwKYBibTjASoStPw==", + "dev": true, + "dependencies": { + "@storybook/channels": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/core-events": "6.5.13", + "core-js": "^3.8.2", + "global": "^4.4.0", + "qs": "^6.10.0", + "telejson": "^6.0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/channel-websocket": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/channel-websocket/-/channel-websocket-6.5.13.tgz", + "integrity": "sha512-kwh667H+tzCiNvs92GNwYOwVXdj9uHZyieRAN5rJtTBJ7XgLzGkpTEU50mWlbc0nDKhgE0qYvzyr5H393Iy5ug==", + "dev": true, + "dependencies": { + "@storybook/channels": "6.5.13", + "@storybook/client-logger": "6.5.13", + "core-js": "^3.8.2", + "global": "^4.4.0", + "telejson": "^6.0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/channels": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.5.13.tgz", + "integrity": "sha512-sGYSilE30bz0jG+HdHnkv0B4XkAv2hP+KRZr4xmnv+MOOQpRnZpJ5Z3HVU16s17cj/83NWihKj6BuKcEVzyilg==", + "dev": true, + "dependencies": { + "core-js": "^3.8.2", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/client-api": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-6.5.13.tgz", + "integrity": "sha512-uH1mAWbidPiuuTdMUVEiuaNOfrYXm+9QLSP1MMYTKULqEOZI5MSOGkEDqRfVWxbYv/iWBOPTQ+OM9TQ6ecYacg==", + "dev": true, + "dependencies": { + "@storybook/addons": "6.5.13", + "@storybook/channel-postmessage": "6.5.13", + "@storybook/channels": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/store": "6.5.13", + "@types/qs": "^6.9.5", + "@types/webpack-env": "^1.16.0", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "store2": "^2.12.0", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/client-logger": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.5.13.tgz", + "integrity": "sha512-F2SMW3LWFGXLm2ENTwTitrLWJgmMXRf3CWQXdN2EbkNCIBHy5Zcbt+91K4OX8e2e5h9gjGfrdYbyYDYOoUCEfA==", + "dev": true, + "dependencies": { + "core-js": "^3.8.2", + "global": "^4.4.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/components": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-6.5.13.tgz", + "integrity": "sha512-6Hhx70JK5pGfKCkqMU4yq/BBH+vRTmzj7tZKfPwba+f8VmTMoOr/2ysTQFRtXryiHB6Z15xBYgfq5x2pIwQzLQ==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/theming": "6.5.13", + "core-js": "^3.8.2", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/core": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/core/-/core-6.5.13.tgz", + "integrity": "sha512-kw1lCgbsxzUimGww6t5rmuWJmFPe9kGGyzIqvj4RC4BBcEsP40LEu9XhSfvnb8vTOLIULFZeZpdRFfJs4TYbUw==", + "dev": true, + "dependencies": { + "@storybook/core-client": "6.5.13", + "@storybook/core-server": "6.5.13" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", + "webpack": "*" + }, + "peerDependenciesMeta": { + "@storybook/builder-webpack5": { + "optional": true + }, + "@storybook/manager-webpack5": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/@storybook/core-client": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-6.5.13.tgz", + "integrity": "sha512-YuELbRokTBdqjbx/R4/7O4rou9kvbBIOJjlUkor9hdLLuJ3P0yGianERGNkZFfvcfMBAxU0p52o7QvDldSR3kA==", + "dev": true, + "dependencies": { + "@storybook/addons": "6.5.13", + "@storybook/channel-postmessage": "6.5.13", + "@storybook/channel-websocket": "6.5.13", + "@storybook/client-api": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/preview-web": "6.5.13", + "@storybook/store": "6.5.13", + "@storybook/ui": "6.5.13", + "airbnb-js-shims": "^2.2.1", + "ansi-to-html": "^0.6.11", + "core-js": "^3.8.2", + "global": "^4.4.0", + "lodash": "^4.17.21", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0", + "unfetch": "^4.2.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", + "webpack": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@storybook/core-common": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-6.5.13.tgz", + "integrity": "sha512-+DVZrRsteE9pw0X5MNffkdBgejQnbnL+UOG3qXkE9xxUamQALnuqS/w1BzpHE9WmOHuf7RWMKflyQEW3OLKAJg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.10", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-decorators": "^7.12.12", + "@babel/plugin-proposal-export-default-from": "^7.12.1", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.7", + "@babel/plugin-proposal-private-methods": "^7.12.1", + "@babel/plugin-proposal-private-property-in-object": "^7.12.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-arrow-functions": "^7.12.1", + "@babel/plugin-transform-block-scoping": "^7.12.12", + "@babel/plugin-transform-classes": "^7.12.1", + "@babel/plugin-transform-destructuring": "^7.12.1", + "@babel/plugin-transform-for-of": "^7.12.1", + "@babel/plugin-transform-parameters": "^7.12.1", + "@babel/plugin-transform-shorthand-properties": "^7.12.1", + "@babel/plugin-transform-spread": "^7.12.1", + "@babel/preset-env": "^7.12.11", + "@babel/preset-react": "^7.12.10", + "@babel/preset-typescript": "^7.12.7", + "@babel/register": "^7.12.1", + "@storybook/node-logger": "6.5.13", + "@storybook/semver": "^7.3.2", + "@types/node": "^14.0.10 || ^16.0.0", + "@types/pretty-hrtime": "^1.0.0", + "babel-loader": "^8.0.0", + "babel-plugin-macros": "^3.0.1", + "babel-plugin-polyfill-corejs3": "^0.1.0", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "express": "^4.17.1", + "file-system-cache": "^1.0.5", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^6.0.4", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "handlebars": "^4.7.7", + "interpret": "^2.2.0", + "json5": "^2.1.3", + "lazy-universal-dotenv": "^3.0.1", + "picomatch": "^2.3.0", + "pkg-dir": "^5.0.0", + "pretty-hrtime": "^1.0.3", + "resolve-from": "^5.0.0", + "slash": "^3.0.0", + "telejson": "^6.0.8", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "webpack": "4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@storybook/core-common/node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz", + "integrity": "sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@storybook/core-common/node_modules/@types/node": { + "version": "16.18.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", + "dev": true + }, + "node_modules/@storybook/core-common/node_modules/@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, + "dependencies": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "node_modules/@storybook/core-common/node_modules/@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 + }, + "node_modules/@storybook/core-common/node_modules/@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 + }, + "node_modules/@storybook/core-common/node_modules/@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 + }, + "node_modules/@storybook/core-common/node_modules/@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, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "node_modules/@storybook/core-common/node_modules/@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, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@storybook/core-common/node_modules/@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, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@storybook/core-common/node_modules/@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 + }, + "node_modules/@storybook/core-common/node_modules/@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, + "dependencies": { + "@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" + } + }, + "node_modules/@storybook/core-common/node_modules/@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, + "dependencies": { + "@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" + } + }, + "node_modules/@storybook/core-common/node_modules/@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, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "node_modules/@storybook/core-common/node_modules/@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, + "dependencies": { + "@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" + } + }, + "node_modules/@storybook/core-common/node_modules/@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, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@storybook/core-common/node_modules/acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/@storybook/core-common/node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz", + "integrity": "sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.1.5", + "core-js-compat": "^3.8.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@storybook/core-common/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/core-common/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/core-common/node_modules/cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dev": true, + "dependencies": { + "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" + } + }, + "node_modules/@storybook/core-common/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/@storybook/core-common/node_modules/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==", + "dev": true + }, + "node_modules/@storybook/core-common/node_modules/enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@storybook/core-common/node_modules/enhanced-resolve/node_modules/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, + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + }, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/@storybook/core-common/node_modules/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, + "dependencies": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/@storybook/core-common/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@storybook/core-common/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/core-common/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/core-common/node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/@storybook/core-common/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/core-common/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/core-common/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/core-common/node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@storybook/core-common/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/@storybook/core-common/node_modules/json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/core-common/node_modules/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, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/@storybook/core-common/node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/@storybook/core-common/node_modules/loader-utils/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/@storybook/core-common/node_modules/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, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@storybook/core-common/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/core-common/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/@storybook/core-common/node_modules/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, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/@storybook/core-common/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/core-common/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/@storybook/core-common/node_modules/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, + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@storybook/core-common/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@storybook/core-common/node_modules/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, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/@storybook/core-common/node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/core-common/node_modules/ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, + "dependencies": { + "figgy-pudding": "^3.5.1" + } + }, + "node_modules/@storybook/core-common/node_modules/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, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/@storybook/core-common/node_modules/terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@storybook/core-common/node_modules/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, + "dependencies": { + "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" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "webpack": "^4.0.0" + } + }, + "node_modules/@storybook/core-common/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/core-common/node_modules/watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + }, + "optionalDependencies": { + "chokidar": "^3.4.1", + "watchpack-chokidar2": "^2.0.1" + } + }, + "node_modules/@storybook/core-common/node_modules/webpack": { + "version": "4.46.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", + "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "dev": true, + "dependencies": { + "@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.5.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" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + }, + "webpack-command": { + "optional": true + } + } + }, + "node_modules/@storybook/core-common/node_modules/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, + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/@storybook/core-common/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/@storybook/core-common/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/@storybook/core-events": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.5.13.tgz", + "integrity": "sha512-kL745tPpRKejzHToA3/CoBNbI+NPRVk186vGxXBmk95OEg0TlwgQExP8BnqEtLlRZMbW08e4+6kilc1M1M4N5w==", + "dev": true, + "dependencies": { + "core-js": "^3.8.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/core-server": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-6.5.13.tgz", + "integrity": "sha512-vs7tu3kAnFwuINio1p87WyqDNlFyZESmeh9s7vvrZVbe/xS/ElqDscr9DT5seW+jbtxufAaHsx+JUTver1dheQ==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.5.3", + "@storybook/builder-webpack4": "6.5.13", + "@storybook/core-client": "6.5.13", + "@storybook/core-common": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/csf-tools": "6.5.13", + "@storybook/manager-webpack4": "6.5.13", + "@storybook/node-logger": "6.5.13", + "@storybook/semver": "^7.3.2", + "@storybook/store": "6.5.13", + "@storybook/telemetry": "6.5.13", + "@types/node": "^14.0.10 || ^16.0.0", + "@types/node-fetch": "^2.5.7", + "@types/pretty-hrtime": "^1.0.0", + "@types/webpack": "^4.41.26", + "better-opn": "^2.1.1", + "boxen": "^5.1.2", + "chalk": "^4.1.0", + "cli-table3": "^0.6.1", + "commander": "^6.2.1", + "compression": "^1.7.4", + "core-js": "^3.8.2", + "cpy": "^8.1.2", + "detect-port": "^1.3.0", + "express": "^4.17.1", + "fs-extra": "^9.0.1", + "global": "^4.4.0", + "globby": "^11.0.2", + "ip": "^2.0.0", + "lodash": "^4.17.21", + "node-fetch": "^2.6.7", + "open": "^8.4.0", + "pretty-hrtime": "^1.0.3", + "prompts": "^2.4.0", + "regenerator-runtime": "^0.13.7", + "serve-favicon": "^2.5.0", + "slash": "^3.0.0", + "telejson": "^6.0.8", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "watchpack": "^2.2.0", + "webpack": "4", + "ws": "^8.2.3", + "x-default-browser": "^0.4.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@storybook/builder-webpack5": { + "optional": true + }, + "@storybook/manager-webpack5": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/@storybook/core-server/node_modules/@types/node": { + "version": "16.18.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", + "dev": true + }, + "node_modules/@storybook/core-server/node_modules/@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, + "dependencies": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "node_modules/@storybook/core-server/node_modules/@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 + }, + "node_modules/@storybook/core-server/node_modules/@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 + }, + "node_modules/@storybook/core-server/node_modules/@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 + }, + "node_modules/@storybook/core-server/node_modules/@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, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "node_modules/@storybook/core-server/node_modules/@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, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@storybook/core-server/node_modules/@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, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@storybook/core-server/node_modules/@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 + }, + "node_modules/@storybook/core-server/node_modules/@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, + "dependencies": { + "@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" + } + }, + "node_modules/@storybook/core-server/node_modules/@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, + "dependencies": { + "@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" + } + }, + "node_modules/@storybook/core-server/node_modules/@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, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "node_modules/@storybook/core-server/node_modules/@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, + "dependencies": { + "@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" + } + }, + "node_modules/@storybook/core-server/node_modules/@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, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@storybook/core-server/node_modules/acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/@storybook/core-server/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/core-server/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/core-server/node_modules/cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dev": true, + "dependencies": { + "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" + } + }, + "node_modules/@storybook/core-server/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/@storybook/core-server/node_modules/enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@storybook/core-server/node_modules/enhanced-resolve/node_modules/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, + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + }, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/@storybook/core-server/node_modules/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, + "dependencies": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/@storybook/core-server/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@storybook/core-server/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/core-server/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/core-server/node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/@storybook/core-server/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/core-server/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/core-server/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/core-server/node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@storybook/core-server/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/@storybook/core-server/node_modules/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, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/@storybook/core-server/node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/@storybook/core-server/node_modules/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, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@storybook/core-server/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/core-server/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/@storybook/core-server/node_modules/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, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/@storybook/core-server/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/@storybook/core-server/node_modules/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, + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@storybook/core-server/node_modules/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, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/@storybook/core-server/node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/core-server/node_modules/ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, + "dependencies": { + "figgy-pudding": "^3.5.1" + } + }, + "node_modules/@storybook/core-server/node_modules/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, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/@storybook/core-server/node_modules/terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@storybook/core-server/node_modules/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, + "dependencies": { + "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" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "webpack": "^4.0.0" + } + }, + "node_modules/@storybook/core-server/node_modules/terser/node_modules/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==", + "dev": true + }, + "node_modules/@storybook/core-server/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/core-server/node_modules/webpack": { + "version": "4.46.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", + "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "dev": true, + "dependencies": { + "@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.5.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" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + }, + "webpack-command": { + "optional": true + } + } + }, + "node_modules/@storybook/core-server/node_modules/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, + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/@storybook/core-server/node_modules/webpack/node_modules/watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + }, + "optionalDependencies": { + "chokidar": "^3.4.1", + "watchpack-chokidar2": "^2.0.1" + } + }, + "node_modules/@storybook/core-server/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/@storybook/core-server/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/@storybook/csf": { + "version": "0.0.2--canary.4566f4d.1", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.2--canary.4566f4d.1.tgz", + "integrity": "sha512-9OVvMVh3t9znYZwb0Svf/YQoxX2gVOeQTGe2bses2yj+a3+OJnCrUF3/hGv6Em7KujtOdL2LL+JnG49oMVGFgQ==", + "dev": true, + "dependencies": { + "lodash": "^4.17.15" + } + }, + "node_modules/@storybook/csf-tools": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-6.5.13.tgz", + "integrity": "sha512-63Ev+VmBqzwSwfUzbuXOLKBD5dMTK2zBYLQ9anTVw70FuTikwTsGIbPgb098K0vsxRCgxl7KM7NpivHqtZtdjw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.10", + "@babel/generator": "^7.12.11", + "@babel/parser": "^7.12.11", + "@babel/plugin-transform-react-jsx": "^7.12.12", + "@babel/preset-env": "^7.12.11", + "@babel/traverse": "^7.12.11", + "@babel/types": "^7.12.11", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/mdx1-csf": "^0.0.1", + "core-js": "^3.8.2", + "fs-extra": "^9.0.1", + "global": "^4.4.0", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "@storybook/mdx2-csf": "^0.0.3" + }, + "peerDependenciesMeta": { + "@storybook/mdx2-csf": { + "optional": true + } + } + }, + "node_modules/@storybook/docs-tools": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-6.5.13.tgz", + "integrity": "sha512-hB+hk+895ny4SW84j3X5iV55DHs3bCfTOp7cDdcZJdQrlm0wuDb4A6d4ffNC7ZLh9VkUjU6ST4VEV5Bb0Cptow==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.10", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/store": "6.5.13", + "core-js": "^3.8.2", + "doctrine": "^3.0.0", + "lodash": "^4.17.21", + "regenerator-runtime": "^0.13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/instrumenter": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-6.5.13.tgz", + "integrity": "sha512-izRF64BU+gGCP7qE1N3kOVLSv5Xk4M0OWcRmFIXoIS46qNDzmd8hmbkkx3M9wrvw0kcQ97kIyADF+UInbcr/dQ==", + "dev": true, + "dependencies": { + "@storybook/addons": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/core-events": "6.5.13", + "core-js": "^3.8.2", + "global": "^4.4.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/manager-webpack4": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/manager-webpack4/-/manager-webpack4-6.5.13.tgz", + "integrity": "sha512-pURzS5W3XM0F7bCBWzpl7TRsuy+OXFwLXiWLaexuvo0POZe31Ueo2A1R4rx3MT5Iee8O9mYvG2XTmvK9MlLefQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.10", + "@babel/plugin-transform-template-literals": "^7.12.1", + "@babel/preset-react": "^7.12.10", + "@storybook/addons": "6.5.13", + "@storybook/core-client": "6.5.13", + "@storybook/core-common": "6.5.13", + "@storybook/node-logger": "6.5.13", + "@storybook/theming": "6.5.13", + "@storybook/ui": "6.5.13", + "@types/node": "^14.0.10 || ^16.0.0", + "@types/webpack": "^4.41.26", + "babel-loader": "^8.0.0", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "css-loader": "^3.6.0", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "find-up": "^5.0.0", + "fs-extra": "^9.0.1", + "html-webpack-plugin": "^4.0.0", + "node-fetch": "^2.6.7", + "pnp-webpack-plugin": "1.6.4", + "read-pkg-up": "^7.0.1", + "regenerator-runtime": "^0.13.7", + "resolve-from": "^5.0.0", + "style-loader": "^1.3.0", + "telejson": "^6.0.8", + "terser-webpack-plugin": "^4.2.3", + "ts-dedent": "^2.0.0", + "url-loader": "^4.1.1", + "util-deprecate": "^1.0.2", + "webpack": "4", + "webpack-dev-middleware": "^3.7.3", + "webpack-virtual-modules": "^0.2.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/@types/html-minifier-terser": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", + "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==", + "dev": true + }, + "node_modules/@storybook/manager-webpack4/node_modules/@types/node": { + "version": "16.18.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", + "dev": true + }, + "node_modules/@storybook/manager-webpack4/node_modules/@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, + "dependencies": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/@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 + }, + "node_modules/@storybook/manager-webpack4/node_modules/@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 + }, + "node_modules/@storybook/manager-webpack4/node_modules/@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 + }, + "node_modules/@storybook/manager-webpack4/node_modules/@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, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/@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, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/@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, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/@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 + }, + "node_modules/@storybook/manager-webpack4/node_modules/@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, + "dependencies": { + "@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" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/@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, + "dependencies": { + "@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" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/@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, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/@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, + "dependencies": { + "@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" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/@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, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/@storybook/manager-webpack4/node_modules/clean-css": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", + "dev": true, + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/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, + "dependencies": { + "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" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/css-loader/node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/css-loader/node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/enhanced-resolve/node_modules/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, + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + }, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/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, + "dependencies": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/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, + "dependencies": { + "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" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/html-minifier-terser/node_modules/terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/html-minifier-terser/node_modules/terser/node_modules/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==", + "dev": true + }, + "node_modules/@storybook/manager-webpack4/node_modules/html-webpack-plugin": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz", + "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==", + "dev": true, + "dependencies": { + "@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.20", + "pretty-error": "^2.1.1", + "tapable": "^1.1.3", + "util.promisify": "1.0.0" + }, + "engines": { + "node": ">=6.9" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/html-webpack-plugin/node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/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, + "dependencies": { + "postcss": "^7.0.14" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/@storybook/manager-webpack4/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/@storybook/manager-webpack4/node_modules/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, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/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, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/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, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/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, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/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, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/p-locate/node_modules/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, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/@storybook/manager-webpack4/node_modules/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, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/pkg-dir/node_modules/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, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/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, + "dependencies": { + "postcss": "^7.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/postcss-modules-local-by-default": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", + "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", + "dev": true, + "dependencies": { + "icss-utils": "^4.1.1", + "postcss": "^7.0.32", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/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, + "dependencies": { + "postcss": "^7.0.6", + "postcss-selector-parser": "^6.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/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, + "dependencies": { + "icss-utils": "^4.0.0", + "postcss": "^7.0.6" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/pretty-error": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", + "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^2.0.4" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/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, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/renderkid": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", + "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", + "dev": true, + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^3.0.1" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, + "dependencies": { + "figgy-pudding": "^3.5.1" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/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, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/style-loader": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.3.0.tgz", + "integrity": "sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^2.7.0" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/style-loader/node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/terser-webpack-plugin": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz", + "integrity": "sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==", + "dev": true, + "dependencies": { + "cacache": "^15.0.5", + "find-cache-dir": "^3.3.1", + "jest-worker": "^26.5.0", + "p-limit": "^3.0.2", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", + "source-map": "^0.6.1", + "terser": "^5.3.4", + "webpack-sources": "^1.4.3" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + }, + "optionalDependencies": { + "chokidar": "^3.4.1", + "watchpack-chokidar2": "^2.0.1" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/webpack": { + "version": "4.46.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", + "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "dev": true, + "dependencies": { + "@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.5.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" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + }, + "webpack-command": { + "optional": true + } + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/webpack-dev-middleware": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", + "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", + "dev": true, + "dependencies": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/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, + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/webpack-virtual-modules": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.2.2.tgz", + "integrity": "sha512-kDUmfm3BZrei0y+1NTHJInejzxfhtU8eDj2M7OKb2IWrPFAeO1SOH2KuQ68MSZu9IGEHcxbkKKR1v18FrUSOmA==", + "dev": true, + "dependencies": { + "debug": "^3.0.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/webpack/node_modules/cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dev": true, + "dependencies": { + "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" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/webpack/node_modules/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==", + "dev": true + }, + "node_modules/@storybook/manager-webpack4/node_modules/webpack/node_modules/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==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/webpack/node_modules/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, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/webpack/node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/webpack/node_modules/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, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/webpack/node_modules/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==", + "dev": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/webpack/node_modules/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, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/webpack/node_modules/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, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/webpack/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/webpack/node_modules/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==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/webpack/node_modules/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, + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/webpack/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/webpack/node_modules/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, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/webpack/node_modules/terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/webpack/node_modules/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, + "dependencies": { + "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" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "webpack": "^4.0.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/@storybook/manager-webpack4/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/@storybook/manager-webpack5": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/manager-webpack5/-/manager-webpack5-6.5.13.tgz", + "integrity": "sha512-lQEZacSfeRsbqfJE7TVk35Hm1vkr0I2i1pyYqM+4862gRbMh1nJQXbJ5GqZ+Fo/bf0ZfyFZ32jGDIJAFdlpkuQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.10", + "@babel/plugin-transform-template-literals": "^7.12.1", + "@babel/preset-react": "^7.12.10", + "@storybook/addons": "6.5.13", + "@storybook/core-client": "6.5.13", + "@storybook/core-common": "6.5.13", + "@storybook/node-logger": "6.5.13", + "@storybook/theming": "6.5.13", + "@storybook/ui": "6.5.13", + "@types/node": "^14.0.10 || ^16.0.0", + "babel-loader": "^8.0.0", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "css-loader": "^5.0.1", + "express": "^4.17.1", + "find-up": "^5.0.0", + "fs-extra": "^9.0.1", + "html-webpack-plugin": "^5.0.0", + "node-fetch": "^2.6.7", + "process": "^0.11.10", + "read-pkg-up": "^7.0.1", + "regenerator-runtime": "^0.13.7", + "resolve-from": "^5.0.0", + "style-loader": "^2.0.0", + "telejson": "^6.0.8", + "terser-webpack-plugin": "^5.0.3", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "webpack": "^5.9.0", + "webpack-dev-middleware": "^4.1.0", + "webpack-virtual-modules": "^0.4.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@storybook/manager-webpack5/node_modules/@types/node": { + "version": "16.18.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", + "dev": true + }, + "node_modules/@storybook/manager-webpack5/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/mdx1-csf": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@storybook/mdx1-csf/-/mdx1-csf-0.0.1.tgz", + "integrity": "sha512-4biZIWWzoWlCarMZmTpqcJNgo/RBesYZwGFbQeXiGYsswuvfWARZnW9RE9aUEMZ4XPn7B1N3EKkWcdcWe/K2tg==", + "dev": true, + "dependencies": { + "@babel/generator": "^7.12.11", + "@babel/parser": "^7.12.11", + "@babel/preset-env": "^7.12.11", + "@babel/types": "^7.12.11", + "@mdx-js/mdx": "^1.6.22", + "@types/lodash": "^4.14.167", + "js-string-escape": "^1.0.1", + "loader-utils": "^2.0.0", + "lodash": "^4.17.21", + "prettier": ">=2.2.1 <=2.3.0", + "ts-dedent": "^2.0.0" + } + }, + "node_modules/@storybook/mdx1-csf/node_modules/prettier": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.0.tgz", + "integrity": "sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@storybook/node-logger": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-6.5.13.tgz", + "integrity": "sha512-/r5aVZAqZRoy5FyNk/G4pj7yKJd3lJfPbAaOHVROv2IF7PJP/vtRaDkcfh0g2U6zwuDxGIqSn80j+qoEli9m5A==", + "dev": true, + "dependencies": { + "@types/npmlog": "^4.1.2", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "npmlog": "^5.0.1", + "pretty-hrtime": "^1.0.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/postinstall": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-6.5.13.tgz", + "integrity": "sha512-qmqP39FGIP5NdhXC5IpAs9cFoYx9fg1psoQKwb9snYb98eVQU31uHc1W2MBUh3lG4AjAm7pQaXJci7ti4jOh3g==", + "dev": true, + "dependencies": { + "core-js": "^3.8.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/preview-web": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/preview-web/-/preview-web-6.5.13.tgz", + "integrity": "sha512-GNNYVzw4SmRua3dOc52Ye6Us4iQbq5GKQ56U3iwnzZM3TBdJB+Rft94Fn1/pypHujEHS8hl5Xgp9td6C1lLCow==", + "dev": true, + "dependencies": { + "@storybook/addons": "6.5.13", + "@storybook/channel-postmessage": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/store": "6.5.13", + "ansi-to-html": "^0.6.11", + "core-js": "^3.8.2", + "global": "^4.4.0", + "lodash": "^4.17.21", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "unfetch": "^4.2.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/react": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/react/-/react-6.5.13.tgz", + "integrity": "sha512-4gO8qihEkVZ8RNm9iQd7G2iZz4rRAHizJ6T5m58Sn21fxfyg9zAMzhgd0JzXuPXR8lTTj4AvRyPv1Qx7b43smg==", + "dev": true, + "dependencies": { + "@babel/preset-flow": "^7.12.1", + "@babel/preset-react": "^7.12.10", + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", + "@storybook/addons": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/core": "6.5.13", + "@storybook/core-common": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/docs-tools": "6.5.13", + "@storybook/node-logger": "6.5.13", + "@storybook/react-docgen-typescript-plugin": "1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0", + "@storybook/semver": "^7.3.2", + "@storybook/store": "6.5.13", + "@types/estree": "^0.0.51", + "@types/node": "^14.14.20 || ^16.0.0", + "@types/webpack-env": "^1.16.0", + "acorn": "^7.4.1", + "acorn-jsx": "^5.3.1", + "acorn-walk": "^7.2.0", + "babel-plugin-add-react-displayname": "^0.0.5", + "babel-plugin-react-docgen": "^4.2.1", + "core-js": "^3.8.2", + "escodegen": "^2.0.0", + "fs-extra": "^9.0.1", + "global": "^4.4.0", + "html-tags": "^3.1.0", + "lodash": "^4.17.21", + "prop-types": "^15.7.2", + "react-element-to-jsx-string": "^14.3.4", + "react-refresh": "^0.11.0", + "read-pkg-up": "^7.0.1", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "webpack": ">=4.43.0 <6.0.0" + }, + "bin": { + "build-storybook": "bin/build.js", + "start-storybook": "bin/index.js", + "storybook-server": "bin/index.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "@babel/core": "^7.11.5", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", + "require-from-string": "^2.0.2" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@storybook/builder-webpack4": { + "optional": true + }, + "@storybook/builder-webpack5": { + "optional": true + }, + "@storybook/manager-webpack4": { + "optional": true + }, + "@storybook/manager-webpack5": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/@storybook/react-docgen-typescript-plugin": { + "version": "1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0", + "resolved": "https://registry.npmjs.org/@storybook/react-docgen-typescript-plugin/-/react-docgen-typescript-plugin-1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0.tgz", + "integrity": "sha512-eVg3BxlOm2P+chijHBTByr90IZVUtgRW56qEOLX7xlww2NBuKrcavBlcmn+HH7GIUktquWkMPtvy6e0W0NgA5w==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "endent": "^2.0.1", + "find-cache-dir": "^3.3.1", + "flat-cache": "^3.0.4", + "micromatch": "^4.0.2", + "react-docgen-typescript": "^2.1.1", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "typescript": ">= 3.x", + "webpack": ">= 4" + } + }, + "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/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, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/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, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/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, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/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, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/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, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/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, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@storybook/react/node_modules/@types/node": { + "version": "16.18.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", + "dev": true + }, + "node_modules/@storybook/react/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/@storybook/router": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.5.13.tgz", + "integrity": "sha512-sf5aogfirH5ucD0d0hc2mKf2iyWsZsvXhr5kjxUQmgkcoflkGUWhc34sbSQVRQ1i8K5lkLIDH/q2s1Zr2SbzhQ==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "6.5.13", + "core-js": "^3.8.2", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==", + "dev": true, + "dependencies": { + "core-js": "^3.6.5", + "find-up": "^4.1.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@storybook/semver/node_modules/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, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/semver/node_modules/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, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/semver/node_modules/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, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/semver/node_modules/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, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/source-loader": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/source-loader/-/source-loader-6.5.13.tgz", + "integrity": "sha512-tHuM8PfeB/0m+JigbaFp+Ld0euFH+fgOObH2W9rjEXy5vnwmaeex/JAdCprv4oL+LcDQEERqNULUUNIvbcTPAg==", + "dev": true, + "dependencies": { + "@storybook/addons": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "core-js": "^3.8.2", + "estraverse": "^5.2.0", + "global": "^4.4.0", + "loader-utils": "^2.0.0", + "lodash": "^4.17.21", + "prettier": ">=2.2.1 <=2.3.0", + "regenerator-runtime": "^0.13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/source-loader/node_modules/prettier": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.0.tgz", + "integrity": "sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@storybook/store": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/store/-/store-6.5.13.tgz", + "integrity": "sha512-GG6lm+8fBX1tNUnX7x3raBOjYhhf14bPWLtYiPlxDTFEMs3sJte7zWKZq6NQ79MoBLL6jjzTeolBfDCBw6fiWQ==", + "dev": true, + "dependencies": { + "@storybook/addons": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "regenerator-runtime": "^0.13.7", + "slash": "^3.0.0", + "stable": "^0.1.8", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/telemetry": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-6.5.13.tgz", + "integrity": "sha512-PFJEfGbunmfFWabD3rdCF8EHH+45578OHOkMPpXJjqXl94vPQxUH2XTVKQgEQJbYrgX0Vx9Z4tSkdMHuzYDbWQ==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "6.5.13", + "@storybook/core-common": "6.5.13", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "detect-package-manager": "^2.0.1", + "fetch-retry": "^5.0.2", + "fs-extra": "^9.0.1", + "global": "^4.4.0", + "isomorphic-unfetch": "^3.1.0", + "nanoid": "^3.3.1", + "read-pkg-up": "^7.0.1", + "regenerator-runtime": "^0.13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/testing-library": { + "version": "0.0.13", + "resolved": "https://registry.npmjs.org/@storybook/testing-library/-/testing-library-0.0.13.tgz", + "integrity": "sha512-vRMeIGer4EjJkTgI8sQyK9W431ekPWYCWL//OmSDJ64IT3h7FnW7Xg6p+eqM3oII98/O5pcya5049GxnjaPtxw==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "^6.4.0", + "@storybook/instrumenter": "^6.4.0", + "@testing-library/dom": "^8.3.0", + "@testing-library/user-event": "^13.2.1", + "ts-dedent": "^2.2.0" + } + }, + "node_modules/@storybook/theming": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.5.13.tgz", + "integrity": "sha512-oif5NGFAUQhizo50r+ctw2hZNLWV4dPHai+L/gFvbaSeRBeHSNkIcMoZ2FlrO566HdGZTDutYXcR+xus8rI28g==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "6.5.13", + "core-js": "^3.8.2", + "memoizerific": "^1.11.3", + "regenerator-runtime": "^0.13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/ui": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/ui/-/ui-6.5.13.tgz", + "integrity": "sha512-MklJuSg4Bc+MWjwhZVmZhJaucaeEBUMMa2V9oRWbIgZOdRHqdW72S2vCbaarDAYfBQdnfaoq1GkSQiw+EnWOzA==", + "dev": true, + "dependencies": { + "@storybook/addons": "6.5.13", + "@storybook/api": "6.5.13", + "@storybook/channels": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/components": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/router": "6.5.13", + "@storybook/semver": "^7.3.2", + "@storybook/theming": "6.5.13", + "core-js": "^3.8.2", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "resolve-from": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/ui/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@swc/helpers": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.11.tgz", + "integrity": "sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tabler/icons": { + "version": "1.111.0", + "resolved": "https://registry.npmjs.org/@tabler/icons/-/icons-1.111.0.tgz", + "integrity": "sha512-TZWYiMT5ccqfHxRE0Qtgvl+sGsMbNkrv7cJMt/tm8TN9l/CDXx/o7d8uAwUN+3PAlSFfF5e/rD1bi1WJs2xNIA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/codecalm" + }, + "peerDependencies": { + "react": "^16.x || 17.x || 18.x", + "react-dom": "^16.x || 17.x || 18.x" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@testing-library/dom": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.19.0.tgz", + "integrity": "sha512-6YWYPPpxG3e/xOo6HIWwB/58HukkwIVTOaZ0VwdMVjhRUX/01E4FtQbck9GazOOj7MXHc5RBzMrU86iBJHbI+A==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^4.2.0", + "aria-query": "^5.0.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.4.4", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@testing-library/dom/node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dev": true, + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/@testing-library/user-event": { + "version": "13.5.0", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-13.5.0.tgz", + "integrity": "sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.12.5" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" + } + }, + "node_modules/@types/aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==", + "dev": true + }, + "node_modules/@types/eslint": { + "version": "8.4.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", + "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true + }, + "node_modules/@types/glob": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.0.0.tgz", + "integrity": "sha512-l6NQsDDyQUVeoTynNpC9uRvCUint/gSUXQA2euwmTuWGvPY5LSDUu6tkCtJB2SvGQlJQzLaKqcGZP4//7EDveA==", + "dev": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/hast": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz", + "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "dev": true + }, + "node_modules/@types/is-function": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/is-function/-/is-function-1.0.1.tgz", + "integrity": "sha512-A79HEEiwXTFtfY+Bcbo58M2GRYzCr9itHWzbzHVFNEYCcoU/MMGwYYf721gBrnhpj1s6RGVVha/IgNFnR0Iw/Q==", + "dev": true + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/lodash": { + "version": "4.14.189", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.189.tgz", + "integrity": "sha512-kb9/98N6X8gyME9Cf7YaqIMvYGnBSWqEci6tiettE6iJWH1XdJz/PO8LB0GtLCG7x8dU3KWhZT+lA1a35127tA==", + "dev": true + }, + "node_modules/@types/mdast": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", + "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "18.11.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", + "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", + "dev": true + }, + "node_modules/@types/node-fetch": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz", + "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==", + "dev": true, + "dependencies": { + "@types/node": "*", + "form-data": "^3.0.0" + } + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "node_modules/@types/npmlog": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@types/npmlog/-/npmlog-4.1.4.tgz", + "integrity": "sha512-WKG4gTr8przEZBiJ5r3s8ZIAoMXNbOgQ+j/d5O4X3x6kZJRLNvyUJuUK/KoG3+8BaOHPhp2m7WC6JKKeovDSzQ==", + "dev": true + }, + "node_modules/@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==" + }, + "node_modules/@types/parse5": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", + "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==", + "dev": true + }, + "node_modules/@types/pretty-hrtime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/pretty-hrtime/-/pretty-hrtime-1.0.1.tgz", + "integrity": "sha512-VjID5MJb1eGKthz2qUerWT8+R4b9N+CHvGCzg9fn4kWZgaF9AhdYikQio3R7wV8YY1NsQKPaCwKz1Yff+aHNUQ==", + "dev": true + }, + "node_modules/@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", + "dev": true + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "node_modules/@types/react": { + "version": "18.0.25", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.25.tgz", + "integrity": "sha512-xD6c0KDT4m7n9uD4ZHi02lzskaiqcBxf4zi+tXZY98a04wvc0hi/TcCPC2FOESZi51Nd7tlUeOJY8RofL799/g==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.0.9", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.9.tgz", + "integrity": "sha512-qnVvHxASt/H7i+XG1U1xMiY5t+IHcPGUK7TDMDzom08xa7e86eCeKOiLZezwCKVxJn6NEiiy2ekgX8aQssjIKg==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", + "dev": true + }, + "node_modules/@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, + "node_modules/@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 + }, + "node_modules/@types/tapable": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.8.tgz", + "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==", + "dev": true + }, + "node_modules/@types/uglify-js": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.17.1.tgz", + "integrity": "sha512-GkewRA4i5oXacU/n4MA9+bLgt5/L3F1mKrYvFGm7r2ouLXhRKjuWwo9XHNnbx6WF3vlGW21S3fCvgqxvxXXc5g==", + "dev": true, + "dependencies": { + "source-map": "^0.6.1" + } + }, + "node_modules/@types/uglify-js/node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@types/unist": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", + "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==", + "dev": true + }, + "node_modules/@types/webpack": { + "version": "4.41.33", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.33.tgz", + "integrity": "sha512-PPajH64Ft2vWevkerISMtnZ8rTs4YmRbs+23c402J0INmxDKCrhZNvwZYtzx96gY2wAtXdrK1BS2fiC8MlLr3g==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/tapable": "^1", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "anymatch": "^3.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/@types/webpack-env": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.18.0.tgz", + "integrity": "sha512-56/MAlX5WMsPVbOg7tAxnYvNYMMWr/QJiIp6BxVSW3JJXUVzzOn64qW8TzQyMSqSUFM2+PVI4aUHcHOzIz/1tg==", + "dev": true + }, + "node_modules/@types/webpack-sources": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.0.tgz", + "integrity": "sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.7.3" + } + }, + "node_modules/@types/webpack-sources/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@types/webpack/node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@types/yargs": { + "version": "15.0.14", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", + "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.43.0.tgz", + "integrity": "sha512-wNPzG+eDR6+hhW4yobEmpR36jrqqQv1vxBq5LJO3fBAktjkvekfr4BRl+3Fn1CM/A+s8/EiGUbOMDoYqWdbtXA==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/type-utils": "5.43.0", + "@typescript-eslint/utils": "5.43.0", + "debug": "^4.3.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/experimental-utils": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.43.0.tgz", + "integrity": "sha512-WkT637CumTJbm/hRbFfnHBMgfUYTKr08LitVsD7gQId7bi6rnkx3pu3jac67lmp5ObW4MpJ9SNFZAIOUB/Qbsw==", + "dev": true, + "dependencies": { + "@typescript-eslint/utils": "5.43.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.43.0.tgz", + "integrity": "sha512-2iHUK2Lh7PwNUlhFxxLI2haSDNyXvebBO9izhjhMoDC+S3XI9qt2DGFUsiJ89m2k7gGYch2aEpYqV5F/+nwZug==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/typescript-estree": "5.43.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.43.0.tgz", + "integrity": "sha512-XNWnGaqAtTJsUiZaoiGIrdJYHsUOd3BZ3Qj5zKp9w6km6HsrjPk/TGZv0qMTWyWj0+1QOqpHQ2gZOLXaGA9Ekw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/visitor-keys": "5.43.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.43.0.tgz", + "integrity": "sha512-K21f+KY2/VvYggLf5Pk4tgBOPs2otTaIHy2zjclo7UZGLyFH86VfUOm5iq+OtDtxq/Zwu2I3ujDBykVW4Xtmtg==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.43.0", + "@typescript-eslint/utils": "5.43.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.43.0.tgz", + "integrity": "sha512-jpsbcD0x6AUvV7tyOlyvon0aUsQpF8W+7TpJntfCUWU1qaIKu2K34pMwQKSzQH8ORgUrGYY6pVIh1Pi8TNeteg==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.43.0.tgz", + "integrity": "sha512-BZ1WVe+QQ+igWal2tDbNg1j2HWUkAa+CVqdU79L4HP9izQY6CNhXfkNwd1SS4+sSZAP/EthI1uiCSY/+H0pROg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/visitor-keys": "5.43.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.43.0.tgz", + "integrity": "sha512-8nVpA6yX0sCjf7v/NDfeaOlyaIIqL7OaIGOWSPFqUKK59Gnumd3Wa+2l8oAaYO2lk0sO+SbWFWRSvhu8gLGv4A==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/typescript-estree": "5.43.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.43.0.tgz", + "integrity": "sha512-icl1jNH/d18OVHLfcwdL3bWUKsBeIiKYTGxMJCoGe7xFht+E4QgzOqoWYrU8XSLJWhVw8nTacbm03v23J/hFTg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.43.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true + }, + "node_modules/@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, + "dependencies": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "node_modules/@webassemblyjs/helper-code-frame/node_modules/@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, + "dependencies": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "node_modules/@webassemblyjs/helper-code-frame/node_modules/@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 + }, + "node_modules/@webassemblyjs/helper-code-frame/node_modules/@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, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@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 + }, + "node_modules/@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, + "dependencies": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "node_modules/@webassemblyjs/helper-module-context/node_modules/@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, + "dependencies": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "node_modules/@webassemblyjs/helper-module-context/node_modules/@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 + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@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, + "dependencies": { + "@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" + } + }, + "node_modules/@webassemblyjs/wast-parser/node_modules/@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, + "dependencies": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wast-parser/node_modules/@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 + }, + "node_modules/@webassemblyjs/wast-parser/node_modules/@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 + }, + "node_modules/@webassemblyjs/wast-parser/node_modules/@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 + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@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 + }, + "node_modules/@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 + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/address": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.1.tgz", + "integrity": "sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/airbnb-js-shims": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/airbnb-js-shims/-/airbnb-js-shims-2.2.1.tgz", + "integrity": "sha512-wJNXPH66U2xjgo1Zwyjf9EydvJ2Si94+vSdk6EERcBfB2VZkeltpqIats0cqIZMLCXP3zcyaUKGYQeIBT6XjsQ==", + "dev": true, + "dependencies": { + "array-includes": "^3.0.3", + "array.prototype.flat": "^1.2.1", + "array.prototype.flatmap": "^1.2.1", + "es5-shim": "^4.5.13", + "es6-shim": "^0.35.5", + "function.prototype.name": "^1.1.0", + "globalthis": "^1.0.0", + "object.entries": "^1.1.0", + "object.fromentries": "^2.0.0 || ^1.0.0", + "object.getownpropertydescriptors": "^2.0.3", + "object.values": "^1.1.0", + "promise.allsettled": "^1.0.0", + "promise.prototype.finally": "^3.1.0", + "string.prototype.matchall": "^4.0.0 || ^3.0.1", + "string.prototype.padend": "^3.0.0", + "string.prototype.padstart": "^3.0.0", + "symbol.prototype.description": "^1.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/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, + "peerDependencies": { + "ajv": ">=5.0.0" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ansi-to-html": { + "version": "0.6.15", + "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.6.15.tgz", + "integrity": "sha512-28ijx2aHJGdzbs+O5SNQF65r6rrKYnkuwTYm8lZlChuoJ9P1vVzIpWO20sQTqTPDXYp6NFwk326vApTtLVFXpQ==", + "dev": true, + "dependencies": { + "entities": "^2.0.0" + }, + "bin": { + "ansi-to-html": "bin/ansi-to-html" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ansi-to-html/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/app-root-dir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/app-root-dir/-/app-root-dir-1.0.2.tgz", + "integrity": "sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==", + "dev": true + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "dev": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/are-we-there-yet/node_modules/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, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/are-we-there-yet/node_modules/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, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/are-we-there-yet/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/aria-hidden": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.2.tgz", + "integrity": "sha512-6y/ogyDTk/7YAe91T3E2PR1ALVKyM2QbTio5HwM+N1Q6CMlCKhvClyIjkckBswa0f2xJhjsfzIGa1yVSe1UMVA==", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", + "react": "^16.9.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "node_modules/array-includes": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.map": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.5.tgz", + "integrity": "sha512-gfaKntvwqYIuC7mLLyv2wzZIJqrRhn5PZ9EfFejSx6a78sV7iDsGpG9P+3oUPtm1Rerqm6nrKS4FYuTIvWfo3g==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.reduce": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz", + "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dev": true, + "dependencies": { + "object-assign": "^4.1.1", + "util": "0.10.3" + } + }, + "node_modules/assert/node_modules/inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==", + "dev": true + }, + "node_modules/assert/node_modules/util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==", + "dev": true, + "dependencies": { + "inherits": "2.0.1" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ast-types": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", + "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", + "dev": true, + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", + "dev": true + }, + "node_modules/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, + "optional": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/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==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/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, + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/autoprefixer": { + "version": "9.8.8", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", + "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", + "dev": true, + "dependencies": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "picocolors": "^0.2.1", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + }, + "node_modules/autoprefixer/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/autoprefixer/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/autoprefixer/node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.5.2.tgz", + "integrity": "sha512-u2MVsXfew5HBvjsczCv+xlwdNnB1oQR9HlAcsejZttNjKKSkeDNVwB1vMThIUIFI9GoT57Vtk8iQLwqOfAkboA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", + "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", + "dev": true + }, + "node_modules/babel-loader": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", + "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", + "dev": true, + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/babel-loader/node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/babel-loader/node_modules/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, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-loader/node_modules/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, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-loader/node_modules/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, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/babel-loader/node_modules/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, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/babel-loader/node_modules/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, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-loader/node_modules/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, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-loader/node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/babel-loader/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-add-react-displayname": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/babel-plugin-add-react-displayname/-/babel-plugin-add-react-displayname-0.0.5.tgz", + "integrity": "sha512-LY3+Y0XVDYcShHHorshrDbt4KFWL4bSeniCtl4SYZbask+Syngk1uMPCeN9+nSiZo6zX5s0RTq/J9Pnaaf/KHw==", + "dev": true + }, + "node_modules/babel-plugin-apply-mdx-type-prop": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", + "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4", + "@mdx-js/util": "1.6.22" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@babel/core": "^7.11.6" + } + }, + "node_modules/babel-plugin-apply-mdx-type-prop/node_modules/@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==", + "dev": true + }, + "node_modules/babel-plugin-extract-import-names": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz", + "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/babel-plugin-extract-import-names/node_modules/@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==", + "dev": true + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/babel-plugin-named-exports-order": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-named-exports-order/-/babel-plugin-named-exports-order-0.0.2.tgz", + "integrity": "sha512-OgOYHOLoRK+/mvXU9imKHlG6GkPLYrUCvFXG/CM93R/aNNO8pOOF4aS+S8CCHMDQoNSeiOYEZb/G6RwL95Jktw==", + "dev": true + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.3", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", + "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.3", + "core-js-compat": "^3.25.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-react-docgen": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/babel-plugin-react-docgen/-/babel-plugin-react-docgen-4.2.1.tgz", + "integrity": "sha512-UQ0NmGHj/HAqi5Bew8WvNfCk8wSsmdgNd8ZdMjBCICtyCJCq9LiqgqvjCYe570/Wg7AQArSq1VQ60Dd/CHN7mQ==", + "dev": true, + "dependencies": { + "ast-types": "^0.14.2", + "lodash": "^4.17.15", + "react-docgen": "^5.0.0" + } + }, + "node_modules/bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/better-opn": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-2.1.1.tgz", + "integrity": "sha512-kIPXZS5qwyKiX/HcRvDYfmBQUa8XP17I0mYZZ0y4UhpYOSvtsLHDYqmomS+Mj20aDvD3knEiQ0ecQy2nhio3yA==", + "dev": true, + "dependencies": { + "open": "^7.0.3" + }, + "engines": { + "node": ">8.0.0" + } + }, + "node_modules/better-opn/node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + }, + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bplist-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.1.1.tgz", + "integrity": "sha512-2AEM0FXy8ZxVLBuqX0hqt1gDwcnz2zygEkQ6zaD5Wko/sB9paUNwlpawrFtKeHUAQUOzjVy9AO4oeonqIHKA9Q==", + "dev": true, + "optional": true, + "dependencies": { + "big-integer": "^1.6.7" + } + }, + "node_modules/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, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "dev": true + }, + "node_modules/browser-assert": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/browser-assert/-/browser-assert-1.2.1.tgz", + "integrity": "sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==", + "dev": true + }, + "node_modules/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, + "dependencies": { + "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" + } + }, + "node_modules/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, + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/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, + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dev": true, + "dependencies": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/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, + "dependencies": { + "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" + } + }, + "node_modules/browserify-sign/node_modules/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, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/browserify-sign/node_modules/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, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/browserify-sign/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/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, + "dependencies": { + "pako": "~1.0.5" + } + }, + "node_modules/browserslist": { + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/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, + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/buffer-from": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.2.tgz", + "integrity": "sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg==" + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "dev": true + }, + "node_modules/buffer/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", + "dev": true + }, + "node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/c8": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/c8/-/c8-7.12.0.tgz", + "integrity": "sha512-CtgQrHOkyxr5koX1wEUmN/5cfDa2ckbHRA4Gy5LAL0zaCFtVWJS5++n+w4/sr2GWGerBxgTjpKeDclk/Qk6W/A==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@istanbuljs/schema": "^0.1.3", + "find-up": "^5.0.0", + "foreground-child": "^2.0.0", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-reports": "^3.1.4", + "rimraf": "^3.0.2", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^9.0.0", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9" + }, + "bin": { + "c8": "bin/c8.js" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^1.0.0", + "@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.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cacache/node_modules/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, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/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, + "dependencies": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-me-maybe": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", + "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==", + "dev": true + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==", + "dev": true, + "optional": true, + "dependencies": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/camelcase-keys/node_modules/camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001431", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz", + "integrity": "sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, + "node_modules/capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "dev": true, + "dependencies": { + "rsvp": "^4.8.4" + }, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/case-sensitive-paths-webpack-plugin": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", + "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ccount": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", + "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/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==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/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==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "node_modules/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, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/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, + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/class-utils/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/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, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clean-css": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz", + "integrity": "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==", + "dev": true, + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clean-css/node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/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, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clsx": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", + "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/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==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", + "dev": true, + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/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 + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "dev": true + }, + "node_modules/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, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/comma-separated-tokens": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", + "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "dev": true + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "node_modules/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 + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/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, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/concat-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/concat-stream/node_modules/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, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/concat-stream/node_modules/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, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/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 + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true + }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-disposition/node_modules/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, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/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, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "node_modules/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, + "dependencies": { + "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" + } + }, + "node_modules/copy-concurrently/node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "node_modules/copy-concurrently/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/copy-concurrently/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/core-js": { + "version": "3.26.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.26.1.tgz", + "integrity": "sha512-21491RRQVzUn0GGM9Z1Jrpr6PNPxPi+Za8OM9q4tksTSnlbXXGKK1nXNg/QvwFYettXvSX6zWKCtHHfjN4puyA==", + "dev": true, + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.26.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz", + "integrity": "sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-pure": { + "version": "3.26.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.26.1.tgz", + "integrity": "sha512-VVXcDpp/xJ21KdULRq/lXdLzQAtX7+37LzpyfFM973il0tWSsDEoyzG38G14AjTpK9VTfiNM9jnFauq/CpaWGQ==", + "dev": true, + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cp-file": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-7.0.0.tgz", + "integrity": "sha512-0Cbj7gyvFVApzpK/uhCtQ/9kE9UnYpxMzaq5nQQC/Dh4iaj5fxp7iEFIullrYwzj8nf0qnsI1Qsx34hAeAebvw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "nested-error-stacks": "^2.0.0", + "p-event": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cp-file/node_modules/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, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cp-file/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/cpy": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/cpy/-/cpy-8.1.2.tgz", + "integrity": "sha512-dmC4mUesv0OYH2kNFEidtf/skUwv4zePmGeepjyyJ0qTo5+8KhA1o99oIAwVVLzQMAeDJml74d6wPPKb6EZUTg==", + "dev": true, + "dependencies": { + "arrify": "^2.0.1", + "cp-file": "^7.0.0", + "globby": "^9.2.0", + "has-glob": "^1.0.0", + "junk": "^3.1.0", + "nested-error-stacks": "^2.1.0", + "p-all": "^2.1.0", + "p-filter": "^2.1.0", + "p-map": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cpy/node_modules/@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/cpy/node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/cpy/node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "dev": true, + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpy/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpy/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpy/node_modules/dir-glob": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", + "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", + "dev": true, + "dependencies": { + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cpy/node_modules/fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "dev": true, + "dependencies": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/cpy/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpy/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpy/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "dev": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/cpy/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpy/node_modules/globby": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz", + "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", + "dev": true, + "dependencies": { + "@types/glob": "^7.1.1", + "array-union": "^1.0.2", + "dir-glob": "^2.2.2", + "fast-glob": "^2.2.6", + "glob": "^7.1.3", + "ignore": "^4.0.3", + "pify": "^4.0.1", + "slash": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/cpy/node_modules/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, + "engines": { + "node": ">= 4" + } + }, + "node_modules/cpy/node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/cpy/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpy/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpy/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpy/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpy/node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cpy/node_modules/path-type/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/cpy/node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cpy/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/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, + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/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, + "dependencies": { + "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" + } + }, + "node_modules/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, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/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, + "dependencies": { + "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" + }, + "engines": { + "node": "*" + } + }, + "node_modules/css-loader": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", + "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", + "dev": true, + "dependencies": { + "icss-utils": "^5.1.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.15", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.27.0 || ^5.0.0" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/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, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + }, + "node_modules/currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", + "dev": true, + "optional": true, + "dependencies": { + "array-find-index": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==", + "dev": true + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true + }, + "node_modules/deep-equal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.1.0.tgz", + "integrity": "sha512-2pxgvWu3Alv1PoWEyVg7HS8YhGlUFUV7N5oOvfL6d+7xAmLSemMwv/c8Zv/i9KFzxV5Kt5CAvQc70fLwVuf4UA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.2", + "get-intrinsic": "^1.1.3", + "is-arguments": "^1.1.1", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-equal/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-browser-id": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-1.0.4.tgz", + "integrity": "sha512-qPy925qewwul9Hifs+3sx1ZYn14obHxpkX+mPD369w4Rzg+YkJBgi3SOvwUq81nWSjqGUegIgEPwD8u+HUnxlw==", + "dev": true, + "optional": true, + "dependencies": { + "bplist-parser": "^0.1.0", + "meow": "^3.1.0", + "untildify": "^2.0.0" + }, + "bin": { + "default-browser-id": "cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/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, + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detab": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", + "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", + "dev": true, + "dependencies": { + "repeat-string": "^1.5.4" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/detect-package-manager": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-package-manager/-/detect-package-manager-2.0.1.tgz", + "integrity": "sha512-j/lJHyoLlWi6G1LDdLgvUtz60Zo5GEj+sVYtTVXnYLDPuzgC3llMxonXym9zIwhhUII8vjdw0LXxavpLqTbl1A==", + "dev": true, + "dependencies": { + "execa": "^5.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/detect-port": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", + "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", + "dev": true, + "dependencies": { + "address": "^1.0.1", + "debug": "4" + }, + "bin": { + "detect": "bin/detect-port.js", + "detect-port": "bin/detect-port.js" + } + }, + "node_modules/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, + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/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, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-accessibility-api": { + "version": "0.5.14", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.14.tgz", + "integrity": "sha512-NMt+m9zFMPZe0JcY9gN224Qvk6qLIdqex29clBvc/y75ZBX9YA9wNK3frsYvu2DI1xcCIwxwnX+TlsJ2DSOADg==", + "dev": true + }, + "node_modules/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, + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", + "dev": true + }, + "node_modules/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, + "engines": { + "node": ">=0.4", + "npm": ">=1.2" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/duplexer2/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/duplexer2/node_modules/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==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/duplexer2/node_modules/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==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/duplexify/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/duplexify/node_modules/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, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/duplexify/node_modules/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, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", + "dev": true + }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/endent": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/endent/-/endent-2.1.0.tgz", + "integrity": "sha512-r8VyPX7XL8U01Xgnb1CjZ3XV+z90cXIJ9JPE/R9SEC9vpw2P6CfsRPJmp20DppC5N7ZAMCmjYkJIa744Iyg96w==", + "dev": true, + "dependencies": { + "dedent": "^0.7.0", + "fast-json-parse": "^1.0.3", + "objectorarray": "^1.0.5" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", + "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/enhanced-resolve/node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/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==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "dev": true, + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/es-abstract": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", + "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "dev": true + }, + "node_modules/es-get-iterator": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", + "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.0", + "has-symbols": "^1.0.1", + "is-arguments": "^1.1.0", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.5", + "isarray": "^2.0.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-get-iterator/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/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, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es5-shim": { + "version": "4.6.7", + "resolved": "https://registry.npmjs.org/es5-shim/-/es5-shim-4.6.7.tgz", + "integrity": "sha512-jg21/dmlrNQI7JyyA2w7n+yifSxBng0ZralnSfVZjoCawgNTCnS+yBCyVM9DL5itm7SUnDGgv7hcq2XCZX4iRQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/es6-shim": { + "version": "0.35.6", + "resolved": "https://registry.npmjs.org/es6-shim/-/es6-shim-0.35.6.tgz", + "integrity": "sha512-EmTr31wppcaIAgblChZiuN/l9Y7DPyw8Xtbg7fIVngn6zMW+IEBJDJngeKC3x6wr0V/vcA2wqeFnaw1bFJbDdA==", + "dev": true + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/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, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/escodegen/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.22.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.22.0.tgz", + "integrity": "sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.10.4", + "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.3", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "globby": "^11.1.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-next": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.0.3.tgz", + "integrity": "sha512-i2JoQP8gGv303GjXTonA27fm1ckRRkRoAP1WYEQgN0D2DDoFeBPqlJgHlMHnXKWjmNct/sW8jQEvy9am2juc8g==", + "dev": true, + "dependencies": { + "@next/eslint-plugin-next": "13.0.3", + "@rushstack/eslint-patch": "^1.1.3", + "@typescript-eslint/parser": "^5.42.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^2.7.1", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.31.7", + "eslint-plugin-react-hooks": "^4.5.0" + }, + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-config-standard": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz", + "integrity": "sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peerDependencies": { + "eslint": "^8.0.1", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-n": "^15.0.0", + "eslint-plugin-promise": "^6.0.0" + } + }, + "node_modules/eslint-config-standard-with-typescript": { + "version": "23.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-23.0.0.tgz", + "integrity": "sha512-iaaWifImn37Z1OXbNW1es7KI+S7D408F9ys0bpaQf2temeBWlvb0Nc5qHkOgYaRb5QxTZT32GGeN1gtswASOXA==", + "dev": true, + "dependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint-config-standard": "17.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^5.0.0", + "eslint": "^8.0.1", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-n": "^15.0.0", + "eslint-plugin-promise": "^6.0.0", + "typescript": "*" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz", + "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "glob": "^7.2.0", + "is-glob": "^4.0.3", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*" + } + }, + "node_modules/eslint-import-resolver-typescript/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", + "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", + "dev": true, + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-es": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", + "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", + "dev": true, + "dependencies": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" + } + }, + "node_modules/eslint-plugin-es/node_modules/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, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-plugin-es/node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", + "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", + "has": "^1.0.3", + "is-core-module": "^2.8.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.5", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz", + "integrity": "sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.18.9", + "aria-query": "^4.2.2", + "array-includes": "^3.1.5", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.4.3", + "axobject-query": "^2.2.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.3.2", + "language-tags": "^1.0.5", + "minimatch": "^3.1.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-n": { + "version": "15.5.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.5.1.tgz", + "integrity": "sha512-kAd+xhZm7brHoFLzKLB7/FGRFJNg/srmv67mqb7tto22rpr4wv/LV6RuXzAfv3jbab7+k1wi42PsIhGviywaaw==", + "dev": true, + "dependencies": { + "builtins": "^5.0.1", + "eslint-plugin-es": "^4.1.0", + "eslint-utils": "^3.0.0", + "ignore": "^5.1.1", + "is-core-module": "^2.11.0", + "minimatch": "^3.1.2", + "resolve": "^1.22.1", + "semver": "^7.3.8" + }, + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "eslint": ">=7.28.0", + "prettier": ">=2.0.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-promise": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", + "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.31.10", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.10.tgz", + "integrity": "sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.5", + "array.prototype.flatmap": "^1.3.0", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.5", + "object.fromentries": "^2.0.5", + "object.hasown": "^1.1.1", + "object.values": "^1.1.5", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.3", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-storybook": { + "version": "0.6.7", + "resolved": "https://registry.npmjs.org/eslint-plugin-storybook/-/eslint-plugin-storybook-0.6.7.tgz", + "integrity": "sha512-lcUsB+3PesKWXwwEHGSTCijKWDXuQ4ITVbnsSDMXRCR/cjGtHZIEcy2pp/Eh7nfWA/GZrDPpK97DsTWEzyN6Bw==", + "dev": true, + "dependencies": { + "@storybook/csf": "^0.0.1", + "@typescript-eslint/experimental-utils": "^5.3.0", + "requireindex": "^1.1.0", + "ts-dedent": "^2.2.0" + }, + "engines": { + "node": "12.x || 14.x || >= 16" + }, + "peerDependencies": { + "eslint": ">=6" + } + }, + "node_modules/eslint-plugin-storybook/node_modules/@storybook/csf": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.1.tgz", + "integrity": "sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.15" + } + }, + "node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/espree": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-to-babel": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/estree-to-babel/-/estree-to-babel-3.2.1.tgz", + "integrity": "sha512-YNF+mZ/Wu2FU/gvmzuWtYc8rloubL7wfXCTgouFrnjGVXPA/EeYYA7pupXWrb3Iv1cTBeSSxxJIbK23l4MRNqg==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.1.6", + "@babel/types": "^7.2.0", + "c8": "^7.6.0" + }, + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/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, + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/exec-sh": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", + "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==", + "dev": true + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/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, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/express/node_modules/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, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/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 + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-parse": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fast-json-parse/-/fast-json-parse-1.0.3.tgz", + "integrity": "sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==", + "dev": true + }, + "node_modules/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==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fetch-retry": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-5.0.3.tgz", + "integrity": "sha512-uJQyMrX5IJZkhoEUBQ3EjxkeiZkppBd5jS/fMTJmfZxLSiaQjv2zD0kTvuvkSH89uFvgSlB6ueGpjD3HWN7Bxw==", + "dev": true + }, + "node_modules/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 + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/file-system-cache": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/file-system-cache/-/file-system-cache-1.1.0.tgz", + "integrity": "sha512-IzF5MBq+5CR0jXx5RxPe4BICl/oEhBSXKaL9fLhAXrIfIUS77Hr4vzrYyqYMHN6uTt+BOqi3fDCTjjEBCjERKw==", + "dev": true, + "dependencies": { + "fs-extra": "^10.1.0", + "ramda": "^0.28.0" + } + }, + "node_modules/file-system-cache/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/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 + }, + "node_modules/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, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/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, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/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, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/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, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-cache-dir/node_modules/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, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/find-cache-dir/node_modules/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==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "node_modules/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, + "dependencies": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "node_modules/flush-write-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/flush-write-stream/node_modules/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, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/flush-write-stream/node_modules/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, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/focus-lock": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/focus-lock/-/focus-lock-0.8.1.tgz", + "integrity": "sha512-/LFZOIo82WDsyyv7h7oc0MJF9ACOvDRdx9rWPZ2pgMfNWu/z8hQDBtOchuB/0BVLmuFOZjV02YwUVzNsWx/EzA==", + "dev": true, + "dependencies": { + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/focus-lock/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", + "integrity": "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=10", + "yarn": ">=1.0.0" + }, + "peerDependencies": { + "eslint": ">= 6", + "typescript": ">= 2.7", + "vue-template-compiler": "*", + "webpack": ">= 4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "dev": true, + "dependencies": { + "@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" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/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, + "dependencies": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", + "dev": true, + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "node_modules/from2/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/from2/node_modules/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, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/from2/node_modules/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, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/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, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", + "dev": true + }, + "node_modules/fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", + "dev": true + }, + "node_modules/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": "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "dev": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/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, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/github-slugger": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", + "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==", + "dev": true + }, + "node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-promise": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-3.4.0.tgz", + "integrity": "sha512-q08RJ6O+eJn+dVanerAndJwIcumgbDdYiUT7zFQl3Wm1xD6fBKtah7H8ZJChj4wP+8C+QfeVy8xautR7rdmKEw==", + "dev": true, + "dependencies": { + "@types/glob": "*" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "glob": "*" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dev": true, + "dependencies": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "node_modules/globals": { + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "node_modules/handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/handlebars/node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-glob/-/has-glob-1.0.0.tgz", + "integrity": "sha512-D+8A457fBShSEI3tFCj65PAbT++5sKiFtdCdOam0gnfBgw9D277OERk+HM9qYJXmdVLZ/znez10SqHN0BBQ50g==", + "dev": true, + "dependencies": { + "is-glob": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-glob/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "dev": true, + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash-base/node_modules/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, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/hash-base/node_modules/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, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/hash-base/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/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, + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hast-to-hyperscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", + "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.3", + "comma-separated-tokens": "^1.0.0", + "property-information": "^5.3.0", + "space-separated-tokens": "^1.0.0", + "style-to-object": "^0.3.0", + "unist-util-is": "^4.0.0", + "web-namespaces": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", + "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==", + "dev": true, + "dependencies": { + "@types/parse5": "^5.0.0", + "hastscript": "^6.0.0", + "property-information": "^5.0.0", + "vfile": "^4.0.0", + "vfile-location": "^3.2.0", + "web-namespaces": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", + "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", + "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^6.0.0", + "hast-util-to-parse5": "^6.0.0", + "html-void-elements": "^1.0.0", + "parse5": "^6.0.0", + "unist-util-position": "^3.0.0", + "vfile": "^4.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw/node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/hast-util-to-parse5": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", + "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", + "dev": true, + "dependencies": { + "hast-to-hyperscript": "^9.0.0", + "property-information": "^5.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-parse5/node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/hastscript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", + "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/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, + "bin": { + "he": "bin/he" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dev": true, + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/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==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/html-dom-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/html-dom-parser/-/html-dom-parser-1.2.0.tgz", + "integrity": "sha512-2HIpFMvvffsXHFUFjso0M9LqM+1Lm22BF+Df2ba+7QHJXjk63pWChEnI6YG27eaWqUdfnh5/Vy+OXrNTtepRsg==", + "dependencies": { + "domhandler": "4.3.1", + "htmlparser2": "7.2.0" + } + }, + "node_modules/html-entities": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", + "dev": true + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dev": true, + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/html-react-parser": { + "version": "1.4.12", + "resolved": "https://registry.npmjs.org/html-react-parser/-/html-react-parser-1.4.12.tgz", + "integrity": "sha512-nqYQzr4uXh67G9ejAG7djupTHmQvSTgjY83zbXLRfKHJ0F06751jXx6WKSFARDdXxCngo2/7H4Rwtfeowql4gQ==", + "dependencies": { + "domhandler": "4.3.1", + "html-dom-parser": "1.2.0", + "react-property": "2.0.0", + "style-to-js": "1.1.0" + }, + "peerDependencies": { + "react": "0.14 || 15 || 16 || 17 || 18" + } + }, + "node_modules/html-tags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", + "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/html-tokenize": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-tokenize/-/html-tokenize-2.0.1.tgz", + "integrity": "sha512-QY6S+hZ0f5m1WT8WffYN+Hg+xm/w5I8XeUcAq/ZYP5wVC8xbKi4Whhru3FtrAebD5EhBW8rmFzkDI6eCAuFe2w==", + "dependencies": { + "buffer-from": "~0.1.1", + "inherits": "~2.0.1", + "minimist": "~1.2.5", + "readable-stream": "~1.0.27-1", + "through2": "~0.4.1" + }, + "bin": { + "html-tokenize": "bin/cmd.js" + } + }, + "node_modules/html-void-elements": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", + "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/html-webpack-plugin": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", + "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", + "dev": true, + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "webpack": "^5.20.0" + } + }, + "node_modules/html-webpack-plugin/node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/htmlparser2": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", + "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.2", + "domutils": "^2.8.0", + "entities": "^3.0.1" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", + "dev": true + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/husky": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.2.tgz", + "integrity": "sha512-Tkv80jtvbnkK3mYWxPZePGFpQ/tT3HNSs/sasF9P2YfkMezDl3ON37YN6jUUI4eTg5LcyVynlb6r4eyvOmspvg==", + "dev": true, + "bin": { + "husky": "lib/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "node_modules/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, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==", + "dev": true + }, + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/image-size": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz", + "integrity": "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==", + "dev": true, + "dependencies": { + "queue": "6.0.2" + }, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/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 + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" + }, + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "dev": true + }, + "node_modules/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, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "dev": true, + "dependencies": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/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, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-dom": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-dom/-/is-dom-1.1.0.tgz", + "integrity": "sha512-u82f6mvhYxRPKpw8V1N0W8ce1xXwOrQtgGcxl6UCL5zBmZu3is/18K0rR7uFCnMDuAsS/3W54mGL4vsaFUQlEQ==", + "dev": true, + "dependencies": { + "is-object": "^1.0.1", + "is-window": "^1.0.2" + } + }, + "node_modules/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, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "optional": true, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", + "dev": true + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", + "dev": true, + "optional": true + }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-window": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-window/-/is-window-1.0.2.tgz", + "integrity": "sha512-uj00kdXyZb9t9RcAUAwMZAnkBUwdYGhYlt7djMXhfyhUCzwNba50tIiBKR7q0l7tdoBtFVw/3JmLY6fI3rmZmg==", + "dev": true + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isomorphic-unfetch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz", + "integrity": "sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==", + "dev": true, + "dependencies": { + "node-fetch": "^2.6.1", + "unfetch": "^4.2.0" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/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, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/istanbul-lib-report/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/iterate-iterator": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.2.tgz", + "integrity": "sha512-t91HubM4ZDQ70M9wqp+pcNpu8OyJ9UAtXntT/Bcsvp5tZMnz9vRa+IunKXeI8AnfZMTv0jNuVEmGeLSMjVvfPw==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/iterate-value": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz", + "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==", + "dev": true, + "dependencies": { + "es-get-iterator": "^1.0.2", + "iterate-iterator": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/jest-haste-map": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", + "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-regex-util": "^26.0.0", + "jest-serializer": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "micromatch": "^4.0.2", + "sane": "^4.0.3", + "walker": "^1.0.7" + }, + "engines": { + "node": ">= 10.14.2" + }, + "optionalDependencies": { + "fsevents": "^2.1.2" + } + }, + "node_modules/jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-mock/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-mock/node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-regex-util": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", + "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", + "dev": true, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-serializer": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", + "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", + "dev": true, + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.4" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^2.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/js-string-escape": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", + "integrity": "sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/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 + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "node_modules/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==", + "dev": true + }, + "node_modules/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": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", + "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.5", + "object.assign": "^4.1.3" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/junk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", + "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/klona": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", + "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", + "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", + "dev": true + }, + "node_modules/language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "dev": true, + "dependencies": { + "language-subtag-registry": "~0.3.2" + } + }, + "node_modules/lazy-universal-dotenv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lazy-universal-dotenv/-/lazy-universal-dotenv-3.0.1.tgz", + "integrity": "sha512-prXSYk799h3GY3iOWnC6ZigYzMPjxN2svgjJ9shk7oMadSNX3wXy0B6F32PMJv7qtMnrIbUxoEHzbutvxR2LBQ==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.5.0", + "app-root-dir": "^1.0.2", + "core-js": "^3.0.4", + "dotenv": "^8.0.0", + "dotenv-expand": "^5.1.0" + }, + "engines": { + "node": ">=6.0.0", + "npm": ">=6.0.0", + "yarn": ">=1.0.0" + } + }, + "node_modules/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, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", + "dev": true, + "optional": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/load-json-file/node_modules/parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", + "dev": true, + "optional": true, + "dependencies": { + "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/load-json-file/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/load-json-file/node_modules/strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", + "dev": true, + "optional": true, + "dependencies": { + "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/loader-utils/node_modules/json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true + }, + "node_modules/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==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==", + "dev": true, + "optional": true, + "dependencies": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/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, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lz-string": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", + "integrity": "sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==", + "dev": true, + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dev": true, + "dependencies": { + "p-defer": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-or-similar": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/map-or-similar/-/map-or-similar-1.5.0.tgz", + "integrity": "sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==", + "dev": true + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", + "dev": true, + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/markdown-escapes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", + "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/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, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/mdast-squeeze-paragraphs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", + "dev": true, + "dependencies": { + "unist-util-remove": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-definitions": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", + "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", + "dev": true, + "dependencies": { + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", + "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "mdast-util-definitions": "^4.0.0", + "mdurl": "^1.0.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", + "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", + "dev": true + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mem": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz", + "integrity": "sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==", + "dev": true, + "dependencies": { + "map-age-cleaner": "^0.1.3", + "mimic-fn": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/mem?sponsor=1" + } + }, + "node_modules/mem/node_modules/mimic-fn": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", + "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/memfs": { + "version": "3.4.11", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.11.tgz", + "integrity": "sha512-GvsCITGAyDCxxsJ+X6prJexFQEhOCJaIlUbsAvjzSI5o5O7j2dle3jWvz5Z5aOdpOxW6ol3vI1+0ut+641F1+w==", + "dev": true, + "dependencies": { + "fs-monkey": "^1.0.3" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/memoizerific": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz", + "integrity": "sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==", + "dev": true, + "dependencies": { + "map-or-similar": "^1.5.0" + } + }, + "node_modules/memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", + "dev": true, + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "node_modules/memory-fs/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/memory-fs/node_modules/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, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/memory-fs/node_modules/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, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==", + "dev": true, + "optional": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/meow/node_modules/find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", + "dev": true, + "optional": true, + "dependencies": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/meow/node_modules/path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", + "dev": true, + "optional": true, + "dependencies": { + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/meow/node_modules/path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", + "dev": true, + "optional": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/meow/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/meow/node_modules/read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", + "dev": true, + "optional": true, + "dependencies": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/meow/node_modules/read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", + "dev": true, + "optional": true, + "dependencies": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "node_modules/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 + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/microevent.ts": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz", + "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==", + "dev": true + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/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, + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", + "dev": true, + "dependencies": { + "dom-walk": "^0.1.0" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/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 + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", + "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/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, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mississippi/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/mississippi/node_modules/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, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/mississippi/node_modules/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, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/mississippi/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/mississippi/node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/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, + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==", + "dev": true, + "dependencies": { + "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" + } + }, + "node_modules/move-concurrently/node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "node_modules/move-concurrently/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/move-concurrently/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/multipipe": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-1.0.2.tgz", + "integrity": "sha512-6uiC9OvY71vzSGX8lZvSqscE7ft9nPupJ8fMjrCNRAUy2LREUW42UL+V/NTrogr6rFgRydUrCX4ZitfpSNkSCQ==", + "dependencies": { + "duplexer2": "^0.1.2", + "object-assign": "^4.1.0" + } + }, + "node_modules/nan": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", + "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", + "dev": true, + "optional": true + }, + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/nested-error-stacks": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.1.tgz", + "integrity": "sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==", + "dev": true + }, + "node_modules/next": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/next/-/next-12.3.3.tgz", + "integrity": "sha512-Rx2Y6Wl5R8E77NOfBupp/B9OPCklqfqD0yN2+rDivhMjd6hjVFH5n0WTDI4PWwDmZsdNcYt6NV85kJ3PLR+eNQ==", + "dependencies": { + "@next/env": "12.3.3", + "@swc/helpers": "0.4.11", + "caniuse-lite": "^1.0.30001406", + "postcss": "8.4.14", + "styled-jsx": "5.0.7", + "use-sync-external-store": "1.2.0" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": ">=12.22.0" + }, + "optionalDependencies": { + "@next/swc-android-arm-eabi": "12.3.3", + "@next/swc-android-arm64": "12.3.3", + "@next/swc-darwin-arm64": "12.3.3", + "@next/swc-darwin-x64": "12.3.3", + "@next/swc-freebsd-x64": "12.3.3", + "@next/swc-linux-arm-gnueabihf": "12.3.3", + "@next/swc-linux-arm64-gnu": "12.3.3", + "@next/swc-linux-arm64-musl": "12.3.3", + "@next/swc-linux-x64-gnu": "12.3.3", + "@next/swc-linux-x64-musl": "12.3.3", + "@next/swc-win32-arm64-msvc": "12.3.3", + "@next/swc-win32-ia32-msvc": "12.3.3", + "@next/swc-win32-x64-msvc": "12.3.3" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^6.0.0 || ^7.0.0", + "react": "^17.0.2 || ^18.0.0-0", + "react-dom": "^17.0.2 || ^18.0.0-0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-dir": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", + "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", + "dev": true, + "dependencies": { + "minimatch": "^3.0.2" + }, + "engines": { + "node": ">= 0.10.5" + } + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/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, + "dependencies": { + "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" + } + }, + "node_modules/node-libs-browser/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/node-libs-browser/node_modules/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 + }, + "node_modules/node-libs-browser/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + }, + "node_modules/node-libs-browser/node_modules/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, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/node-libs-browser/node_modules/readable-stream/node_modules/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, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/node-libs-browser/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/node-libs-browser/node_modules/string_decoder/node_modules/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, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "dev": true + }, + "node_modules/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, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "dev": true, + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==", + "dev": true + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", + "dev": true, + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/object-copy/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/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, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor/node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", + "dev": true, + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", + "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", + "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz", + "integrity": "sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==", + "dev": true, + "dependencies": { + "array.prototype.reduce": "^1.0.5", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.hasown": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", + "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.values": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/objectorarray": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/objectorarray/-/objectorarray-1.0.5.tgz", + "integrity": "sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==", + "dev": true + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/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, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", + "dev": true + }, + "node_modules/os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-all": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-all/-/p-all-2.1.0.tgz", + "integrity": "sha512-HbZxz5FONzz/z2gJfk6bFca0BCiSRF8jU3yCsWOen/vR6lZjfPOu/e7L3uFzTW1i0H8TlC3vqQstEJPQL4/uLA==", + "dev": true, + "dependencies": { + "p-map": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-all/node_modules/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-event": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", + "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", + "dev": true, + "dependencies": { + "p-timeout": "^3.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-filter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", + "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", + "dev": true, + "dependencies": { + "p-map": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-filter/node_modules/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dev": true, + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "node_modules/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, + "dependencies": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "node_modules/parallel-transform/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/parallel-transform/node_modules/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, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/parallel-transform/node_modules/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, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/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==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "dependencies": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "dev": true, + "dependencies": { + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", + "dev": true + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dev": true, + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dev": true, + "optional": true, + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", + "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", + "dev": true, + "dependencies": { + "find-up": "^5.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pnp-webpack-plugin": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", + "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==", + "dev": true, + "dependencies": { + "ts-pnp": "^1.1.6" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/polished": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/polished/-/polished-4.2.2.tgz", + "integrity": "sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.17.8" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss": { + "version": "8.4.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", + "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-flexbugs-fixes": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz", + "integrity": "sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ==", + "dev": true, + "dependencies": { + "postcss": "^7.0.26" + } + }, + "node_modules/postcss-flexbugs-fixes/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/postcss-flexbugs-fixes/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-flexbugs-fixes/node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-loader": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.3.0.tgz", + "integrity": "sha512-M/dSoIiNDOo8Rk0mUqoj4kpGq91gcxCfb9PoyZVdZ76/AuhxylHDYZblNE8o+EQ9AMSASeMFEKxZf5aU6wlx1Q==", + "dev": true, + "dependencies": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.4" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/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, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/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, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/pretty-format/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "node_modules/pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/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==" + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, + "node_modules/promise.allsettled": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.6.tgz", + "integrity": "sha512-22wJUOD3zswWFqgwjNHa1965LvqTX87WPu/lreY2KSd7SVcERfuZ4GfUaOnJNnvtoIv2yXT/W00YIGMetXtFXg==", + "dev": true, + "dependencies": { + "array.prototype.map": "^1.0.5", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "iterate-value": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/promise.prototype.finally": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/promise.prototype.finally/-/promise.prototype.finally-3.1.4.tgz", + "integrity": "sha512-nNc3YbgMfLzqtqvO/q5DP6RR0SiHI9pUPGzyDf1q+usTwCN2kjvAnJkBb7bHe3o+fFSBPpsGMoYtaSi+LTNqng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/property-information": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", + "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", + "dev": true, + "dependencies": { + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/property-information/node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "dependencies": { + "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" + } + }, + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "dependencies": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "node_modules/pumpify/node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "dev": true, + "dependencies": { + "inherits": "~2.0.3" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ramda": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.28.0.tgz", + "integrity": "sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ramda" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/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, + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/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, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-loader": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz", + "integrity": "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/react": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-docgen": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/react-docgen/-/react-docgen-5.4.3.tgz", + "integrity": "sha512-xlLJyOlnfr8lLEEeaDZ+X2J/KJoe6Nr9AzxnkdQWush5hz2ZSu66w6iLMOScMmxoSHWpWMn+k3v5ZiyCfcWsOA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.5", + "@babel/generator": "^7.12.11", + "@babel/runtime": "^7.7.6", + "ast-types": "^0.14.2", + "commander": "^2.19.0", + "doctrine": "^3.0.0", + "estree-to-babel": "^3.1.0", + "neo-async": "^2.6.1", + "node-dir": "^0.1.10", + "strip-indent": "^3.0.0" + }, + "bin": { + "react-docgen": "bin/react-docgen.js" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/react-docgen-typescript": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/react-docgen-typescript/-/react-docgen-typescript-2.2.2.tgz", + "integrity": "sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==", + "dev": true, + "peerDependencies": { + "typescript": ">= 4.3.x" + } + }, + "node_modules/react-docgen/node_modules/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==", + "dev": true + }, + "node_modules/react-dom": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + }, + "peerDependencies": { + "react": "17.0.2" + } + }, + "node_modules/react-element-to-jsx-string": { + "version": "14.3.4", + "resolved": "https://registry.npmjs.org/react-element-to-jsx-string/-/react-element-to-jsx-string-14.3.4.tgz", + "integrity": "sha512-t4ZwvV6vwNxzujDQ+37bspnLwA4JlgUPWhLjBJWsNIDceAf6ZKUTCjdm08cN6WeZ5pTMKiCJkmAYnpmR4Bm+dg==", + "dev": true, + "dependencies": { + "@base2/pretty-print-object": "1.0.1", + "is-plain-object": "5.0.0", + "react-is": "17.0.2" + }, + "peerDependencies": { + "react": "^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1", + "react-dom": "^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1" + } + }, + "node_modules/react-element-to-jsx-string/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-element-to-jsx-string/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "node_modules/react-inspector": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/react-inspector/-/react-inspector-5.1.1.tgz", + "integrity": "sha512-GURDaYzoLbW8pMGXwYPDBIv6nqei4kK7LPRZ9q9HCZF54wqXz/dnylBp/kfE9XmekBhHvLDdcYeyIwSrvtOiWg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.0.0", + "is-dom": "^1.0.0", + "prop-types": "^15.0.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/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==" + }, + "node_modules/react-merge-refs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/react-merge-refs/-/react-merge-refs-1.1.0.tgz", + "integrity": "sha512-alTKsjEL0dKH/ru1Iyn7vliS2QRcBp9zZPGoWxUOvRGWPUYgjo+V01is7p04It6KhgrzhJGnIj9GgX8W4bZoCQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/react-property": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/react-property/-/react-property-2.0.0.tgz", + "integrity": "sha512-kzmNjIgU32mO4mmH5+iUyrqlpFQhF8K2k7eZ4fdLSOPFrD1XgEuSBv9LDEgxRXTMBqMd8ppT0x6TIzqE5pdGdw==" + }, + "node_modules/react-refresh": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", + "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-textarea-autosize": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.3.4.tgz", + "integrity": "sha512-CdtmP8Dc19xL8/R6sWvtknD/eCXkQr30dtvC4VmGInhRsfF8X/ihXCq6+9l9qbxmKRiq407/7z5fxE7cVWQNgQ==", + "dependencies": { + "@babel/runtime": "^7.10.2", + "use-composed-ref": "^1.3.0", + "use-latest": "^1.2.1" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/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, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/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, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/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, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/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, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==", + "dev": true, + "optional": true, + "dependencies": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/redent/node_modules/indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==", + "dev": true, + "optional": true, + "dependencies": { + "repeating": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/redent/node_modules/strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==", + "dev": true, + "optional": true, + "dependencies": { + "get-stdin": "^4.0.1" + }, + "bin": { + "strip-indent": "cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.10", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz", + "integrity": "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==" + }, + "node_modules/regenerator-transform": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", + "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/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, + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-parser": { + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", + "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", + "dev": true + }, + "node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/regexpu-core": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz", + "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsgen": "^0.7.1", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", + "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==", + "dev": true + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remark-external-links": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/remark-external-links/-/remark-external-links-8.0.0.tgz", + "integrity": "sha512-5vPSX0kHoSsqtdftSHhIYofVINC8qmp0nctkeU9YoJwV3YfiBRiI6cbFRJ0oI/1F9xS+bopXG0m2KS8VFscuKA==", + "dev": true, + "dependencies": { + "extend": "^3.0.0", + "is-absolute-url": "^3.0.0", + "mdast-util-definitions": "^4.0.0", + "space-separated-tokens": "^1.0.0", + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-footnotes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", + "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", + "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", + "dev": true, + "dependencies": { + "@babel/core": "7.12.9", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-proposal-object-rest-spread": "7.12.1", + "@babel/plugin-syntax-jsx": "7.12.1", + "@mdx-js/util": "1.6.22", + "is-alphabetical": "1.0.4", + "remark-parse": "8.0.3", + "unified": "9.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx/node_modules/@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/remark-mdx/node_modules/@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==", + "dev": true + }, + "node_modules/remark-mdx/node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.12.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/remark-mdx/node_modules/@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/remark-mdx/node_modules/json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/remark-mdx/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/remark-parse": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", + "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", + "dev": true, + "dependencies": { + "ccount": "^1.0.0", + "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": "^2.0.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": "^2.0.0", + "vfile-location": "^3.0.0", + "xtend": "^4.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse/node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/remark-slug": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/remark-slug/-/remark-slug-6.1.0.tgz", + "integrity": "sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ==", + "dev": true, + "dependencies": { + "github-slugger": "^1.0.0", + "mdast-util-to-string": "^1.0.0", + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-squeeze-paragraphs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", + "dev": true, + "dependencies": { + "mdast-squeeze-paragraphs": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "dev": true + }, + "node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dev": true, + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/renderkid/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==", + "dev": true, + "optional": true, + "dependencies": { + "is-finite": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requireindex": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", + "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", + "dev": true, + "engines": { + "node": ">=0.10.5" + } + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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==", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "dev": true + }, + "node_modules/resolve-url-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", + "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", + "dev": true, + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/resolve-url-loader/node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true, + "engines": { + "node": "6.* || >= 7.*" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==", + "dev": true, + "dependencies": { + "aproba": "^1.1.1" + } + }, + "node_modules/run-queue/node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "node_modules/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==" + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", + "dev": true, + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "deprecated": "some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added", + "dev": true, + "dependencies": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" + }, + "bin": { + "sane": "src/cli.js" + }, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/sane/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/sane/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/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, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/sane/node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/sane/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/sane/node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/sane/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dev": true, + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/sane/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/sane/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/sane/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/sass-loader": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz", + "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", + "dev": true, + "dependencies": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + } + } + }, + "node_modules/scheduler": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-favicon": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.5.0.tgz", + "integrity": "sha512-FMW2RvqNr03x+C0WxTyu6sOv21oOjkq5j8tjquWccwa6ScNyGFOGJVpuS1NmTVGBAHS07xnSKotgf2ehQmf9iA==", + "dev": true, + "dependencies": { + "etag": "~1.8.1", + "fresh": "0.5.2", + "ms": "2.1.1", + "parseurl": "~1.3.2", + "safe-buffer": "5.1.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-favicon/node_modules/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 + }, + "node_modules/serve-favicon/node_modules/safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, + "node_modules/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, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/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, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/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, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "dependencies": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/snapdragon/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/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, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/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 + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dev": true, + "dependencies": { + "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" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/source-map-support/node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated", + "dev": true + }, + "node_modules/space-separated-tokens": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/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 + }, + "node_modules/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, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", + "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", + "dev": true + }, + "node_modules/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, + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", + "dev": true + }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "dev": true + }, + "node_modules/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==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", + "dev": true, + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/static-extend/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/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, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/store2": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/store2/-/store2-2.14.2.tgz", + "integrity": "sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==", + "dev": true + }, + "node_modules/storybook-addon-mantine": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/storybook-addon-mantine/-/storybook-addon-mantine-1.2.0.tgz", + "integrity": "sha512-GuYmjZMNFNMa3lT1M/eH9nVLIxN4l54FLqn1uiJZ11dmbYfdHaO3IwTBrRrSFfwGtK2P8hiNPNIhXZ6+mBZMSQ==", + "dev": true, + "dependencies": { + "@babel/cli": "^7.18.6", + "@babel/core": "^7.18.6", + "@babel/preset-env": "^7.18.6", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "storybook-addon-mantine": "^1.0.0" + }, + "peerDependencies": { + "@emotion/react": "^11.9.3", + "@mantine/carousel": "^1.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", + "@mantine/core": "^1.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", + "@mantine/dates": "^1.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", + "@mantine/dropzone": "^1.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", + "@mantine/form": "^1.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", + "@mantine/hooks": "^1.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", + "@mantine/modals": "^1.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", + "@mantine/next": "^1.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", + "@mantine/notifications": "^1.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", + "@mantine/nprogress": "^1.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", + "@mantine/prism": "^1.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", + "@mantine/rte": "^1.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", + "@mantine/spotlight": "^1.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", + "@storybook/addon-actions": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0", + "@storybook/addon-essentials": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0", + "@storybook/addon-interactions": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0", + "@storybook/addon-links": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0", + "@storybook/addons": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0", + "@storybook/builder-webpack4": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0", + "@storybook/manager-webpack4": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0", + "@storybook/react": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0", + "babel-loader": "^8.0.0", + "dayjs": "^1.0.0", + "embla-carousel-react": "^6.0.0 || ^7.0.0", + "prop-types": "^15.0.0", + "react": "^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0", + "webpack": "^2.0.0 || ^4.0.0 || ^5.0.0" + } + }, + "node_modules/storybook-addon-mantine/node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dev": true, + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/storybook-addon-mantine/node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dev": true, + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/storybook-addon-mantine/node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dev": true, + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/storybook-addon-next": { + "version": "1.6.10", + "resolved": "https://registry.npmjs.org/storybook-addon-next/-/storybook-addon-next-1.6.10.tgz", + "integrity": "sha512-BYs2B5dHIfk5EXVKGC91LZJ5/z+fUjhG7mDfuZvSA0igCm7AZFbe2LJz8NxtIKJpQwiqsqSr62suAcggMRkBNg==", + "dev": true, + "dependencies": { + "@storybook/addons": "^6.4.10", + "image-size": "^1.0.0", + "loader-utils": "^3.2.0", + "postcss-loader": "^6.2.1", + "resolve-url-loader": "^5.0.0", + "sass-loader": "^12.4.0", + "semver": "^7.3.5", + "tsconfig-paths": "^4.0.0", + "tsconfig-paths-webpack-plugin": "^4.0.0" + }, + "peerDependencies": { + "@storybook/addon-actions": "^6.0.0", + "@storybook/addons": "^6.0.0", + "next": "^9.0.0 || ^10.0.0 || ^11.0.0 || ^12.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/storybook-addon-next/node_modules/json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/storybook-addon-next/node_modules/loader-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", + "dev": true, + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/storybook-addon-next/node_modules/postcss-loader": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", + "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", + "dev": true, + "dependencies": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/storybook-addon-next/node_modules/tsconfig-paths": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.1.0.tgz", + "integrity": "sha512-AHx4Euop/dXFC+Vx589alFba8QItjF+8hf8LtmuiCwHyI4rHXQtOOENaM8kvYf5fR0dRChy3wzWIZ9WbB7FWow==", + "dev": true, + "dependencies": { + "json5": "^2.2.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "dependencies": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "node_modules/stream-browserify/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/stream-browserify/node_modules/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, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/stream-browserify/node_modules/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, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/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, + "dependencies": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/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, + "dependencies": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/stream-http/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/stream-http/node_modules/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, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/stream-http/node_modules/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, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/stream-http/node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/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 + }, + "node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", + "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.padend": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.4.tgz", + "integrity": "sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.padstart": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/string.prototype.padstart/-/string.prototype.padstart-3.1.4.tgz", + "integrity": "sha512-XqOHj8horGsF+zwxraBvMTkBFM28sS/jHBJajh17JtJKA92qazidiQbLosV4UA18azvLOVKYo/E3g3T9Y5826w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", + "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/style-to-js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.0.tgz", + "integrity": "sha512-1OqefPDxGrlMwcbfpsTVRyzwdhr4W0uxYQzeA2F1CBc8WG04udg2+ybRnvh3XYL4TdHQrCahLtax2jc8xaE6rA==", + "dependencies": { + "style-to-object": "0.3.0" + } + }, + "node_modules/style-to-object": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", + "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", + "dependencies": { + "inline-style-parser": "0.1.1" + } + }, + "node_modules/styled-jsx": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.7.tgz", + "integrity": "sha512-b3sUzamS086YLRuvnaDigdAewz1/EFYlHpYBP5mZovKEdQQOIIYq8lApylub3HHZ6xFjV051kkGU7cudJmrXEA==", + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/stylis": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz", + "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==" + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol.prototype.description": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/symbol.prototype.description/-/symbol.prototype.description-1.0.5.tgz", + "integrity": "sha512-x738iXRYsrAt9WBhRCVG5BtIC3B7CUkFwbHW2zOvGtwM33s7JjrCDyq8V0zgMYVb5ymsL8+qkzzpANH63CPQaQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-symbol-description": "^1.0.0", + "has-symbols": "^1.0.2", + "object.getownpropertydescriptors": "^2.1.2" + }, + "engines": { + "node": ">= 0.11.15" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/synchronous-promise": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.16.tgz", + "integrity": "sha512-qImOD23aDfnIDNqlG1NOehdB9IYsn1V9oByPjKY1nakv2MQYCEMyX033/q+aEtYCpmYK1cv2+NTmlH+ra6GA5A==", + "dev": true + }, + "node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.1.12", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.12.tgz", + "integrity": "sha512-jU4TdemS31uABHd+Lt5WEYJuzn+TJTCBLljvIAHZOz6M9Os5pJ4dD+vRFLxPa/n3T0iEFzpi+0x1UfuDZYbRMw==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/telejson": { + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/telejson/-/telejson-6.0.8.tgz", + "integrity": "sha512-nerNXi+j8NK1QEfBHtZUN/aLdDcyupA//9kAboYLrtzZlPLpUfqbVGWb9zz91f/mIjRbAYhbgtnJHY8I1b5MBg==", + "dev": true, + "dependencies": { + "@types/is-function": "^1.0.0", + "global": "^4.4.0", + "is-function": "^1.0.2", + "is-regex": "^1.1.2", + "is-symbol": "^1.0.3", + "isobject": "^4.0.0", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3" + } + }, + "node_modules/telejson/node_modules/isobject": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz", + "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/terser": { + "version": "5.15.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", + "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", + "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.14", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.14.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/terser/node_modules/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==", + "dev": true + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "node_modules/through2": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.4.2.tgz", + "integrity": "sha512-45Llu+EwHKtAZYTPPVn3XZHBgakWMN3rokhEv5hu596XP+cNgplMg+Gj+1nmAvj+L0K7+N49zBKx5rah5u0QIQ==", + "dependencies": { + "readable-stream": "~1.0.17", + "xtend": "~2.1.1" + } + }, + "node_modules/timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "dev": true, + "dependencies": { + "setimmediate": "^1.0.4" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "node_modules/trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==", + "dev": true + }, + "node_modules/trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/trim-trailing-lines": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", + "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/ts-dedent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", + "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", + "dev": true, + "engines": { + "node": ">=6.10" + } + }, + "node_modules/ts-pnp": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", + "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/tsconfig-paths": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths-webpack-plugin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-4.0.0.tgz", + "integrity": "sha512-fw/7265mIWukrSHd0i+wSwx64kYUSAKPfxRDksjKIYTxSAp9W9/xcZVBF4Kl0eqQd5eBpAQ/oQrc5RyM/0c1GQ==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.7.0", + "tsconfig-paths": "^4.0.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/tsconfig-paths-webpack-plugin/node_modules/json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tsconfig-paths-webpack-plugin/node_modules/tsconfig-paths": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.1.0.tgz", + "integrity": "sha512-AHx4Euop/dXFC+Vx589alFba8QItjF+8hf8LtmuiCwHyI4rHXQtOOENaM8kvYf5fR0dRChy3wzWIZ9WbB7FWow==", + "dev": true, + "dependencies": { + "json5": "^2.2.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==", + "dev": true + }, + "node_modules/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, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/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, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", + "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "dev": true, + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unfetch": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", + "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==", + "dev": true + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "inherits": "^2.0.0", + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/unherit/node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unified": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "dev": true, + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/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, + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/union-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, + "node_modules/unist-builder": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", + "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-generated": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", + "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", + "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz", + "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==", + "dev": true, + "dependencies": { + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", + "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", + "dev": true, + "dependencies": { + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", + "dev": true, + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", + "dev": true, + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/untildify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-2.1.0.tgz", + "integrity": "sha512-sJjbDp2GodvkB0FZZcn7k6afVisqX5BZD7Yq3xp4nN2O15BBK0cLm3Vwn2vQaF7UDS0UUsrQMkkplmDI5fskig==", + "dev": true, + "optional": true, + "dependencies": { + "os-homedir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", + "dev": true + }, + "node_modules/url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", + "dev": true, + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url-loader": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", + "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "mime-types": "^2.1.27", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "file-loader": "*", + "webpack": "^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "file-loader": { + "optional": true + } + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", + "dev": true + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/use-composed-ref": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", + "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/use-isomorphic-layout-effect": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", + "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-latest": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", + "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", + "dependencies": { + "use-isomorphic-layout-effect": "^1.1.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/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, + "dependencies": { + "inherits": "2.0.3" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/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, + "dependencies": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "node_modules/util/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/uuid-browser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/uuid-browser/-/uuid-browser-3.1.0.tgz", + "integrity": "sha512-dsNgbLaTrd6l3MMxTtouOCFw4CBFc/3a+GgYA2YyrJvyQ1u6q4pcu3ktLoUZ/VN/Aw9WsauazbgsgdfVWgAKQg==", + "dev": true + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/v8-to-istanbul": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", + "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/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, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", + "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/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 + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/watchpack-chokidar2": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", + "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", + "dev": true, + "optional": true, + "dependencies": { + "chokidar": "^2.1.8" + } + }, + "node_modules/watchpack-chokidar2/node_modules/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, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/watchpack-chokidar2/node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "optional": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/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, + "dependencies": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "optional": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", + "dev": true, + "optional": true, + "dependencies": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "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" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" + } + }, + "node_modules/watchpack-chokidar2/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "optional": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "optional": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "dev": true, + "optional": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "dev": true, + "optional": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", + "dev": true, + "optional": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true, + "optional": true + }, + "node_modules/watchpack-chokidar2/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "optional": true + }, + "node_modules/watchpack-chokidar2/node_modules/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, + "dependencies": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/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, + "optional": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/watchpack-chokidar2/node_modules/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, + "optional": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/watchpack-chokidar2/node_modules/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, + "optional": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "optional": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/web-namespaces": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", + "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "node_modules/webpack": { + "version": "5.75.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", + "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-4.3.0.tgz", + "integrity": "sha512-PjwyVY95/bhBh6VUqt6z4THplYcsvQ8YNNBTBM873xLVmw8FLeALn0qurHbs9EmcfhzQis/eoqypSnZeuUz26w==", + "dev": true, + "dependencies": { + "colorette": "^1.2.2", + "mem": "^8.1.1", + "memfs": "^3.2.2", + "mime-types": "^2.1.30", + "range-parser": "^1.2.1", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= v10.23.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-filter-warnings-plugin": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/webpack-filter-warnings-plugin/-/webpack-filter-warnings-plugin-1.2.1.tgz", + "integrity": "sha512-Ez6ytc9IseDMLPo0qCuNNYzgtUl8NovOqjIq4uAU8LTD4uoa1w1KpZyyzFtLTEMZpkkOkLfL9eN+KGYdk1Qtwg==", + "dev": true, + "engines": { + "node": ">= 4.3 < 5.0.0 || >= 5.10" + }, + "peerDependencies": { + "webpack": "^2.0.0 || ^3.0.0 || ^4.0.0" + } + }, + "node_modules/webpack-hot-middleware": { + "version": "2.25.3", + "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.3.tgz", + "integrity": "sha512-IK/0WAHs7MTu1tzLTjio73LjS3Ov+VvBKQmE8WPlJutgG5zT6Urgq/BbAdRrHTRpyzK0dvAvFh1Qg98akxgZpA==", + "dev": true, + "dependencies": { + "ansi-html-community": "0.0.8", + "html-entities": "^2.1.0", + "strip-ansi": "^6.0.0" + } + }, + "node_modules/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, + "dependencies": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-virtual-modules": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.4.6.tgz", + "integrity": "sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==", + "dev": true + }, + "node_modules/webpack/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/webpack/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/webpack/node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true + }, + "node_modules/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, + "dependencies": { + "errno": "~0.1.7" + } + }, + "node_modules/worker-rpc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz", + "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==", + "dev": true, + "dependencies": { + "microevent.ts": "~0.1.1" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/x-default-browser": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/x-default-browser/-/x-default-browser-0.4.0.tgz", + "integrity": "sha512-7LKo7RtWfoFN/rHx1UELv/2zHGMx8MkZKDq1xENmOCTkfIqZJ0zZ26NEJX8czhnPXVcqS0ARjjfJB+eJ0/5Cvw==", + "dev": true, + "bin": { + "x-default-browser": "bin/x-default-browser.js" + }, + "optionalDependencies": { + "default-browser-id": "^1.0.4" + } + }, + "node_modules/xtend": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==", + "dependencies": { + "object-keys": "~0.4.0" + }, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/xtend/node_modules/object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zwitch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/cli": { + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.19.3.tgz", + "integrity": "sha512-643/TybmaCAe101m2tSVHi9UKpETXP9c/Ff4mD2tAwkdP6esKIfaauZFc67vGEM6r9fekbEGid+sZhbEnSe3dg==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.8", + "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.3", + "chokidar": "^3.4.0", + "commander": "^4.0.1", + "convert-source-map": "^1.1.0", + "fs-readdir-recursive": "^1.1.0", + "glob": "^7.2.0", + "make-dir": "^2.1.0", + "slash": "^2.0.0" + }, + "dependencies": { + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + } + } + }, + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/compat-data": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", + "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==", + "dev": true + }, + "@babel/core": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.2.tgz", + "integrity": "sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.2", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-module-transforms": "^7.20.2", + "@babel/helpers": "^7.20.1", + "@babel/parser": "^7.20.2", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.2", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "dependencies": { + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.20.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz", + "integrity": "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==", + "dev": true, + "requires": { + "@babel/types": "^7.20.2", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", + "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", + "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.20.0", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.2.tgz", + "integrity": "sha512-k22GoYRAHPYr9I+Gvy2ZQlAe5mGy8BqWst2wRt8cwIufWTxrsVshhIBvYNqC80N0GSFWTsqRVexOtfzlgOEDvA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.19.1", + "@babel/helper-split-export-declaration": "^7.18.6" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz", + "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.1.0" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", + "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-function-name": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "dev": true, + "requires": { + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", + "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", + "dev": true, + "requires": { + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-transforms": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", + "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.2" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==" + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", + "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-replace-supers": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", + "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/traverse": "^7.19.1", + "@babel/types": "^7.19.0" + } + }, + "@babel/helper-simple-access": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "dev": true, + "requires": { + "@babel/types": "^7.20.2" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", + "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", + "dev": true, + "requires": { + "@babel/types": "^7.20.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" + }, + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" + }, + "@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz", + "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" + } + }, + "@babel/helpers": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz", + "integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==", + "dev": true, + "requires": { + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.0" + } + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + }, + "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" + } + } + } + }, + "@babel/parser": { + "version": "7.20.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", + "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==", + "dev": true + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", + "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", + "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-proposal-optional-chaining": "^7.18.9" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.1.tgz", + "integrity": "sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", + "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-proposal-decorators": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.20.2.tgz", + "integrity": "sha512-nkBH96IBmgKnbHQ5gXFrcmez+Z9S2EIDKDQGp005ROqBigc88Tky4rzCnlP/lnlj245dCEQl4/YyV0V1kYh5dw==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.20.2", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-replace-supers": "^7.19.1", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/plugin-syntax-decorators": "^7.19.0" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", + "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-default-from": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.18.10.tgz", + "integrity": "sha512-5H2N3R2aQFxkV4PIBUR/i7PUSwgTZjouJKzI8eKswfIjT0PhvzkPn0t0wIS5zn6maQuvtT0t1oHtMUz61LOuow==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-default-from": "^7.18.6" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", + "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", + "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", + "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz", + "integrity": "sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.20.1", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.1" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", + "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", + "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@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==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-decorators": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.19.0.tgz", + "integrity": "sha512-xaBZUEDntt4faL1yN8oIFlhfXeQAWJW7CLKYsHTUqriCUbj8xOra8bfxxKGi/UwExPFBuPdH4XfHc9rGQhrVkQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.19.0" + } + }, + "@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==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-default-from": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.18.6.tgz", + "integrity": "sha512-Kr//z3ujSVNx6E9z9ih5xXXMqK07VVTuqPmqGe6Mss/zW5XPeLZeSDZoP9ab/hT4wPKqAgjl2PnhPrcpk8Seew==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-flow": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz", + "integrity": "sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", + "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.19.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==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", + "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.19.0" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", + "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", + "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.2.tgz", + "integrity": "sha512-y5V15+04ry69OV2wULmwhEA6jwSWXO1TwAtIwiPXcvHcoOQUqpyMVd2bDsQJMW8AurjulIyUV8kDqtjSwHy1uQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.20.2" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz", + "integrity": "sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-replace-supers": "^7.19.1", + "@babel/helper-split-export-declaration": "^7.18.6", + "globals": "^11.1.0" + }, + "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/plugin-transform-computed-properties": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", + "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz", + "integrity": "sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.20.2" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", + "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", + "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-flow-strip-types": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.19.0.tgz", + "integrity": "sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-flow": "^7.18.6" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", + "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", + "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", + "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", + "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz", + "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", + "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-simple-access": "^7.19.4" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz", + "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-validator-identifier": "^7.19.1" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", + "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz", + "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.19.0", + "@babel/helper-plugin-utils": "^7.19.0" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", + "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.20.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.3.tgz", + "integrity": "sha512-oZg/Fpx0YDrj13KsLyO8I/CX3Zdw7z0O9qOd95SqcoIzuqy/WTGWvePeHAnZCN54SfdyjHcb1S30gc8zlzlHcA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.20.2" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", + "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", + "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/types": "^7.19.0" + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", + "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", + "dev": true, + "requires": { + "@babel/plugin-transform-react-jsx": "^7.18.6" + } + }, + "@babel/plugin-transform-react-pure-annotations": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", + "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", + "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "regenerator-transform": "^0.15.0" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", + "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", + "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", + "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", + "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.2.tgz", + "integrity": "sha512-jvS+ngBfrnTUBfOQq8NfGnSbF9BrqlR6hjJ2yVxMkmO5nL/cdifNbI30EfjRlN4g5wYWNnMPyj5Sa6R1pbLeag==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.20.2", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-typescript": "^7.20.0" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", + "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/preset-env": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", + "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.20.1", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-async-generator-functions": "^7.20.1", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.20.2", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.20.0", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.18.6", + "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.20.2", + "@babel/plugin-transform-classes": "^7.20.2", + "@babel/plugin-transform-computed-properties": "^7.18.9", + "@babel/plugin-transform-destructuring": "^7.20.2", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.18.8", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.19.6", + "@babel/plugin-transform-modules-commonjs": "^7.19.6", + "@babel/plugin-transform-modules-systemjs": "^7.19.6", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.20.1", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.19.0", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.18.10", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.20.2", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "core-js-compat": "^3.25.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/preset-flow": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.18.6.tgz", + "integrity": "sha512-E7BDhL64W6OUqpuyHnSroLnqyRTcG6ZdOBl1OKI/QK/HJfplqK/S3sq1Cckx7oTodJ5yOXyfw7rEADJ6UjoQDQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-flow-strip-types": "^7.18.6" + } + }, + "@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "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.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", + "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-react-display-name": "^7.18.6", + "@babel/plugin-transform-react-jsx": "^7.18.6", + "@babel/plugin-transform-react-jsx-development": "^7.18.6", + "@babel/plugin-transform-react-pure-annotations": "^7.18.6" + } + }, + "@babel/preset-typescript": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", + "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-typescript": "^7.18.6" + } + }, + "@babel/register": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.18.9.tgz", + "integrity": "sha512-ZlbnXDcNYHMR25ITwwNKT88JiaukkdVj/nG7r3wnuXkOTHc60Uy05PwMCPre0hSkY68E6zK3xz+vUJSP2jWmcw==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "find-cache-dir": "^2.0.0", + "make-dir": "^2.1.0", + "pirates": "^4.0.5", + "source-map-support": "^0.5.16" + } + }, + "@babel/runtime": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", + "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", + "requires": { + "regenerator-runtime": "^0.13.10" + } + }, + "@babel/runtime-corejs3": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.20.1.tgz", + "integrity": "sha512-CGulbEDcg/ND1Im7fUNRZdGXmX2MTWVVZacQi/6DiKE5HNwZ3aVTm5PV4lO8HHz0B2h8WQyvKKjbX5XgTtydsg==", + "dev": true, + "requires": { + "core-js-pure": "^3.25.1", + "regenerator-runtime": "^0.13.10" + } + }, + "@babel/template": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + } + }, + "@babel/traverse": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", + "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.1", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.20.1", + "@babel/types": "^7.20.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "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.20.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", + "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + }, + "@base2/pretty-print-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@base2/pretty-print-object/-/pretty-print-object-1.0.1.tgz", + "integrity": "sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==", + "dev": true + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "@cnakazawa/watch": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", + "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", + "dev": true, + "requires": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + } + }, + "@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "optional": true + }, + "@design-systems/utils": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@design-systems/utils/-/utils-2.12.0.tgz", + "integrity": "sha512-Y/d2Zzr+JJfN6u1gbuBUb1ufBuLMJJRZQk+dRmw8GaTpqKx5uf7cGUYGTwN02dIb3I+Tf+cW8jcGBTRiFxdYFg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.11.2", + "clsx": "^1.0.4", + "focus-lock": "^0.8.0", + "react-merge-refs": "^1.0.0" + } + }, + "@devtools-ds/object-inspector": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@devtools-ds/object-inspector/-/object-inspector-1.2.0.tgz", + "integrity": "sha512-VztcwqVwScSvYdvJVZBJYsVO/2Pew3JPpFV3T9fuCHQLlHcLYOV3aU/kBS2ScuE2O1JN0ZbobLqFLa3vQF54Fw==", + "dev": true, + "requires": { + "@babel/runtime": "7.7.2", + "@devtools-ds/object-parser": "^1.2.0", + "@devtools-ds/themes": "^1.2.0", + "@devtools-ds/tree": "^1.2.0", + "clsx": "1.1.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.7.2.tgz", + "integrity": "sha512-JONRbXbTXc9WQE2mAZd1p0Z3DZ/6vaQIkgYMSTP3KjRCyd7rCZCcfhCyX+YjwcKxcZ82UrxbRD358bpExNgrjw==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.2" + } + }, + "clsx": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.0.tgz", + "integrity": "sha512-3avwM37fSK5oP6M5rQ9CNe99lwxhXDOeSWVPAOYF6OazUTgZCMb0yWlJpmdD74REy1gkEaFiub2ULv4fq9GUhA==", + "dev": true + } + } + }, + "@devtools-ds/object-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@devtools-ds/object-parser/-/object-parser-1.2.0.tgz", + "integrity": "sha512-SjGGyiFFY8dtUpiWXAvRSzRT+hE11EAAysrq2PsC/GVLf2ZLyT2nHlQO5kDStywyTz+fjw7S7pyDRj1HG9YTTA==", + "dev": true, + "requires": { + "@babel/runtime": "~7.5.4" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", + "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.2" + } + } + } + }, + "@devtools-ds/themes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@devtools-ds/themes/-/themes-1.2.0.tgz", + "integrity": "sha512-LimEITorE6yWZWWuMc6OiBfLQgPrQqWbyMEmfRUDPa3PHXoAY4SpDxczfg31fgyRDUNWnZhjaJH5bBbu8VEbIw==", + "dev": true, + "requires": { + "@babel/runtime": "~7.5.4", + "@design-systems/utils": "2.12.0", + "clsx": "1.1.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", + "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.2" + } + }, + "clsx": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.0.tgz", + "integrity": "sha512-3avwM37fSK5oP6M5rQ9CNe99lwxhXDOeSWVPAOYF6OazUTgZCMb0yWlJpmdD74REy1gkEaFiub2ULv4fq9GUhA==", + "dev": true + } + } + }, + "@devtools-ds/tree": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@devtools-ds/tree/-/tree-1.2.0.tgz", + "integrity": "sha512-hC4g4ocuo2eg7jsnzKdauxH0sDQiPW3KSM2+uK3kRgcmr9PzpBD5Kob+Y/WFSVKswFleftOGKL4BQLuRv0sPxA==", + "dev": true, + "requires": { + "@babel/runtime": "7.7.2", + "@devtools-ds/themes": "^1.2.0", + "clsx": "1.1.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.7.2.tgz", + "integrity": "sha512-JONRbXbTXc9WQE2mAZd1p0Z3DZ/6vaQIkgYMSTP3KjRCyd7rCZCcfhCyX+YjwcKxcZ82UrxbRD358bpExNgrjw==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.2" + } + }, + "clsx": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.0.tgz", + "integrity": "sha512-3avwM37fSK5oP6M5rQ9CNe99lwxhXDOeSWVPAOYF6OazUTgZCMb0yWlJpmdD74REy1gkEaFiub2ULv4fq9GUhA==", + "dev": true + } + } + }, + "@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true + }, + "@emotion/babel-plugin": { + "version": "11.10.5", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.5.tgz", + "integrity": "sha512-xE7/hyLHJac7D2Ve9dKroBBZqBT7WuPQmWcq7HSGb84sUuP4mlOWoB8dvVfD9yk5DHkU1m6RW7xSoDtnQHNQeA==", + "requires": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/plugin-syntax-jsx": "^7.17.12", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.0", + "@emotion/memoize": "^0.8.0", + "@emotion/serialize": "^1.1.1", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.1.3" + } + }, + "@emotion/cache": { + "version": "11.10.5", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.5.tgz", + "integrity": "sha512-dGYHWyzTdmK+f2+EnIGBpkz1lKc4Zbj2KHd4cX3Wi8/OWr5pKslNjc3yABKH4adRGCvSX4VDC0i04mrrq0aiRA==", + "requires": { + "@emotion/memoize": "^0.8.0", + "@emotion/sheet": "^1.2.1", + "@emotion/utils": "^1.2.0", + "@emotion/weak-memoize": "^0.3.0", + "stylis": "4.1.3" + } + }, + "@emotion/hash": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.0.tgz", + "integrity": "sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==" + }, + "@emotion/is-prop-valid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz", + "integrity": "sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==", + "requires": { + "@emotion/memoize": "^0.8.0" + } + }, + "@emotion/memoize": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.0.tgz", + "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==" + }, + "@emotion/react": { + "version": "11.10.5", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.5.tgz", + "integrity": "sha512-TZs6235tCJ/7iF6/rvTaOH4oxQg2gMAcdHemjwLKIjKz4rRuYe1HJ2TQJKnAcRAfOUDdU8XoDadCe1rl72iv8A==", + "requires": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.10.5", + "@emotion/cache": "^11.10.5", + "@emotion/serialize": "^1.1.1", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@emotion/utils": "^1.2.0", + "@emotion/weak-memoize": "^0.3.0", + "hoist-non-react-statics": "^3.3.1" + } + }, + "@emotion/serialize": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.1.tgz", + "integrity": "sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA==", + "requires": { + "@emotion/hash": "^0.9.0", + "@emotion/memoize": "^0.8.0", + "@emotion/unitless": "^0.8.0", + "@emotion/utils": "^1.2.0", + "csstype": "^3.0.2" + } + }, + "@emotion/server": { + "version": "11.10.0", + "resolved": "https://registry.npmjs.org/@emotion/server/-/server-11.10.0.tgz", + "integrity": "sha512-MTvJ21JPo9aS02GdjFW4nhdwOi2tNNpMmAM/YED0pkxzjDNi5WbiTwXqaCnvLc2Lr8NFtjhT0az1vTJyLIHYcw==", + "requires": { + "@emotion/utils": "^1.2.0", + "html-tokenize": "^2.0.0", + "multipipe": "^1.0.2", + "through": "^2.3.8" + } + }, + "@emotion/sheet": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.1.tgz", + "integrity": "sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA==" + }, + "@emotion/styled": { + "version": "11.10.5", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.10.5.tgz", + "integrity": "sha512-8EP6dD7dMkdku2foLoruPCNkRevzdcBaY6q0l0OsbyJK+x8D9HWjX27ARiSIKNF634hY9Zdoedh8bJCiva8yZw==", + "requires": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.10.5", + "@emotion/is-prop-valid": "^1.2.0", + "@emotion/serialize": "^1.1.1", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@emotion/utils": "^1.2.0" + } + }, + "@emotion/unitless": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", + "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" + }, + "@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz", + "integrity": "sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==" + }, + "@emotion/utils": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz", + "integrity": "sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==" + }, + "@emotion/weak-memoize": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz", + "integrity": "sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==" + }, + "@eslint/eslintrc": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + } + }, + "@floating-ui/core": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.0.1.tgz", + "integrity": "sha512-bO37brCPfteXQfFY0DyNDGB3+IMe4j150KFQcgJ5aBP295p9nBGeHEs/p0czrRbtlHq4Px/yoPXO/+dOCcF4uA==" + }, + "@floating-ui/dom": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.0.4.tgz", + "integrity": "sha512-maYJRv+sAXTy4K9mzdv0JPyNW5YPVHrqtY90tEdI6XNpuLOP26Ci2pfwPsKBA/Wh4Z3FX5sUrtUFTdMYj9v+ug==", + "requires": { + "@floating-ui/core": "^1.0.1" + } + }, + "@floating-ui/react-dom": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-1.0.0.tgz", + "integrity": "sha512-uiOalFKPG937UCLm42RxjESTWUVpbbatvlphQAU6bsv+ence6IoVG8JOUZcy8eW81NkU+Idiwvx10WFLmR4MIg==", + "requires": { + "@floating-ui/dom": "^1.0.0" + } + }, + "@floating-ui/react-dom-interactions": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom-interactions/-/react-dom-interactions-0.10.3.tgz", + "integrity": "sha512-UEHqdnzyoiWNU5az/tAljr9iXFzN18DcvpMqW+/cXz4FEhDEB1ogLtWldOWCujLerPBnSRocADALafelOReMpw==", + "requires": { + "@floating-ui/react-dom": "^1.0.0", + "aria-hidden": "^1.1.3" + } + }, + "@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "dev": true + }, + "@humanwhocodes/config-array": { + "version": "0.10.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz", + "integrity": "sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/gitignore-to-minimatch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", + "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "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" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^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" + } + }, + "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" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, + "@jest/transform": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", + "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^26.6.2", + "babel-plugin-istanbul": "^6.0.0", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-util": "^26.6.2", + "micromatch": "^4.0.2", + "pirates": "^4.0.1", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "dependencies": { + "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 + } + } + }, + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "@mantine/core": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@mantine/core/-/core-5.7.2.tgz", + "integrity": "sha512-cDDvlYhDCzREfIZ33CRLQpXlv+UXRb4VBZWbfYxWXTRPV6gKNGXwlVmXcdDUJCcjRWLh9Wc4erWT8gdTAbvzsQ==", + "requires": { + "@floating-ui/react-dom-interactions": "^0.10.1", + "@mantine/styles": "5.7.2", + "@mantine/utils": "5.7.2", + "@radix-ui/react-scroll-area": "1.0.0", + "react-textarea-autosize": "8.3.4" + } + }, + "@mantine/hooks": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-5.7.2.tgz", + "integrity": "sha512-g+fxcnQwEeVM/5h+SAX/rDNL2s1652DGbP4xxfNg6yFqqhQzmtxQN7xsmkZ+ffx8wKhbsP5z13x6WZoxuJQh9Q==" + }, + "@mantine/next": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@mantine/next/-/next-5.7.2.tgz", + "integrity": "sha512-rcGmr2u7SwG+/Zw/eZPmr/jloiHdeW+rW66q+MtUCoVdMD4ik9fXrOFRcIhDmeSFmE6aQ4hPFwXdSY3AdEYGQg==", + "requires": { + "@mantine/ssr": "5.7.2", + "@mantine/styles": "5.7.2" + } + }, + "@mantine/nprogress": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@mantine/nprogress/-/nprogress-5.7.2.tgz", + "integrity": "sha512-PdVB8PImiz3TawFyNRgIrD/7t2pMfxmB6d+JPfs5+UZcG0nbATF17wvop+YsjsQ92LmEMby5sYIgH7qEhze1Sw==", + "requires": { + "@mantine/utils": "5.7.2" + } + }, + "@mantine/ssr": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@mantine/ssr/-/ssr-5.7.2.tgz", + "integrity": "sha512-2DB5Df6eR4C9/V7lpmwQE8jVkSHSJBTqkZxjsYa1HsKeX4cNFM0SbRsNYk1bQHSq377DXh6PkVMqTzSDqGcFgw==", + "requires": { + "@mantine/styles": "5.7.2", + "html-react-parser": "1.4.12" + } + }, + "@mantine/styles": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@mantine/styles/-/styles-5.7.2.tgz", + "integrity": "sha512-z5Mxf6Zp7lXzfIM77XkZ68Wp62lDSMJwEMoKm0Kz5tRGV4oMQwirbZf4ZJznZKK3HkaT7ct1ScxnCouEWzlKUg==", + "requires": { + "clsx": "1.1.1", + "csstype": "3.0.9" + }, + "dependencies": { + "csstype": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.9.tgz", + "integrity": "sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw==" + } + } + }, + "@mantine/utils": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@mantine/utils/-/utils-5.7.2.tgz", + "integrity": "sha512-LE/ckEX+d1f5GOP1ARNEldUYybOp3Tualx5IYgeV06oyBOaeJaXs9Tco2NTM6j+opZwUbNuYEUmtp4bkArhpOg==" + }, + "@mdx-js/mdx": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", + "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", + "dev": true, + "requires": { + "@babel/core": "7.12.9", + "@babel/plugin-syntax-jsx": "7.12.1", + "@babel/plugin-syntax-object-rest-spread": "7.8.3", + "@mdx-js/util": "1.6.22", + "babel-plugin-apply-mdx-type-prop": "1.6.22", + "babel-plugin-extract-import-names": "1.6.22", + "camelcase-css": "2.0.1", + "detab": "2.0.4", + "hast-util-raw": "6.0.1", + "lodash.uniq": "4.5.0", + "mdast-util-to-hast": "10.0.1", + "remark-footnotes": "2.0.0", + "remark-mdx": "1.6.22", + "remark-parse": "8.0.3", + "remark-squeeze-paragraphs": "4.0.0", + "style-to-object": "0.3.0", + "unified": "9.2.0", + "unist-builder": "2.0.3", + "unist-util-visit": "2.0.3" + }, + "dependencies": { + "@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "@mdx-js/react": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", + "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", + "dev": true + }, + "@mdx-js/util": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", + "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==", + "dev": true + }, + "@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", + "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "dev": true, + "requires": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + }, + "dependencies": { + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==", + "dev": true + } + } + }, + "@next/env": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/env/-/env-12.3.3.tgz", + "integrity": "sha512-H2pKuOasV9RgvVaWosB2rGSNeQShQpiDaF4EEjLyagIc3HwqdOw2/VAG/8Lq+adOwPv2P73O1hulTNad3k5MDw==" + }, + "@next/eslint-plugin-next": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.0.3.tgz", + "integrity": "sha512-slmTAHNKDyc7jhx4VF8lFbmOPWJ3PShtUUWpb6x9+ga59CyOxgP6AdcDhxfapnWYACKe/TwYiaveufu7LqXgZg==", + "dev": true, + "requires": { + "glob": "7.1.7" + } + }, + "@next/swc-android-arm-eabi": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.3.3.tgz", + "integrity": "sha512-5O/ZIX6hlIRGMy1R2f/8WiCZ4Hp4WTC0FcTuz8ycQ28j/mzDnmzjVoayVVr+ZmfEKQayFrRu+vxHjFyY0JGQlQ==", + "optional": true + }, + "@next/swc-android-arm64": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.3.3.tgz", + "integrity": "sha512-2QWreRmlxYRDtnLYn+BI8oukHwcP7W0zGIY5R2mEXRjI4ARqCLdu8RmcT9Vemw7RfeAVKA/4cv/9PY0pCcQpNA==", + "optional": true + }, + "@next/swc-darwin-arm64": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.3.3.tgz", + "integrity": "sha512-GtZdDLerM+VToCMFp+W+WhnT6sxHePQH4xZZiYD/Y8KFiwHbDRcJr2FPG0bAJnGNiSvv/QQnBq74wjZ9+7vhcQ==", + "optional": true + }, + "@next/swc-darwin-x64": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.3.3.tgz", + "integrity": "sha512-gRYvTKrRYynjFQUDJ+upHMcBiNz0ii0m7zGgmUTlTSmrBWqVSzx79EHYT7Nn4GWHM+a/W+2VXfu+lqHcJeQ9gQ==", + "optional": true + }, + "@next/swc-freebsd-x64": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.3.3.tgz", + "integrity": "sha512-r+GLATzCjjQI82bgrIPXWEYBwZonSO64OThk5wU6HduZlDYTEDxZsFNoNoesCDWCgRrgg+OXj7WLNy1WlvfX7w==", + "optional": true + }, + "@next/swc-linux-arm-gnueabihf": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.3.3.tgz", + "integrity": "sha512-juvRj1QX9jmQScL4nV0rROtYUFgWP76zfdn1fdfZ2BhvwUugIAq8x+jLVGlnXKUhDrP9+RrAufqXjjVkK+uBxA==", + "optional": true + }, + "@next/swc-linux-arm64-gnu": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.3.3.tgz", + "integrity": "sha512-hzinybStPB+SzS68hR5rzOngOH7Yd/jFuWGeg9qS5WifYXHpqwGH2BQeKpjVV0iJuyO9r309JKrRWMrbfhnuBA==", + "optional": true + }, + "@next/swc-linux-arm64-musl": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.3.3.tgz", + "integrity": "sha512-oyfQYljCwf+9zUu1YkTZbRbyxmcHzvJPMGOxC3kJOReh3kCUoGcmvAxUPMtFD6FSYjJ+eaog4+2IFHtYuAw/bQ==", + "optional": true + }, + "@next/swc-linux-x64-gnu": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.3.3.tgz", + "integrity": "sha512-epv4FMazj/XG70KTTnrZ0H1VtL6DeWOvyHLHYy7f5PdgDpBXpDTFjVqhP8NFNH8HmaDDdeL1NvQD07AXhyvUKA==", + "optional": true + }, + "@next/swc-linux-x64-musl": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.3.3.tgz", + "integrity": "sha512-bG5QODFy59XnSFTiPyIAt+rbPdphtvQMibtOVvyjwIwsBUw7swJ6k+6PSPVYEYpi6SHzi3qYBsro39ayGJKQJg==", + "optional": true + }, + "@next/swc-win32-arm64-msvc": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.3.3.tgz", + "integrity": "sha512-FbnT3reJ3MbTJ5W0hvlCCGGVDSpburzT5XGC9ljBJ4kr+85iNTLjv7+vrPeDdwHEqtGmdZgnabkLVCI4yFyCag==", + "optional": true + }, + "@next/swc-win32-ia32-msvc": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.3.3.tgz", + "integrity": "sha512-M/fKZC2tMGWA6eTsIniNEBpx2prdR8lIxvSO3gv5P6ymZOGVWCvEMksnTkPAjHnU6d8r8eCiuGKm3UNo7zCTpQ==", + "optional": true + }, + "@next/swc-win32-x64-msvc": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.3.3.tgz", + "integrity": "sha512-Ku9mfGwmNtk44o4B/jEWUxBAT4tJ3S7QbBMLJdL1GmtRZ05LGL36OqWjLvBPr8dFiHOQQbYoAmYfQw7zeGypYA==", + "optional": true + }, + "@nicolo-ribaudo/chokidar-2": { + "version": "2.1.8-no-fsevents.3", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", + "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==", + "dev": true, + "optional": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "dev": true, + "requires": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, + "@pmmmwh/react-refresh-webpack-plugin": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.9.tgz", + "integrity": "sha512-7QV4cqUwhkDIHpMAZ9mestSJ2DMIotVTbOUwbiudhjCRTAWWKIaBecELiEM2LT3AHFeOAaHIcFu4dbXjX+9GBA==", + "dev": true, + "requires": { + "ansi-html-community": "^0.0.8", + "common-path-prefix": "^3.0.0", + "core-js-pure": "^3.23.3", + "error-stack-parser": "^2.0.6", + "find-up": "^5.0.0", + "html-entities": "^2.1.0", + "loader-utils": "^2.0.3", + "schema-utils": "^3.0.0", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true + } + } + }, + "@radix-ui/number": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.0.0.tgz", + "integrity": "sha512-Ofwh/1HX69ZfJRiRBMTy7rgjAzHmwe4kW9C9Y99HTRUcYLUuVT0KESFj15rPjRgKJs20GPq8Bm5aEDJ8DuA3vA==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.0.tgz", + "integrity": "sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-compose-refs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.0.tgz", + "integrity": "sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-context": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.0.tgz", + "integrity": "sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-direction": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.0.tgz", + "integrity": "sha512-2HV05lGUgYcA6xgLQ4BKPDmtL+QbIZYH5fCOTAOOcJ5O0QbWS3i9lKaurLzliYUDhORI2Qr3pyjhJh44lKA3rQ==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-presence": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.0.tgz", + "integrity": "sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-use-layout-effect": "1.0.0" + } + }, + "@radix-ui/react-primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.0.tgz", + "integrity": "sha512-EyXe6mnRlHZ8b6f4ilTDrXmkLShICIuOTTj0GX4w1rp+wSxf3+TD05u1UOITC8VsJ2a9nwHvdXtOXEOl0Cw/zQ==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.0" + } + }, + "@radix-ui/react-scroll-area": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.0.0.tgz", + "integrity": "sha512-3SNFukAjS5remgtpAVR9m3Zgo23ZojBZ8V3TCyR3A+56x2mtVqKlPV4+e8rScZUFMuvtbjIdQCmsJBFBazKZig==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/number": "1.0.0", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-direction": "1.0.0", + "@radix-ui/react-presence": "1.0.0", + "@radix-ui/react-primitive": "1.0.0", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-layout-effect": "1.0.0" + } + }, + "@radix-ui/react-slot": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.0.tgz", + "integrity": "sha512-3mrKauI/tWXo1Ll+gN5dHcxDPdm/Df1ufcDLCecn+pnCIVcdWE7CujXo8QaXOWRJyZyQWWbpB8eFwHzWXlv5mQ==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0" + } + }, + "@radix-ui/react-use-callback-ref": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.0.tgz", + "integrity": "sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-use-layout-effect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.0.tgz", + "integrity": "sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@rushstack/eslint-patch": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", + "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==", + "dev": true + }, + "@storybook/addon-actions": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-6.5.13.tgz", + "integrity": "sha512-3Tji0gIy95havhTpSc6CsFl5lNxGn4O5Y1U9fyji+GRkKqDFOrvVLYAHPtLOpYdEI5tF0bDo+akiqfDouY8+eA==", + "dev": true, + "requires": { + "@storybook/addons": "6.5.13", + "@storybook/api": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/components": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/theming": "6.5.13", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "polished": "^4.2.2", + "prop-types": "^15.7.2", + "react-inspector": "^5.1.0", + "regenerator-runtime": "^0.13.7", + "telejson": "^6.0.8", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "uuid-browser": "^3.1.0" + } + }, + "@storybook/addon-backgrounds": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-6.5.13.tgz", + "integrity": "sha512-b4JX7JMY7e50y1l6g71D+2XWV3GO0TO2z1ta8J6W4OQt8f44V7sSkRQaJUzXdLjQMrA+Anojuy1ZwPjVeLC6vg==", + "dev": true, + "requires": { + "@storybook/addons": "6.5.13", + "@storybook/api": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/components": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/theming": "6.5.13", + "core-js": "^3.8.2", + "global": "^4.4.0", + "memoizerific": "^1.11.3", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/addon-controls": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-6.5.13.tgz", + "integrity": "sha512-lYq3uf2mlVevm0bi6ueL3H6TpUMRYW9s/pTNTVJT225l27kLdFR9wEKxAkCBrlKaTgDLJmzzDRsJE3NLZlR/5Q==", + "dev": true, + "requires": { + "@storybook/addons": "6.5.13", + "@storybook/api": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/components": "6.5.13", + "@storybook/core-common": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/node-logger": "6.5.13", + "@storybook/store": "6.5.13", + "@storybook/theming": "6.5.13", + "core-js": "^3.8.2", + "lodash": "^4.17.21", + "ts-dedent": "^2.0.0" + } + }, + "@storybook/addon-docs": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-6.5.13.tgz", + "integrity": "sha512-RG/NjsheD9FixZ789RJlNyNccaR2Cuy7CtAwph4oUNi3aDFjtOI8Oe9L+FOT7qtVnZLw/YMjF+pZxoDqJNKLPw==", + "dev": true, + "requires": { + "@babel/plugin-transform-react-jsx": "^7.12.12", + "@babel/preset-env": "^7.12.11", + "@jest/transform": "^26.6.2", + "@mdx-js/react": "^1.6.22", + "@storybook/addons": "6.5.13", + "@storybook/api": "6.5.13", + "@storybook/components": "6.5.13", + "@storybook/core-common": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/docs-tools": "6.5.13", + "@storybook/mdx1-csf": "^0.0.1", + "@storybook/node-logger": "6.5.13", + "@storybook/postinstall": "6.5.13", + "@storybook/preview-web": "6.5.13", + "@storybook/source-loader": "6.5.13", + "@storybook/store": "6.5.13", + "@storybook/theming": "6.5.13", + "babel-loader": "^8.0.0", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "regenerator-runtime": "^0.13.7", + "remark-external-links": "^8.0.0", + "remark-slug": "^6.0.0", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/addon-essentials": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-6.5.13.tgz", + "integrity": "sha512-G9FVAWV7ixjVLWeLgIX+VT90tcAk6yQxfZQegfg5ucRilGysJCDaNnoab4xuuvm1R40TfFhba3iAGZtQYsddmw==", + "dev": true, + "requires": { + "@storybook/addon-actions": "6.5.13", + "@storybook/addon-backgrounds": "6.5.13", + "@storybook/addon-controls": "6.5.13", + "@storybook/addon-docs": "6.5.13", + "@storybook/addon-measure": "6.5.13", + "@storybook/addon-outline": "6.5.13", + "@storybook/addon-toolbars": "6.5.13", + "@storybook/addon-viewport": "6.5.13", + "@storybook/addons": "6.5.13", + "@storybook/api": "6.5.13", + "@storybook/core-common": "6.5.13", + "@storybook/node-logger": "6.5.13", + "core-js": "^3.8.2", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0" + } + }, + "@storybook/addon-interactions": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-6.5.13.tgz", + "integrity": "sha512-FPOeS7AT/Odxl6z7E0qYI4F0Sh06jFRttRvSgpKC5P2lYUWUstLP5TC8N+F5ijBeLfIdIsf5zBK7l5Y/cluueg==", + "dev": true, + "requires": { + "@devtools-ds/object-inspector": "^1.1.2", + "@storybook/addons": "6.5.13", + "@storybook/api": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/components": "6.5.13", + "@storybook/core-common": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/instrumenter": "6.5.13", + "@storybook/theming": "6.5.13", + "core-js": "^3.8.2", + "global": "^4.4.0", + "jest-mock": "^27.0.6", + "polished": "^4.2.2", + "ts-dedent": "^2.2.0" + } + }, + "@storybook/addon-links": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-6.5.13.tgz", + "integrity": "sha512-K/LYYu9R/Xoah5h9MNh4mSHOic3q5csqjderLqr2YW/KPYiuNubgvzEbAAbzI5xq5JrtAZqnINrZUv2A4CyYbQ==", + "dev": true, + "requires": { + "@storybook/addons": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/router": "6.5.13", + "@types/qs": "^6.9.5", + "core-js": "^3.8.2", + "global": "^4.4.0", + "prop-types": "^15.7.2", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0" + } + }, + "@storybook/addon-measure": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-6.5.13.tgz", + "integrity": "sha512-pi5RFB9YTnESRFtYHAVRUrgEI5to0TFc4KndtwcCKt1fMJ8OFjXQeznEfdj95PFeUvW5TNUwjL38vK4LhicB+g==", + "dev": true, + "requires": { + "@storybook/addons": "6.5.13", + "@storybook/api": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/components": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "core-js": "^3.8.2", + "global": "^4.4.0" + } + }, + "@storybook/addon-outline": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-6.5.13.tgz", + "integrity": "sha512-8d8taPheO/tryflzXbj2QRuxHOIS8CtzRzcaglCcioqHEMhOIDOx9BdXKdheq54gdk/UN94HdGJUoVxYyXwZ4Q==", + "dev": true, + "requires": { + "@storybook/addons": "6.5.13", + "@storybook/api": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/components": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "core-js": "^3.8.2", + "global": "^4.4.0", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0" + } + }, + "@storybook/addon-toolbars": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-6.5.13.tgz", + "integrity": "sha512-Qgr4wKRSP+gY1VaN7PYT4TM1um7KY341X3GHTglXLFHd8nDsCweawfV2shaX3WxCfZmVro8g4G+Oest30kLLCw==", + "dev": true, + "requires": { + "@storybook/addons": "6.5.13", + "@storybook/api": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/components": "6.5.13", + "@storybook/theming": "6.5.13", + "core-js": "^3.8.2", + "regenerator-runtime": "^0.13.7" + } + }, + "@storybook/addon-viewport": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-6.5.13.tgz", + "integrity": "sha512-KSfeuCSIjncwWGnUu6cZBx8WNqYvm5gHyFvkSPKEu0+MJtgncbUy7pl53lrEEr6QmIq0GRXvS3A0XzV8RCnrSA==", + "dev": true, + "requires": { + "@storybook/addons": "6.5.13", + "@storybook/api": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/components": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/theming": "6.5.13", + "core-js": "^3.8.2", + "global": "^4.4.0", + "memoizerific": "^1.11.3", + "prop-types": "^15.7.2", + "regenerator-runtime": "^0.13.7" + } + }, + "@storybook/addons": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-6.5.13.tgz", + "integrity": "sha512-18CqzNnrGMfeZtiKz+R/3rHtSNnfNwz6y6prIQIbWseK16jY8ELTfIFGviwO5V2OqpbHDQi5+xQQ63QAIb89YA==", + "dev": true, + "requires": { + "@storybook/api": "6.5.13", + "@storybook/channels": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/router": "6.5.13", + "@storybook/theming": "6.5.13", + "@types/webpack-env": "^1.16.0", + "core-js": "^3.8.2", + "global": "^4.4.0", + "regenerator-runtime": "^0.13.7" + } + }, + "@storybook/api": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/api/-/api-6.5.13.tgz", + "integrity": "sha512-xVSmB7/IuFd6G7eiJjbI2MuS7SZunoUM6d+YCWpjiehfMeX47MXt1gZtOwFrgJC1ShZlefXFahq/dvxwtmWs+w==", + "dev": true, + "requires": { + "@storybook/channels": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/router": "6.5.13", + "@storybook/semver": "^7.3.2", + "@storybook/theming": "6.5.13", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "regenerator-runtime": "^0.13.7", + "store2": "^2.12.0", + "telejson": "^6.0.8", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/builder-webpack4": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/builder-webpack4/-/builder-webpack4-6.5.13.tgz", + "integrity": "sha512-Agqy3IKPv3Nl8QqdS7PjtqLp+c0BD8+/3A2ki/YfKqVz+F+J34EpbZlh3uU053avm1EoNQHSmhZok3ZlWH6O7A==", + "dev": true, + "requires": { + "@babel/core": "^7.12.10", + "@storybook/addons": "6.5.13", + "@storybook/api": "6.5.13", + "@storybook/channel-postmessage": "6.5.13", + "@storybook/channels": "6.5.13", + "@storybook/client-api": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/components": "6.5.13", + "@storybook/core-common": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/node-logger": "6.5.13", + "@storybook/preview-web": "6.5.13", + "@storybook/router": "6.5.13", + "@storybook/semver": "^7.3.2", + "@storybook/store": "6.5.13", + "@storybook/theming": "6.5.13", + "@storybook/ui": "6.5.13", + "@types/node": "^14.0.10 || ^16.0.0", + "@types/webpack": "^4.41.26", + "autoprefixer": "^9.8.6", + "babel-loader": "^8.0.0", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "core-js": "^3.8.2", + "css-loader": "^3.6.0", + "file-loader": "^6.2.0", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^4.1.6", + "glob": "^7.1.6", + "glob-promise": "^3.4.0", + "global": "^4.4.0", + "html-webpack-plugin": "^4.0.0", + "pnp-webpack-plugin": "1.6.4", + "postcss": "^7.0.36", + "postcss-flexbugs-fixes": "^4.2.1", + "postcss-loader": "^4.2.0", + "raw-loader": "^4.0.2", + "stable": "^0.1.8", + "style-loader": "^1.3.0", + "terser-webpack-plugin": "^4.2.3", + "ts-dedent": "^2.0.0", + "url-loader": "^4.1.1", + "util-deprecate": "^1.0.2", + "webpack": "4", + "webpack-dev-middleware": "^3.7.3", + "webpack-filter-warnings-plugin": "^1.2.1", + "webpack-hot-middleware": "^2.25.1", + "webpack-virtual-modules": "^0.2.2" + }, + "dependencies": { + "@types/html-minifier-terser": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", + "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==", + "dev": true + }, + "@types/node": { + "version": "16.18.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", + "dev": true + }, + "@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/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-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-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" + } + }, + "acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "clean-css": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", + "dev": true, + "requires": { + "source-map": "~0.6.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==", + "dev": true, + "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true + }, + "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": { + "loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "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" + } + } + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "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" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "fork-ts-checker-webpack-plugin": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz", + "integrity": "sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.5.5", + "chalk": "^2.4.1", + "micromatch": "^3.1.10", + "minimatch": "^3.0.4", + "semver": "^5.6.0", + "tapable": "^1.0.0", + "worker-rpc": "^0.1.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "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": { + "terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "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==", + "dev": true + } + } + } + } + }, + "html-webpack-plugin": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz", + "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==", + "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.20", + "pretty-error": "^2.1.1", + "tapable": "^1.1.3", + "util.promisify": "1.0.0" + }, + "dependencies": { + "loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } + } + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "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" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "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 + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "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" + } + } + } + }, + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "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" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "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.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", + "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", + "dev": true, + "requires": { + "icss-utils": "^4.1.1", + "postcss": "^7.0.32", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.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" + } + }, + "pretty-error": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", + "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", + "dev": true, + "requires": { + "lodash": "^4.17.20", + "renderkid": "^2.0.4" + } + }, + "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" + } + }, + "renderkid": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", + "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", + "dev": true, + "requires": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^3.0.1" + } + }, + "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" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "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 + }, + "ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "style-loader": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.3.0.tgz", + "integrity": "sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^2.7.0" + }, + "dependencies": { + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "terser-webpack-plugin": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz", + "integrity": "sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==", + "dev": true, + "requires": { + "cacache": "^15.0.5", + "find-cache-dir": "^3.3.1", + "jest-worker": "^26.5.0", + "p-limit": "^3.0.2", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", + "source-map": "^0.6.1", + "terser": "^5.3.4", + "webpack-sources": "^1.4.3" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "dev": true, + "requires": { + "chokidar": "^3.4.1", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.1" + } + }, + "webpack": { + "version": "4.46.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", + "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "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.5.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": { + "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" + } + }, + "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==", + "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==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "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" + } + }, + "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==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.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" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "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 + }, + "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" + } + }, + "terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + } + }, + "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" + } + } + } + }, + "webpack-dev-middleware": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", + "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", + "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-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" + } + }, + "webpack-virtual-modules": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.2.2.tgz", + "integrity": "sha512-kDUmfm3BZrei0y+1NTHJInejzxfhtU8eDj2M7OKb2IWrPFAeO1SOH2KuQ68MSZu9IGEHcxbkKKR1v18FrUSOmA==", + "dev": true, + "requires": { + "debug": "^3.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "@storybook/builder-webpack5": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-6.5.13.tgz", + "integrity": "sha512-juNH31ZljWbaoBD6Yx2/iQ4G66UBkwq+cFUqLzgVROKMXmYaT0AJYbfyY8CgGqcXkc+sqNA63yWaLWd8/K9vTg==", + "dev": true, + "requires": { + "@babel/core": "^7.12.10", + "@storybook/addons": "6.5.13", + "@storybook/api": "6.5.13", + "@storybook/channel-postmessage": "6.5.13", + "@storybook/channels": "6.5.13", + "@storybook/client-api": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/components": "6.5.13", + "@storybook/core-common": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/node-logger": "6.5.13", + "@storybook/preview-web": "6.5.13", + "@storybook/router": "6.5.13", + "@storybook/semver": "^7.3.2", + "@storybook/store": "6.5.13", + "@storybook/theming": "6.5.13", + "@types/node": "^14.0.10 || ^16.0.0", + "babel-loader": "^8.0.0", + "babel-plugin-named-exports-order": "^0.0.2", + "browser-assert": "^1.2.1", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "core-js": "^3.8.2", + "css-loader": "^5.0.1", + "fork-ts-checker-webpack-plugin": "^6.0.4", + "glob": "^7.1.6", + "glob-promise": "^3.4.0", + "html-webpack-plugin": "^5.0.0", + "path-browserify": "^1.0.1", + "process": "^0.11.10", + "stable": "^0.1.8", + "style-loader": "^2.0.0", + "terser-webpack-plugin": "^5.0.3", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "webpack": "^5.9.0", + "webpack-dev-middleware": "^4.1.0", + "webpack-hot-middleware": "^2.25.1", + "webpack-virtual-modules": "^0.4.1" + }, + "dependencies": { + "@types/node": { + "version": "16.18.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", + "dev": true + } + } + }, + "@storybook/channel-postmessage": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-6.5.13.tgz", + "integrity": "sha512-R79MBs0mQ7TV8M/a6x/SiTRyvZBidDfMEEthG7Cyo9p35JYiKOhj2535zhW4qlVMESBu95pwKYBibTjASoStPw==", + "dev": true, + "requires": { + "@storybook/channels": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/core-events": "6.5.13", + "core-js": "^3.8.2", + "global": "^4.4.0", + "qs": "^6.10.0", + "telejson": "^6.0.8" + } + }, + "@storybook/channel-websocket": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/channel-websocket/-/channel-websocket-6.5.13.tgz", + "integrity": "sha512-kwh667H+tzCiNvs92GNwYOwVXdj9uHZyieRAN5rJtTBJ7XgLzGkpTEU50mWlbc0nDKhgE0qYvzyr5H393Iy5ug==", + "dev": true, + "requires": { + "@storybook/channels": "6.5.13", + "@storybook/client-logger": "6.5.13", + "core-js": "^3.8.2", + "global": "^4.4.0", + "telejson": "^6.0.8" + } + }, + "@storybook/channels": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.5.13.tgz", + "integrity": "sha512-sGYSilE30bz0jG+HdHnkv0B4XkAv2hP+KRZr4xmnv+MOOQpRnZpJ5Z3HVU16s17cj/83NWihKj6BuKcEVzyilg==", + "dev": true, + "requires": { + "core-js": "^3.8.2", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/client-api": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-6.5.13.tgz", + "integrity": "sha512-uH1mAWbidPiuuTdMUVEiuaNOfrYXm+9QLSP1MMYTKULqEOZI5MSOGkEDqRfVWxbYv/iWBOPTQ+OM9TQ6ecYacg==", + "dev": true, + "requires": { + "@storybook/addons": "6.5.13", + "@storybook/channel-postmessage": "6.5.13", + "@storybook/channels": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/store": "6.5.13", + "@types/qs": "^6.9.5", + "@types/webpack-env": "^1.16.0", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "store2": "^2.12.0", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/client-logger": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.5.13.tgz", + "integrity": "sha512-F2SMW3LWFGXLm2ENTwTitrLWJgmMXRf3CWQXdN2EbkNCIBHy5Zcbt+91K4OX8e2e5h9gjGfrdYbyYDYOoUCEfA==", + "dev": true, + "requires": { + "core-js": "^3.8.2", + "global": "^4.4.0" + } + }, + "@storybook/components": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-6.5.13.tgz", + "integrity": "sha512-6Hhx70JK5pGfKCkqMU4yq/BBH+vRTmzj7tZKfPwba+f8VmTMoOr/2ysTQFRtXryiHB6Z15xBYgfq5x2pIwQzLQ==", + "dev": true, + "requires": { + "@storybook/client-logger": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/theming": "6.5.13", + "core-js": "^3.8.2", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/core": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/core/-/core-6.5.13.tgz", + "integrity": "sha512-kw1lCgbsxzUimGww6t5rmuWJmFPe9kGGyzIqvj4RC4BBcEsP40LEu9XhSfvnb8vTOLIULFZeZpdRFfJs4TYbUw==", + "dev": true, + "requires": { + "@storybook/core-client": "6.5.13", + "@storybook/core-server": "6.5.13" + } + }, + "@storybook/core-client": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-6.5.13.tgz", + "integrity": "sha512-YuELbRokTBdqjbx/R4/7O4rou9kvbBIOJjlUkor9hdLLuJ3P0yGianERGNkZFfvcfMBAxU0p52o7QvDldSR3kA==", + "dev": true, + "requires": { + "@storybook/addons": "6.5.13", + "@storybook/channel-postmessage": "6.5.13", + "@storybook/channel-websocket": "6.5.13", + "@storybook/client-api": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/preview-web": "6.5.13", + "@storybook/store": "6.5.13", + "@storybook/ui": "6.5.13", + "airbnb-js-shims": "^2.2.1", + "ansi-to-html": "^0.6.11", + "core-js": "^3.8.2", + "global": "^4.4.0", + "lodash": "^4.17.21", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0", + "unfetch": "^4.2.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/core-common": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-6.5.13.tgz", + "integrity": "sha512-+DVZrRsteE9pw0X5MNffkdBgejQnbnL+UOG3qXkE9xxUamQALnuqS/w1BzpHE9WmOHuf7RWMKflyQEW3OLKAJg==", + "dev": true, + "requires": { + "@babel/core": "^7.12.10", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-decorators": "^7.12.12", + "@babel/plugin-proposal-export-default-from": "^7.12.1", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.7", + "@babel/plugin-proposal-private-methods": "^7.12.1", + "@babel/plugin-proposal-private-property-in-object": "^7.12.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-arrow-functions": "^7.12.1", + "@babel/plugin-transform-block-scoping": "^7.12.12", + "@babel/plugin-transform-classes": "^7.12.1", + "@babel/plugin-transform-destructuring": "^7.12.1", + "@babel/plugin-transform-for-of": "^7.12.1", + "@babel/plugin-transform-parameters": "^7.12.1", + "@babel/plugin-transform-shorthand-properties": "^7.12.1", + "@babel/plugin-transform-spread": "^7.12.1", + "@babel/preset-env": "^7.12.11", + "@babel/preset-react": "^7.12.10", + "@babel/preset-typescript": "^7.12.7", + "@babel/register": "^7.12.1", + "@storybook/node-logger": "6.5.13", + "@storybook/semver": "^7.3.2", + "@types/node": "^14.0.10 || ^16.0.0", + "@types/pretty-hrtime": "^1.0.0", + "babel-loader": "^8.0.0", + "babel-plugin-macros": "^3.0.1", + "babel-plugin-polyfill-corejs3": "^0.1.0", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "express": "^4.17.1", + "file-system-cache": "^1.0.5", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^6.0.4", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "handlebars": "^4.7.7", + "interpret": "^2.2.0", + "json5": "^2.1.3", + "lazy-universal-dotenv": "^3.0.1", + "picomatch": "^2.3.0", + "pkg-dir": "^5.0.0", + "pretty-hrtime": "^1.0.3", + "resolve-from": "^5.0.0", + "slash": "^3.0.0", + "telejson": "^6.0.8", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "webpack": "4" + }, + "dependencies": { + "@babel/helper-define-polyfill-provider": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz", + "integrity": "sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + } + }, + "@types/node": { + "version": "16.18.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", + "dev": true + }, + "@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/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-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-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" + } + }, + "acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz", + "integrity": "sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.1.5", + "core-js-compat": "^3.8.1" + } + }, + "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "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" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "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==", + "dev": true + }, + "enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "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" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.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==", + "dev": true + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true + }, + "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.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } + } + }, + "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" + } + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "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" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "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" + } + }, + "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": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "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" + } + }, + "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.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + } + }, + "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" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "dev": true, + "requires": { + "chokidar": "^3.4.1", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.1" + } + }, + "webpack": { + "version": "4.46.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", + "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "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.5.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" + } + }, + "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" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "@storybook/core-events": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.5.13.tgz", + "integrity": "sha512-kL745tPpRKejzHToA3/CoBNbI+NPRVk186vGxXBmk95OEg0TlwgQExP8BnqEtLlRZMbW08e4+6kilc1M1M4N5w==", + "dev": true, + "requires": { + "core-js": "^3.8.2" + } + }, + "@storybook/core-server": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-6.5.13.tgz", + "integrity": "sha512-vs7tu3kAnFwuINio1p87WyqDNlFyZESmeh9s7vvrZVbe/xS/ElqDscr9DT5seW+jbtxufAaHsx+JUTver1dheQ==", + "dev": true, + "requires": { + "@discoveryjs/json-ext": "^0.5.3", + "@storybook/builder-webpack4": "6.5.13", + "@storybook/core-client": "6.5.13", + "@storybook/core-common": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/csf-tools": "6.5.13", + "@storybook/manager-webpack4": "6.5.13", + "@storybook/node-logger": "6.5.13", + "@storybook/semver": "^7.3.2", + "@storybook/store": "6.5.13", + "@storybook/telemetry": "6.5.13", + "@types/node": "^14.0.10 || ^16.0.0", + "@types/node-fetch": "^2.5.7", + "@types/pretty-hrtime": "^1.0.0", + "@types/webpack": "^4.41.26", + "better-opn": "^2.1.1", + "boxen": "^5.1.2", + "chalk": "^4.1.0", + "cli-table3": "^0.6.1", + "commander": "^6.2.1", + "compression": "^1.7.4", + "core-js": "^3.8.2", + "cpy": "^8.1.2", + "detect-port": "^1.3.0", + "express": "^4.17.1", + "fs-extra": "^9.0.1", + "global": "^4.4.0", + "globby": "^11.0.2", + "ip": "^2.0.0", + "lodash": "^4.17.21", + "node-fetch": "^2.6.7", + "open": "^8.4.0", + "pretty-hrtime": "^1.0.3", + "prompts": "^2.4.0", + "regenerator-runtime": "^0.13.7", + "serve-favicon": "^2.5.0", + "slash": "^3.0.0", + "telejson": "^6.0.8", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "watchpack": "^2.2.0", + "webpack": "4", + "ws": "^8.2.3", + "x-default-browser": "^0.4.0" + }, + "dependencies": { + "@types/node": { + "version": "16.18.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", + "dev": true + }, + "@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/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-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-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" + } + }, + "acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "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" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "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" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.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==", + "dev": true + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "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.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "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" + } + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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 + }, + "ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "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==", + "dev": true + } + } + }, + "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" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "webpack": { + "version": "4.46.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", + "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "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.5.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": { + "watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "dev": true, + "requires": { + "chokidar": "^3.4.1", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.1" + } + } + } + }, + "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" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "@storybook/csf": { + "version": "0.0.2--canary.4566f4d.1", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.2--canary.4566f4d.1.tgz", + "integrity": "sha512-9OVvMVh3t9znYZwb0Svf/YQoxX2gVOeQTGe2bses2yj+a3+OJnCrUF3/hGv6Em7KujtOdL2LL+JnG49oMVGFgQ==", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + }, + "@storybook/csf-tools": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-6.5.13.tgz", + "integrity": "sha512-63Ev+VmBqzwSwfUzbuXOLKBD5dMTK2zBYLQ9anTVw70FuTikwTsGIbPgb098K0vsxRCgxl7KM7NpivHqtZtdjw==", + "dev": true, + "requires": { + "@babel/core": "^7.12.10", + "@babel/generator": "^7.12.11", + "@babel/parser": "^7.12.11", + "@babel/plugin-transform-react-jsx": "^7.12.12", + "@babel/preset-env": "^7.12.11", + "@babel/traverse": "^7.12.11", + "@babel/types": "^7.12.11", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/mdx1-csf": "^0.0.1", + "core-js": "^3.8.2", + "fs-extra": "^9.0.1", + "global": "^4.4.0", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0" + } + }, + "@storybook/docs-tools": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-6.5.13.tgz", + "integrity": "sha512-hB+hk+895ny4SW84j3X5iV55DHs3bCfTOp7cDdcZJdQrlm0wuDb4A6d4ffNC7ZLh9VkUjU6ST4VEV5Bb0Cptow==", + "dev": true, + "requires": { + "@babel/core": "^7.12.10", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/store": "6.5.13", + "core-js": "^3.8.2", + "doctrine": "^3.0.0", + "lodash": "^4.17.21", + "regenerator-runtime": "^0.13.7" + } + }, + "@storybook/instrumenter": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-6.5.13.tgz", + "integrity": "sha512-izRF64BU+gGCP7qE1N3kOVLSv5Xk4M0OWcRmFIXoIS46qNDzmd8hmbkkx3M9wrvw0kcQ97kIyADF+UInbcr/dQ==", + "dev": true, + "requires": { + "@storybook/addons": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/core-events": "6.5.13", + "core-js": "^3.8.2", + "global": "^4.4.0" + } + }, + "@storybook/manager-webpack4": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/manager-webpack4/-/manager-webpack4-6.5.13.tgz", + "integrity": "sha512-pURzS5W3XM0F7bCBWzpl7TRsuy+OXFwLXiWLaexuvo0POZe31Ueo2A1R4rx3MT5Iee8O9mYvG2XTmvK9MlLefQ==", + "dev": true, + "requires": { + "@babel/core": "^7.12.10", + "@babel/plugin-transform-template-literals": "^7.12.1", + "@babel/preset-react": "^7.12.10", + "@storybook/addons": "6.5.13", + "@storybook/core-client": "6.5.13", + "@storybook/core-common": "6.5.13", + "@storybook/node-logger": "6.5.13", + "@storybook/theming": "6.5.13", + "@storybook/ui": "6.5.13", + "@types/node": "^14.0.10 || ^16.0.0", + "@types/webpack": "^4.41.26", + "babel-loader": "^8.0.0", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "css-loader": "^3.6.0", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "find-up": "^5.0.0", + "fs-extra": "^9.0.1", + "html-webpack-plugin": "^4.0.0", + "node-fetch": "^2.6.7", + "pnp-webpack-plugin": "1.6.4", + "read-pkg-up": "^7.0.1", + "regenerator-runtime": "^0.13.7", + "resolve-from": "^5.0.0", + "style-loader": "^1.3.0", + "telejson": "^6.0.8", + "terser-webpack-plugin": "^4.2.3", + "ts-dedent": "^2.0.0", + "url-loader": "^4.1.1", + "util-deprecate": "^1.0.2", + "webpack": "4", + "webpack-dev-middleware": "^3.7.3", + "webpack-virtual-modules": "^0.2.2" + }, + "dependencies": { + "@types/html-minifier-terser": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", + "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==", + "dev": true + }, + "@types/node": { + "version": "16.18.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", + "dev": true + }, + "@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/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-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-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" + } + }, + "acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "clean-css": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", + "dev": true, + "requires": { + "source-map": "~0.6.0" + } + }, + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true + }, + "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": { + "loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "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" + } + } + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + }, + "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" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "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": { + "terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "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==", + "dev": true + } + } + } + } + }, + "html-webpack-plugin": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz", + "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==", + "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.20", + "pretty-error": "^2.1.1", + "tapable": "^1.1.3", + "util.promisify": "1.0.0" + }, + "dependencies": { + "loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } + } + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "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" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "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 + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "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" + } + } + } + }, + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "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" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "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.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", + "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", + "dev": true, + "requires": { + "icss-utils": "^4.1.1", + "postcss": "^7.0.32", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.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" + } + }, + "pretty-error": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", + "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", + "dev": true, + "requires": { + "lodash": "^4.17.20", + "renderkid": "^2.0.4" + } + }, + "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" + } + }, + "renderkid": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", + "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", + "dev": true, + "requires": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^3.0.1" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "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" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "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 + }, + "ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "style-loader": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.3.0.tgz", + "integrity": "sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^2.7.0" + }, + "dependencies": { + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "terser-webpack-plugin": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz", + "integrity": "sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==", + "dev": true, + "requires": { + "cacache": "^15.0.5", + "find-cache-dir": "^3.3.1", + "jest-worker": "^26.5.0", + "p-limit": "^3.0.2", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", + "source-map": "^0.6.1", + "terser": "^5.3.4", + "webpack-sources": "^1.4.3" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "dev": true, + "requires": { + "chokidar": "^3.4.1", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.1" + } + }, + "webpack": { + "version": "4.46.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", + "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "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.5.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": { + "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" + } + }, + "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==", + "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==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "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" + } + }, + "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==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.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" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "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 + }, + "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" + } + }, + "terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + } + }, + "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" + } + } + } + }, + "webpack-dev-middleware": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", + "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", + "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-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" + } + }, + "webpack-virtual-modules": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.2.2.tgz", + "integrity": "sha512-kDUmfm3BZrei0y+1NTHJInejzxfhtU8eDj2M7OKb2IWrPFAeO1SOH2KuQ68MSZu9IGEHcxbkKKR1v18FrUSOmA==", + "dev": true, + "requires": { + "debug": "^3.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "@storybook/manager-webpack5": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/manager-webpack5/-/manager-webpack5-6.5.13.tgz", + "integrity": "sha512-lQEZacSfeRsbqfJE7TVk35Hm1vkr0I2i1pyYqM+4862gRbMh1nJQXbJ5GqZ+Fo/bf0ZfyFZ32jGDIJAFdlpkuQ==", + "dev": true, + "requires": { + "@babel/core": "^7.12.10", + "@babel/plugin-transform-template-literals": "^7.12.1", + "@babel/preset-react": "^7.12.10", + "@storybook/addons": "6.5.13", + "@storybook/core-client": "6.5.13", + "@storybook/core-common": "6.5.13", + "@storybook/node-logger": "6.5.13", + "@storybook/theming": "6.5.13", + "@storybook/ui": "6.5.13", + "@types/node": "^14.0.10 || ^16.0.0", + "babel-loader": "^8.0.0", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "css-loader": "^5.0.1", + "express": "^4.17.1", + "find-up": "^5.0.0", + "fs-extra": "^9.0.1", + "html-webpack-plugin": "^5.0.0", + "node-fetch": "^2.6.7", + "process": "^0.11.10", + "read-pkg-up": "^7.0.1", + "regenerator-runtime": "^0.13.7", + "resolve-from": "^5.0.0", + "style-loader": "^2.0.0", + "telejson": "^6.0.8", + "terser-webpack-plugin": "^5.0.3", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "webpack": "^5.9.0", + "webpack-dev-middleware": "^4.1.0", + "webpack-virtual-modules": "^0.4.1" + }, + "dependencies": { + "@types/node": { + "version": "16.18.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", + "dev": true + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "@storybook/mdx1-csf": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@storybook/mdx1-csf/-/mdx1-csf-0.0.1.tgz", + "integrity": "sha512-4biZIWWzoWlCarMZmTpqcJNgo/RBesYZwGFbQeXiGYsswuvfWARZnW9RE9aUEMZ4XPn7B1N3EKkWcdcWe/K2tg==", + "dev": true, + "requires": { + "@babel/generator": "^7.12.11", + "@babel/parser": "^7.12.11", + "@babel/preset-env": "^7.12.11", + "@babel/types": "^7.12.11", + "@mdx-js/mdx": "^1.6.22", + "@types/lodash": "^4.14.167", + "js-string-escape": "^1.0.1", + "loader-utils": "^2.0.0", + "lodash": "^4.17.21", + "prettier": ">=2.2.1 <=2.3.0", + "ts-dedent": "^2.0.0" + }, + "dependencies": { + "prettier": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.0.tgz", + "integrity": "sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w==", + "dev": true + } + } + }, + "@storybook/node-logger": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-6.5.13.tgz", + "integrity": "sha512-/r5aVZAqZRoy5FyNk/G4pj7yKJd3lJfPbAaOHVROv2IF7PJP/vtRaDkcfh0g2U6zwuDxGIqSn80j+qoEli9m5A==", + "dev": true, + "requires": { + "@types/npmlog": "^4.1.2", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "npmlog": "^5.0.1", + "pretty-hrtime": "^1.0.3" + } + }, + "@storybook/postinstall": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-6.5.13.tgz", + "integrity": "sha512-qmqP39FGIP5NdhXC5IpAs9cFoYx9fg1psoQKwb9snYb98eVQU31uHc1W2MBUh3lG4AjAm7pQaXJci7ti4jOh3g==", + "dev": true, + "requires": { + "core-js": "^3.8.2" + } + }, + "@storybook/preview-web": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/preview-web/-/preview-web-6.5.13.tgz", + "integrity": "sha512-GNNYVzw4SmRua3dOc52Ye6Us4iQbq5GKQ56U3iwnzZM3TBdJB+Rft94Fn1/pypHujEHS8hl5Xgp9td6C1lLCow==", + "dev": true, + "requires": { + "@storybook/addons": "6.5.13", + "@storybook/channel-postmessage": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/store": "6.5.13", + "ansi-to-html": "^0.6.11", + "core-js": "^3.8.2", + "global": "^4.4.0", + "lodash": "^4.17.21", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "unfetch": "^4.2.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/react": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/react/-/react-6.5.13.tgz", + "integrity": "sha512-4gO8qihEkVZ8RNm9iQd7G2iZz4rRAHizJ6T5m58Sn21fxfyg9zAMzhgd0JzXuPXR8lTTj4AvRyPv1Qx7b43smg==", + "dev": true, + "requires": { + "@babel/preset-flow": "^7.12.1", + "@babel/preset-react": "^7.12.10", + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", + "@storybook/addons": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/core": "6.5.13", + "@storybook/core-common": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/docs-tools": "6.5.13", + "@storybook/node-logger": "6.5.13", + "@storybook/react-docgen-typescript-plugin": "1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0", + "@storybook/semver": "^7.3.2", + "@storybook/store": "6.5.13", + "@types/estree": "^0.0.51", + "@types/node": "^14.14.20 || ^16.0.0", + "@types/webpack-env": "^1.16.0", + "acorn": "^7.4.1", + "acorn-jsx": "^5.3.1", + "acorn-walk": "^7.2.0", + "babel-plugin-add-react-displayname": "^0.0.5", + "babel-plugin-react-docgen": "^4.2.1", + "core-js": "^3.8.2", + "escodegen": "^2.0.0", + "fs-extra": "^9.0.1", + "global": "^4.4.0", + "html-tags": "^3.1.0", + "lodash": "^4.17.21", + "prop-types": "^15.7.2", + "react-element-to-jsx-string": "^14.3.4", + "react-refresh": "^0.11.0", + "read-pkg-up": "^7.0.1", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "webpack": ">=4.43.0 <6.0.0" + }, + "dependencies": { + "@types/node": { + "version": "16.18.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", + "dev": true + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + } + } + }, + "@storybook/react-docgen-typescript-plugin": { + "version": "1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0", + "resolved": "https://registry.npmjs.org/@storybook/react-docgen-typescript-plugin/-/react-docgen-typescript-plugin-1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0.tgz", + "integrity": "sha512-eVg3BxlOm2P+chijHBTByr90IZVUtgRW56qEOLX7xlww2NBuKrcavBlcmn+HH7GIUktquWkMPtvy6e0W0NgA5w==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "endent": "^2.0.1", + "find-cache-dir": "^3.3.1", + "flat-cache": "^3.0.4", + "micromatch": "^4.0.2", + "react-docgen-typescript": "^2.1.1", + "tslib": "^2.0.0" + }, + "dependencies": { + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "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" + } + }, + "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" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@storybook/router": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.5.13.tgz", + "integrity": "sha512-sf5aogfirH5ucD0d0hc2mKf2iyWsZsvXhr5kjxUQmgkcoflkGUWhc34sbSQVRQ1i8K5lkLIDH/q2s1Zr2SbzhQ==", + "dev": true, + "requires": { + "@storybook/client-logger": "6.5.13", + "core-js": "^3.8.2", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7" + } + }, + "@storybook/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==", + "dev": true, + "requires": { + "core-js": "^3.6.5", + "find-up": "^4.1.0" + }, + "dependencies": { + "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" + } + }, + "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" + } + } + } + }, + "@storybook/source-loader": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/source-loader/-/source-loader-6.5.13.tgz", + "integrity": "sha512-tHuM8PfeB/0m+JigbaFp+Ld0euFH+fgOObH2W9rjEXy5vnwmaeex/JAdCprv4oL+LcDQEERqNULUUNIvbcTPAg==", + "dev": true, + "requires": { + "@storybook/addons": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "core-js": "^3.8.2", + "estraverse": "^5.2.0", + "global": "^4.4.0", + "loader-utils": "^2.0.0", + "lodash": "^4.17.21", + "prettier": ">=2.2.1 <=2.3.0", + "regenerator-runtime": "^0.13.7" + }, + "dependencies": { + "prettier": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.0.tgz", + "integrity": "sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w==", + "dev": true + } + } + }, + "@storybook/store": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/store/-/store-6.5.13.tgz", + "integrity": "sha512-GG6lm+8fBX1tNUnX7x3raBOjYhhf14bPWLtYiPlxDTFEMs3sJte7zWKZq6NQ79MoBLL6jjzTeolBfDCBw6fiWQ==", + "dev": true, + "requires": { + "@storybook/addons": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "regenerator-runtime": "^0.13.7", + "slash": "^3.0.0", + "stable": "^0.1.8", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/telemetry": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-6.5.13.tgz", + "integrity": "sha512-PFJEfGbunmfFWabD3rdCF8EHH+45578OHOkMPpXJjqXl94vPQxUH2XTVKQgEQJbYrgX0Vx9Z4tSkdMHuzYDbWQ==", + "dev": true, + "requires": { + "@storybook/client-logger": "6.5.13", + "@storybook/core-common": "6.5.13", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "detect-package-manager": "^2.0.1", + "fetch-retry": "^5.0.2", + "fs-extra": "^9.0.1", + "global": "^4.4.0", + "isomorphic-unfetch": "^3.1.0", + "nanoid": "^3.3.1", + "read-pkg-up": "^7.0.1", + "regenerator-runtime": "^0.13.7" + } + }, + "@storybook/testing-library": { + "version": "0.0.13", + "resolved": "https://registry.npmjs.org/@storybook/testing-library/-/testing-library-0.0.13.tgz", + "integrity": "sha512-vRMeIGer4EjJkTgI8sQyK9W431ekPWYCWL//OmSDJ64IT3h7FnW7Xg6p+eqM3oII98/O5pcya5049GxnjaPtxw==", + "dev": true, + "requires": { + "@storybook/client-logger": "^6.4.0", + "@storybook/instrumenter": "^6.4.0", + "@testing-library/dom": "^8.3.0", + "@testing-library/user-event": "^13.2.1", + "ts-dedent": "^2.2.0" + } + }, + "@storybook/theming": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.5.13.tgz", + "integrity": "sha512-oif5NGFAUQhizo50r+ctw2hZNLWV4dPHai+L/gFvbaSeRBeHSNkIcMoZ2FlrO566HdGZTDutYXcR+xus8rI28g==", + "dev": true, + "requires": { + "@storybook/client-logger": "6.5.13", + "core-js": "^3.8.2", + "memoizerific": "^1.11.3", + "regenerator-runtime": "^0.13.7" + } + }, + "@storybook/ui": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/ui/-/ui-6.5.13.tgz", + "integrity": "sha512-MklJuSg4Bc+MWjwhZVmZhJaucaeEBUMMa2V9oRWbIgZOdRHqdW72S2vCbaarDAYfBQdnfaoq1GkSQiw+EnWOzA==", + "dev": true, + "requires": { + "@storybook/addons": "6.5.13", + "@storybook/api": "6.5.13", + "@storybook/channels": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/components": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/router": "6.5.13", + "@storybook/semver": "^7.3.2", + "@storybook/theming": "6.5.13", + "core-js": "^3.8.2", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "@swc/helpers": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.11.tgz", + "integrity": "sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==", + "requires": { + "tslib": "^2.4.0" + } + }, + "@tabler/icons": { + "version": "1.111.0", + "resolved": "https://registry.npmjs.org/@tabler/icons/-/icons-1.111.0.tgz", + "integrity": "sha512-TZWYiMT5ccqfHxRE0Qtgvl+sGsMbNkrv7cJMt/tm8TN9l/CDXx/o7d8uAwUN+3PAlSFfF5e/rD1bi1WJs2xNIA==" + }, + "@testing-library/dom": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.19.0.tgz", + "integrity": "sha512-6YWYPPpxG3e/xOo6HIWwB/58HukkwIVTOaZ0VwdMVjhRUX/01E4FtQbck9GazOOj7MXHc5RBzMrU86iBJHbI+A==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^4.2.0", + "aria-query": "^5.0.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.4.4", + "pretty-format": "^27.0.2" + }, + "dependencies": { + "aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dev": true, + "requires": { + "deep-equal": "^2.0.5" + } + } + } + }, + "@testing-library/user-event": { + "version": "13.5.0", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-13.5.0.tgz", + "integrity": "sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.12.5" + } + }, + "@types/aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==", + "dev": true + }, + "@types/eslint": { + "version": "8.4.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", + "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true + }, + "@types/glob": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.0.0.tgz", + "integrity": "sha512-l6NQsDDyQUVeoTynNpC9uRvCUint/gSUXQA2euwmTuWGvPY5LSDUu6tkCtJB2SvGQlJQzLaKqcGZP4//7EDveA==", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/hast": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz", + "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "dev": true + }, + "@types/is-function": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/is-function/-/is-function-1.0.1.tgz", + "integrity": "sha512-A79HEEiwXTFtfY+Bcbo58M2GRYzCr9itHWzbzHVFNEYCcoU/MMGwYYf721gBrnhpj1s6RGVVha/IgNFnR0Iw/Q==", + "dev": true + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "@types/lodash": { + "version": "4.14.189", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.189.tgz", + "integrity": "sha512-kb9/98N6X8gyME9Cf7YaqIMvYGnBSWqEci6tiettE6iJWH1XdJz/PO8LB0GtLCG7x8dU3KWhZT+lA1a35127tA==", + "dev": true + }, + "@types/mdast": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", + "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "dev": true + }, + "@types/node": { + "version": "18.11.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", + "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", + "dev": true + }, + "@types/node-fetch": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz", + "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==", + "dev": true, + "requires": { + "@types/node": "*", + "form-data": "^3.0.0" + } + }, + "@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "@types/npmlog": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@types/npmlog/-/npmlog-4.1.4.tgz", + "integrity": "sha512-WKG4gTr8przEZBiJ5r3s8ZIAoMXNbOgQ+j/d5O4X3x6kZJRLNvyUJuUK/KoG3+8BaOHPhp2m7WC6JKKeovDSzQ==", + "dev": true + }, + "@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==" + }, + "@types/parse5": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", + "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==", + "dev": true + }, + "@types/pretty-hrtime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/pretty-hrtime/-/pretty-hrtime-1.0.1.tgz", + "integrity": "sha512-VjID5MJb1eGKthz2qUerWT8+R4b9N+CHvGCzg9fn4kWZgaF9AhdYikQio3R7wV8YY1NsQKPaCwKz1Yff+aHNUQ==", + "dev": true + }, + "@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", + "dev": true + }, + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "@types/react": { + "version": "18.0.25", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.25.tgz", + "integrity": "sha512-xD6c0KDT4m7n9uD4ZHi02lzskaiqcBxf4zi+tXZY98a04wvc0hi/TcCPC2FOESZi51Nd7tlUeOJY8RofL799/g==", + "dev": true, + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-dom": { + "version": "18.0.9", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.9.tgz", + "integrity": "sha512-qnVvHxASt/H7i+XG1U1xMiY5t+IHcPGUK7TDMDzom08xa7e86eCeKOiLZezwCKVxJn6NEiiy2ekgX8aQssjIKg==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, + "@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", + "dev": true + }, + "@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, + "@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.8", + "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.8.tgz", + "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==", + "dev": true + }, + "@types/uglify-js": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.17.1.tgz", + "integrity": "sha512-GkewRA4i5oXacU/n4MA9+bLgt5/L3F1mKrYvFGm7r2ouLXhRKjuWwo9XHNnbx6WF3vlGW21S3fCvgqxvxXXc5g==", + "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/unist": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", + "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==", + "dev": true + }, + "@types/webpack": { + "version": "4.41.33", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.33.tgz", + "integrity": "sha512-PPajH64Ft2vWevkerISMtnZ8rTs4YmRbs+23c402J0INmxDKCrhZNvwZYtzx96gY2wAtXdrK1BS2fiC8MlLr3g==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/tapable": "^1", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "anymatch": "^3.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 + } + } + }, + "@types/webpack-env": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.18.0.tgz", + "integrity": "sha512-56/MAlX5WMsPVbOg7tAxnYvNYMMWr/QJiIp6BxVSW3JJXUVzzOn64qW8TzQyMSqSUFM2+PVI4aUHcHOzIz/1tg==", + "dev": true + }, + "@types/webpack-sources": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.0.tgz", + "integrity": "sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true + } + } + }, + "@types/yargs": { + "version": "15.0.14", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", + "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.43.0.tgz", + "integrity": "sha512-wNPzG+eDR6+hhW4yobEmpR36jrqqQv1vxBq5LJO3fBAktjkvekfr4BRl+3Fn1CM/A+s8/EiGUbOMDoYqWdbtXA==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/type-utils": "5.43.0", + "@typescript-eslint/utils": "5.43.0", + "debug": "^4.3.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/experimental-utils": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.43.0.tgz", + "integrity": "sha512-WkT637CumTJbm/hRbFfnHBMgfUYTKr08LitVsD7gQId7bi6rnkx3pu3jac67lmp5ObW4MpJ9SNFZAIOUB/Qbsw==", + "dev": true, + "requires": { + "@typescript-eslint/utils": "5.43.0" + } + }, + "@typescript-eslint/parser": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.43.0.tgz", + "integrity": "sha512-2iHUK2Lh7PwNUlhFxxLI2haSDNyXvebBO9izhjhMoDC+S3XI9qt2DGFUsiJ89m2k7gGYch2aEpYqV5F/+nwZug==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/typescript-estree": "5.43.0", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.43.0.tgz", + "integrity": "sha512-XNWnGaqAtTJsUiZaoiGIrdJYHsUOd3BZ3Qj5zKp9w6km6HsrjPk/TGZv0qMTWyWj0+1QOqpHQ2gZOLXaGA9Ekw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/visitor-keys": "5.43.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.43.0.tgz", + "integrity": "sha512-K21f+KY2/VvYggLf5Pk4tgBOPs2otTaIHy2zjclo7UZGLyFH86VfUOm5iq+OtDtxq/Zwu2I3ujDBykVW4Xtmtg==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "5.43.0", + "@typescript-eslint/utils": "5.43.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/types": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.43.0.tgz", + "integrity": "sha512-jpsbcD0x6AUvV7tyOlyvon0aUsQpF8W+7TpJntfCUWU1qaIKu2K34pMwQKSzQH8ORgUrGYY6pVIh1Pi8TNeteg==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.43.0.tgz", + "integrity": "sha512-BZ1WVe+QQ+igWal2tDbNg1j2HWUkAa+CVqdU79L4HP9izQY6CNhXfkNwd1SS4+sSZAP/EthI1uiCSY/+H0pROg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/visitor-keys": "5.43.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/utils": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.43.0.tgz", + "integrity": "sha512-8nVpA6yX0sCjf7v/NDfeaOlyaIIqL7OaIGOWSPFqUKK59Gnumd3Wa+2l8oAaYO2lk0sO+SbWFWRSvhu8gLGv4A==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/typescript-estree": "5.43.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" + }, + "dependencies": { + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.43.0.tgz", + "integrity": "sha512-icl1jNH/d18OVHLfcwdL3bWUKsBeIiKYTGxMJCoGe7xFht+E4QgzOqoWYrU8XSLJWhVw8nTacbm03v23J/hFTg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.43.0", + "eslint-visitor-keys": "^3.3.0" + } + }, + "@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "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" + }, + "dependencies": { + "@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/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/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" + } + } + } + }, + "@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" + }, + "dependencies": { + "@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/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-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@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" + }, + "dependencies": { + "@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-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/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@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 + }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "dev": true + }, + "acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true + }, + "address": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.1.tgz", + "integrity": "sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA==", + "dev": true + }, + "adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "airbnb-js-shims": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/airbnb-js-shims/-/airbnb-js-shims-2.2.1.tgz", + "integrity": "sha512-wJNXPH66U2xjgo1Zwyjf9EydvJ2Si94+vSdk6EERcBfB2VZkeltpqIats0cqIZMLCXP3zcyaUKGYQeIBT6XjsQ==", + "dev": true, + "requires": { + "array-includes": "^3.0.3", + "array.prototype.flat": "^1.2.1", + "array.prototype.flatmap": "^1.2.1", + "es5-shim": "^4.5.13", + "es6-shim": "^0.35.5", + "function.prototype.name": "^1.1.0", + "globalthis": "^1.0.0", + "object.entries": "^1.1.0", + "object.fromentries": "^2.0.0 || ^1.0.0", + "object.getownpropertydescriptors": "^2.0.3", + "object.values": "^1.1.0", + "promise.allsettled": "^1.0.0", + "promise.prototype.finally": "^3.1.0", + "string.prototype.matchall": "^4.0.0 || ^3.0.1", + "string.prototype.padend": "^3.0.0", + "string.prototype.padstart": "^3.0.0", + "symbol.prototype.description": "^1.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "dev": true + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, + "ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "requires": { + "string-width": "^4.1.0" + } + }, + "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-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "ansi-to-html": { + "version": "0.6.15", + "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.6.15.tgz", + "integrity": "sha512-28ijx2aHJGdzbs+O5SNQF65r6rrKYnkuwTYm8lZlChuoJ9P1vVzIpWO20sQTqTPDXYp6NFwk326vApTtLVFXpQ==", + "dev": true, + "requires": { + "entities": "^2.0.0" + }, + "dependencies": { + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + } + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "app-root-dir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/app-root-dir/-/app-root-dir-1.0.2.tgz", + "integrity": "sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==", + "dev": true + }, + "aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + }, + "are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.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 + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + } + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "aria-hidden": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.2.tgz", + "integrity": "sha512-6y/ogyDTk/7YAe91T3E2PR1ALVKyM2QbTio5HwM+N1Q6CMlCKhvClyIjkckBswa0f2xJhjsfzIGa1yVSe1UMVA==", + "requires": { + "tslib": "^2.0.0" + } + }, + "aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "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": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "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": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", + "dev": true, + "optional": true + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "array-includes": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "is-string": "^1.0.7" + } + }, + "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 + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "dev": true + }, + "array.prototype.flat": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + } + }, + "array.prototype.flatmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + } + }, + "array.prototype.map": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.5.tgz", + "integrity": "sha512-gfaKntvwqYIuC7mLLyv2wzZIJqrRhn5PZ9EfFejSx6a78sV7iDsGpG9P+3oUPtm1Rerqm6nrKS4FYuTIvWfo3g==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" + } + }, + "array.prototype.reduce": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz", + "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" + } + }, + "arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true + }, + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "dev": true + }, + "ast-types": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", + "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", + "dev": true, + "requires": { + "tslib": "^2.0.1" + } + }, + "ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", + "dev": true + }, + "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, + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "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==", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "autoprefixer": { + "version": "9.8.8", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", + "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", + "dev": true, + "requires": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "picocolors": "^0.2.1", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.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 + } + } + }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true + }, + "axe-core": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.5.2.tgz", + "integrity": "sha512-u2MVsXfew5HBvjsczCv+xlwdNnB1oQR9HlAcsejZttNjKKSkeDNVwB1vMThIUIFI9GoT57Vtk8iQLwqOfAkboA==", + "dev": true + }, + "axobject-query": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", + "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", + "dev": true + }, + "babel-loader": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", + "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", + "dev": true, + "requires": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "dependencies": { + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "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" + } + }, + "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.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "babel-plugin-add-react-displayname": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/babel-plugin-add-react-displayname/-/babel-plugin-add-react-displayname-0.0.5.tgz", + "integrity": "sha512-LY3+Y0XVDYcShHHorshrDbt4KFWL4bSeniCtl4SYZbask+Syngk1uMPCeN9+nSiZo6zX5s0RTq/J9Pnaaf/KHw==", + "dev": true + }, + "babel-plugin-apply-mdx-type-prop": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", + "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@mdx-js/util": "1.6.22" + }, + "dependencies": { + "@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==", + "dev": true + } + } + }, + "babel-plugin-extract-import-names": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz", + "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + }, + "dependencies": { + "@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==", + "dev": true + } + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + } + }, + "babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "requires": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + } + }, + "babel-plugin-named-exports-order": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-named-exports-order/-/babel-plugin-named-exports-order-0.0.2.tgz", + "integrity": "sha512-OgOYHOLoRK+/mvXU9imKHlG6GkPLYrUCvFXG/CM93R/aNNO8pOOF4aS+S8CCHMDQoNSeiOYEZb/G6RwL95Jktw==", + "dev": true + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.3", + "semver": "^6.1.1" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", + "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.3", + "core-js-compat": "^3.25.1" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.3" + } + }, + "babel-plugin-react-docgen": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/babel-plugin-react-docgen/-/babel-plugin-react-docgen-4.2.1.tgz", + "integrity": "sha512-UQ0NmGHj/HAqi5Bew8WvNfCk8wSsmdgNd8ZdMjBCICtyCJCq9LiqgqvjCYe570/Wg7AQArSq1VQ60Dd/CHN7mQ==", + "dev": true, + "requires": { + "ast-types": "^0.14.2", + "lodash": "^4.17.15", + "react-docgen": "^5.0.0" + } + }, + "bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "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": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + } + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "better-opn": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-2.1.1.tgz", + "integrity": "sha512-kIPXZS5qwyKiX/HcRvDYfmBQUa8XP17I0mYZZ0y4UhpYOSvtsLHDYqmomS+Mj20aDvD3knEiQ0ecQy2nhio3yA==", + "dev": true, + "requires": { + "open": "^7.0.3" + }, + "dependencies": { + "open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dev": true, + "requires": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + } + } + } + }, + "big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "dev": true, + "optional": true + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "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" + } + }, + "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.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + }, + "body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + } + } + }, + "bplist-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.1.1.tgz", + "integrity": "sha512-2AEM0FXy8ZxVLBuqX0hqt1gDwcnz2zygEkQ6zaD5Wko/sB9paUNwlpawrFtKeHUAQUOzjVy9AO4oeonqIHKA9Q==", + "dev": true, + "optional": true, + "requires": { + "big-integer": "^1.6.7" + } + }, + "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": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "dev": true + }, + "browser-assert": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/browser-assert/-/browser-assert-1.2.1.tgz", + "integrity": "sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==", + "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.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dev": true, + "requires": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "dev": true, + "requires": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "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 + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + } + } + }, + "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.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" + } + }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + } + } + }, + "buffer-from": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.2.tgz", + "integrity": "sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg==" + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "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": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", + "dev": true + }, + "builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "requires": { + "semver": "^7.0.0" + } + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true + }, + "c8": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/c8/-/c8-7.12.0.tgz", + "integrity": "sha512-CtgQrHOkyxr5koX1wEUmN/5cfDa2ckbHRA4Gy5LAL0zaCFtVWJS5++n+w4/sr2GWGerBxgTjpKeDclk/Qk6W/A==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@istanbuljs/schema": "^0.1.3", + "find-up": "^5.0.0", + "foreground-child": "^2.0.0", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-reports": "^3.1.4", + "rimraf": "^3.0.2", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^9.0.0", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9" + } + }, + "cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "dev": true, + "requires": { + "@npmcli/fs": "^1.0.0", + "@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.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "dependencies": { + "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" + } + } + } + }, + "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" + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "call-me-maybe": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", + "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==", + "dev": true + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, + "camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "requires": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==", + "dev": true, + "optional": 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": "sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==", + "dev": true, + "optional": true + } + } + }, + "caniuse-lite": { + "version": "1.0.30001431", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz", + "integrity": "sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==" + }, + "capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "dev": true, + "requires": { + "rsvp": "^4.8.4" + } + }, + "case-sensitive-paths-webpack-plugin": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", + "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", + "dev": true + }, + "ccount": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", + "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.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==", + "dev": true + }, + "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==", + "dev": true + }, + "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==", + "dev": true + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "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": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "requires": { + "is-descriptor": "^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": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "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": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "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 + } + } + }, + "clean-css": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz", + "integrity": "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==", + "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 + }, + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true + }, + "cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "dev": true, + "requires": { + "@colors/colors": "1.5.0", + "string-width": "^4.2.0" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "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" + } + }, + "clsx": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", + "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==" + }, + "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==", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.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 + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true + }, + "colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "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" + } + }, + "comma-separated-tokens": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", + "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", + "dev": true + }, + "commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true + }, + "common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "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" + }, + "dependencies": { + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "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": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", + "dev": true + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "requires": { + "safe-buffer": "5.2.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "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.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "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" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "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" + } + } + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", + "dev": true + }, + "core-js": { + "version": "3.26.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.26.1.tgz", + "integrity": "sha512-21491RRQVzUn0GGM9Z1Jrpr6PNPxPi+Za8OM9q4tksTSnlbXXGKK1nXNg/QvwFYettXvSX6zWKCtHHfjN4puyA==", + "dev": true + }, + "core-js-compat": { + "version": "3.26.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz", + "integrity": "sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==", + "dev": true, + "requires": { + "browserslist": "^4.21.4" + } + }, + "core-js-pure": { + "version": "3.26.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.26.1.tgz", + "integrity": "sha512-VVXcDpp/xJ21KdULRq/lXdLzQAtX7+37LzpyfFM973il0tWSsDEoyzG38G14AjTpK9VTfiNM9jnFauq/CpaWGQ==", + "dev": true + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "cp-file": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-7.0.0.tgz", + "integrity": "sha512-0Cbj7gyvFVApzpK/uhCtQ/9kE9UnYpxMzaq5nQQC/Dh4iaj5fxp7iEFIullrYwzj8nf0qnsI1Qsx34hAeAebvw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "nested-error-stacks": "^2.0.0", + "p-event": "^4.1.0" + }, + "dependencies": { + "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" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "cpy": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/cpy/-/cpy-8.1.2.tgz", + "integrity": "sha512-dmC4mUesv0OYH2kNFEidtf/skUwv4zePmGeepjyyJ0qTo5+8KhA1o99oIAwVVLzQMAeDJml74d6wPPKb6EZUTg==", + "dev": true, + "requires": { + "arrify": "^2.0.1", + "cp-file": "^7.0.0", + "globby": "^9.2.0", + "has-glob": "^1.0.0", + "junk": "^3.1.0", + "nested-error-stacks": "^2.1.0", + "p-all": "^2.1.0", + "p-filter": "^2.1.0", + "p-map": "^3.0.0" + }, + "dependencies": { + "@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", + "dev": true + }, + "@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "dev": true, + "requires": { + "array-uniq": "^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, + "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "dir-glob": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", + "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", + "dev": true, + "requires": { + "path-type": "^3.0.0" + } + }, + "fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "dev": true, + "requires": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "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": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "globby": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz", + "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^1.0.2", + "dir-glob": "^2.2.2", + "fast-glob": "^2.2.6", + "glob": "^7.1.3", + "ignore": "^4.0.3", + "pify": "^4.0.1", + "slash": "^2.0.0" + } + }, + "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 + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "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" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true + } + } + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "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" + } + }, + "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": "5.2.7", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", + "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", + "dev": true, + "requires": { + "icss-utils": "^5.1.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.15", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.5" + } + }, + "css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true + }, + "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": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", + "dev": true, + "optional": 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": "sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==", + "dev": true + }, + "damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "optional": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", + "dev": true + }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true + }, + "deep-equal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.1.0.tgz", + "integrity": "sha512-2pxgvWu3Alv1PoWEyVg7HS8YhGlUFUV7N5oOvfL6d+7xAmLSemMwv/c8Zv/i9KFzxV5Kt5CAvQc70fLwVuf4UA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.2", + "get-intrinsic": "^1.1.3", + "is-arguments": "^1.1.1", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.8" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "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-browser-id": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-1.0.4.tgz", + "integrity": "sha512-qPy925qewwul9Hifs+3sx1ZYn14obHxpkX+mPD369w4Rzg+YkJBgi3SOvwUq81nWSjqGUegIgEPwD8u+HUnxlw==", + "dev": true, + "optional": true, + "requires": { + "bplist-parser": "^0.1.0", + "meow": "^3.1.0", + "untildify": "^2.0.0" + } + }, + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true + }, + "define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "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" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "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.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true + }, + "detab": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", + "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", + "dev": true, + "requires": { + "repeat-string": "^1.5.4" + } + }, + "detect-package-manager": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-package-manager/-/detect-package-manager-2.0.1.tgz", + "integrity": "sha512-j/lJHyoLlWi6G1LDdLgvUtz60Zo5GEj+sVYtTVXnYLDPuzgC3llMxonXym9zIwhhUII8vjdw0LXxavpLqTbl1A==", + "dev": true, + "requires": { + "execa": "^5.1.1" + } + }, + "detect-port": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", + "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", + "dev": true, + "requires": { + "address": "^1.0.1", + "debug": "4" + } + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "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" + } + }, + "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-accessibility-api": { + "version": "0.5.14", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.14.tgz", + "integrity": "sha512-NMt+m9zFMPZe0JcY9gN224Qvk6qLIdqex29clBvc/y75ZBX9YA9wNK3frsYvu2DI1xcCIwxwnX+TlsJ2DSOADg==", + "dev": true + }, + "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-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "dependencies": { + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + } + } + }, + "dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", + "dev": true + }, + "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": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" + }, + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "dev": true + }, + "dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "requires": { + "readable-stream": "^2.0.2" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "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" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", + "dev": true + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "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==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "endent": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/endent/-/endent-2.1.0.tgz", + "integrity": "sha512-r8VyPX7XL8U01Xgnb1CjZ3XV+z90cXIJ9JPE/R9SEC9vpw2P6CfsRPJmp20DppC5N7ZAMCmjYkJIa744Iyg96w==", + "dev": true, + "requires": { + "dedent": "^0.7.0", + "fast-json-parse": "^1.0.3", + "objectorarray": "^1.0.5" + } + }, + "enhanced-resolve": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", + "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "dependencies": { + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + } + } + }, + "entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==" + }, + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "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==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "dev": true, + "requires": { + "stackframe": "^1.3.4" + } + }, + "es-abstract": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", + "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + } + }, + "es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "dev": true + }, + "es-get-iterator": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", + "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.0", + "has-symbols": "^1.0.1", + "is-arguments": "^1.1.0", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.5", + "isarray": "^2.0.5" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } + }, + "es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true + }, + "es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "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" + } + }, + "es5-shim": { + "version": "4.6.7", + "resolved": "https://registry.npmjs.org/es5-shim/-/es5-shim-4.6.7.tgz", + "integrity": "sha512-jg21/dmlrNQI7JyyA2w7n+yifSxBng0ZralnSfVZjoCawgNTCnS+yBCyVM9DL5itm7SUnDGgv7hcq2XCZX4iRQ==", + "dev": true + }, + "es6-shim": { + "version": "0.35.6", + "resolved": "https://registry.npmjs.org/es6-shim/-/es6-shim-0.35.6.tgz", + "integrity": "sha512-EmTr31wppcaIAgblChZiuN/l9Y7DPyw8Xtbg7fIVngn6zMW+IEBJDJngeKC3x6wr0V/vcA2wqeFnaw1bFJbDdA==", + "dev": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + }, + "escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true + }, + "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, + "optional": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + } + } + }, + "eslint": { + "version": "8.22.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.22.0.tgz", + "integrity": "sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.10.4", + "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.3", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "globby": "^11.1.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + } + }, + "eslint-config-next": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.0.3.tgz", + "integrity": "sha512-i2JoQP8gGv303GjXTonA27fm1ckRRkRoAP1WYEQgN0D2DDoFeBPqlJgHlMHnXKWjmNct/sW8jQEvy9am2juc8g==", + "dev": true, + "requires": { + "@next/eslint-plugin-next": "13.0.3", + "@rushstack/eslint-patch": "^1.1.3", + "@typescript-eslint/parser": "^5.42.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^2.7.1", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.31.7", + "eslint-plugin-react-hooks": "^4.5.0" + } + }, + "eslint-config-prettier": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "dev": true + }, + "eslint-config-standard": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz", + "integrity": "sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==", + "dev": true + }, + "eslint-config-standard-with-typescript": { + "version": "23.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-23.0.0.tgz", + "integrity": "sha512-iaaWifImn37Z1OXbNW1es7KI+S7D408F9ys0bpaQf2temeBWlvb0Nc5qHkOgYaRb5QxTZT32GGeN1gtswASOXA==", + "dev": true, + "requires": { + "@typescript-eslint/parser": "^5.0.0", + "eslint-config-standard": "17.0.0" + } + }, + "eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-import-resolver-typescript": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz", + "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==", + "dev": true, + "requires": { + "debug": "^4.3.4", + "glob": "^7.2.0", + "is-glob": "^4.0.3", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "eslint-module-utils": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", + "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", + "dev": true, + "requires": { + "debug": "^3.2.7" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-plugin-es": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", + "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", + "dev": true, + "requires": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "dependencies": { + "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 + } + } + }, + "eslint-plugin-import": { + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", + "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "dev": true, + "requires": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", + "has": "^1.0.3", + "is-core-module": "^2.8.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.5", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.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" + } + }, + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "eslint-plugin-jsx-a11y": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz", + "integrity": "sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==", + "dev": true, + "requires": { + "@babel/runtime": "^7.18.9", + "aria-query": "^4.2.2", + "array-includes": "^3.1.5", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.4.3", + "axobject-query": "^2.2.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.3.2", + "language-tags": "^1.0.5", + "minimatch": "^3.1.2", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "eslint-plugin-n": { + "version": "15.5.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.5.1.tgz", + "integrity": "sha512-kAd+xhZm7brHoFLzKLB7/FGRFJNg/srmv67mqb7tto22rpr4wv/LV6RuXzAfv3jbab7+k1wi42PsIhGviywaaw==", + "dev": true, + "requires": { + "builtins": "^5.0.1", + "eslint-plugin-es": "^4.1.0", + "eslint-utils": "^3.0.0", + "ignore": "^5.1.1", + "is-core-module": "^2.11.0", + "minimatch": "^3.1.2", + "resolve": "^1.22.1", + "semver": "^7.3.8" + } + }, + "eslint-plugin-prettier": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, + "eslint-plugin-promise": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", + "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", + "dev": true + }, + "eslint-plugin-react": { + "version": "7.31.10", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.10.tgz", + "integrity": "sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA==", + "dev": true, + "requires": { + "array-includes": "^3.1.5", + "array.prototype.flatmap": "^1.3.0", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.5", + "object.fromentries": "^2.0.5", + "object.hasown": "^1.1.1", + "object.values": "^1.1.5", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.3", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.7" + }, + "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" + } + }, + "resolve": { + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.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 + } + } + }, + "eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true + }, + "eslint-plugin-storybook": { + "version": "0.6.7", + "resolved": "https://registry.npmjs.org/eslint-plugin-storybook/-/eslint-plugin-storybook-0.6.7.tgz", + "integrity": "sha512-lcUsB+3PesKWXwwEHGSTCijKWDXuQ4ITVbnsSDMXRCR/cjGtHZIEcy2pp/Eh7nfWA/GZrDPpK97DsTWEzyN6Bw==", + "dev": true, + "requires": { + "@storybook/csf": "^0.0.1", + "@typescript-eslint/experimental-utils": "^5.3.0", + "requireindex": "^1.1.0", + "ts-dedent": "^2.2.0" + }, + "dependencies": { + "@storybook/csf": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.1.tgz", + "integrity": "sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw==", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + } + } + }, + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + }, + "espree": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "dev": true, + "requires": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.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==", + "dev": true + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "estree-to-babel": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/estree-to-babel/-/estree-to-babel-3.2.1.tgz", + "integrity": "sha512-YNF+mZ/Wu2FU/gvmzuWtYc8rloubL7wfXCTgouFrnjGVXPA/EeYYA7pupXWrb3Iv1cTBeSSxxJIbK23l4MRNqg==", + "dev": true, + "requires": { + "@babel/traverse": "^7.1.6", + "@babel/types": "^7.2.0", + "c8": "^7.6.0" + } + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "exec-sh": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", + "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==", + "dev": true + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "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": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "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": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "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": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "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" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true + }, + "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 + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dev": true, + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "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 + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "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": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true + } + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "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.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "fast-json-parse": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fast-json-parse/-/fast-json-parse-1.0.3.tgz", + "integrity": "sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==", + "dev": true + }, + "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==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "requires": { + "bser": "2.1.1" + } + }, + "fetch-retry": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-5.0.3.tgz", + "integrity": "sha512-uJQyMrX5IJZkhoEUBQ3EjxkeiZkppBd5jS/fMTJmfZxLSiaQjv2zD0kTvuvkSH89uFvgSlB6ueGpjD3HWN7Bxw==", + "dev": true + }, + "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": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + } + }, + "file-system-cache": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/file-system-cache/-/file-system-cache-1.1.0.tgz", + "integrity": "sha512-IzF5MBq+5CR0jXx5RxPe4BICl/oEhBSXKaL9fLhAXrIfIUS77Hr4vzrYyqYMHN6uTt+BOqi3fDCTjjEBCjERKw==", + "dev": true, + "requires": { + "fs-extra": "^10.1.0", + "ramda": "^0.28.0" + }, + "dependencies": { + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + } + } + }, + "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" + } + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "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==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^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==", + "dev": true, + "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==", + "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" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + } + } + }, + "find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "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" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "focus-lock": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/focus-lock/-/focus-lock-0.8.1.tgz", + "integrity": "sha512-/LFZOIo82WDsyyv7h7oc0MJF9ACOvDRdx9rWPZ2pgMfNWu/z8hQDBtOchuB/0BVLmuFOZjV02YwUVzNsWx/EzA==", + "dev": true, + "requires": { + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "dev": true + }, + "foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + } + }, + "fork-ts-checker-webpack-plugin": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", + "integrity": "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "dependencies": { + "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" + } + }, + "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" + } + } + } + }, + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", + "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": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.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.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", + "dev": true + }, + "fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", + "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": "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==", + "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": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "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": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true + }, + "gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "dev": true, + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + } + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "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-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==", + "dev": true, + "optional": true + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "dev": true + }, + "github-slugger": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", + "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==", + "dev": true + }, + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "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": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "glob-promise": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-3.4.0.tgz", + "integrity": "sha512-q08RJ6O+eJn+dVanerAndJwIcumgbDdYiUT7zFQl3Wm1xD6fBKtah7H8ZJChj4wP+8C+QfeVy8xautR7rdmKEw==", + "dev": true, + "requires": { + "@types/glob": "*" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dev": true, + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "globals": { + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.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 + } + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true + }, + "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 + }, + "has-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-glob/-/has-glob-1.0.0.tgz", + "integrity": "sha512-D+8A457fBShSEI3tFCj65PAbT++5sKiFtdCdOam0gnfBgw9D277OERk+HM9qYJXmdVLZ/znez10SqHN0BBQ50g==", + "dev": true, + "requires": { + "is-glob": "^3.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "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": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "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 + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + } + } + }, + "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" + } + }, + "hast-to-hyperscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", + "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", + "dev": true, + "requires": { + "@types/unist": "^2.0.3", + "comma-separated-tokens": "^1.0.0", + "property-information": "^5.3.0", + "space-separated-tokens": "^1.0.0", + "style-to-object": "^0.3.0", + "unist-util-is": "^4.0.0", + "web-namespaces": "^1.0.0" + } + }, + "hast-util-from-parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", + "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==", + "dev": true, + "requires": { + "@types/parse5": "^5.0.0", + "hastscript": "^6.0.0", + "property-information": "^5.0.0", + "vfile": "^4.0.0", + "vfile-location": "^3.2.0", + "web-namespaces": "^1.0.0" + } + }, + "hast-util-parse-selector": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", + "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", + "dev": true + }, + "hast-util-raw": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", + "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", + "dev": true, + "requires": { + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^6.0.0", + "hast-util-to-parse5": "^6.0.0", + "html-void-elements": "^1.0.0", + "parse5": "^6.0.0", + "unist-util-position": "^3.0.0", + "vfile": "^4.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + }, + "dependencies": { + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + } + } + }, + "hast-util-to-parse5": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", + "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", + "dev": true, + "requires": { + "hast-to-hyperscript": "^9.0.0", + "property-information": "^5.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + }, + "dependencies": { + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + } + } + }, + "hastscript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", + "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", + "dev": true, + "requires": { + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" + } + }, + "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 + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "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" + } + }, + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "html-dom-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/html-dom-parser/-/html-dom-parser-1.2.0.tgz", + "integrity": "sha512-2HIpFMvvffsXHFUFjso0M9LqM+1Lm22BF+Df2ba+7QHJXjk63pWChEnI6YG27eaWqUdfnh5/Vy+OXrNTtepRsg==", + "requires": { + "domhandler": "4.3.1", + "htmlparser2": "7.2.0" + } + }, + "html-entities": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", + "dev": true + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dev": true, + "requires": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "dependencies": { + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true + } + } + }, + "html-react-parser": { + "version": "1.4.12", + "resolved": "https://registry.npmjs.org/html-react-parser/-/html-react-parser-1.4.12.tgz", + "integrity": "sha512-nqYQzr4uXh67G9ejAG7djupTHmQvSTgjY83zbXLRfKHJ0F06751jXx6WKSFARDdXxCngo2/7H4Rwtfeowql4gQ==", + "requires": { + "domhandler": "4.3.1", + "html-dom-parser": "1.2.0", + "react-property": "2.0.0", + "style-to-js": "1.1.0" + } + }, + "html-tags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", + "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==", + "dev": true + }, + "html-tokenize": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-tokenize/-/html-tokenize-2.0.1.tgz", + "integrity": "sha512-QY6S+hZ0f5m1WT8WffYN+Hg+xm/w5I8XeUcAq/ZYP5wVC8xbKi4Whhru3FtrAebD5EhBW8rmFzkDI6eCAuFe2w==", + "requires": { + "buffer-from": "~0.1.1", + "inherits": "~2.0.1", + "minimist": "~1.2.5", + "readable-stream": "~1.0.27-1", + "through2": "~0.4.1" + } + }, + "html-void-elements": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", + "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==", + "dev": true + }, + "html-webpack-plugin": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", + "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", + "dev": true, + "requires": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "dependencies": { + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + } + } + }, + "htmlparser2": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", + "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.2", + "domutils": "^2.8.0", + "entities": "^3.0.1" + } + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", + "dev": true + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "husky": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.2.tgz", + "integrity": "sha512-Tkv80jtvbnkK3mYWxPZePGFpQ/tT3HNSs/sasF9P2YfkMezDl3ON37YN6jUUI4eTg5LcyVynlb6r4eyvOmspvg==", + "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": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==", + "dev": true + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "image-size": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz", + "integrity": "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==", + "dev": true, + "requires": { + "queue": "6.0.2" + } + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "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 + }, + "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": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "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==" + }, + "inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true + }, + "ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "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-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-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "dev": true + }, + "is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "dev": true, + "requires": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + } + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "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" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true + }, + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "requires": { + "has": "^1.0.3" + } + }, + "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-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "dev": true + }, + "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-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true + }, + "is-dom": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-dom/-/is-dom-1.1.0.tgz", + "integrity": "sha512-u82f6mvhYxRPKpw8V1N0W8ce1xXwOrQtgGcxl6UCL5zBmZu3is/18K0rR7uFCnMDuAsS/3W54mGL4vsaFUQlEQ==", + "dev": true, + "requires": { + "is-object": "^1.0.1", + "is-window": "^1.0.2" + } + }, + "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" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "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, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "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==", + "dev": true + }, + "is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true + }, + "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-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", + "dev": true + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", + "dev": true, + "optional": true + }, + "is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "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==", + "dev": true + }, + "is-window": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-window/-/is-window-1.0.2.tgz", + "integrity": "sha512-uj00kdXyZb9t9RcAUAwMZAnkBUwdYGhYlt7djMXhfyhUCzwNba50tIiBKR7q0l7tdoBtFVw/3JmLY6fI3rmZmg==", + "dev": true + }, + "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==", + "dev": true + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + }, + "isomorphic-unfetch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz", + "integrity": "sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==", + "dev": true, + "requires": { + "node-fetch": "^2.6.1", + "unfetch": "^4.2.0" + } + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "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" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "iterate-iterator": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.2.tgz", + "integrity": "sha512-t91HubM4ZDQ70M9wqp+pcNpu8OyJ9UAtXntT/Bcsvp5tZMnz9vRa+IunKXeI8AnfZMTv0jNuVEmGeLSMjVvfPw==", + "dev": true + }, + "iterate-value": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz", + "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==", + "dev": true, + "requires": { + "es-get-iterator": "^1.0.2", + "iterate-iterator": "^1.0.1" + } + }, + "jest-haste-map": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", + "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.1.2", + "graceful-fs": "^4.2.4", + "jest-regex-util": "^26.0.0", + "jest-serializer": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "micromatch": "^4.0.2", + "sane": "^4.0.3", + "walker": "^1.0.7" + } + }, + "jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*" + }, + "dependencies": { + "@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + } + } + }, + "jest-regex-util": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", + "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", + "dev": true + }, + "jest-serializer": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", + "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", + "dev": true, + "requires": { + "@types/node": "*", + "graceful-fs": "^4.2.4" + } + }, + "jest-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^2.0.0", + "micromatch": "^4.0.2" + } + }, + "jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + } + }, + "js-string-escape": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", + "integrity": "sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==", + "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": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "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-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "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==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "jsx-ast-utils": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", + "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", + "dev": true, + "requires": { + "array-includes": "^3.1.5", + "object.assign": "^4.1.3" + } + }, + "junk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", + "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", + "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 + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true + }, + "klona": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", + "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", + "dev": true + }, + "language-subtag-registry": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", + "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", + "dev": true + }, + "language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "dev": true, + "requires": { + "language-subtag-registry": "~0.3.2" + } + }, + "lazy-universal-dotenv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lazy-universal-dotenv/-/lazy-universal-dotenv-3.0.1.tgz", + "integrity": "sha512-prXSYk799h3GY3iOWnC6ZigYzMPjxN2svgjJ9shk7oMadSNX3wXy0B6F32PMJv7qtMnrIbUxoEHzbutvxR2LBQ==", + "dev": true, + "requires": { + "@babel/runtime": "^7.5.0", + "app-root-dir": "^1.0.2", + "core-js": "^3.0.4", + "dotenv": "^8.0.0", + "dotenv-expand": "^5.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.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", + "dev": true, + "optional": 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" + }, + "dependencies": { + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", + "dev": true, + "optional": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "optional": true + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", + "dev": true, + "optional": true, + "requires": { + "is-utf8": "^0.2.0" + } + } + } + }, + "loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true + }, + "loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "dependencies": { + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true + } + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "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": "sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==", + "dev": true, + "optional": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "requires": { + "tslib": "^2.0.3" + } + }, + "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" + } + }, + "lz-string": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", + "integrity": "sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "requires": { + "tmpl": "1.0.5" + } + }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dev": true, + "requires": { + "p-defer": "^1.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "dev": true + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true, + "optional": true + }, + "map-or-similar": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/map-or-similar/-/map-or-similar-1.5.0.tgz", + "integrity": "sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==", + "dev": true + }, + "map-visit": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", + "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==", + "dev": true + }, + "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-squeeze-paragraphs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", + "dev": true, + "requires": { + "unist-util-remove": "^2.0.0" + } + }, + "mdast-util-definitions": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", + "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", + "dev": true, + "requires": { + "unist-util-visit": "^2.0.0" + } + }, + "mdast-util-to-hast": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", + "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", + "dev": true, + "requires": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "mdast-util-definitions": "^4.0.0", + "mdurl": "^1.0.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" + } + }, + "mdast-util-to-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", + "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", + "dev": true + }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true + }, + "mem": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz", + "integrity": "sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==", + "dev": true, + "requires": { + "map-age-cleaner": "^0.1.3", + "mimic-fn": "^3.1.0" + }, + "dependencies": { + "mimic-fn": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", + "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", + "dev": true + } + } + }, + "memfs": { + "version": "3.4.11", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.11.tgz", + "integrity": "sha512-GvsCITGAyDCxxsJ+X6prJexFQEhOCJaIlUbsAvjzSI5o5O7j2dle3jWvz5Z5aOdpOxW6ol3vI1+0ut+641F1+w==", + "dev": true, + "requires": { + "fs-monkey": "^1.0.3" + } + }, + "memoizerific": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz", + "integrity": "sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==", + "dev": true, + "requires": { + "map-or-similar": "^1.5.0" + } + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==", + "dev": true, + "optional": 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" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", + "dev": true, + "optional": 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": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", + "dev": true, + "optional": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", + "dev": true, + "optional": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "optional": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", + "dev": true, + "optional": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.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": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", + "dev": true, + "optional": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + } + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "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": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true + }, + "microevent.ts": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz", + "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", + "dev": true, + "requires": { + "dom-walk": "^0.1.0" + } + }, + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true + }, + "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": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" + }, + "minipass": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", + "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "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.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, + "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" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "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" + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + } + } + }, + "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" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==", + "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" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "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" + } + } + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "multipipe": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-1.0.2.tgz", + "integrity": "sha512-6uiC9OvY71vzSGX8lZvSqscE7ft9nPupJ8fMjrCNRAUy2LREUW42UL+V/NTrogr6rFgRydUrCX4ZitfpSNkSCQ==", + "requires": { + "duplexer2": "^0.1.2", + "object-assign": "^4.1.0" + } + }, + "nan": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", + "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", + "dev": true, + "optional": true + }, + "nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" + }, + "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" + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "nested-error-stacks": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.1.tgz", + "integrity": "sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==", + "dev": true + }, + "next": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/next/-/next-12.3.3.tgz", + "integrity": "sha512-Rx2Y6Wl5R8E77NOfBupp/B9OPCklqfqD0yN2+rDivhMjd6hjVFH5n0WTDI4PWwDmZsdNcYt6NV85kJ3PLR+eNQ==", + "requires": { + "@next/env": "12.3.3", + "@next/swc-android-arm-eabi": "12.3.3", + "@next/swc-android-arm64": "12.3.3", + "@next/swc-darwin-arm64": "12.3.3", + "@next/swc-darwin-x64": "12.3.3", + "@next/swc-freebsd-x64": "12.3.3", + "@next/swc-linux-arm-gnueabihf": "12.3.3", + "@next/swc-linux-arm64-gnu": "12.3.3", + "@next/swc-linux-arm64-musl": "12.3.3", + "@next/swc-linux-x64-gnu": "12.3.3", + "@next/swc-linux-x64-musl": "12.3.3", + "@next/swc-win32-arm64-msvc": "12.3.3", + "@next/swc-win32-ia32-msvc": "12.3.3", + "@next/swc-win32-x64-msvc": "12.3.3", + "@swc/helpers": "0.4.11", + "caniuse-lite": "^1.0.30001406", + "postcss": "8.4.14", + "styled-jsx": "5.0.7", + "use-sync-external-store": "1.2.0" + } + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" } }, - "node_modules/postcss": { - "version": "8.4.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", - "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - } - ], - "dependencies": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" + "node-dir": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", + "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", + "dev": true, + "requires": { + "minimatch": "^3.0.2" } }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "dev": true, - "engines": { - "node": ">= 0.8.0" + "requires": { + "whatwg-url": "^5.0.0" } }, - "node_modules/prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "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, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" + "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" }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "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 + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + } } }, - "node_modules/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==", + "node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "dev": true + }, + "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, - "dependencies": { - "fast-diff": "^1.1.2" + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" }, - "engines": { - "node": ">=6.0.0" + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } } }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "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": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" + "requires": { + "path-key": "^3.0.0" } }, - "node_modules/punycode": { + "npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "dev": true, + "requires": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "nth-check": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dev": true, - "engines": { - "node": ">=6" + "requires": { + "boolbase": "^1.0.0" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" + "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": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } }, - { - "type": "consulting", - "url": "https://feross.org/support" + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "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": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "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 + } + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } } - ] - }, - "node_modules/react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - }, - "peerDependencies": { - "react": "17.0.2" } }, - "node_modules/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==", - "dev": true - }, - "node_modules/regenerator-runtime": { - "version": "0.13.10", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz", - "integrity": "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==", + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", "dev": true }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "dev": true, - "dependencies": { + "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "define-properties": "^1.1.3" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", + "dev": true, + "requires": { + "isobject": "^3.0.0" } }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" } }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "object.entries": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", + "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", "dev": true, - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" } }, - "node_modules/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==", + "object.fromentries": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", + "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", "dev": true, - "engines": { - "node": ">=4" + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" } }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "object.getownpropertydescriptors": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz", + "integrity": "sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==", "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" + "requires": { + "array.prototype.reduce": "^1.0.5", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "object.hasown": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", + "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "requires": { + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" } }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" + "requires": { + "isobject": "^3.0.1" } }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "object.values": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", "dev": true, - "dependencies": { + "requires": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" } }, - "node_modules/scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } + "objectorarray": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/objectorarray/-/objectorarray-1.0.5.tgz", + "integrity": "sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==", + "dev": true }, - "node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "requires": { + "ee-first": "1.1.1" } }, - "node_modules/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==", + "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": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" + "requires": { + "wrappy": "1" } }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, - "engines": { - "node": ">=8" + "requires": { + "mimic-fn": "^2.1.0" } }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" } }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, - "engines": { - "node": ">=8" + "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" } }, - "node_modules/source-map-js": { + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", + "dev": true + }, + "os-homedir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "engines": { - "node": ">=0.10.0" - } + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", + "dev": true, + "optional": true }, - "node_modules/string.prototype.matchall": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "p-all": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-all/-/p-all-2.1.0.tgz", + "integrity": "sha512-HbZxz5FONzz/z2gJfk6bFca0BCiSRF8jU3yCsWOen/vR6lZjfPOu/e7L3uFzTW1i0H8TlC3vqQstEJPQL4/uLA==", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4" + "requires": { + "p-map": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "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 + } } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==", + "dev": true + }, + "p-event": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", + "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "requires": { + "p-timeout": "^3.1.0" + } + }, + "p-filter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", + "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", + "dev": true, + "requires": { + "p-map": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "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 + } } }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "requires": { + "yocto-queue": "^0.1.0" } }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" + "requires": { + "p-limit": "^3.0.2" } }, - "node_modules/strip-bom": { + "p-map": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dev": true, - "engines": { - "node": ">=4" + "requires": { + "aggregate-error": "^3.0.0" } }, - "node_modules/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==", + "p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "requires": { + "p-finally": "^1.0.0" } }, - "node_modules/styled-jsx": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.7.tgz", - "integrity": "sha512-b3sUzamS086YLRuvnaDigdAewz1/EFYlHpYBP5mZovKEdQQOIIYq8lApylub3HHZ6xFjV051kkGU7cudJmrXEA==", - "engines": { - "node": ">= 12.0.0" - }, - "peerDependencies": { - "react": ">= 16.8.0 || 17.x.x || ^18.0.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 + }, + "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" }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true }, - "babel-plugin-macros": { - "optional": true + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } } } }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "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==", + "requires": { + "callsites": "^3.0.0" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/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==", + "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, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" + "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" } }, - "node_modules/tsconfig-paths": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", - "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", "dev": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" + "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" } }, - "node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "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.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", "dev": true }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", + "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 + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "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 + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, + "pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" + "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" } }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "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 + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "optional": true }, - "node_modules/typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" + "optional": true, + "requires": { + "pinkie": "^2.0.0" } }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "dev": true + }, + "pkg-dir": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", + "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "requires": { + "find-up": "^5.0.0" } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "pnp-webpack-plugin": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", + "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==", "dev": true, - "dependencies": { - "punycode": "^2.1.0" + "requires": { + "ts-pnp": "^1.1.6" } }, - "node_modules/use-sync-external-store": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", - "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "polished": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/polished/-/polished-4.2.2.tgz", + "integrity": "sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ==", + "dev": true, + "requires": { + "@babel/runtime": "^7.17.8" } }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", "dev": true }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" + "postcss": { + "version": "8.4.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", + "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" } }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "postcss-flexbugs-fixes": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz", + "integrity": "sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ==", "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "requires": { + "postcss": "^7.0.26" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.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 + } } }, - "node_modules/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==", + "postcss-loader": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.3.0.tgz", + "integrity": "sha512-M/dSoIiNDOo8Rk0mUqoj4kpGq91gcxCfb9PoyZVdZ76/AuhxylHDYZblNE8o+EQ9AMSASeMFEKxZf5aU6wlx1Q==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.4" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", "dev": true }, - "node_modules/yallist": { + "postcss-modules-local-by-default": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@babel/runtime": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", - "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", "dev": true, "requires": { - "regenerator-runtime": "^0.13.10" + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" } }, - "@babel/runtime-corejs3": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.20.1.tgz", - "integrity": "sha512-CGulbEDcg/ND1Im7fUNRZdGXmX2MTWVVZacQi/6DiKE5HNwZ3aVTm5PV4lO8HHz0B2h8WQyvKKjbX5XgTtydsg==", + "postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", "dev": true, "requires": { - "core-js-pure": "^3.25.1", - "regenerator-runtime": "^0.13.10" + "postcss-selector-parser": "^6.0.4" } }, - "@eslint/eslintrc": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", - "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", + "postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" + "icss-utils": "^5.0.0" } }, - "@humanwhocodes/config-array": { - "version": "0.10.7", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz", - "integrity": "sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==", + "postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", "dev": true, "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" } }, - "@humanwhocodes/gitignore-to-minimatch": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", - "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, - "@humanwhocodes/object-schema": { + "prelude-ls": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, - "@next/env": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/env/-/env-12.3.3.tgz", - "integrity": "sha512-H2pKuOasV9RgvVaWosB2rGSNeQShQpiDaF4EEjLyagIc3HwqdOw2/VAG/8Lq+adOwPv2P73O1hulTNad3k5MDw==" + "prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true }, - "@next/eslint-plugin-next": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.0.3.tgz", - "integrity": "sha512-slmTAHNKDyc7jhx4VF8lFbmOPWJ3PShtUUWpb6x9+ga59CyOxgP6AdcDhxfapnWYACKe/TwYiaveufu7LqXgZg==", + "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": { - "glob": "7.1.7" + "fast-diff": "^1.1.2" } }, - "@next/swc-android-arm-eabi": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.3.3.tgz", - "integrity": "sha512-5O/ZIX6hlIRGMy1R2f/8WiCZ4Hp4WTC0FcTuz8ycQ28j/mzDnmzjVoayVVr+ZmfEKQayFrRu+vxHjFyY0JGQlQ==", - "optional": true - }, - "@next/swc-android-arm64": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.3.3.tgz", - "integrity": "sha512-2QWreRmlxYRDtnLYn+BI8oukHwcP7W0zGIY5R2mEXRjI4ARqCLdu8RmcT9Vemw7RfeAVKA/4cv/9PY0pCcQpNA==", - "optional": true - }, - "@next/swc-darwin-arm64": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.3.3.tgz", - "integrity": "sha512-GtZdDLerM+VToCMFp+W+WhnT6sxHePQH4xZZiYD/Y8KFiwHbDRcJr2FPG0bAJnGNiSvv/QQnBq74wjZ9+7vhcQ==", - "optional": true - }, - "@next/swc-darwin-x64": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.3.3.tgz", - "integrity": "sha512-gRYvTKrRYynjFQUDJ+upHMcBiNz0ii0m7zGgmUTlTSmrBWqVSzx79EHYT7Nn4GWHM+a/W+2VXfu+lqHcJeQ9gQ==", - "optional": true + "pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dev": true, + "requires": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } }, - "@next/swc-freebsd-x64": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.3.3.tgz", - "integrity": "sha512-r+GLATzCjjQI82bgrIPXWEYBwZonSO64OThk5wU6HduZlDYTEDxZsFNoNoesCDWCgRrgg+OXj7WLNy1WlvfX7w==", - "optional": true + "pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + } + } }, - "@next/swc-linux-arm-gnueabihf": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.3.3.tgz", - "integrity": "sha512-juvRj1QX9jmQScL4nV0rROtYUFgWP76zfdn1fdfZ2BhvwUugIAq8x+jLVGlnXKUhDrP9+RrAufqXjjVkK+uBxA==", - "optional": true + "pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", + "dev": true }, - "@next/swc-linux-arm64-gnu": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.3.3.tgz", - "integrity": "sha512-hzinybStPB+SzS68hR5rzOngOH7Yd/jFuWGeg9qS5WifYXHpqwGH2BQeKpjVV0iJuyO9r309JKrRWMrbfhnuBA==", - "optional": true + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true }, - "@next/swc-linux-arm64-musl": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.3.3.tgz", - "integrity": "sha512-oyfQYljCwf+9zUu1YkTZbRbyxmcHzvJPMGOxC3kJOReh3kCUoGcmvAxUPMtFD6FSYjJ+eaog4+2IFHtYuAw/bQ==", - "optional": true + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, - "@next/swc-linux-x64-gnu": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.3.3.tgz", - "integrity": "sha512-epv4FMazj/XG70KTTnrZ0H1VtL6DeWOvyHLHYy7f5PdgDpBXpDTFjVqhP8NFNH8HmaDDdeL1NvQD07AXhyvUKA==", - "optional": true + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true }, - "@next/swc-linux-x64-musl": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.3.3.tgz", - "integrity": "sha512-bG5QODFy59XnSFTiPyIAt+rbPdphtvQMibtOVvyjwIwsBUw7swJ6k+6PSPVYEYpi6SHzi3qYBsro39ayGJKQJg==", - "optional": true + "promise.allsettled": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.6.tgz", + "integrity": "sha512-22wJUOD3zswWFqgwjNHa1965LvqTX87WPu/lreY2KSd7SVcERfuZ4GfUaOnJNnvtoIv2yXT/W00YIGMetXtFXg==", + "dev": true, + "requires": { + "array.prototype.map": "^1.0.5", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "iterate-value": "^1.0.2" + } }, - "@next/swc-win32-arm64-msvc": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.3.3.tgz", - "integrity": "sha512-FbnT3reJ3MbTJ5W0hvlCCGGVDSpburzT5XGC9ljBJ4kr+85iNTLjv7+vrPeDdwHEqtGmdZgnabkLVCI4yFyCag==", - "optional": true + "promise.prototype.finally": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/promise.prototype.finally/-/promise.prototype.finally-3.1.4.tgz", + "integrity": "sha512-nNc3YbgMfLzqtqvO/q5DP6RR0SiHI9pUPGzyDf1q+usTwCN2kjvAnJkBb7bHe3o+fFSBPpsGMoYtaSi+LTNqng==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } }, - "@next/swc-win32-ia32-msvc": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.3.3.tgz", - "integrity": "sha512-M/fKZC2tMGWA6eTsIniNEBpx2prdR8lIxvSO3gv5P6ymZOGVWCvEMksnTkPAjHnU6d8r8eCiuGKm3UNo7zCTpQ==", - "optional": true + "prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } }, - "@next/swc-win32-x64-msvc": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.3.3.tgz", - "integrity": "sha512-Ku9mfGwmNtk44o4B/jEWUxBAT4tJ3S7QbBMLJdL1GmtRZ05LGL36OqWjLvBPr8dFiHOQQbYoAmYfQw7zeGypYA==", - "optional": true + "prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "property-information": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", + "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", "dev": true, "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "xtend": "^4.0.0" + }, + "dependencies": { + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + } } }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", "dev": true }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "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": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } } }, - "@rushstack/eslint-patch": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", - "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==", + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "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==", "dev": true }, - "@swc/helpers": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.11.tgz", - "integrity": "sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==", + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, "requires": { - "tslib": "^2.4.0" + "side-channel": "^1.0.4" } }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", "dev": true }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", "dev": true }, - "@types/node": { - "version": "18.11.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", - "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", + "queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "dev": true, + "requires": { + "inherits": "~2.0.3" + } + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, - "@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", + "ramda": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.28.0.tgz", + "integrity": "sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA==", "dev": true }, - "@types/react": { - "version": "18.0.25", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.25.tgz", - "integrity": "sha512-xD6c0KDT4m7n9uD4ZHi02lzskaiqcBxf4zi+tXZY98a04wvc0hi/TcCPC2FOESZi51Nd7tlUeOJY8RofL799/g==", + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" + "safe-buffer": "^5.1.0" } }, - "@types/react-dom": { - "version": "18.0.9", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.9.tgz", - "integrity": "sha512-qnVvHxASt/H7i+XG1U1xMiY5t+IHcPGUK7TDMDzom08xa7e86eCeKOiLZezwCKVxJn6NEiiy2ekgX8aQssjIKg==", + "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": { - "@types/react": "*" + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" } }, - "@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", + "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 }, - "@types/semver": { - "version": "7.3.13", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", - "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", - "dev": true + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + } + } }, - "@typescript-eslint/eslint-plugin": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.43.0.tgz", - "integrity": "sha512-wNPzG+eDR6+hhW4yobEmpR36jrqqQv1vxBq5LJO3fBAktjkvekfr4BRl+3Fn1CM/A+s8/EiGUbOMDoYqWdbtXA==", + "raw-loader": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz", + "integrity": "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.43.0", - "@typescript-eslint/type-utils": "5.43.0", - "@typescript-eslint/utils": "5.43.0", - "debug": "^4.3.4", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" } }, - "@typescript-eslint/parser": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.43.0.tgz", - "integrity": "sha512-2iHUK2Lh7PwNUlhFxxLI2haSDNyXvebBO9izhjhMoDC+S3XI9qt2DGFUsiJ89m2k7gGYch2aEpYqV5F/+nwZug==", + "react": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "react-docgen": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/react-docgen/-/react-docgen-5.4.3.tgz", + "integrity": "sha512-xlLJyOlnfr8lLEEeaDZ+X2J/KJoe6Nr9AzxnkdQWush5hz2ZSu66w6iLMOScMmxoSHWpWMn+k3v5ZiyCfcWsOA==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.43.0", - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/typescript-estree": "5.43.0", - "debug": "^4.3.4" + "@babel/core": "^7.7.5", + "@babel/generator": "^7.12.11", + "@babel/runtime": "^7.7.6", + "ast-types": "^0.14.2", + "commander": "^2.19.0", + "doctrine": "^3.0.0", + "estree-to-babel": "^3.1.0", + "neo-async": "^2.6.1", + "node-dir": "^0.1.10", + "strip-indent": "^3.0.0" + }, + "dependencies": { + "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==", + "dev": true + } } }, - "@typescript-eslint/scope-manager": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.43.0.tgz", - "integrity": "sha512-XNWnGaqAtTJsUiZaoiGIrdJYHsUOd3BZ3Qj5zKp9w6km6HsrjPk/TGZv0qMTWyWj0+1QOqpHQ2gZOLXaGA9Ekw==", + "react-docgen-typescript": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/react-docgen-typescript/-/react-docgen-typescript-2.2.2.tgz", + "integrity": "sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==", + "dev": true + }, + "react-dom": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + } + }, + "react-element-to-jsx-string": { + "version": "14.3.4", + "resolved": "https://registry.npmjs.org/react-element-to-jsx-string/-/react-element-to-jsx-string-14.3.4.tgz", + "integrity": "sha512-t4ZwvV6vwNxzujDQ+37bspnLwA4JlgUPWhLjBJWsNIDceAf6ZKUTCjdm08cN6WeZ5pTMKiCJkmAYnpmR4Bm+dg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/visitor-keys": "5.43.0" + "@base2/pretty-print-object": "1.0.1", + "is-plain-object": "5.0.0", + "react-is": "17.0.2" + }, + "dependencies": { + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + } } }, - "@typescript-eslint/type-utils": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.43.0.tgz", - "integrity": "sha512-K21f+KY2/VvYggLf5Pk4tgBOPs2otTaIHy2zjclo7UZGLyFH86VfUOm5iq+OtDtxq/Zwu2I3ujDBykVW4Xtmtg==", + "react-inspector": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/react-inspector/-/react-inspector-5.1.1.tgz", + "integrity": "sha512-GURDaYzoLbW8pMGXwYPDBIv6nqei4kK7LPRZ9q9HCZF54wqXz/dnylBp/kfE9XmekBhHvLDdcYeyIwSrvtOiWg==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "5.43.0", - "@typescript-eslint/utils": "5.43.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" + "@babel/runtime": "^7.0.0", + "is-dom": "^1.0.0", + "prop-types": "^15.0.0" } }, - "@typescript-eslint/types": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.43.0.tgz", - "integrity": "sha512-jpsbcD0x6AUvV7tyOlyvon0aUsQpF8W+7TpJntfCUWU1qaIKu2K34pMwQKSzQH8ORgUrGYY6pVIh1Pi8TNeteg==", + "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-merge-refs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/react-merge-refs/-/react-merge-refs-1.1.0.tgz", + "integrity": "sha512-alTKsjEL0dKH/ru1Iyn7vliS2QRcBp9zZPGoWxUOvRGWPUYgjo+V01is7p04It6KhgrzhJGnIj9GgX8W4bZoCQ==", "dev": true }, - "@typescript-eslint/typescript-estree": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.43.0.tgz", - "integrity": "sha512-BZ1WVe+QQ+igWal2tDbNg1j2HWUkAa+CVqdU79L4HP9izQY6CNhXfkNwd1SS4+sSZAP/EthI1uiCSY/+H0pROg==", - "dev": true, + "react-property": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/react-property/-/react-property-2.0.0.tgz", + "integrity": "sha512-kzmNjIgU32mO4mmH5+iUyrqlpFQhF8K2k7eZ4fdLSOPFrD1XgEuSBv9LDEgxRXTMBqMd8ppT0x6TIzqE5pdGdw==" + }, + "react-refresh": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", + "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", + "dev": true + }, + "react-textarea-autosize": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.3.4.tgz", + "integrity": "sha512-CdtmP8Dc19xL8/R6sWvtknD/eCXkQr30dtvC4VmGInhRsfF8X/ihXCq6+9l9qbxmKRiq407/7z5fxE7cVWQNgQ==", "requires": { - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/visitor-keys": "5.43.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "@babel/runtime": "^7.10.2", + "use-composed-ref": "^1.3.0", + "use-latest": "^1.2.1" } }, - "@typescript-eslint/utils": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.43.0.tgz", - "integrity": "sha512-8nVpA6yX0sCjf7v/NDfeaOlyaIIqL7OaIGOWSPFqUKK59Gnumd3Wa+2l8oAaYO2lk0sO+SbWFWRSvhu8gLGv4A==", + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, "requires": { - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.43.0", - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/typescript-estree": "5.43.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0", - "semver": "^7.3.7" + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" }, "dependencies": { - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "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": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "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" + } + }, + "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" + } + }, + "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 } } }, - "@typescript-eslint/visitor-keys": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.43.0.tgz", - "integrity": "sha512-icl1jNH/d18OVHLfcwdL3bWUKsBeIiKYTGxMJCoGe7xFht+E4QgzOqoWYrU8XSLJWhVw8nTacbm03v23J/hFTg==", - "dev": true, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", "requires": { - "@typescript-eslint/types": "5.43.0", - "eslint-visitor-keys": "^3.3.0" + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" } }, - "acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, - "requires": {} + "requires": { + "picomatch": "^2.2.1" + } }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==", "dev": true, + "optional": true, "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" + "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": "sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==", + "dev": true, + "optional": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==", + "dev": true, + "optional": true, + "requires": { + "get-stdin": "^4.0.1" + } + } } }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", "dev": true }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", "dev": true, "requires": { - "color-convert": "^2.0.1" + "regenerate": "^1.4.2" } }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "regenerator-runtime": { + "version": "0.13.10", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz", + "integrity": "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==" }, - "aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "regenerator-transform": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", + "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", "dev": true, "requires": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" + "@babel/runtime": "^7.8.4" } }, - "array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "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": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "is-string": "^1.0.7" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" } }, - "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==", + "regex-parser": { + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", + "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", "dev": true }, - "array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - } - }, - "array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" } }, - "ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", - "dev": true - }, - "axe-core": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.5.2.tgz", - "integrity": "sha512-u2MVsXfew5HBvjsczCv+xlwdNnB1oQR9HlAcsejZttNjKKSkeDNVwB1vMThIUIFI9GoT57Vtk8iQLwqOfAkboA==", - "dev": true - }, - "axobject-query": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", - "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "regexpu-core": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz", + "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==", + "dev": true, + "requires": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsgen": "^0.7.1", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + } + }, + "regjsgen": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", + "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==", "dev": true }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dev": true, "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true + } } }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true + }, + "remark-external-links": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/remark-external-links/-/remark-external-links-8.0.0.tgz", + "integrity": "sha512-5vPSX0kHoSsqtdftSHhIYofVINC8qmp0nctkeU9YoJwV3YfiBRiI6cbFRJ0oI/1F9xS+bopXG0m2KS8VFscuKA==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "extend": "^3.0.0", + "is-absolute-url": "^3.0.0", + "mdast-util-definitions": "^4.0.0", + "space-separated-tokens": "^1.0.0", + "unist-util-visit": "^2.0.0" } }, - "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "remark-footnotes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", + "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==", + "dev": true + }, + "remark-mdx": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", + "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", "dev": true, "requires": { - "semver": "^7.0.0" + "@babel/core": "7.12.9", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-proposal-object-rest-spread": "7.12.1", + "@babel/plugin-syntax-jsx": "7.12.1", + "@mdx-js/util": "1.6.22", + "is-alphabetical": "1.0.4", + "remark-parse": "8.0.3", + "unified": "9.2.0" + }, + "dependencies": { + "@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + } + }, + "@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==", + "dev": true + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.12.1" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } } }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "remark-parse": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", + "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", "dev": true, "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "ccount": "^1.0.0", + "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": "^2.0.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": "^2.0.0", + "vfile-location": "^3.0.0", + "xtend": "^4.0.1" + }, + "dependencies": { + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + } } }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001431", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz", - "integrity": "sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==" - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "remark-slug": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/remark-slug/-/remark-slug-6.1.0.tgz", + "integrity": "sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ==", "dev": true, "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "github-slugger": "^1.0.0", + "mdast-util-to-string": "^1.0.0", + "unist-util-visit": "^2.0.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==", + "remark-squeeze-paragraphs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", "dev": true, "requires": { - "color-name": "~1.1.4" + "mdast-squeeze-paragraphs": "^4.0.0" } }, - "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==", + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", "dev": true }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dev": true, + "requires": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + } + } + }, + "repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", "dev": true }, - "core-js-pure": { - "version": "3.26.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.26.1.tgz", - "integrity": "sha512-VVXcDpp/xJ21KdULRq/lXdLzQAtX7+37LzpyfFM973il0tWSsDEoyzG38G14AjTpK9VTfiNM9jnFauq/CpaWGQ==", + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", "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==", + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==", "dev": true, + "optional": true, "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "is-finite": "^1.0.0" } }, - "csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true }, - "damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "requireindex": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", + "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", "dev": true }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "requires": { - "ms": "2.1.2" + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "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==" + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", "dev": true }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "resolve-url-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", + "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", "dev": true, "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "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 + } } }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "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 + }, + "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": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { - "path-type": "^4.0.0" + "glob": "^7.1.3" } }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, "requires": { - "esutils": "^2.0.2" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", "dev": true }, - "es-abstract": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", - "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" + "queue-microtask": "^1.2.2" } }, - "es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==", "dev": true, "requires": { - "has": "^1.0.3" + "aproba": "^1.1.1" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + } } }, - "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==", + "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==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", "dev": true, "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "ret": "~0.1.10" } }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "eslint": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.22.0.tgz", - "integrity": "sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA==", + "sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.10.4", - "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.3", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "globby": "^11.1.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "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" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "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" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.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==", + "dev": true + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "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" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "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": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } } }, - "eslint-config-next": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.0.3.tgz", - "integrity": "sha512-i2JoQP8gGv303GjXTonA27fm1ckRRkRoAP1WYEQgN0D2DDoFeBPqlJgHlMHnXKWjmNct/sW8jQEvy9am2juc8g==", + "sass-loader": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz", + "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", "dev": true, "requires": { - "@next/eslint-plugin-next": "13.0.3", - "@rushstack/eslint-patch": "^1.1.3", - "@typescript-eslint/parser": "^5.42.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^2.7.1", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.31.7", - "eslint-plugin-react-hooks": "^4.5.0" + "klona": "^2.0.4", + "neo-async": "^2.6.2" } }, - "eslint-config-standard": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz", - "integrity": "sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==", + "scheduler": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, - "requires": {} + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } }, - "eslint-config-standard-with-typescript": { - "version": "23.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-23.0.0.tgz", - "integrity": "sha512-iaaWifImn37Z1OXbNW1es7KI+S7D408F9ys0bpaQf2temeBWlvb0Nc5qHkOgYaRb5QxTZT32GGeN1gtswASOXA==", + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "requires": { - "@typescript-eslint/parser": "^5.0.0", - "eslint-config-standard": "17.0.0" + "lru-cache": "^6.0.0" } }, - "eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dev": true, "requires": { - "debug": "^3.2.7", - "resolve": "^1.20.0" + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" }, "dependencies": { "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "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.1.1" + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true } } }, - "eslint-import-resolver-typescript": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz", - "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==", + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, "requires": { - "debug": "^4.3.4", - "glob": "^7.2.0", - "is-glob": "^4.0.3", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" - }, - "dependencies": { - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } + "randombytes": "^2.1.0" } }, - "eslint-module-utils": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", - "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", + "serve-favicon": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.5.0.tgz", + "integrity": "sha512-FMW2RvqNr03x+C0WxTyu6sOv21oOjkq5j8tjquWccwa6ScNyGFOGJVpuS1NmTVGBAHS07xnSKotgf2ehQmf9iA==", "dev": true, "requires": { - "debug": "^3.2.7" + "etag": "~1.8.1", + "fresh": "0.5.2", + "ms": "2.1.1", + "parseurl": "~1.3.2", + "safe-buffer": "5.1.1" }, "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true } } }, - "eslint-plugin-es": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", - "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", + "serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dev": true, "requires": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "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": { - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, "requires": { - "eslint-visitor-keys": "^1.1.0" + "is-extendable": "^0.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==", + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true } } }, - "eslint-plugin-import": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", - "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "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": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", - "has": "^1.0.3", - "is-core-module": "^2.8.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" + "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" + } + }, + "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 + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "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": { @@ -4337,1425 +41608,2214 @@ "ms": "2.0.0" } }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, "requires": { - "esutils": "^2.0.2" + "is-descriptor": "^0.1.0" } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "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": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true - } - } - }, - "eslint-plugin-jsx-a11y": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz", - "integrity": "sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==", - "dev": true, - "requires": { - "@babel/runtime": "^7.18.9", - "aria-query": "^4.2.2", - "array-includes": "^3.1.5", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.4.3", - "axobject-query": "^2.2.0", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.2", - "language-tags": "^1.0.5", - "minimatch": "^3.1.2", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "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" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true + }, + "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 + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true } } }, - "eslint-plugin-n": { - "version": "15.5.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.5.1.tgz", - "integrity": "sha512-kAd+xhZm7brHoFLzKLB7/FGRFJNg/srmv67mqb7tto22rpr4wv/LV6RuXzAfv3jbab7+k1wi42PsIhGviywaaw==", - "dev": true, - "requires": { - "builtins": "^5.0.1", - "eslint-plugin-es": "^4.1.0", - "eslint-utils": "^3.0.0", - "ignore": "^5.1.1", - "is-core-module": "^2.11.0", - "minimatch": "^3.1.2", - "resolve": "^1.22.1", - "semver": "^7.3.8" - } - }, - "eslint-plugin-prettier": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", - "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "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": { - "prettier-linter-helpers": "^1.0.0" + "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": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + } } }, - "eslint-plugin-promise": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", - "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", - "dev": true, - "requires": {} - }, - "eslint-plugin-react": { - "version": "7.31.10", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.10.tgz", - "integrity": "sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA==", + "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": { - "array-includes": "^3.1.5", - "array.prototype.flatmap": "^1.3.0", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.5", - "object.fromentries": "^2.0.5", - "object.hasown": "^1.1.1", - "object.values": "^1.1.5", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.3", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.7" + "kind-of": "^3.2.0" }, "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" - } + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true }, - "resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "is-buffer": "^1.1.5" } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true } } }, - "eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "dev": true, - "requires": {} + "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 }, - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + }, + "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": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "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" } }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "requires": { - "eslint-visitor-keys": "^2.0.0" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" }, "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "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 } } }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", "dev": true }, - "espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "space-separated-tokens": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", + "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": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "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": { - "estraverse": "^5.1.0" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "spdx-license-ids": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", + "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, "requires": { - "estraverse": "^5.2.0" + "extend-shallow": "^3.0.0" } }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", "dev": true }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", "dev": true }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "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==", "dev": true }, - "fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", "dev": true, "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "define-property": "^0.2.5", + "object-copy": "^0.1.0" }, "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, "requires": { - "is-glob": "^4.0.1" + "is-descriptor": "^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": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "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": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "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 } } }, - "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==", + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "store2": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/store2/-/store2-2.14.2.tgz", + "integrity": "sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==", "dev": true }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "storybook-addon-mantine": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/storybook-addon-mantine/-/storybook-addon-mantine-1.2.0.tgz", + "integrity": "sha512-GuYmjZMNFNMa3lT1M/eH9nVLIxN4l54FLqn1uiJZ11dmbYfdHaO3IwTBrRrSFfwGtK2P8hiNPNIhXZ6+mBZMSQ==", "dev": true, "requires": { - "flat-cache": "^3.0.4" + "@babel/cli": "^7.18.6", + "@babel/core": "^7.18.6", + "@babel/preset-env": "^7.18.6", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "storybook-addon-mantine": "^1.0.0" + }, + "dependencies": { + "react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dev": true, + "requires": { + "loose-envify": "^1.1.0" + } + }, + "react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dev": true, + "requires": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + } + }, + "scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dev": true, + "requires": { + "loose-envify": "^1.1.0" + } + } } }, - "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==", + "storybook-addon-next": { + "version": "1.6.10", + "resolved": "https://registry.npmjs.org/storybook-addon-next/-/storybook-addon-next-1.6.10.tgz", + "integrity": "sha512-BYs2B5dHIfk5EXVKGC91LZJ5/z+fUjhG7mDfuZvSA0igCm7AZFbe2LJz8NxtIKJpQwiqsqSr62suAcggMRkBNg==", "dev": true, "requires": { - "to-regex-range": "^5.0.1" + "@storybook/addons": "^6.4.10", + "image-size": "^1.0.0", + "loader-utils": "^3.2.0", + "postcss-loader": "^6.2.1", + "resolve-url-loader": "^5.0.0", + "sass-loader": "^12.4.0", + "semver": "^7.3.5", + "tsconfig-paths": "^4.0.0", + "tsconfig-paths-webpack-plugin": "^4.0.0" + }, + "dependencies": { + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true + }, + "loader-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", + "dev": true + }, + "postcss-loader": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", + "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", + "dev": true, + "requires": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.5" + } + }, + "tsconfig-paths": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.1.0.tgz", + "integrity": "sha512-AHx4Euop/dXFC+Vx589alFba8QItjF+8hf8LtmuiCwHyI4rHXQtOOENaM8kvYf5fR0dRChy3wzWIZ9WbB7FWow==", + "dev": true, + "requires": { + "json5": "^2.2.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + } } }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "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": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "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": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" } }, - "flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "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": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + } } }, - "functional-red-black-tree": { + "stream-shift": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", "dev": true }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" }, - "get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + } } }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "string.prototype.matchall": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", + "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", "dev": true, "requires": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4" } }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "string.prototype.padend": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.4.tgz", + "integrity": "sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw==", "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" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" } }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "string.prototype.padstart": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/string.prototype.padstart/-/string.prototype.padstart-3.1.4.tgz", + "integrity": "sha512-XqOHj8horGsF+zwxraBvMTkBFM28sS/jHBJajh17JtJKA92qazidiQbLosV4UA18azvLOVKYo/E3g3T9Y5826w==", "dev": true, "requires": { - "is-glob": "^4.0.3" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" } }, - "globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", "dev": true, "requires": { - "type-fest": "^0.20.2" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" } }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", "dev": true, "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" } }, - "grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "function-bind": "^1.1.1" + "ansi-regex": "^5.0.1" } }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", "dev": true }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, "requires": { - "get-intrinsic": "^1.1.1" + "min-indent": "^1.0.0" } }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "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 }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "style-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", + "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", "dev": true, "requires": { - "has-symbols": "^1.0.2" + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" } }, - "husky": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.2.tgz", - "integrity": "sha512-Tkv80jtvbnkK3mYWxPZePGFpQ/tT3HNSs/sasF9P2YfkMezDl3ON37YN6jUUI4eTg5LcyVynlb6r4eyvOmspvg==", - "dev": true + "style-to-js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.0.tgz", + "integrity": "sha512-1OqefPDxGrlMwcbfpsTVRyzwdhr4W0uxYQzeA2F1CBc8WG04udg2+ybRnvh3XYL4TdHQrCahLtax2jc8xaE6rA==", + "requires": { + "style-to-object": "0.3.0" + } }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true + "style-to-object": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", + "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", + "requires": { + "inline-style-parser": "0.1.1" + } }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "styled-jsx": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.7.tgz", + "integrity": "sha512-b3sUzamS086YLRuvnaDigdAewz1/EFYlHpYBP5mZovKEdQQOIIYq8lApylub3HHZ6xFjV051kkGU7cudJmrXEA==" + }, + "stylis": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz", + "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "has-flag": "^4.0.0" } }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "symbol.prototype.description": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/symbol.prototype.description/-/symbol.prototype.description-1.0.5.tgz", + "integrity": "sha512-x738iXRYsrAt9WBhRCVG5BtIC3B7CUkFwbHW2zOvGtwM33s7JjrCDyq8V0zgMYVb5ymsL8+qkzzpANH63CPQaQ==", "dev": true, "requires": { - "once": "^1.3.0", - "wrappy": "1" + "call-bind": "^1.0.2", + "get-symbol-description": "^1.0.0", + "has-symbols": "^1.0.2", + "object.getownpropertydescriptors": "^2.1.2" } }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "synchronous-promise": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.16.tgz", + "integrity": "sha512-qImOD23aDfnIDNqlG1NOehdB9IYsn1V9oByPjKY1nakv2MQYCEMyX033/q+aEtYCpmYK1cv2+NTmlH+ra6GA5A==", "dev": true }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "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.1.12", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.12.tgz", + "integrity": "sha512-jU4TdemS31uABHd+Lt5WEYJuzn+TJTCBLljvIAHZOz6M9Os5pJ4dD+vRFLxPa/n3T0iEFzpi+0x1UfuDZYbRMw==", "dev": true, "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" } }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "telejson": { + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/telejson/-/telejson-6.0.8.tgz", + "integrity": "sha512-nerNXi+j8NK1QEfBHtZUN/aLdDcyupA//9kAboYLrtzZlPLpUfqbVGWb9zz91f/mIjRbAYhbgtnJHY8I1b5MBg==", "dev": true, "requires": { - "has-bigints": "^1.0.1" + "@types/is-function": "^1.0.0", + "global": "^4.4.0", + "is-function": "^1.0.2", + "is-regex": "^1.1.2", + "is-symbol": "^1.0.3", + "isobject": "^4.0.0", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3" + }, + "dependencies": { + "isobject": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz", + "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==", + "dev": true + } } }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "terser": { + "version": "5.15.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", + "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "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==", + "dev": true + } } }, - "is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true - }, - "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "terser-webpack-plugin": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", + "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", "dev": true, "requires": { - "has": "^1.0.3" + "@jridgewell/trace-mapping": "^0.3.14", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.14.1" + }, + "dependencies": { + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, "requires": { - "has-tostringtag": "^1.0.0" + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" } }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "through2": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.4.2.tgz", + "integrity": "sha512-45Llu+EwHKtAZYTPPVn3XZHBgakWMN3rokhEv5hu596XP+cNgplMg+Gj+1nmAvj+L0K7+N49zBKx5rah5u0QIQ==", + "requires": { + "readable-stream": "~1.0.17", + "xtend": "~2.1.1" + } + }, + "timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", "dev": true, "requires": { - "is-extglob": "^2.1.1" + "setimmediate": "^1.0.4" } }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", "dev": true }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", "dev": true, "requires": { - "has-tostringtag": "^1.0.0" + "kind-of": "^3.0.2" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "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": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" } }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "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": { - "call-bind": "^1.0.2" + "is-number": "^7.0.0" } }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==", + "dev": true + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw==", + "dev": true, + "optional": true + }, + "trim-trailing-lines": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", + "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==", + "dev": true + }, + "trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "dev": true + }, + "ts-dedent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", + "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", + "dev": true + }, + "ts-pnp": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", + "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==", + "dev": true + }, + "tsconfig-paths": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", "dev": true, "requires": { - "has-tostringtag": "^1.0.0" + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" } }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "tsconfig-paths-webpack-plugin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-4.0.0.tgz", + "integrity": "sha512-fw/7265mIWukrSHd0i+wSwx64kYUSAKPfxRDksjKIYTxSAp9W9/xcZVBF4Kl0eqQd5eBpAQ/oQrc5RyM/0c1GQ==", "dev": true, "requires": { - "has-symbols": "^1.0.2" + "chalk": "^4.1.0", + "enhanced-resolve": "^5.7.0", + "tsconfig-paths": "^4.0.0" + }, + "dependencies": { + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true + }, + "tsconfig-paths": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.1.0.tgz", + "integrity": "sha512-AHx4Euop/dXFC+Vx589alFba8QItjF+8hf8LtmuiCwHyI4rHXQtOOENaM8kvYf5fR0dRChy3wzWIZ9WbB7FWow==", + "dev": true, + "requires": { + "json5": "^2.2.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + } } }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "requires": { - "call-bind": "^1.0.2" + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } } }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==", "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": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "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": { - "argparse": "^2.0.1" + "prelude-ls": "^1.2.1" } }, - "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==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "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": { - "minimist": "^1.2.0" + "media-typer": "0.3.0", + "mime-types": "~2.1.24" } }, - "jsx-ast-utils": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", - "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, "requires": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" + "is-typedarray": "^1.0.0" } }, - "language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", + "typescript": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", + "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", "dev": true }, - "language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "dev": true, + "optional": true + }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, "requires": { - "language-subtag-registry": "~0.3.2" + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" } }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "unfetch": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", + "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==", + "dev": true + }, + "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==", "dev": true, "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" + "inherits": "^2.0.0", + "xtend": "^4.0.0" + }, + "dependencies": { + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + } } }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, "requires": { - "p-locate": "^5.0.0" + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" } }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", "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==", + "unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true + }, + "unified": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "dev": true, "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" } }, - "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==", + "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": { - "yallist": "^4.0.0" + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "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 - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "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": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" + "unique-slug": "^2.0.0" } }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "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": { - "brace-expansion": "^1.1.7" + "imurmurhash": "^0.1.4" } }, - "minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "unist-builder": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", + "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==", "dev": true }, - "natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "unist-util-generated": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", + "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", "dev": true }, - "next": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/next/-/next-12.3.3.tgz", - "integrity": "sha512-Rx2Y6Wl5R8E77NOfBupp/B9OPCklqfqD0yN2+rDivhMjd6hjVFH5n0WTDI4PWwDmZsdNcYt6NV85kJ3PLR+eNQ==", - "requires": { - "@next/env": "12.3.3", - "@next/swc-android-arm-eabi": "12.3.3", - "@next/swc-android-arm64": "12.3.3", - "@next/swc-darwin-arm64": "12.3.3", - "@next/swc-darwin-x64": "12.3.3", - "@next/swc-freebsd-x64": "12.3.3", - "@next/swc-linux-arm-gnueabihf": "12.3.3", - "@next/swc-linux-arm64-gnu": "12.3.3", - "@next/swc-linux-arm64-musl": "12.3.3", - "@next/swc-linux-x64-gnu": "12.3.3", - "@next/swc-linux-x64-musl": "12.3.3", - "@next/swc-win32-arm64-msvc": "12.3.3", - "@next/swc-win32-ia32-msvc": "12.3.3", - "@next/swc-win32-x64-msvc": "12.3.3", - "@swc/helpers": "0.4.11", - "caniuse-lite": "^1.0.30001406", - "postcss": "8.4.14", - "styled-jsx": "5.0.7", - "use-sync-external-store": "1.2.0" - } - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", "dev": true }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "unist-util-position": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", + "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", "dev": true }, - "object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "unist-util-remove": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz", + "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" + "unist-util-is": "^4.0.0" } }, - "object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "unist-util-remove-position": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", + "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "unist-util-visit": "^2.0.0" } }, - "object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "@types/unist": "^2.0.2" } }, - "object.hasown": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", - "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", + "unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", "dev": true, "requires": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" } }, - "object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" } }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", "dev": true, "requires": { - "wrappy": "1" + "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": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", + "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": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "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": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + } } }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "untildify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-2.1.0.tgz", + "integrity": "sha512-sJjbDp2GodvkB0FZZcn7k6afVisqX5BZD7Yq3xp4nN2O15BBK0cLm3Vwn2vQaF7UDS0UUsrQMkkplmDI5fskig==", "dev": true, + "optional": 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" + "os-homedir": "^1.0.0" } }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } + "optional": true }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", "dev": true, "requires": { - "p-limit": "^3.0.2" + "escalade": "^3.1.1", + "picocolors": "^1.0.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==", + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "requires": { - "callsites": "^3.0.0" + "punycode": "^2.1.0" } }, - "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 - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", "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 + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", + "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": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", + "dev": true + } + } }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "url-loader": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", + "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "mime-types": "^2.1.27", + "schema-utils": "^3.0.0" + } }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "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 }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "use-composed-ref": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", + "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==" }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true + "use-isomorphic-layout-effect": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", + "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==" }, - "postcss": { - "version": "8.4.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", - "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "use-latest": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", + "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", "requires": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "use-isomorphic-layout-effect": "^1.1.1" } }, - "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.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", - "dev": true + "use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==" }, - "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==", + "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": { - "fast-diff": "^1.1.2" + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + } } }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "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": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" } }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", "dev": true }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "dev": true }, - "react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + }, + "uuid-browser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/uuid-browser/-/uuid-browser-3.1.0.tgz", + "integrity": "sha512-dsNgbLaTrd6l3MMxTtouOCFw4CBFc/3a+GgYA2YyrJvyQ1u6q4pcu3ktLoUZ/VN/Aw9WsauazbgsgdfVWgAKQg==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "v8-to-istanbul": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", + "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", + "dev": true, "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" } }, - "react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "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": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, - "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==", - "dev": true - }, - "regenerator-runtime": { - "version": "0.13.10", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz", - "integrity": "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==", + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "dev": true }, - "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" } }, - "regexpp": { + "vfile-location": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", + "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", "dev": true }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", "dev": true, "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.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==", + "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 }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true + "walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "requires": { + "makeerror": "1.0.12" + } }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", "dev": true, "requires": { - "glob": "^7.1.3" + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" } }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "watchpack-chokidar2": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", + "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", "dev": true, + "optional": true, "requires": { - "queue-microtask": "^1.2.2" + "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": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "optional": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "optional": true + }, + "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "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": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "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": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "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": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "dev": true, + "optional": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", + "dev": true, + "optional": 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==", + "dev": true, + "optional": true + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "optional": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "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" + } + }, + "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, + "optional": 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" + } + }, + "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, + "optional": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "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, + "optional": true, + "requires": { + "safe-buffer": "~5.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": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "optional": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "web-namespaces": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", + "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", + "dev": true + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "webpack": { + "version": "5.75.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", + "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "dependencies": { + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + } } }, - "safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "webpack-dev-middleware": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-4.3.0.tgz", + "integrity": "sha512-PjwyVY95/bhBh6VUqt6z4THplYcsvQ8YNNBTBM873xLVmw8FLeALn0qurHbs9EmcfhzQis/eoqypSnZeuUz26w==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" + "colorette": "^1.2.2", + "mem": "^8.1.1", + "memfs": "^3.2.2", + "mime-types": "^2.1.30", + "range-parser": "^1.2.1", + "schema-utils": "^3.0.0" } }, - "scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } + "webpack-filter-warnings-plugin": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/webpack-filter-warnings-plugin/-/webpack-filter-warnings-plugin-1.2.1.tgz", + "integrity": "sha512-Ez6ytc9IseDMLPo0qCuNNYzgtUl8NovOqjIq4uAU8LTD4uoa1w1KpZyyzFtLTEMZpkkOkLfL9eN+KGYdk1Qtwg==", + "dev": true }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "webpack-hot-middleware": { + "version": "2.25.3", + "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.3.tgz", + "integrity": "sha512-IK/0WAHs7MTu1tzLTjio73LjS3Ov+VvBKQmE8WPlJutgG5zT6Urgq/BbAdRrHTRpyzK0dvAvFh1Qg98akxgZpA==", "dev": true, "requires": { - "lru-cache": "^6.0.0" + "ansi-html-community": "0.0.8", + "html-entities": "^2.1.0", + "strip-ansi": "^6.0.0" } }, - "shebang-command": { + "webpack-log": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", "dev": true, "requires": { - "shebang-regex": "^3.0.0" + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" } }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "dev": true }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "webpack-virtual-modules": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.4.6.tgz", + "integrity": "sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==", + "dev": true + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" } }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true + "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" + } }, - "source-map-js": { + "which-boxed-primitive": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" - }, - "string.prototype.matchall": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4" + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" } }, - "string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" } }, - "string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", "dev": true, "requires": { + "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" } }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "dev": true, "requires": { - "ansi-regex": "^5.0.1" + "string-width": "^1.0.2 || 2 || 3 || 4" } }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "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 - }, - "styled-jsx": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.7.tgz", - "integrity": "sha512-b3sUzamS086YLRuvnaDigdAewz1/EFYlHpYBP5mZovKEdQQOIIYq8lApylub3HHZ6xFjV051kkGU7cudJmrXEA==", - "requires": {} - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", "dev": true, "requires": { - "has-flag": "^4.0.0" + "string-width": "^4.0.0" } }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "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 }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", "dev": true }, - "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" - } - }, - "tsconfig-paths": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", - "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "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": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" + "errno": "~0.1.7" } }, - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "worker-rpc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz", + "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==", "dev": true, "requires": { - "tslib": "^1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } + "microevent.ts": "~0.1.1" } }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "requires": { - "prelude-ls": "^1.2.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" } }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - }, - "typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", - "dev": true - }, - "unbox-primitive": { + "wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, "requires": { - "punycode": "^2.1.0" + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" } }, - "use-sync-external-store": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", - "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", - "requires": {} - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", "dev": true }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "x-default-browser": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/x-default-browser/-/x-default-browser-0.4.0.tgz", + "integrity": "sha512-7LKo7RtWfoFN/rHx1UELv/2zHGMx8MkZKDq1xENmOCTkfIqZJ0zZ26NEJX8czhnPXVcqS0ARjjfJB+eJ0/5Cvw==", "dev": true, "requires": { - "isexe": "^2.0.0" + "default-browser-id": "^1.0.4" } }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, + "xtend": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==", "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "object-keys": "~0.4.0" + }, + "dependencies": { + "object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==" + } } }, - "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 - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, "yallist": { @@ -5764,11 +43824,43 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true + }, + "zwitch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", + "dev": true } } } diff --git a/frontend/package.json b/frontend/package.json index 4e24a563..44010639 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -13,28 +13,52 @@ "check-format": "prettier --check .", "check-lint": "eslint . --ext ts --ext tsx --ext js", "format": "prettier --write .", - "test-all": "npm run check-format && npm run check-lint && npm run check-types && npm run build" + "test-all": "npm run check-format && npm run check-lint && npm run check-types && npm run build", + "storybook": "start-storybook -p 6006", + "build-storybook": "build-storybook" }, "dependencies": { + "@emotion/react": "^11.10.5", + "@emotion/server": "^11.10.0", + "@emotion/styled": "^11.10.5", + "@mantine/core": "^5.7.2", + "@mantine/hooks": "^5.7.2", + "@mantine/next": "^5.7.2", + "@mantine/nprogress": "^5.7.2", + "@tabler/icons": "^1.111.0", "next": "^12.3.3", "react": "^17.0.2", "react-dom": "^17.0.2" }, "devDependencies": { + "@babel/core": "^7.20.2", + "@storybook/addon-actions": "^6.5.13", + "@storybook/addon-essentials": "^6.5.13", + "@storybook/addon-interactions": "^6.5.13", + "@storybook/addon-links": "^6.5.13", + "@storybook/builder-webpack5": "^6.5.13", + "@storybook/manager-webpack5": "^6.5.13", + "@storybook/react": "^6.5.13", + "@storybook/testing-library": "^0.0.13", "@types/node": "^18.11.9", "@types/react": "^18.0.25", "@types/react-dom": "^18.0.9", "@typescript-eslint/eslint-plugin": "^5.43.0", + "babel-loader": "^8.3.0", "eslint": "8.22.0", "eslint-config-next": "^13.0.3", + "eslint-config-prettier": "^8.5.0", "eslint-config-standard-with-typescript": "^23.0.0", "eslint-plugin-import": "^2.26.0", "eslint-plugin-n": "^15.5.1", "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-promise": "^6.1.1", "eslint-plugin-react": "^7.31.10", + "eslint-plugin-storybook": "^0.6.7", "husky": "^8.0.2", "prettier": "^2.7.1", + "storybook-addon-mantine": "^1.2.0", + "storybook-addon-next": "^1.6.10", "typescript": "^4.8.4" } } diff --git a/frontend/public/fonts/NanumSquareNeo-Bold.woff2 b/frontend/public/fonts/NanumSquareNeo-Bold.woff2 new file mode 100755 index 0000000000000000000000000000000000000000..0f9b381c30d93bb025786c1f67e496d3deb1230b GIT binary patch literal 384992 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

b-1wR(&@^lu8#1 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�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 z¬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 JX&O`TLltOlYkF1plT#gL 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 z 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

@Es$Q6wSp1IWMboTWv1jc9KxrHm6GG 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 IX95P#0_h2xMF0Q* literal 0 HcmV?d00001 diff --git a/frontend/public/fonts/NanumSquareNeo-ExtraBold.woff2 b/frontend/public/fonts/NanumSquareNeo-ExtraBold.woff2 new file mode 100755 index 0000000000000000000000000000000000000000..9e8ac1970e691377a1cc37d2023a288c6e159edf GIT binary patch literal 388128 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 z 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 z zm7i`rec5J7*t3d81sQucz(_=5FN*krm}uY9+dm`SbJxK7KFp#yYY|WsBt1cwl7x1& znLjtI5lP-*Jr5D)_Vi@Z+x5M&M~w9<{7-Fu<&vVQXBC&R+ymy)RuH50B4c~|6Mx$Z zSo8|W*ZR=NjwrwQTg%Fd&ql)ekWKO`9SnD&XXUesyNc7;>(OKT4f|?qgXs#_NPCmKA(k*&}A3OM;TO zb{m;vlPodg8b~!Hvhn%9ItRQxg$ z&I@|v6RiM1`J?stRmw%VX}Ho9XaAUZVuENlRbMH`u}8o#uz$HN$&M)s4HDY_!ohI_gxPmBwid)HpYjN(#gf%>%V3wr!*u^5Zg0x!eTym?uXyd1E1+dFmiWz`06$bwpwQ~j2v zFji!j2;M}f`+Zmi&&*EYTCmFCHJM+7;#B{lczv1r-9VZ#RTd#*%K$6>&k2ntKunx% zj|-Ftbm-L_iDzL|AF^iS&=C^I7B=wTw+vurr*7f(`BG$h4T=y9*d_R)Y|(Zf(R>Cm z3v|UAgV!Wsw-#IBoFdhes?7!>joGpcX|{A5(u?R7!MyMZuBMG_&JFctk1B#C*#$Dm z3YCICE3;MnuW#vj+HVa`R3-N;!cuEDb0cLG8QZV%8ic%WZ^68~3Z&$0;N7gPuQGT| zItS{9iRI5F=>AoRUZ4bc!+TFrcL-$XBL8VrMl{xh6%#3t9;6-^e=XL_LS<~35Saua zFvEKgp>7mFPt2f$N+Ay&6&tDH`KXZoTwo)AC3c52{S=BH-JrXR_Q(-xnAa(y-q6ed z5hKz-fJ}gZ_igyHqY^M02YzOhi@5)6+9}sjgSye}shi~*SZ)&_j{staui6eTKU};U zWj^5?bW+b5*e;Gxcle2>DBxgG0be`GEUfA!nKB7?UZu?N{+!IiPweVRNqeVx-!*b96CZFrAXP*@(NnT9|d2&&|i-Zb8x@XQMksV z0w>$O(Jwx3UR#hj^{=`~=9?))xq#~(vmBxBfWxXBr?J8=^o>mJS165;W=jhye$eGS zYml|BLBP>kCU2@ry zDhoUzPD26rp8+u3FVuYEtz8!d3!gAkAQf;09zKcMI#Q|bC43R0B^SLVD7qEcyyQ17 zl^R>GYNxjGfLUkL`8CP>>4CZ+@~1>}dPxK$n{k!WN~Mdk8UNP!$(ow-<%UKqxNIJF zvhPlNzAZBE`72lcplrmyFph7Ghp?RWZ)!%j%5o~BymNn`)aO^c3RP*mmArBlM%D67 zoLjyp?HbhCs#Q6_<58_w{rzLRzSlrX4N0loU6$(4^B?AqpB!$Hcpv(5>WF}je-15Ue*!1(nwUn{rbT$v8o zo?3pdoJT!`W(9YyNF}vbL<-D4FRtYD?+K#k(2~(dkww%qm2X& zfv+DY!h}MHqcwx@I|mC5O-^8lWt>Lf_5XSpz}*@us=`|`FzKHui`QgL34CQ)B__WC zHYMV;yW1k!bztQaPZi$QmBHYZovSeUO@wpn`9phTX?O2uU&d2JnTUOlDBP#ZS$64q z?-7?%8FeZ}mE$MjijH2;D%E?cAOD}|-`mm}WVrf=#h1f|W#L_mJ$0>)@*Cx7_V6Y# ztyb%Q_X8go#!>!;a(hCR^vp@RNj@RZG3x7JkG1M{l%w z;6qRnDx*yz;{HPM)XgwnLW3YuzXVZ-(j@8?nU!XdjR)H>NWNSOzawK+`FKKG_Eo47c-6sRnpMFYH5e%6B@fh)?^GhzH>eL#z!f@iZ}e16zDV-iz+It|^7dXfd*zCN!}{19~(S4U12XsnQGD%VS7I zA?~6?&f8v!gER6&ont?*$Ssr*b?pxJ09)piXh$-IF6kfswU1^%a~RfYKlpMWAo6`R z)!xiDQ~)FIk?^%%g%veuxB~(XF#n(=&_R?CP7sC!+VLX&3UBSgR~_tT@dkh{LX&Mn zi4C(_Lj3&1gJS9R05KA~!y+}k47UXS-v{5zHUJ$FvTgSuZz3N^z)=IH9pT71fK&45 zj>NTXq~l(HZ5nOZw`3guQc}~G7psSX471(X*T|pO?sqONwgRP4rdfI;e}XOsjLwT%eUii;%jC%u=T!17B$ltCtSJ`)QP)Ol5xJ%l7?CXDr&?fq1<3uIPS%z%`y5bBsN4bAB@iZeWy=g1$ zJjqaH@n){%exLcv(zu6Ax)14!{p%~T zMr&-8vUE7$wbcBBJ^?Cia}z{IA{r*^tXYVpLZW4ErF_I*^nVc-tp?&~<<+S9Yo!=q zT4TP{v$um-6foTd9I5rErn-G2UQQsX6%2zm7zQOAV~4%&}2E z82HP90NoYZg`smY6(5mY0E4yVm74Q)mFo|hNi(}&?7R`vMAkf|Ew2^$DyIbL`zkT*8k}ypCkVjzw zrl5CC`P$y`qy>?(!8l!F@&>ZFPfXfC5_cqCKfo8p@A-%q^OtTJF{>nBo zjp(-VJNk1&ad$D*9$W!%kgP2CJj51J!88d|^CEIn;XZM5i4geS^xIhCDN$tvR)DaM zjo+Lgs7V9Lx@6=5vaC-=8X(C!vIM>ENyRD|C?UWt(aNETF4_oJk-7XmEWqG9OaYuNjJ^iOH%TUZu52yfg*Kbf|D~`gN8eyJ60}LB3Gph*w#9RAZaJ!TvLJ1^I!P-5Ro-4D~XEsATDS)=ffI_ITA!40Kn^ zTaJW(3AIamZ2CnV;VBWF=jaGFi5JB-xL|=W0-$cST=6V|WvY2Dh=|RCxbfX3%4AUlz@Z02 zrHJNHqMRg0Y|H2ttX^C>WI+VLhD^WU@zuO@^jCD|mqtAclEn}JM;gp>NcqF&%jzCG z+vWXIUKc>p?0=OSGSCsMmv--8dMr(`h%STx*fp{20kt=>u6pL?`W+zh4wgY7p-0g{ z5d<*gXeJ#ddY3s%m@6p{&>Okc%vY$B)Uq>46#Hto{rklapjn0pCYWm57V{^$(!ErE z{Qf?|2N0!PCp`?ii-ln++!WcEY{iL?##&6R9N&aUb`rjnx|FklBX&#F6QR?n?)$0! z0d3T7cM*hxad6HD-p2Zd;r)feH zN3^RREt-;6xP>M~pryB?HowYIk@{F%DjRli1~@X;L_IO7tbM*q3k@I)Si3;^-o!Vp zZ|NAsld7r1%^X9qn0QYluHj1lErWLA7*9E6n?*V!g{vMVOoWV<>VZ5-R%LRvCAIn0 zxNp<0LNdI$PDBSCp=9BV0Kba9wC8h}{-C(D-XMXUtv_>JOgaFcGZH(AR%>%V?6g!rD!4 z3Tc;Y|J`dQXMl@s5{Z0V$(A=U>YH;=IILLFH!84fCpv42Y!Qikl+NZNl$}I|<e(s@{?9;{o3lqJ zDZaG=I`PG#VkAP=&n6*43T>GMYZ_l6T^GF z)5mh%lVHUE@B%}rp-$h)9U}-0rA9jS4cg!h4y93ydVC!Aqm4AuT|lc^cqm~mB{l3c zh)#jY`6nSjl>QHC{Islt3}Z6+HDHE?GKLx}QxSCPzFNk*7%<}|OJ*v%gP5sV`cMVd zamW{?8FjYgJd7}7l+wMxl&9s4lH0E|(>IM95GDpd*L<7$pE_alEAryDkOr2)5D?+kI3F@jS$YdHiG3`A=e*Y)(elPJ? z8b`aDND{Up`FDhb(NieeozYSrQr6~*UZJVd)P|lXmHX?6DJ5-_ng18}dLblQ!}ep1 zqAjjhV+lC)M)igCYRITiXQUT}l8S>D%_}*P|Lgr{7s#u%$`)RBrG~QXVtBP?3hJ`E ztdiQ5rm-`=N0(AtcNV@YbtJS-FQukduD_zm1oncD&}4HpP1U4(l|fq4j9QxdUBJdx z!{JtDW%=Kj(j^c3_6U`Fm*#4YQrs56Gqk+5E0I1Kb#@ZA;b1$qrITTfL~~8dv+^jj~1ED^%q$PUrK{zGMSr< zH7G7~E6Y~b4tkvk-%rHPMnLZ(^xI0H^6t9qH7il1 z`L_6E@9>?papT}|WvY<^Ye&(+@DXvcuJw*%5LMr*tzjwZshg}o%MN#XiK55(B{ zB^)X(oE)W;&VT>xwvXV`WQ2&AKNY8^h9sOIDqZeu_?gx`?@Vv%_|3dEPAETtcK)wO zmv@k*EEiIl1yyzYToY>LMSdwvBUz#d0PaFO6PT2Sw}EZoIlmOih~cSH`-VDqk(xxO z#L_xtAeni%C=m^dN={$*5AHd2RI@Y6i~=YXAgY6?Fe*VT5+{)nIAD@z!vV39pGq3~ z!p9)iVS}TROp?SLkJ5IE@I#S|;S46yS^BK}bb6M4R=%t%y{hBy$Dxi~G>-|8;M&1u z#YvpN1wtfBkOA-E`Qrw^DqMd(q^DCFB9)N(h_E4JJ1zyH)6xxV>5D_sL?wE-G0PFJ z^l2s%iC8>E&N+A*fULHC36x5#+*Vkf-IYy5Si$!quH8PR)OR3k}3g|3E7@&&Jio->~05G)v;l%sgA};?P%v`gPMPZ+1 zlk>@K_fa_Pe0H@emidSn#=_pcjhU&_1d9dinj-sm4=b5Uq5kS$0;}a0N*T^v&QB3g zFrG0xYNjE|uwq&LlwMpL50Hgtg_H(Ld-h}wyMbMI0Hwr}EFPg#skVsV3g%vCdv*qt z=#}^D0FiS0M%rpAS#<(3WNk%3lom61D(Ro0{w1)9{2jofyT+*8W2!BQ*GIyKbJIUQ zVO9JBK=(GXic8~f9iLs3Z>{cxp5~PGwiolQi9d zC{#q1LWzI~UwuWEpA`rSj6%v56V3$^^vKYZP7 zkyVaLYULc9x77CN&p`i86YKRn|9Idx^KHuXZ6pdqmm49BEGbbzRoV|0!DucH-OTa} z{7G1Rff={(0t;-J@{&!nz1pegZT=0+IaFAc4Dd7mh}L~or_l*rifNCmD4Nv6{L4Mb zLOAf7H8NXBE?>L-Qu*xaJanu-a_(@nmwe~n6Mf6S1HXA=Qu?$k$ZAVYh*b*Z*C7IU zU`7>4CW4|Zxgx8in@fiXcIWaXFhyZv4AP+81hE^>>hV_I9+@|X5=gNvz3*9RQg@9E zQ{L_FA7=c%fnu*#qSIFrr#;9&)>qZqbUVKQBz4!wKuk4xVZ2e-?D3D!KmzM`ZVV(U ztQ%=t%UdH2{7I2Qu2NLQH$GE2){iN&rdM#bYut-D2rd$vbC zXZ*w0=|zd3w+u!q>??We)di@yB;i$x%xFUite=tkp{2E#_{Tg{k@za{V?bE9jnwmH zn*?!qt{NiPDE@>T-Cbj7o8QSA7CO##OMJUg*~uHxp5b49;tfCiuAa2}aKEi~&sS=R zL1M_8Ka7sa_T_LDdRb?QmDBP?)FzfpfX9TW< zQHDh!xZZ4S(FYman-L5nTHJc@c96(A!auvk&B}?2`yX(}5c?jHHsl=~{lqP`E!l1X z(uN%JuzB`iL5;x?y>aR?^gSYD7b_1k2f_=^%`1MZ^5AyOkgSAsFkH?&3E8>8fsFK^ z)#OtuG%Jn3;G$0rQ1g-<6d-xXAx%+M!rl%w0wsPSMc3$JuyH^FZ-mLBl8g-Q$URq8 z1gP4C3Cv2QF3oRC8*p^_OZ}aXs5_*O!tTnEEX_)0viEF07lL#y_&0nF^pBfG=je0t zWmT-I!|EPLHlGt#mAt-+v7?#;?k8@cu%JmR961X?M7-cxKEcvn6GGr@CJR+K%O8?Q zDH&R5O>Y~|rl^Pxz#y$uraD2z!msCn8diw0qpRsA2((CZMD4BmPENcgI0gtPeVipv zkYrj(k*<)h@nNkOhiWC{SD}#I@OKr>s|>|j$^LYYgr1DbDjcC00D$%udzB)OrH--^ z9D&`z{+Tp|L@KAAuSljOfIu-wpaekg?#tGRdxUEe8CaCUw03$FHmjlPpd558kHGeO z{vpke#M@#F(N+rIt0qDrsUX#W>)#6oQ_5Jh9{^3?Cl4eud?`=(#q}v7&3JYcA4lo| z?P6rWuE;A_cSp(1<@qK6xNSQy z5WE3<#e$lIzI9gimniOpJP7f0X*9MzJC9G}=yT+Qe7Jqh)Geid7j}c;POZsAOn8~L zds=>utv~jE$2u;|KDl^p551lo%$2^6pdk*4xHf~^6gQHBTZCfNVvaZHe+sB+*-QsN ztU_6=1reP!5gaHPD7$T3pi@$Cl0&QyYHP(7gBcSP7+(lWj$wpHV5B7)F6v6eHd(4E z`cjfreGovBs9l!oV4{>HPP6{bjge&T2W<0%S0Wxw_0BoLImT%GsgPHKmY^g*8@B8o z>_C$4?S3dw^```y*;uS%EP&1b-v7n^QU(E=Awa{A^`0lc($CB<_5Zn+M<}q^$ybbd zeU+q;`q!tqNuY?pN8$g@1%Do)BPHQzh*JL-Ew};^F7GLa(2)%O7XnL9@LCgU14e-J zUqPa07nwyWSl8O|B^GETLn(!DbQjmjFA}Yu)YN}NZQL-E@3X+I`O>9EvBo-tP1WM0MlVrOwAY15$+SBt+-qas#iqxo+l!f0z4;_v?jO z)>~0rnkNTsujE(?rMW|%wNGNbw#>p~NfdgPeQ_<^96}3}A4_m#(2;TYW`r#5m!((%=KH8!QqRZWuCqq;kae0BnVu%*KYi?Ax#)&z3{tGmZclqFlwnD^IK1Xui8_PTco zK~7)&KKH|AsVUfm-)LExST>sH%aVLNDa$0pBW6i?E7x>gFZ#!kvdq%xlje^h)ztrk ztX!Y0PfZF_Q$4$u`B_LYP^nuTUa@v%L(063s+eiLb(zFr^I~Rwv85q{CwU)mFAiqeY&4jez1ddqLQ8ulXU8bVub=%LFK%f z;2d^E=Y_ji%J`IU^A7l~)D$zw%~AR(LAt%gAPkL0zh^BqnZ{7o2A$#>QlM$(;rRfd z^an-R$65+`eT&v%>j^oqr2D)Vo=h<|Ybe8PIpO{yC&7gEt!U&Z@*s3!lUYW+d#<#f zx}{_7i`}9W%F!>cj-T5>%eur%R#R#v?EXwMV#-R=TYUog7rDtX&pfTGsE5^mlr4pz zB;()0_k}4Xm!ow;GB!%-aq|<3^lRnd+$+nbzfXoeXt`ump<1p|)tjGF9j|yARyvR> zbx}{aB=pGgB=17Tmn&5FuaU4Xndb2V8;bZb#gzMsD!oF2hqz>HkxCvvy9*6zxByB( zwZE5F&5x*#SCrGSGV+~=ijhJI9V^=}KpFW_UOK{<9@F%RWV{z870=;YmRG1;C>Z01 zZ#rm235t4-BqRBGs6w#%a0^09kIOQd+i$)}+!IcQjQkr&Xextr`a}}ii^>zF3a!V zk&b)WVmWcu@=sbR7xit?KybYqh2^i1v4!Rn#4eg3m2y#cYiy1ip_+ihzz2*8%~=1P+;H`Q2fhKxeCrRjp*0lBo>{N;dsS!8~3G)@FO0y5H+F5 z6Pa=4D{@bS)}?j)KgQZz2{!B(4y(&AubLlIpY9C9z3?k4=%+G8{C2c>Vmn~I#doJV zQC`Z+BdaF6P)q?L@&iM?!@J-m*RQ4NqO~d5>uEVv-P#*BzxqC341!&XK|f~O%+cjv zycYQZ{<%YRDUWdEs;*;vwEXd^-<-IYF-GK1e)cz-%Ggk;SYQ^`IT9fvS&;*S#39+^UEp zFM+hEv0ZE|%bz=W3hF^Y;v<@>w^HTR=EGFtztBo&34Lw)HvBXMe+Q;ratBq;mkq#C z3BvT~lna6t3eh>$fFYCqMtsbX%*xEG~AYt!-fA1FzdKL&8SacV< zktJgJn((o{uLPWXbP#?7u;0+Jyg!vu1+AQCdzFg|R`=o_CLq3rHTbRd@(dXn)n*m6 zDw7IHiA6Hx?lEP`q<=1@BsLWBvUv#(g6CDbZk(o7VNKH>tl6DwD3nNyg}Lrr3I79BS`TTz_GSGXAvYIy7q<{^b)m)WVGdyz9V(qzqCA~k$|gK#5+k8-led53 zQg832JjHBrVywhS*fV6;&r`l|ekIMY;l=FwQ4l1U7m)rT9MC>3ETrf&K+upu!BGsE zpd`tl^3h%|1?;h?t81EdrqGA=>Ld!A-oW9ZqQcBd~93g zuQ0`o^hMp_M3VWbx176hpfa?*nObOclvMlD_@@(r5J+#qkVsRVe1niC#Y70{ZFHHj zjeQ{ATC3B?A-quW445n0zDLDySYtBkPDJZ1N*k!U*Rpfk6*1Ki1bXa4Z}{E@Hp- zg|_w7*KgN#ReS{+sS)w{6V@LdTd)ZoLJ)uQuKf0M#g$a_)Fs)7j=Z;ivpIbwS zBuiT>u0;;hB(w^D5szz8|Nhe7;jQb}(D>F>%Tsfs;`4>M@-luszl_kNtq)f}Zr0V) z9Lz6?gT(VPT{rGczS25fYpy{U`W#SV%wf1Pj5!jCA&0?t_WM!5ej5jozX#ZF<26f( za=HpvQD_k79ZQH(B;~dH8^y%3Yuee&YN?Bm`Bbz5D<3?dv^Zu#lNGm5=~GMhBZ&+h zv8OeOW{OM#z6NR+*2gXT=Is#C1qp!8g~2%GymSwdgLOInX3sp4W!=~Tu^ODe!j zdrYt_JYh!eOM*w{V4D!h>~$z#X?>!dT~nQ+=VG>Z=%#Nbl<` zMx&WuwS$9@mI;OA^WXYQclxZOqTk8>i9E!bz!ewanij7sY%BXRY*JXudXqaciLZiK z8Jz6gGvW%Nu1zd@7DqTf31_v=dUEeR)a+HO4T{YQ<7z|Jz-q6ZP&DUPTi_B3P+aMk z`XHpEr1LQ|o^v?YBLR;W0@ml%*ES#t9`W4*Pg{GDn39wr;k8~ylAe$x<`>=Dnl{g4 zgWt1cSC946r(U^Gzq=lvrudNUVx4wVH$tvh=3EFiW4fLqM{!dAqd2l&o0FHqUYMjQaY4l3_mt@FpheN@u}I~ibh9uLZ9xX@viBxlh*Fn%Uf z;8qX{Zj_JXNYtsSVNYs-w&dAKWpn}HP)GzY3m&1fs~rGu2Mg<9ze*qg^aoDI!WLve zUljVkOupY+E$pa{B$q@a6iRh>Pbq1ik+~Vgv7rb)cm#vh1rJ)g3UuAtg2k$S)z>g= z)xlNse7VMgynMKT>&AswNGaHF2*JTv-9&ICLKoy8N7UuLHEGSG;X%uNHobPUK`wh6jS}F;Ewh>E|)&Xzz7r_-&*U~lj3dOM%?b^wQkyQmLl zS1&Pp#2_m#A7;@3c2bZ{cgOgdkb!+56a|Q&>u~od%Doi*Y?HzPxfK}Hb(mRSLb4~v&ttaUTK zmfMONJ={g8lWnl7OAffAjoGHSoFmI~C`*}{eD!S<$%|xWfYkiAQmL8K(ZudK9T998 zWVt8yP~IA2WM+O`BDeU^c#22QQZqSjJCdp zH{b!aq({Qwj8Eel%IZqBae3^8avvcEuscR+)KU(Z@cA2tm!z=MV`JGp#D`x!0du#) z*#-(D)h73;TTop_+{2a>3K6~nu^@?!s4vuOrFxw{P}$MXmD6>ox>KrC$XDvlz;0of zSha!4flLn?V^DBV)ZT6SETmT72m*a$31nYz68%cs0RY9UqY^^KDP{x;iX)v^T;s3R z5Gkt2xZI3lxty=(%e|Vlns5y<^85S>S$p3m9)!9$$$-LxDi_r~)hH&F%&{VneH39f z)0F||CFTgc|3@bmw23=<0*YiASyU9M>nBCO;-}TR^6ll{c$@b+Kq8Q2sfC|J zY+Qw8e}TJHu$zVk=|9+YspIVQL>eVM#S0%*@q z4uEfZ#eNKXD*Qa2mO`%_Zpof;x6EfPa|Esjw(Pt1cHE8GbfmaGG>X2fZ^gwhtRQeT z?#BL0KplSR(!wp@Cl?cLDNn5GLBR#zmy4C(uH3~b18RF}S1w>rUxzV9#HPtKg48yYTONHLX5*OCtmq~=< zmRBfYi#(oy$f`RMx8@F|9;(lA!m;^Wk=Fq5nJ#C48@fL1p_9Yu!#yazL|ZFR1y;ou z4r#tKvpbFd4|qzPw$DusNYboh2YAOOyU$|fwP-d5NN z99WN?O%YHu?ZTXJ0xVa6z`}Rzy}{Qqr-QWZBB0O=Fcmlew0=8J8bF)&=TM}CUT1>7x`+P4@P`l@Nb{{zQF6DtSWBduubY=r z9N`HQ957hcOaPl|zAu~CQ^t7>T(`%pC>7V!Oc*YhCvZFiL>1MPhH_BO*0>`KWW0)y zLg+wlJR1717;5w}|88Z46988M0fkrW&1GX|HslJIL7oB%)?Tsy+XTvgI#6Dj+;m!{ zG}i37S4cq3O2BG*!KP)2tEqaSmv~GTB^`u2qC9g=m0Yn_+Wlv?;Yh`4;EU4 z6mr5|)k(CSRypR~!?l_{(&cIkCjb#AuM^yn8^G=a5iT@>bOjCwU9tb)3f3|n1xl{` zS#iuGtKr=)9(bMgo@8O&Xesf^3EV#JwFS7s-B@moTI0iM|8HJ*1tGSr6JqjktY#i#+wMKx63Ie@FCLOwzS`OsEG)l>R@I zqqG~Ut$jOv;E^n-;5}jkhU=^V4Xr&}0_lsgPdx(y^-S6d%*-DEIPgvZC;0uJqN_g< zY!)y0`ps5fDMN>F9`VAL`E>v^MFW^t-9?v03-rP%sLc2Z=I4M0lpv@%8PL}o4_k|O z7q^mQ{eBj(B0He^iwiWbPQAf3s(gvu=v}z!W=;NO_yS`Of?ygwN zu2*c%M$dC~DoM$zTV<7O zjs`^UpezV~hR#yM&95|%g67iIr)-QA-`>O_Tg|75aet*I}DJ%4nwT*oCzdtvNf!@IIWX#{HW~F)!?bwhZ7r{*LW8>glIhWJ5KST&fh@!7U_y z@@p8Vw83G=26`W%c6QM4&L2fKAp|1Kw2Z!7`)KuLHKp}&Y_`5iEHJ>7C|@ISpTFXB z4>>1&0G5i#v7eqWTs$Z5&Xnuzg-WMcbs$5Ly(GqDb)i}-RqNDN86w#xW^d8RIn@H9 z7s+GdJ!XK(Eg|YGq*e{;aMI)=qL8zX{raPX?w{1*l$?mT+>8RbjIZO%yw+CKhpUMZ zZ+{MwwWd*{;$&4>)$_@%bZjzXY}!GO7{EAsg?N3va_+~!H?quXG=llZ6QUHU`ECA2 zcsNb=-VBOdc=D&%#jC4J%C~yjz`e~-2als0!fmYyS(QD& zXi@Vlp@UnYhye_+qTmrw9KaI)Hf}Fy-oeq7imv(wKLoXO(y9BXtx|a@cpz6`XBwCe zf`(8D>U;Nx1s!2|1eqsef@RP|0(XPVD4SY2hOq&vv81o|&fLkAY;*EDXVDS+sw=QQ zP62CbounAdT(fo=lgs1SvBRi+05s6O-v^HAn(i%m zuORWh^S~~k!Z?jx3R@b}VM_Y$woAI#rJ=M@4uflS7BV%_(Mf;JaDW$xg;r^`N{>uq zy{d`MnEin9+frk%4DA(Y>G<<*af)fG&&6e;;jqYXe2j;$w1IGze{Py>LN1hiAGNiTp*~!LhWdiH;g_4GDcjwz#Q@4jKBB z5zlnXaF=|ej!;|xb<3&_6*5l@bH<7rF^h@}HPRtMsz-$HrKZ$TUe46gUEoyJkwIqL zms*NXc$YXe(P2S<3*Z^fX}*$q#V5s)%r!by(Ryui>ybl2>L@;=SA54Xy=H&^+@i85hlcEx z&XvP{U5qFtc2SEe)J7*KKbS;oMkN>jl2o3sghnPkadDx2ZLv$7CBs_QrI&_}1`=~+ z#328FrS%*@pqbe;905?DjEb9Ozy>#iv559MuNyQ@=Pbxu+nX{H2e}g1_KP(v0h&yq zhJ_uAUhC*vVe5;+z@}^18WqEX4$|7~5*Nv^L_ZXv-E~rSoNWfo89huF_{)MzU0{2`P#*4=r2fqemk3{7bmt4KX;MOW2SN zu_F{tv6sR*P6tq_7vYl=p}g z8RW63*3p#+)FM5Fj!@GBUKCYLWJX>KTj(M@pdXs6j;2iMp$rOz>Y?u&QR9%$2^=?K z>aj{q=+zLwuw^qpU`Np$4B4p<`B9az0oN|Jjv_=85P(h+dKr>#YPNE)lw%QCs2Eqz z0tmZRc0OvR;7HX~WEVMG2kt%&h4{GkQot18X5#!_tc4gKw`5BMhE&egdn2n^lDk#n z;NB3y7Y z2y<}QkahN~{A?ew?=VK`d;MH}*0fyB5(4!WUM$&~STF?js#|lg6%4iiY_H=y1tm&86mq9tOol5df6ZbT#GDkA{*?!OXaf4c@pN z?Qw-o*d8KhPE+|CP_4E-m8}ab5xlt2>npi}*T`#;iL&vNcHUl4M}4V2cp5v|$)5@u zEU6Bz_~U90_SN)hIaDF3mgE4sD6GTy7xOfoc)VgG37BLj+eq_7LoFSPW>^Zevgb(S>JPj`0xKlZ9^xnQo?Akq?9CKZ1&5gJ zE3*IR{h2OjU#l{L^yxLnpO}bW2z3%ckpoGK*wUg}j07u_O{ge*4SaQ=Qnn$O4lUlE zS^Gg90VQ1(NCGMWlay}7R$%^Gkn8}DYVJ-4BJ+RpXxhE#iD*ib0V@XB5e2?US#c9Yt;!}op4_FF;NW0qWI;tl|&yy2SjwR!igp}Vk@2S zxRgDa+$vYaY)`WHdEe2s)(JeXxEgm}_b^fN-4O3=fm5*5G3+{L_!^rkjOzA$A}&CO zb{KprWQ{Va%^hI}AFl*=j(Vsl`6%lAKmY$~BeB#73^Yy^urJ$Wu&S(c2P$x0 z8r*04ER;URij^o3Z?S4zrT)ySu{9#J{BIeyS2kjlJPFNc(r2ZTC3hCtnKY`>T8L(k zxK%#3gU}j@@xK}qilGP%v}6TKOa@~XSGU+hakbQJf@(Ji7ZUaj&Bd9+C>lX2fN1AW zdX>Vi@apieP_g}Pc*_pD?{B9f(!f6n%?R4(1St?%YRi;DC};!21o7Cv#kIkxrXuC3ppWpZ%+}0FLa<<<0)Q*P#j*?<@}_uDpb)ehJ{IwcRe*(8HM{4YOT9&CMD4$iGj4o zw!W8HjS~%l2`fC)4c6b*bz2jyCOpzx@~D}10D$=jim{bG>Qbv z)(>kfuN4&Fh;lZtcxP%@68KM=N?6T ziDznr+l2na9~O-``)iY^tvskyD1^$aT=lC5feV!#ajBK37R^{$4WANKCnr{kPQg`) zm_T{vhiZxe#Z3L+)~^h-w&y8T?RnN`+FYJW$(j~unuRys#7?`^OB=p4**y}DT38e4 z)UI;`ZXwz93T2zYW@k_;+Vs|14crrr4A%B4%i@eraAqdjeDI`K$@F>bF1Rqyw<%=y z-R8?uw5Yxi-Ep1OUns;H3iydACUiX8!xD-S#Z(O%lWIYWw@9OFFSh=ub%W_N?L}5_ zTCaofs4ymqc3w@J=R{pEs@fZP6hNbXF(>e(Y`LOczf`Y~w`Jqep0uY>e-NG&PEo54 z(9B;bA@h#B6ZUw!!?}dff8=?wj}i1XChGZ(>ZS_|yK+&M{o#!MGK=Luv{N;Q%YCuz znOtrmXl-Q^NjE78S4CuE{fOO+QmA=<+=$8E&Z~JSrO4ICz%bwCaD+CuN+R*7tv_qC zYKg?HvI(a(|7Q=v|F|hl<4wsCSVo%Ca^i={>@?HXRnbS@&sWs*@Gk;kUK}9ds@*H* zRr&D{ep_pPFcc53JlZXBq7m^DpeK%3Yuqg+`Qrh+TdRIB5XH5+M&YftjYd%=ueu;AppAMezv9`r|%;0EwRowG5k_D1pzdQ&s)xGuP+nb7?(`tVXM z|G~MKH^%)OY<4#TpFbCE_&fqpJ!~j8p+5_F_L)-SzA^5{uyxQgnM??l$~Bpwuvm7+ z$Fxs~E+UN!xu>s8I`Awan?~bC2P~ttqa|GSbv0XC7D!f3(}_8Bwo!#bBhbKF$*80p zUr*yi?|m8Z)9Q>Y56}*@-{4F6sqXEc=@SzMp5>v2qDL`fr6r=$T%}UWtj{!8E{h{( zGn;+V%f^~K9~%vcZF8*UoB19}eB0XCZTV8V7`@(}CdRF)4KYz8>*U(kCHNCq!Tr3d zIKdmnkmY4DngH1h3RQcKmCI2P1A=89M3~jqTb!NUThjK-K2g$>7Pnoz^^Y8@iO$)Y zbJ@hP&_XHu@B)tUO$JF!^MX9trsR*pY0dLUU$Ctnr?0T^>K`g7N)+=(ENKR0ZPQ9* z9$4+mL3O09CdNrfs zP?o2AapQ=I!DbZE%A}o(Ezf|Sw=A~umSu}K=n#Ndz09rW2B=nu#BO<&%#w>mZbbw8 zAJ`M{OA`6}Hsrx*l>31x1Y$;}$>1ZpV9AGNHJ#4&)5nI>JB<30EVoQ>$Ao4&__QC_ zgbr_;X7i5~wHAe$vvY}6>IO%1prMLrVAbRk_w8m~1^8E4;a83i^odF6!3ErUi@9zG ztxKt(N>e^v$YCxD72_Mi#i2T&ZD~QZx=^@AlaJ?hhqPl>eID@@pZ`@v2uAYt_@Byg z28v1K!8zPAL7(11&~>!32|WZwrxC4w!^C(kP&-=&G#Wfytu_kZk8P>9ntB1?U!VqW z93Oag=#k?dIS;KqbK1%0k@SWJcY`u6ISe_BE3b(-4+suK;Lkuzd)k2!o654$wxfXw z+bjM1FAK^Wyx#m0i0Q{<(}Np$;{<1VN2t)>?dPDAG9M#I6VVMLMiG{y%4>0;c{yRS z8bkgJ<3#NorVV?6FQ8jiM&%R5G+y9c}p-gVgPADqF>6Ett=pIyQn$AVMcHhSTe z;7p++oElXMuT!~Aiw-ieDckz7Vc zNATF)N&GLl}H9cuYO_;ifIQ zl}mk)z8(^n8T+vBoX;N7{d(OGkAgj^%um^*k~et{piF#U6;LuE=Q{6sgWr>Fx_d$WBtz?&W#=ZL?cuXB8FKKvjb}`3j`c)Ru5eB_6IM`sp=Fg$pR0 zV1EJS953fNio@NZLycbJz!r6fTE6{JIF6-&0=-Y!k=`D0T$SBptF`oMS&L!62 z2N4sywpN(vOH6y#r$zbs+{E74P!(!CY6c`NzLLU1Eo-@Hnz|4#tK-OB`E@$|x_p!T zL0sGec_#f)xap}rM)uK+VR6n(yQj(_pP)xKE{Xg?vS501Lo+6^2dD6cTY2ktgnrOK zc0&;yOFb!2jBN-J;*aoqZa6BN*ZbQI4am3qoA{gq?cwCr2OmP|@L%W3Vw0zzv+yD2$TdS? zQIBQPLWs=9bNF-%KRzMn7XTWMhEp%aFPjcp0;kLo$a~Vmp^|hYZP11nvU7=5qK2Ak zJtkE|eN6SOttZ&qnat1GGuYc1jBz$bx;E`)^?XiXG=}73>o$9tt!u_Q$d&>fJbgkP z-WV>%X9+cRH7-pS9yX}H0lIM_#b(-lHtS1T5baAA`#udA*9>G3A#J+Ln)&R&C<*IJ zp|(`pHEkU@S>T-@Ft&LLg(@;tTD(yE8t4zYa>a&-yZIR(i3p+|WU}v3uOImisd)p9 zXRbQsya7x@+I3eo^Vx%A1C#~Gb8@}%3Q!+h0Oy$l z9E){X@VM8=_}F!{d~9d2#lt&?QDeK|O6hz-V03Rez57HrP%i2P!L$z2lvJk;Er?cx z^<^WBD7t5MLn+zjCPmb zbMd?XX!|`N@x6)B`IFd&$JgPFAuwL;Qr6Wvm1;bsmw%n9x9g)9e@Yo)GDaxD2m}kz`!gAy6FJRCA!cFwh)Y|aa9=P zmoxd~k^l$D@Tw!JjPqn(_*k2<|0pe%_Z1-Pow%_lZ}?^_fOQUC0Te8$=#6pD2qvAq z^zHg9+WF67Y@p&Bm$ndQnc|Kj%s&1sk7y8ieoiCOMq zH;Ok-?vkB0tGPx!WTXGoCV2G(mMaTEWtY0aD28LTH`5ek8+WTSngFSA$~eRh7OUAQ*iN^p3?BBuj;x$n=|H1}U0dBe4q`t?#b;4@yua5ygb~!HxttvDKt*un z6_78J)`VHjgcA*7Hbh{OjKSEJCnN7mwJ`Br9b9T0`&5UN-`Lr<+x}}n z>zm5fXxK@=7f6RQ1_^OWmrR0WN*t({e$B7kA{=?s{cR!#5%;As_7Q(9($oaIw3LL4 z862Yrdc1>H+KaO$>3Jt6ZO#X=ohx5X27iE=D$gH?zQeIXF`#ncNuh0?Ax%dYeuo2M zkJeh@psrVjJN7KK5Sc`C^TBe>MFVykLy*zDh-HziU`G7n4efn(XltL_w6h6{n@dGl zM!Tj%R|mx?T8fepjK(M7-+3Pcf7v34Psn}UVs`$jy9bYh4EIcU$E0TZRBP}ciP(9l z$3K@{b6nJ1L@={+h*ixEPRCqxB{7FnR~Wu;4@;8)3jSn;u>KSXH5n`nQ1Ak8on%gf zNG)1>FwTaH@RlM8eY!$*8f~j{P^$|SH>iq2c|$lidh_QI8X740J;FcYcY#nti}-O| z6S!0$!E?N2l0FUAxC)~u?qIYsrD^aD;Uc_7qnW7D;6+KeuHbp3&8w-JNXdFn^`pN3 zI3lS-M=l}-Z@_xyvQxrCF(!CfC|ZGPPJc4<9HBLM?kW-QAi>j!)1$LLL17t1cGy@D zQZZ-$4MBHJ(3@8TF$b7w=P@)6ToI7T0^*A&1C%#pt|-(TBM-~b<~g0ZBqvO6 z&LOFyC!_~6ayVKO2LO~s<6^Ep?ij1v%kpk{EU`X#Mles()&ZdbO`xF1CkH||Y$o#^D0sJotcef+>LYK6Z4|%%Q7^oJ-a5o;1p0ws zFx>MJ(X3Nqi^7xOU=&2a;y=O$4wCstb~doZvfc@Ad)NViK_tO}2=sf=7aS?*yyEwX z&_?NEg2|8>HZSAN!@1CD%>dj7;L<3nb$^HBf-nV-@%58rQuD*m!am$^@L1DIa3(T< zl@Cc#f^7a}I5X7J_Jo`gHGnqx zM5A}K;L=NTLJ_8fHZlNKzzAZ_;%g<>i2koqWEdKDkU*mx3NOg}#k6X@g@R#6{L2#+8GjqK^%45z%ju>LbYhR#i(K=Rm;`}aL?ev;eoooIuz~z9qAhlGw{--v3rTc z{szI%3!9Crr&467$>tR4o+m7!pf(Sx5iGy8HS)NmvAs)lUQk&K)Rp8Q3LYfZI0VV% z3Y;?rm2M{#**?YBS#O57@I<^i(qL4I)jd~-8s`}UThw#a(lQq>!WO5adM85Am|AYH zHwMa5-$}5g2hz0ltGWo~6V@7Avb7iHwZ1>+oVD8luU_?O7Y=SXcuufPGS&g1=xS7G zX<-A(s$B2Z?{ckH>tY(M7B6a07vrI|bWOwuZ~YMA7a?9tj$!ntBkiV2xrP$%(brk> zQ3It4CWM1g799v_H{j4VjXXj8(P_WHtrH2M-353Emtov?^T8>qyo1wc&$b& z#ejMaDm77{;LI&>^CLc%=vO!DLDBia)~aXM_mDd5j}KL#xma|=nAPSOx;6w>F6xR1ZIQT#(}B=RwJEq@x;fzr$MSO+|94uTw2kf*7|2jk~InK|yP zeIXy+Z|Zi(A_b~y!OsYFo4fG`15{Eq5|Is_xt3TGY%Wtsu1t((9ef(oG^9c`W_9JN z&>AbSLI&_pt$5-Kr{OS zrV5B$hFwlbTBiY-&nlpY6=C-Kud_m-<{>VeyL@qQx2B zS{aK~;MztO<81rmUrNWNQ<8IoSB-z{=lT5(Yo1yQtxv@iiH_^JxDVSC2=)qNXi>|% zJf$Dkk3I~T&b-4IBN{Gd3Kyp@sxv-Tf~$5$k!O43@e$d$Y&mp>R4*zQ?1i}fnXg=5 zIeK$evVZSR`6-;tbODD0PC^tffv;>jC*$99JUM)4aN#Mg@T0VEKO*g;LSRW#GWqP> z$5wI1Iq#R9bNkJbaN>fGQU=b689zDV954HBe-p4TQ092%?w51^=#u9AGy0r8`@bSa z=l*a=d0jF!w|iD^Q8X_4@N{=cTG3}_2|tE^P50TW_h$LHocGtL0OgJF2G)p1Mb-H! z*!p79=25S@<_niXi==T%vy7=8emlSY3LleI%uDsZ+V+`7J4||qBdhOXK(sV-QINTm z+zq=*y4ZX(yi-0dkN!6OalSU8ZNO~b#A_qRdDg{l&6UK8)i=QMpC_F@OED~$%|Ddk zPBvx9+B0~z@%)+ue*!b8pXOB-?lCD7T%0FblCdbrSVHCcMmBRUvf6gxxG?JUrP!T# zmA-uaHzDSC{ZYg3qUb*i5;x9hDZIl!rpV%K<-)YZ719$a3Yk+Yep%{`H z#ZfV-p>|W!tgwhiTKs|t5i|oDgQL~sF78}sxlk7GElItSfzO01og151V+`WXh2dL+ zA9|Xn?`D0wGON1)oDaVwlTdSfxoBLpc3WudSYl~HR#SGA5=xha5kd z7}Y5B&RVR^S6is0;wk+p^j6onOnJYjas!El;*h=y_Z{Z!$E+2eLxPa`Z$Lt!rz%E!WvH zGb5${(9-#=5PzcCDh(pp$wxM6r7d+?#rg{Mb6tC+)`pGd-?9^)#OGufd8NDz&O8C#}7J?0fPk807n3LoP?J1e>weS5*1ab}Ve+ZrdBM?>&! z4Mfyq_J#qe+^J2Mmv;6hQ(74d9}U1=++nxhUOsFib^n_D=KKy@PF~vCD@^gkI?e|- zZ<0n%b9OuzUBlhSH5|a}A!RaDmhoUToNF5HlIrVuZH%Rl0u$fW628gIJ*D{(eQC6s z8%Z}R-^=)+&Y8zPdxI(7P5h`I?r^d)&CXrjcDR$(93$)OIi|KR7C!2OOT_Mw_@(02 z;`nR6HAckT#(w0?hmj45J|FdzU8seKd%(1Qpp_9^?ben^A+SVlFesZ0f{LZt7SWay zi5oIE5{MfODb7KA!#(ndxY0P*X!JfWYEKwg=C&%CohQhG$0kO_^Nw?*S^TJ` z1)AKEc;AeOrlIiFiQmj{7#x*tJ(wH?kJ;QBiNvk3{Zx|e;2Bux{2p@#dPyR^BA*dH zB>51e&@`Ff)IFWdjm*!aBE!<^&9NWh$aWI-6{RsoHXx%l3j7|_)TTsbs*R$S@P^4x zY(aSHS`#Y8GbRMe?!L}!W^G7Fn7tILA4-D3eKxmT1iKZ1+Z3?KEiXr2VooMP;!X-R z-#-E;Svs1IS(Rx?eCEf{qL(X6UHNkhT`fa}`C<8*q88WOqI@$x{xtyo6Jw9pB!PlA@o+*1c{Ogv zqVRSFk9N_fZAG*_ z`_)iD!4%p28dn8Z8ZENA5|BR$d4-7T8ynhv@e`t}8;4>bNJ5S^iHi1RD=z)Ns8UiY zkzsocsk3!RBF9X6Q%NQT5jXE>#LHS|=T;es&Qqb|^daW-V)32apeuF-rO&$MgiAu{ z$C&st*+{uu-(LJOEmYauqV+Z7Q1ipc{KmwWJ(`D*M_$nq$HQjtFs)t>QiT=dY{TQ%;OM-2ZF|EHXy>6}j0SxQMKY}DK+_GtQwpLrP z5x)aJcvM1u55P)hTITAYhK?$#^&bijzr`A!4;P|!P%SHGdAFRGxHWi0sGH0l)K{0h z_~02d)hd?_!tT}pEDMna;8yn_EVTy_ba)WbkqJEr2SHjA;oEz0kYA0Vl!~t}%XdCq zpWTbA_DacfBFH18`wq6@k{o9#$7WOGTCzy_u8UE7uYD*g9YgCtpr3WXP+aihom)|g z6_N#D&j}!-v^FhH2x+|EOblAEvs=YVrEw>Zgc+2xzZc6QDhPL-;*~{Pi&m-?j}vSm z5FYu7oh{0@_p~Y-FEhi)%PQq%WNMJEv{eupDNvm?Dk9bT_L7(3=bE(;CYO|nW|<`i zRn!fM_vc?1q5f5$JuQn$oeE@`VU#XvFG2keC=O z)8_jTNrc+A3DREh*|&<9C8Zz0w4NPCd97_I54Md4O(3kEZBS0xl^?6I`VW%kO;RD* z6Yf15&6*gUxUmE(qh1rnglW|eA2&GrOd~EF3Q;e%)K--Le%_q`Jt))P^m9(RvBc=E z^?vSM8`FtD<`Ws(Al)xh-+aXOFMBH7B_$>9o%ucai1k`BzB;>#S_2Ga+zwi30b2Ik zpFMA$V(6g{FV|GA?UZI&dHiyD$aEtwi)T$uQI(VgZ@x)e=8~& zTXbW-u~6w3=uUvXD>K~ma|f6At|C!VPF}5Gku7D ziby<#bJ4i2s7$1w9R;oV|DZ{nA|L|D{HV%mKwch_Y5vZn_*UAcd6aoQ*5SfoSJ4_g z!V9`;5cl7julGG`mR=ACVYdsj6wA06TM;0Xuvu6ks38)RyW2kU3ITB&KB(B&hs8Aq zom{Nw=gs5!Ka($(3vdg*?jF44{b&@*(KJ^MmrNRP4yQi&lOcbh+<}!U^0E+4#rd)6 zwnrwaD73 zkPk{+ud1rW&?%oH`;wA90K6d$EQH+3FB|;uE0pAAAwd<^wt8IHN5t7svZv3|lKoXo ztmg~*<{T+~;1Au!9zmrWY(a*u;j(>?nT8`nPd=j zyHQXQEI~UACPAi$YcP;dO9&U679)f-*R&NEPaa|V22`qX`$gLUtc_fAHcXD`uqEnX zcsUFjEXFsmNd%0b#Rf2nTrWVxv9%9{l7a#ieCKBv597s4NoD)dit&m17qiGN#a|nA z4={+zKaf7P?Dmpt8Efr`=}B-_u4)Rg#NbMAny7Ug2vtJ zXaNC+e@ybBDsH`X+-JYB>q$x6>tNqwccfHWtv%l1bm4mYGf9fMG1@yQ9`V4 zoG~FIL!1z2q-}k|$-2*4+vbv!b(2lGQ>0!dLA!ufEz;L7fMk|UY?Ra%KeU!cRGVn- z1V(@kLVDYtnxdM|K7xKjMTx>{5ylBZnM^?_4uwZTm`p(k-b};rt2F1qPz}tNY0d+i zj^_kxC0IQ8udPpmD1fy{ZJk*{3)=4@5JUm5G&qAKY$7_zEf+;$f?$9l2o6JqVPi0b zAz=fp8(_K&glHJ_vz^ZyG$p*(pElzkUH7D<+!{<#B)%xx(AL!_3^UBP(4NY`+o3A5 zN$N}AsIWaN2w?Jq-X9=vns1VV6kh?wVnsDQD2Z#-TaV}1Y#J47FJs5EN3uHxZZq&M zUGM~E^k>VLLVBzBtE%WFRpZA`;0=%jBxF%}j)*@%=RCizeI(t#q#~9)dNQ zO>vWoC@GMuTL@??kJ5srmp6MxC7%e>X6+37r>S~E|y{WfdEqwh}FU( z0Zf1&fHl=HIB#LoAFOWBXKB-C&>Yhnp}A>qDp9#Kx03XXH|ojU=w!GQmE$J}UqPytgd4a&RylR@8Y**OtVd#1?|< zd^|_X5n|svWwEL1{GBGf1CcY`5C+2qGMPTX-snx+LP%EcTAHdug4)%vJ+$imGT` z@)zTPryR3H3>0_)0N*QcO`yJmpq`n!?oA7uX90U3V{GRex*JG{O~@hWX_+w_v<-bYDm;3P%9?mpHZumPIs=ifFb=pTMAUPyzNxP5YN{;}xi!F*Pkiokl&8B}`1C1;>l1P%=F^?`%X-gqrol zr;nz$nx0YqoFOJB%{PaHn-;d=GH8{Av9;+i8cQo|Ju})qea8&$lMLfcABrAZ*&HU7eew6!LKnAx-*EID0ZJx<7 ztYe2KkFWK0KuO*=d@UBDOwSgyD#^*DoaqU_m$PhHyh~ zM5DSvfi3(J^oVxuI?xIaf^f)cj-tA539WM;$|5k!%d^oiyKqZuLaUlAP_;JEiz9Ha z#SWw?Ocp6x03b(mQCBF})c#q4{)20c2SJ^nHa7uZF1TM1TJc&Lu&KZ%sRftfwcRUa zZ&+cNxP~@R{Q)M)eSekG6{co@A4*vUvHhihS|pDx?!vn6g`%&H$|G&~F^sq?HV|-6 z;+&%y!ROH6wOClCgjWmrpr7cZ{L{ zv|6Z{*1>#*UPwM|>%pW3v=+th70-Li9X5_6wY!+RnJjm3<7~0di1l8tSnu%AOa9>7 zmiH-^j(WiHBZ%r8RBH_A$W3ySB|bR-3|0b}VkU3a9IY*?tOrQm3YrnQX-1;ve1_ZVTzG=3rV&uWS~dxzDEgBX zi;Kjctu~gea4eh(<4w^DJy!zmG~}L3U0GYUWw%|5zrOM&;0MA-hEchxTGy?0lXox- z?F`csK<;6ifYl0r0U3c5tRMhj3Mz1z)`gkVov{@nmC%} zTZ(uR0do zxA~Ht*#s?IP^j4i*?z54M*~w3J#y~cv*7KM;^_!zYz!TH{DE;^iPJH+#Mo+!AHq53 z`ONr)yQu>wC*Wtkfdr3dUQcf%uA33s{XqO=#Mw~oG6Yow=9z%#VRSoC$Kx!`kgC-= zsM6pxYPGX42)r?`)xQR1XVRTr1twHe$Kb{hG{L)LVZW@XK4-F_Q zy3MHhF+nAmR;h5RK_yP9sz=fg`GA&6=FT-#Q1F(F;eipBczgIW#C{xXy5xIOB=uPj zop4E#`Z2}_&IqB}gG3ZTtqMl*?kTa@kfCGX+6AJ+MN5e+{2NeD%8l>=! zN<1yh?1STBMT_U)WHLPNbCsg4R(!CX_Q9yM@+hfGzd~q;oSoc1*<9Ht09h2OQD|tkWCB64_R?6Je=sEl# z0ra*EkaJzgB;dAAz=K zqnL8sQ`TY2>^a(+&2PLrj`V<@7rwb92li}44Gt3ONJK`s!Q`wwHx#9s;1^Kh z$H!7Yb_T0q^P>nBp|2it?qd^l0s}Kmjmb7%~9DD}7%5o>!s{hUM z;8}QD<+wi@Z>;^+F1Giq!;7!Dmke7?z6-9>-+vtRwMMh?mSN-fO)yTwE(6o0q3|2x zb$I__Kz4Rlx0y@Ko`c42BgUD6Yl6WLB#Ddl4c?@#90Q_%?{&l-GRV3pcC8_glf0ZtSEGR3^=GR7Kd2%r*W+-%BFxb(T%B@XI6)Gwtac!C#Ec10Rg^EfWMtkpRvQ(_rs zpe302mYS`Vh!t;{*>~nh4(b-#F<~a9Gx!`l7%cvHt_oGmQv}v4<|-s@E?)A1hDl0u z=5Us3B8Wk};56{sUwu9v3aio=oQT9#D? zr+9js9fo@e@t$=FBgOLgIq~U17&BhGN2!gV)&;Rp>2eO$rlOO9op8vr+^Kt9x~y3&p54T(DFxzv@yvU@%Juwg&V6a>7zU8lxzu`AktS%2bI3IW z0?hc(5WK*&##wW|@FukdL1I@=iR3wZjRpCNre@`g`Cwdf_cIOZ_Z$Q^R*FA2nvYsD zz?%Q|l!4eNOtBE_sS#o&etdF=AP(s-YJwlcL^gg(UC&?n02>m_5|AVD&974o{Vc(x z81ax)hJ+Ax1OUvU5U~Uu0RpuY!sL_Gfyy+tAWq@G+95`XJjU+NGj2|4pFu^IQ`TlY z!Xv0`MRo`Rk*o!IwT5D}_;Grk(*sZK1*zG8H0;MoaD~_Pn|Y|j4*WdU2iyFB0kxmK zd4BB-){L6QRR#14s|=2H4pIIWYi#E7oE(Naga{0SveIz%s@)8(CKseaq6=y5rq>G* zP**+&#}f!(RP7R#hxcurl!8Ja;0$;h9!D?|EKLQAV3E<{D|zI;myQ~gUoHMz@V@2D z4I0JmNG<|kd-oH-rJl}fppbwN__w|0A-IkZG){dh=I@B9F;BcHSVyd1go-N{Bij)8*FQ~xotaiSOdkaikC!~SedT_ z4_ufoxQb0zpQe0noWDXfg{8&5dPc%WqT*yB3HUc);vQIEq5n+l`Str+j2-7Eg7m*t zE~8-AhJG}NWA95YbU-cM=0p1w*_Y=NTxFiO$6YKmf|iX8kz*d0v#Dy)L9r7ZEznc- z!toY`BLn1cUj)jL7GBhLAjg3G4p#lA8dUo;;Y=h2PMMus()H+~lN7%XGf+hP#)sEl zGSZwPmIyqaW6Y^?Xr6=r0;Sw;b1~I>%Cl(7|vfgG=%rjSeeY`+CSDjQNqv}Gn3e?3EiH? zz-YiV>Lpm&X0Sdh$r+R!OarJh7&-w3Q%^+R#Ydk%+5Re+6M3?@HniF{lF>$@%N
IBdN7&LCn;p_OGb{;$Nc%E%%}9KA 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 T6()iq6}4?cChuJUH0cEZa8PFH literal 0 HcmV?d00001 diff --git a/frontend/public/fonts/NanumSquareNeo-Heavy.woff2 b/frontend/public/fonts/NanumSquareNeo-Heavy.woff2 new file mode 100755 index 0000000000000000000000000000000000000000..8c7993180d8096072ac11d9240e21436297af149 GIT binary patch literal 361340 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≰>085(1|EkF)l9B+|x#O#Em+&UDC?&az` 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
MPk9!rnkzL@gVn|lSNLRXCy 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
+V{ZXk{oY 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
  • aJW39+Wy8D8Z&75NIbMz*n0S1NAcMz9FnB4LlD;HX?a;4v+0W#7 z&9+lVBH2ZROU%+`;^U3m&P#=>UXKhlB*$2~aFJOw3%(S*IWK@!EE=dFPAYj^)108L z^SaoxXcF-FrjejJRt-NhcdJL)XsvJHSt+E9&nwBq9h=jIrIzC^c^7R06Mt+$Dr?2% zEMqk!hmt*^f?`JsZxxz@YgMXpwTuP?#EJHLPjPkrv@3*EDW0F`vLtr$PF{3GD*|Nzukg|X= zCQ^=;Et<3`mD94Fy*)3ima*F~b*-*j zxcG!v?%-TbsJnhp5X&E&gDG3a2xb%80)j;)bj#@6sJ&$p6`K0{%lx?Nxzyc`tQPq3 z)eBMv7x3%QHRozrv+XDI2?K=(UfH_$VS-i`as4*%0BGxf?@9?}2a1c4#7!E{Q8(tzrK{6|5{wdZjazkXS3na26ey1nMk|Mg&sKH$EZtCEACcI)jY>*>U^u z%~Agd6yyS4&b8I$zb4F0SjjmQYX<(?J1vyGsw_~Ki|s!50p)s**Y3HRT)|diHLNIN zxqX0Wsud=h7h{xL_WCZ&tMFV#d!kvVJk)0`k98MM8R0Q@7NL8@AR;oKC29qPfYtI8 zM1s|+(-`B)#wTPak?bLQnOB4etI@UZwd)8M3AUnY2>nGtZj~XsItC>e1ghxb*pCS- zk!0>Azm4;X5*Tlke?Y1$xOz_`v&CKe3Q0gbtxt;x1BI?rh>_XNN+1YOnHiic%9G7c z2=jxPY5O36j4RuV%Y+(V_9}LTi0~1Qq9N{K{XfW7BzOedPi(}qcNu^MtnlpPb^27- z#{@{7X37*6q;&^R<-tS8GG>Of%JNxz51}Kpk>`Q4L+-Z0I1=mG(L{OyXrjpy7U@FE zPKuroHX>2YjXlRS?!(1{Jei5<*Y|;X7tnexx{J0Z+<(La^Qz6jMy|ZefY7Ar7?B7h zo2OwX$lao})M75hYZbY?EcNXOjhGjjsT0UnomWbMy}BW4ddX{^Wovt`g?`og=>pJ` zj2UQN*c4tq#rDdcQ6fx8ud66}hg418ZI@{ofHu1g4fk0!eb#KM!k4b`;peBW$uxUx zmw$%P)`jcuAwJla3DNKJJ>;V}pa5@Z(3gVI?Dh4t+2aO={L77^A?{qFG3bd#grB9y ziT2^I4YJ%9<4X@@!aevtyDD5>Yr_5WA+6W{zX|c^sbLMPNy72X{}jy>%ph91K<>ed z7hRby?=|86cNQf%d{vdb@V6@z4?PugLBDTWnmc%A=s8~v%Ha-pn#CR|`|G+*RK?#=4R7a0k z2IOVeBROD6Qy;Ol|F~*g{#I-N_wTHa9gry6hi{B{U#H0mSDR_}szO)Du+cr$_ zff=IgQ@Evuf)#I{006Ofdxl}y1lS~}332{?Qh@k7FwzvW!Die~?U(`Ovvv-tL2|5s z7%r!{m4-NH6a~_m&iQ6bClfVBE=yaq2%F7s#jBuu#dQU*3HQI( z(04iL)o?&2kAMXhMDN3kV$*1Yhxo27eOTONGXt&55~G#E!io#Z#)1?G92*oCPM$Z^ z3%lC-btD(@8UY5nu&7`?#%YbP5*J!=vP34ugxY|u{;DBh#RgNoZSW#CY$|n6`<|Vy zA4fuv(2@TKLvgYjF=x<{`KA$BVYqFKIthVX`954aw6#?iO&1SKT{exFD=sUjKVb6#w15GuOg$2&6PK zkzxiC-r3|tLUYtOg3r&?YH@}XIeNA$u(0JlWHJ7p81ZJp5gJ|cJ%7eQc*80YQ6lOm zA({2I@U~TU9V3e4M|WY27T#4@L?F7sV5M}?r}|<@0JsPbIM*H={TH$a-B3xgDUtQN z49eReolS~hKr zkwkYJELGnS8u&gj@vfie&j?!)+kh+W0nxZVv^X`M?lx;zC%b+Q*Do=tg6}kZ8GvmJ z7ac?X03G3B$JuGoPjLoxLzl$G=)Dcy)@4_Bw*)ZmkXb53?7*vQ^sri26u((}3{D+L zf9mPLIcQN&E65mDbZH!QfSpih?<%yacV5{Y2bRYNS0-`^46@(nP+-;h-4szgRf=qt zX5k{qu$llpfcx3dE7~0BRgEpXP7svI{s4sf1Yv-Uszk@Kf8bxEvz;v|C zryfY6!#nDa3_l}iMJdhkRIUa+Qg&X`z0B;SQCaxmbmm~>24sR)Z=WLx4)3TJL8d4| z>u0K}^ZLmSBITiMlVh7C5HlnX+Yufx*G`MZiQ6sqhEBqvsI*I=kXWA;0MCaS_)#ld z3qoZ#j0^TROPL8jAAq+zjc^_QQRpS2`G0-j70osa*8FteC~Gc~xjlw4H<8DQhg9q= zzd()6E+nbG9C-r;95p_;jAS_cmy%$e@BDOYY|HrXHj2`4eS!B=+r6gyD2Bm!gH{e7gFh9+jKLtNS zS`flo<>G>M?zlD@>ETq{qi_pnKxSk`)gAUFA&82(tXo0K1XQK^WS@cS!t{#(7?IhM< z0*j&p*cLJR;{ckTkY*CeqaaV?eS?B$@adP4Xux&ZnLbas1VdrgWQ-D+v2qe;FoIc2 z+QQ#Z;#fFHapKQ%q+~R<`g^6*{;giBAl!ZtM43J%T4Dy*wny`AW!20knRK#Q# z=LwwQ7NE<3>Si(GXn90%0?%WZ8JG5s{Z(1o<8TS`=00_6J<K&m?uPV+af^`p+Tz6?VHSvRgzH(+>;fGvKkg<*q~M}@^$MP zPW0zV7ytOEKw>wiaT~T|)|TJIs`ckn>aI*iSkp3a+MMnWfRmfJ+&9f8kk)jK&p$tP zty3fV6uTmP!`>^R^Czy&5vLeJvhYG$Esx0V;#fFF?};Ay0TDs$TEPjg>AXD?fwy2M z_&gZ@YRuM{MzU`8_(l*l@gtr@wQ`{Ln{NJEskA}5YOToU&esCAP?x~rL7@EcwdAY= z`J9-u78+A&=+O7gLkQc zGRbDsy!*$^>tr3nSmx%%ACfPXi5@}n*9JzJ?>ua@aSRHhMO*4vi9B6?S8ipkjdHM0 z$`BG0JGVZF&d62%m}`olXi!^f#S}O5n?P-|BMF6cAVnf^^71gZUY%xAn2e&OzQV_p zl}NVtl9jw=Q(iY2ni6b-y=OdE0c@8!@xD`^heHON4)N$`muCMsdtRV&ZcD9(BaC5)<#&g6zJoltSjfijA*^rJfLo17p{$xYMiGwzWd*gBc}Pp$!0OB z(RqGjN%W~cb-j@`<$u10a6k-44icV?c%}`Hx8iCUE_%C&{G)?XVpMZ=PSa0$o56Ne6 z39snm0Sr{I@2dZo#5mh7pXZbG#v3;GxW>E;HAnb_fqw!vPCRZ(Eyi}T@e$ccq>eJ> zIiI$XPawt@Sg$mRh&gPW6o1@EADaJ`?;+e#Pd$%FRr}M)KB&(G&Caj zxa@6S9Jjg2MA3&m!_Nia0W2jj;4t5JXlzfPyS09*Did<~bf0`eUGsxY~jSj3};ybF7xnenb(@v~d ziGainy|Kb{RGlfFIr;*<@82g$erN-NVL@Z5jt)e`(UzwdnrlM$C!-b|c!anHp+WET zkBHUDLVt07EP<--h&hB~sj1RwPaeyl>N~28`G4Vm?Ra#GEcB<1hXkU!EoSsavOZHP z>4{JVQQuZIj)bJX)vTQae~N;`m@%tmFy-Ym-Ghl)r_uD7u7Oc2;A=naL_#t6+D^lW z)E8!3uAt89uX+Aqr~pmehh!8Dnd}4HM%B$ifA-n8hE;z-9mBEYbm`P5`y^QX7o2fd z`d^mxmiF3%E1y!5IT@}l5YzPp1IZ^7KP-3m3siN4pvHG-8*Ywatg!MF!aP#~h9#*g z0n|Lako?n^iuhq!s#*XyyPMMwYZDvrca(%Hd&P|Br@-o7g+D`SbAFE%`(j;=#`>8j zNmj9;$Tq3ss@LbqkkxFsQ8e_=#a$l(ZEJrA<^2;0Oq|r2g;o{8|MLRtk5INo-lVo2 zCFvj&xJLvLWWjK?O{R>)r`zCL3-}m<%m} zJIGJ~A&p>cxJh9W)QeO78ZE;M1{oAZ*O2#^YVYn}AsoWL zRh~hZXUcO~J7ju^!qy1jT~U1FO$`;nT=K4o7#$L16<_Q~TVU};Wrr-ehTkQ+tnjZJ zHEsT48-*jSv5pP~y!oKILU5$Ofm+z6(N2BSa~j5mH|J+(7~t+-^RSs!F)5SOb`witl^Y@ z!p{E_Lt>O?;2mmb|Not~E;ewHOnTr_TrsZaW*)9gFnlchkQ;PhPa-!ezW~7GFJc@a zorEW~-b^GBONYk7?4lsXWF^}I$oDD|(#kzqk-ow4!_`uo$PXK=E!OnRW#H%8k3ug- zJ9sb*bP^y8n9rDN+BZAOJ!yB$2ImhuOBuZEbUZ)%!jO$m=Vzz&K|vt=TPQU)kXcv` zDP5OBqV8<1;_H%U!^7%!=t|O3oFj-LrI9Q*AtYkyekbJdm9JU9ai)U4PFgcrsSNQE zN028q;VI!5+VO($y8*81%Dr!}51cbL_=RwXVHR+o8EWHA(k);Y((;63D8P!lx9skxf%<{vkunlMk}^y89t#I8D6PseDy3AF$~b0k zsgzP`nN_KL|5r$RLm5mdjRHA;2SbbpHcckyd8nC0QS@ErkM9NR4GKs6h!mO@GQ5%*fD%+ zxZT(=aL9MSYP5D$>M|QfLhVm530u1FSoqmv0NSVTWV6qek;(%JhL|x-*wlI000a!; zM?^CSluDn|p|Xmyz#w;F$l-Uc-9PbY)O_)q;~rasiw9#4-cP%43$wZAsN&GWGwB& zUL4)jo)+pjU$#-a(bG}1QI=g>5mde8h_@{!KpaYcX!jW(i&5~XhiO*Gq4Oyl_>I<% z#0_GOToHJ8nq@hm_(~CvDf4800+d$T;QRq9j8fYuUp84Ct>FleL;5+}I{e%YrO05g zY^^vD0x`rjR>ow^MS_{_w8hMQlkfs_84|q_iX`V z=UA@Mu+dGlMrF|(>AI8+>b;SamiP^yQaksaZq)s43M>qDz60IBZCE;XY!LRrDuc={ zAVV783HsYmRC(B&;86LOlQYctHRh7Vp-0Xqq&hFID-Y_}btPT%g7bR-KGdnbAF$7z zpBdo3c_d{$`x?;T6^~TxtkT`@CU{3D^FGVy_2SboP5g^tD)V7KgB~TZ74Vj>%-aoW zR!fz=rz=kPeNk9i%Df1lQQ*tw<z`Sa7w zFBhU1n1X`>>}t*B?4N>?QV4m8{t?)O!96yZPnYXfumn@*bnTxlK9&dP{!G=5!tXlx zkxuBn1R|E^Q=7Y*Q|FT{7Rzz;Jo?3X(S8rn6Fh1jmy4R*F>Ir8xABN(;+G96y_l8l z>VC9bD&!i|i@8*45%-cwa7)5%u^uDA_;f|x5tzYpr5Thl2pz__B zbfV#TO4nnPfsv!z7*G@pzweSaSSZ0C%_t}APa_WecBx9+)0)mLz~q$g{q*+=ss(+Z zXLKW#;3V`c`MK*+O($BEdC~qa{VV22qjHff!tM+y14!17M28VmC5$$c@ZBUAw62QI?hU)T$mI47cc?{MtoDL_#s|VW5!_ zH!QvLru`2a0$XOSJ=A-*QPvi%f%QQmtjAkOS7ee$+p3n$p-e z{J}_{v2Eb|0BFB)|GoaWZ3!Mp#2nefH&D1bLpCr*a6jXR&;flHn*-1v9>BK3Cso^= zNmW0QU)rjY$kHsoKR5$c_8iUZXZvT(QjaIUdvGDAX=u3~2x~Ni7FoBn=sl{>)pjGIju~~MgTmKKEOzdvOtHE;r49JZgsAc+HuS84nwAQ>V-NP%lW{U z4Vo|mtcrmKsEVQnaX4%MPsI(A2nUWn=Oag=ltn5Q+{v(7Q&us4@X)4^<14DHG2VC0|qrPx|A^rIC^HU8f`Q+qJxU@NoL7G^7-JEBMV%5-?` zPa?TRIarvMaM7GCUjf2Hei0?$%+?5ErsARld7GJq35i&OX6Af^MrKzLBs&jGi88@q zrX@lVvmy&5YjfX7Ho;+5QSTyF1@d_#SOvSjlPBOTO9U}Xo(B~S2h)ucfPxFGq6l18 zQNBIzSbRSCuSPjtR1`5oX3w=)?zRsK)3Gg-(pPUVW)>5HaO( zP~)gj1q04f_9|z|(NMd^4SoC=793{QqGKWxtd3uxi~%rzSc(Xxtnxf4tN)k|w+R{$D<2b)Z4m0S}v| zXW;j3y^U`JPk;Jnhn4rROfzJmO4FIUN`Ws<*#&=jlUNlQcn2PNX{oQGF;in-U(VbVWILD8(Z_G#_qN`~lfcve%0b_vifSQ0v{*Z>O`sf)vgRGYhwXh$!J{67zPn1t@oKZjmei)qPGCRLO# zMN`!HR+1SGE`91s3ZClw$|rx*@R-`Z*LF1pWAi~o_8l`ae`yaTXEA`gcwW~$S-KRyT zcYje>RGK&%&;m~bhK--MrApG-jpr1nXBP4P6$s^ipMam%lJ>B~CXPqHY=~-L3PuHK zt3nc)09@*B{{bS3Zo=TcG1Q+H>z1+08ktZLG_0dgyln{`2`*x<>-gS_*!ZP+WOHjX zaz4pYZ<(xtDy^E6$F2p3u~{CEH+>RoHg*}!*bMgLLjXmi9zyx=-L_)0bBdwZ8$Ov3 zv)wm14D5^j;%qmCl}XGidUpzL4}W9m4fbRGB8A9GP0%J0(V(Em7#s_GwV6u>M(m9Y zh-z9j2LZR*`bq_VTS|mwlmvO}Robo=98-YHDbKIz-z|^{dO;5x7sC-k+UgG=`&^VY zodFUW`x-9+PajQ0onKABQ}JypC|r(c|6vIJ?eu2?5(F+R9z_<@rg&M3@`uY7vM5*AaGfHkfS|| z)Y>Q?UPt}#*REznBouuC?e8g=MQeG1U#J72Gz%Ch?gq-*pfPb4;$S_Sg*47@WqbR7 z!?dzZ7GXkKPHIUU9y2i>F*uy4e;k7Q65egD*5urXiR)?)w_)}_>;KCeVE;~j>1v-H z7wiLmv+Kj6;e$N@(;bM6f$JY#LaPxae)-e;O)n8&ST=eRk|7dCwS?IF{#;|v@Ri}+ z#+HFo1KUT8!@Z@+z_lE1zVm3WI26v}4#r_cwxi)5{GhkL)E9km5vdO=G&8Mfr_QFI zFE7Yh@@~QTrLwS>z`l}Tdr1gs9^Wy!b#K?WXx}Z4PD8H%6wnhkC%9_aGaWDu=Eu>D zBq1jtV4?jM=CrQ!{YQ?5U(o)v1kgXa0o8#B`;3P5+U9tyw*dvvNZ78) zf-Bd(oiTjBKTl!^8T(ah)$K|Sh=M&z+uUea^)-ld8}K!{(dKWp^@ z;tr?)>j~Q#S#Z_$0;YYZ<-AX5JY7)a|Kb*ckcaVm^+M$sh=P)m>aD&vc6eGM=ug-K zAU-OAlWWi@U6UF6EsekG=QNoX&+`wf$B%f%YOLLTu#@~hsxiijxgqAUXg^v)Y0v)% zK3bEf_2|q600njuJ}VhRW2VLVu$bBUqI=SVjGwi>^X}CV$?qCe%?XcY+eodX4r)l} zDMbhohv4n}`HDHpu4`01M;sxX_J~Z)8w|U@9c!Q-^NX0J4V_=A0zgL=KcdhOcaCGU zhR%PJybPcKYS_+7gR98VLGrgjixT*UJpv6@2Ki&54MeBXTPn$qq7_d|TI&Dd0%q{x zTP{hx0MJ-L6x1vKyDtu@Hhxc&r$OE~G%fizp8vzXTTGT%OP9P0$HiC0A^1|y`@-7I zPa_&56oZl$rQNw2l(t)HVdH3$<4c-qZQZ(lUSWh&yt7dx;%q_b{5QS62pcZlNl=v} zORh^krqO()->0$kW=OkPJ2y@^FwGfdg5pkR8ri>j)aR5*jh~Kb6P$JQDbXa zQ-K)Nk2>}^)@!wnCr`Z5BSd!A0RX@TfDK2;4*hyOG5`r`(MTq%wA!{Y8Z0T_CRnRS z2e9}5|)u*XWZA%z{U^PZZz4kAI5nOEri-y$_OvbfAz_XVw$^ zVE{FgTT_Cr-kT}5&?t4V~2lgG!oCmV~Jaeoieb!WU z@(ZtdQGD(+0iyf)FBPS{P3zl<``6D|t!}j)mZU4gabz-Asq+4}^v}vMjy2Z0KQ@Er z&j(q){u9b%l?_=_T_s37IQv3u^B>^sXgDIs@%`%vo8t07377&(K~Q=B>{fB-$(-ir zQMk)D>VV0z#Eb+ixYG62@oRYRJ=8_Hbm+qdR37iF9C53Z`Ql^IR_w!}J4FQ9ei)-h z<;I?hqk=4=AIqyWn#Mlpw-LCtHPfT+Qc5BmR`@O<<42)_8{q_SP=zGPWA{?6@K$x% zf_bG!k$Me`CRt+^)~Mjlzu*A0wn``FBBxm655K9u`smhH>beEDICo}bb@Drenb?Qq z+AbPF1tIIZ9j`8LEdkwk!#UepHdzYc&Vv`yD)@4$js4PS`^rmDKXZwKIpne&wyjmg zQ4uvQx!d1}Dr`k9kgzflnh$8JHVfix3UO`Ek)vh$G zd!BhNWO4d~79^a7`({<1m%;;~6bPBfjYbGV*@#B41j2Od-YbC@Mza9~K4QUZ2m%5^ z0YoiW42g5=S{`=6C$R;NzN0?2?fZ{h_#5iq-cz1kho#w~Vn-Qo^3VmJ@NQj+CljqZ z4k4k^kLADQa1`PNBp`Z08Z^$$9{rtrL5p$$KnXI<;dGdh5I2m7s0A?)l3TZioEEf^ z=&0LW+o9AnZHx6yOel$Ro4Am4 zXLnR&mRlk?*sldxb2JC%%W$kxSp1W1Ao1L?#=BJBaXxT&VD2n*;I%$*N?NzG+gt?s zNxmj@3Z6p&H)UKC+z6$=^#{%%OMPasvT|wXN~Grbk@ZE0&347JJMf0h2S-WdaBQFA zrNXpWFIe180Kb-fna6Uw=-E}cRY(0mz0c^qi>{!-0e586m~ZDjn}x^UX0!YQAp`!4 zi~z>NT)LcH`(ppU^!+xeAaTTI<0VGe?M~^W>hl`5Iuy_D!WB8z_yCl1JEfAbOm{2T zRrn*NCf=y_tI+u?J53hvapy@x`)w3C+0J}+&cX9Au#uJNus|DubYaZMMs7`}=69yz zfq&z(VCgEG%8cII8Xuc27B^{9w9jM6I~~kt=N-CxC6kP^<&g~}oE?{}FoO<>vWc{_ zNfci2wH#&f|F;|1VJ5KMK^3EV)D#rt)$^b$@4r$jpco*5ohSmT(>-R5zZo>oS&wT% z1}6`Bi3zLnEXfBAgOWb?EOco=AjcnZ9m5bJuvhGjgEA3~AQ3{F`#q9in4*RjwMM(1a%wwOYW=2V% zVmZlL4h-z@sO5wKXCH{FV++z+YJ>}1v?UbFBTGO`>RL-r-zIJZpl0-=5-{Z6$P$_0 zDb$@<$M#1`)HQcCnM*$K0S=t5Y8QAfN0l8xSAFhvxux=A7hI&=jo1^73##Te-(qJ; z`6>KEW_cu%X1~}~r z1QFpTVV(4A)s=ECWGH51DzGs!abK9}f5NaZ%C^V(fFaYZCs@1`>@c+@ht8c+a0u7alb-j zpeY)tVj3G%8f1N(auO5Yc>;^4$kjU*(IA8ps2(j7PPrpegmA_MGW|GAKg{s>*EAHT zJyBGOaFM*^pp?En)%wz5_PQ~}plzWqMkt0oabr&{v9+p~3ZVMD{$6cWH>Oe%snrin z;vwe2GHPA7nwoVdv@kl&MCo<5$Jww@?4dcWD42S8uE~|B#QlM3D85xJf%rdG{T)UL zGf0j`b|&5_Y~@165u>K>hph@zJ^oIRjgy~%WXGPDyua^_p=clX z<(tYo?HW=@yb6ck(-h?N_d3N1a6OmTsYJvYB7+sm_4@-n^cu4hYMP$*R+nwgBAit# z$41aXNuaxy4DYY=ST36bT3vR)x*`*27bg>4Qmj63U!ED<>)^haM)XBNWWR?;9JtF7 zaOxzSvJFmqYW03f$&VSbTVsR>yGG_`P36BYLFiu5rdrgoGbNB`=AfjIf;uB!Ja;tc z67+YKKHhxiFM($@sdb^mA}s9mNsJ?>I%;2xAw8x`+Sq9}Gpvo4tly?LZ{uj&q>ib@ zB_2p^VH%d9>(zCme{D^O)z>>iT4~<~cON=wWTFRea62BEQd|eVRX`+t+#oUMtTF;9QIfNjd2b%Odnt67aRh&vQ!36lm?bYX0%aZ4Z5-52(3PB zDGoM`>g_!niyd0(l`;<{j^cS<5|a*QJny%Q!)3JdzjkEWq`1{U^L+pA&%^LAQ|PKOY0sGZQ+{ELgsmj*x|s? z&Bd-g;=(8qPIsJ){83l^4(tup-8e>ul_Ph_1K0uqk7tXu_ci^EV=&FRyJ*9dlw#CQ zo^1+LRafRSO*^bnFLC|2LJP*Jz}8!5D4R>wu#YTdvY)?fNOq@>V%!n5J(==DNOegD zGGDon#g=diRWQQMz(EuhO}>U-y)p~r<*<=<6Xf==NcY*js?Xp=A z>kg9}4v`kxrrkV3$r{?%<8y`F+OH?&@@as-{m1=5jE7F!K`!m54$k@8oJgg?wl12Q zx92&);I+nAAP=k=Wrr7}KHdP?><5B3TO&x+-S4Y14_WN=rD<#tUIck^^WV>a1 zs$y9b*B_CMXfg)EX@L!v+5UL`>*Fj_%lQ=sP`aDeFvdo)3Fq9iwT*#dhL^wsqT1*N ztiT!zxuWskvbkGb<4bzbx^sHrh~18;a0ba`Q`N7+S9Azt|q z+mZ96Rm*1zNHV&lY%NfGWO2jy5gA08@c}#^sJ1W)5h7&3VnwR`>>0+w0*H|OpfKf} z1jHmDWs+oSS=F(7euZb?fY511>4~s=^kbiUM)gdI+jGB6J<4c4_mPXe54W*EY{Z?= zWmDi$PfNiGYRGUUpT8@&-&I=8wmB8?yy8v%^L${@?zCA#s}Q}|@SqhX4$pq%E>Ej1 zVM$kM##)QYb%KP0up4s2Jsux=y2*^My7#O)@348;EW5;fPKh1<^+ckv{P5OVvth`9 zXSu_R&$QD>-lhJ5_$}Tfn#K5;QO9Oe?^`0a!P~P6xbPnQBxznu)A?_Rk_wDev>MR{ z*WZsiX3r8}!K*y`e=(*wRs3x^7#qds0QIE{#~vYvy0v>w6j6Q=KA(uS~;-9GH4JSZ!{1hcP$6j5V*4#1tY z#2P^0g6TAmK-;IkVW9$D_B*|)Ly`nXr;JNqm^^ZgZ&ESwA)P5PeG?!v`0zT64&9eiXbSl04CJIdJ2)LBc|90hoF?F~uY zZx#d2Y_&e79lQz%s)OjGAo`Va!6Lv4%dWp*T?K)&!s{$Vl|HD((myUnI@Gh$I3z9T z{IpYfOv;#TaK2Ytd}&3nWw{Hw#~HZVuiOA@mTIlybeJFx1SxsN;hU02_EOn=IYQZ~ zoG?*&uUk-FZ0P(92HFTvGVQjIT|l)R81K|`akQ$={UK;AHJ`=S09|;Z02<8oujM)O zV)n&7wI+^K)w=%*vQX@(@q)8EBRrgj@pt8%oACB+<)%HQ4lTJ)=>E;=Q<{a`FbASc zzIRo{TNG@_E09aZ8MF`BK@|CGnKF@%eWac8m&eOn+)hGnUBhRTj|#r1R(jrcbArd8K*U;0OY-&3_h)Z1<laQ3i^K<((_PTf}%)q3}{ z9p0?|j8Tp3B^YCrfZ8+9UbdNm2=M3XrurSSrL33xEeSsTR~1o}cEVdUf(^3;lAuLz z&N@Jwx^{{DiHQT%8~9&@WPl|9qSlX8-*{=BztD@Nnvw0cIWi8fB!&6QG888=b<;~M zvCRp&LeYK^k_8&`3q%tkXLAd(cDH=|k;#E#USzcy1`U^3&i|E|&FiP)I|Wd~NmLkI zPajPG&d+?ceGY`l16*Gp%Hq5siYZV7&`RP=Er`S9W~izZlk9ti#Ma)60!#V`iG$9-&Fmz2!2)25SQ&EY}BSq zo{~Rc%I9x|ShHd-&E#dV-8#S1+*7C{JqQbL=m8y0*8NooCQXnw4Vz~r;@?o0;@Z*J zT3P+0ppG#CfJFr{W?-OFMjv4FBJHugt9CTdqTPN4%aUzpS%_Q{Z;&Hbv!s2UA9VIf z+uF{zf%Z%HtHi<0+)Fpawf)~FVFbp@pZ7DJpz#mmy*gr?1Vj-vd|3ctA_tdKF|shM zswy3_Ntv1<2g;LA);Sxpw+d*QJgtePd&!BJ+nv-?b_<%uPj8MPd`83AzPw2Jk`rg$ zd8VEs&2*wqAHO&zCw-L@65-yIdjuV%Zifler~PT4!Kk0is~gzaUwfu@AmVM}S4DNa zJ3%JI0FS_^BB0awL}Fzi2C=vG0Q)m& z;2`uA|1)ZYV}P&@q9blxU*v!yx2kg{3n3W0eTxtci z7a>CQx>fO+1*nvR&vvAWQfKR?nq*Ht2=X0s)Be<7@M#Iw-HN{B7;R9TbpkrYql7sc z@gL0b#n_2OS&sPwB`aHzc&VC8(ZDjAF0-VO&PdqSCa#>sjdae|74qGa6M{I5dyN$u zET}CHRbFVGx$#MJ$hJtGaJ)t$r@fQ$6fP3l`g&&5I8?VSvg==Xl2@~R7LXOxyps;k z1#-hMI<3eKL#)k?Lw)#R`ovE3z1i=fb-0hBzTN>OM<{PAp*MERaFNs1G=^xPrIXc} zlS|`+A>^ftvx1~W^<2h4aLBG@1*>Jiunw#{Jp#o_?%##Eg>EyD{e8d*NS8m^+4iKb zif1CS^Gi=?Y`9SX{%jEZW5Ek=m&AKpFD&%N5H{B`xyHTf`rPqqVqA4jjK@d=dIa*G zNM!Gqp`PL47MJGA@Qh#g^nl)r2G+(7&U;WK&p4#=OAlzm>s^>zQwD5|rNKgP2P;!< zXlgN3HItk-3V=D41Vr}lINq`-mPtUT@^Eo*shE5`hii!3{s7y97Cfih zHp~8nCZu}(mrtSO@LkV(i8UHv{(p4K*8{-}#?7S0GUA^MP@m(kc3IrQYJ8j)D`zQ; zHwfsX^+5N%>MjuMTv(0=t7X2ce6v|42XUd&^VF_siY)o-ML|e_KK2h=`}`?Q+aj7q z=Dpsa(NHQ3De75SrgK9aZ7?qjV(OLcHnXD^uAqYTvDu9RnbN`j;jJ3Cv*J=!ucc&R zeePejDYY{NWb&WwtumfC{vSfxbaq8fLp)I@|U|y#{Ul5#$K!* zj%KK&RCGW|aht_yCC!O`OUEaWR}%%G#$`#1O!Cg|!GitMNd`aYhN+MV3L)4LR?+TJ z;s6|`0y?rFrkUOHY)Wmym2y70E|%DIIjd-gb4T2(FtR+2b@$s&8x1D&hF>>elI3je zWQ?J$<)zl;4NhhDhLo(MhX4>0SM}M+(Doyg($^zew(VHc;%D0t`)ktC7LNe-j77G7 z`3m}SxO$Xwe5)h@NzNbfp`18K^C_%(EVSM`tn*ienoVu?6o3-cSn@j{B6fMoR#$Md zXJRQ2TJlh(=IGU{YzfQfCe|dYU)RR_Y|Mr=qc&wbm}($*qoEB5Drc0N z-OlLI0*A#MGoWW5oiy}uLp4%{qiOc{JC*1GB$o*GpQ?cevT&W={ZcsAW=I+DZ6)s6 ze=o2B;F%zR@c0Uka&HiwD?eg_nr+F@0C!~}u%e)nto8)5<`jM*GW@4~K@^9fb>3LoGvA+4bp291sIZy4xYB zYgwH*BI}n`B~osMZ9{%%-QLS&Alu*m(IqpU$t;Ys#I@)J@!2Kyk$C^e`4VkI8uRG~5Q?~Q2x_ds#9~`_h!gEouzV=v80ZXi(bO{Ff()-yx+jc$VxJ|p zD?ZqI1tXme&^A&+8Z;d5C(}m~bY~uU~zW$>)L*grD>O=vt=!0|v?vA2fx)3V?q$tu3g&;}MX`{6xi<8AZdQVY>-gxa=o4t&1n_F|0Qza01 zHP&ndx~24~n^Z=MqY~7mhOB5Ahu>~7tiQ>NaZE}nWFg*!v+TiCz`j%>Aew7iY zTYe@Iot*VOQsY?5s2!+)!()YpI86B*o62JN6OCI(HsPOHP^ZM3)Rs~Q`kF|zFEyAZksGzQ5a9yOQ7B~@q=l? z7=o2R-3N2hccDw5W)9pP!qKvW*WD^gJOWb>7z+zTMOI*3XemXa-JZW1R*Z`>&KUJ0 zjgoZU)ga>Wo`jH!06PTW;J$5|&DK;C^M-e85&2cM$6bp!Yw=+WTa-UMy+|bFd=rq*S=|wmyMM2x(eWq zaXnfb5D`=uz~%eeBG{KA(FC5Z7$;G}`v`$1TY`gD>&U7TygyLKtwcao5L05>b!<(v zc^KAUviEgZ4u~#(^c_XMbQ~9hS*3o&L?q|efANNzW-Era71W=pm$PlFg}L`s*L|cp zqg~X9u>=l)ctkpYD78yJBFh+BP*c9ykpYPrgj~XADo+2k+>iSGbW&n+a#A&4y_jFa zPfD&yRxh_F1_vju@xJleAL`Jm(H*`Iwl+goe5Y#ng{=TFc~}DoIas@`YrNawMyFO~ z8Ex@CZ}ah!uPKk$2(p~v__8*X;;3&qTN_BR zZxxs&{qVYaIyvL`T_^peYBum&I&5b$sMs6S7+)82+)Ix}|^OsNa7IFBNt3EBxl3PH~{YLQKU*4nFy{hobH4b?PJ=yaQbd4+2JjIaDqd2&D(qZ>HOiO$c<5bH-X`|%4<1kxHWg5`h^ z5MI7p;pN?RL>6er8yz<)V`7J*IPO1&j#bP@;6iByT8fz&GC?b2&Hs@xDkgG33au!* zZ-{g3hG_bq6&*T_;wEWUP7@I}P6Z`JI4p(IxZj_EX+_!m`TXM@nR2QctTLa9(RJvi zc~iXDUZB=^5glUHkLEjT&#W8L;pusP)LNMcDn$ByJZRZin!@FlCU3-&-1^^|vXQyl zU*H)*3&a(miJDLx=(dc>3}HGSFr)fCNBi)2GSP2gpq%XSH%2S^O;4QJ2>EJOJgAT3`c*PLOb` zj{gM3ASLoMP^<95=<1quiEcTzZlVJ+QCZ9w`2BB<#(@Ea2*<&{+{2=yB`N**uVCiM zS^(`CbR{zM#+K{_0fh5BD!KKCJYiOC==<7$jjiGF+m+#p&G7^)A^JvBiu6lnTLfci zmgogDFJTB$LDI4HLFq>6!+ZUp#an!8hYLia-p#eYmmH>6zrb|uYNlS4@srL7vI=U@ z+13*)N{^86h3POtb;XVs`MG4`>qeUrs|jI;^f zhH%HYU<=$S@suO!4E;}U))*0;;#XJ#)Ej_)089;t_gbUx9d2q(aL~*t%Bh=iG}jhW z`Py~OnpliA*eGk~>Y|z7EC`J#jmg&aKsG1$j)X1wbaynhX{BP%wxaq^>lGZ^SQJ1| zhTJ^!)wZR@Pa0Wim9%7c>@|o|P>!h}-+NTCYmC8&1YFfuRf?4FjwC1Y`AOADny2FG zq$GYdU*p~tV#eS(|A2lNyZgYG(Pruy+JOz_obpaLfF3Q+_U?qxPNMm$pHDBa#TdI+ zBc1mitq!<91*o$UwpRj+GK#L+{q_Um8Dl`B-3oL#EuC#(f%o>seR=~m-k>{&`#r-0 zDq^`=nDugY%a?PRk>3}DM!1vdP0&8+c>6TKTzg)Nv~L*!`m~;kd#8#<{;M&YWm zOMy0RJM@X|cOFM|`E*3UO&L+AavLWIPQ0lyL17lXVE$o9HhoO$pVBdwe7`HYw0AOL@{NiZfqDSOf|l_8r;Zl_Wl(fj z97mcBLNEpq$a>U?&SFk6_oS;jA^jjZFTCu|;eJ_nui9SUexQg)A^iwX)UZ!)FWg2> zQWhJE2UDw32kz~PO``0la26LCSj8JS{7ko-D}g^`WL?$rZ-Q|#4zk0!N6jFZ5>Srp zRpkD@1Y_P+0?>cR^zfFWL_0AC#R`<?I4~w2Nr2I|~j|sDd(f2bX$;-I_aIX!-(ZSmq%;df3=1gO6adEK~ z8y9|wfBv4N`|A>BxZC{cMlz7KI;xyw-ytVsK;WrBdUwE;j=f)b9dh8U8} z-ombos)sQMq&JStW2l%#@R4GTHWD1}(Rt7p z%{7**cav53UQJ$UQ_Q%?F3yEspdiro?Bx?&1U3=s&aIQMa;Gr2jz18>=NRnCX{rCT zY??s-A3uq~4J5l?O{gn+hrUhUPmCR$e>$4^f@|(WNcbt_u}<5-Ke;wl>o7#ksjO)w z1g`MnFBl|T0iK3AV0m*a3qeGWSc0IYwcRik=e_rOnA@m0 zJPVtJy*f8lzx{itFc(bx6!>0{8Mb1Y;3(+ME1l#&g}(fv1K0^cXhlXU+zE~Zm#L`? z>PpF8rf-)Lm*qwOUrMR@h?mo+E7tYBo5jmAgqj)m@5@I4{xseqRPU`Pv!p3FKYYF_ zzrCG!Po{WuI|VFIZ!4r`%ChmJnQlOTx4*j(=7Mpb65!AZ+^9ne>ZNNPW<90AI2Xk~ z>y$m=NN411q9aj`bRg>G7P$fUG_lr;3765}Xy48yUX|rOnooJFWy_@D@kKNP4NnkK zCHom}P=I@GRMt&U=c(F4arHAG?9Ubxx`Sgpt^um0!aTyatI!-aMK(#7vCYiZGaBV=abF1#0-*r=VEa# zP8*GFl19jK62hI~u^URbJT)^M5?{%!s?Ok`r*3Epx0=46a+dH)5d~#edLwC~GIQ%&@kQh;O zy9Rp0Dpyg`3F-`)hYXiNNLNwh{}u!^`Q`*I&`7I`hh@{T&$@qHf}IH>BDp$FAl?(9v%4ZIFsxfx^3Z>=~Aie9;L zd|GH}7meg`;@eI`Nqx-W##?)_&V>@C)-)ANL?gjLfpgM zr{+Svo-j4N{v>Vk4K5ja@v(>NKp69uW#nQ=Rocv0I^~I8uvns)%y<*eg%nYbk${RG9_3jxRC4+!!trR z0?s7~E?afU+Fw~%F{BEdaMCJ#nj0Wb3R_E7vCWs)0L7_fVVhc>L82v*s#>&nTBq z&v0eVQuT5KtTrTv6T{b1`6u~Q)$;UrSuqaO&VQ}y7*1R{cL%8o&y>lr(C5A%sc%E& zxT<+yEjPT&jMHPB${q*#i`GjK(#6QjCp zEi@|;3Quj`p_1&vE-Z(kN<5H`D-4}VDK4m15mW(;Uo6>cf?`uT0crjq1)%yc>I6G$ z;<0Dg-^t`ki#6%X*7PeiP-;r;5QnMwtBhH4JTC%pM4q|?s*NPi9SD-2OBkc=ALt>{qu6a~GzUgt}R1FWV z*v8YE?ANbHgg!vG69{}dA6p1Eo~E~|$>{{zqfUIVyEn;h2mS_BDnTG{?~ccYg2W^p8!gzQhluz07QDQwb!X#6+ zRR)qFD|Y7-U+6ol2y2+4MSWe~p>?x-#ngN~!TvlqW(z1(mpZe_mC-t;_7pcZMX zxOCJ1W|;0;9&N)nkv60wm*4EnvrEsF`C&Mh>@3X7!}lCRd&GU%rgdv0ZIo4c2nW}C z0&PqlQl0$@_xIw}3T(*BmlsUi8n|}ck5el>lm4kJHZ1m0W}Vp9YBb&kAxHu2PqXpR zw36QRcb?YddP{X^|Esllh_+5XaJhIwdvwD;ziB?5Ps{|F5wvzS-7{9=nNDSXq^qu2 zOc{p{W>-QVz@dFoUb>hFGENV7mU)w*qAqLjb&oB?7apRTg=asgDF53KayjXfy^gT+ z;X3!N!Lz(3Trg#uZy<;Zx9AEIgl(P2R^WXmiTO6F&Mn#^tiKym$^!ATM&F?YmVE?k z+W5=}1-9P7xi7E+wmP(iHdF=da&IdMIH$*XaHT;L@0#;&dA156A#WbPX`uB?^_=a; z3Hwj)&GZ{4Wu$lHp4zKws$lT2XW;tqN7CeUf<T_ z_ukj~ctm+hB3NsT-kXkxcP?i{{(pjCJ*Koy3nYZ3UoWZt1J!|rR*6z9F355NTN;5BK-K2(b9x!E`<9N6OkMfb}@sT(WGctk--|kPuQPGTni$ zk=$zbU-dEPpM_j=d81|*)IOkX@(eF;9bsgNITGZiSC92_i2q0RS8I&c8?b41M%_r3 zHs`PUz0RGe{V(`Sd$Q@%{i=`IPl@y|N84zown~Eb5F(T=B_qU<4RggtLXGn}0qbkU z@8t6;jdF!~hsv+#4XRa9Dm8`}ksy}DuT}_CnI5~I2N9jWzOO{jHIKcjLJlFXd#t?S zL@Bg|^6JpAMfE_X3S8HPeLAzUuNQU08P$LatCDNvSIXH@Xg{KblqB5{^R;P^Md`-f zz&kHGj|fd)iQbDVN3kK3ekE{ye_^~{@}3rzT2-Y$su8kic1ZatHD3+T2Ev1>HQINi zpsV%m@Y0{c@gMb0cWE3sQ#|TLkPTh_<)D=q~U}^q3uBi%dK@a=IpdhwoE(@fyEvw0gb112)8}231uU z(vF-hnqRqExr{5;E7@@7d^LI6L}mhKZ5M=jF5ajaIU@T}#zenA7T1P{wya&r9?Lmv zepSO@V)NaYOQRRGasNeC=RAdcyV^g_T_WuER06${kbE0n6!0blZHc#rF%hSwzBI2y z&uCu(o33felzTRutAw_IU8DBsRhSCfjQokTeS0b;1bf$&3@HZLRFu5(+*p{^)#GKu z?FF=2HeTR@huTz9yz<;+u+=5v<*M5qZnY}BAoAu<3b>tv*ZnFMWM zUDd#W*L}{(?%G)%eD%CJ{JMiM->zz%8iKpnu6`8EzoFW-+wwFFI}>mq9e|J28yiD2Hv-*2J8P$4>Nm+FXb9SB;C`!gr#J>V0+eDb8FwkUP2-js=9d zd@E`9Fy-$sqNbJ1Hftv-R1D_j)RJWu&W2eWTu*W}5S@f=%5bAF+55MJux3!)) zLfJb(MO$2|mwKkAcPM*Q$_D=}M<|*JQ`E(#_!PmbLC^7}#^`?h+siG42VTBKHB-wi zf<%qXa${6r^ngl!ULMu7e`*7$Lk@_C;KXo`1qMAgEA>L z^$TU|gjQ)xV&2?z9ZK!79zTd;!Dz2Y`T|{z+E?`67MtQw%AXz#*$|)M@ywD>9H!I6 z7`S|ms;A`NAKmf5UM~AAWuOSliB$2oy&}SE-st45vz)58l7AFe(gq(7Pt*49!!M@0ohM>b_pe5(Vwcb#JG!7FGMc!3s zj`wgW)TMkg`VJf?!&)-_60kFfDwFXb$W_{~xCVTEef5!2N!ScLjN&;4s;dfd%s%{} zUlU$Ib&`pCjvwh9NN}L6e=+bFEbu@`=y6=qz44oX0}MCuu1W6iB3@_ecx*Z?*GDJ2iMnxD6w}}{_vzzdhY&7$p>d9Dk-3qZn zIgn=~Ab08pH{o36kp8cIvMSaN7k_&?q<>MP#n! z2v1hlOK2EmJ!J}{lPbE@@~`_yjA)pgi}{+7i`>>$-8Lk_yz?L&uW;}{*HA*rKqR6Z zVL~!a4xA3y7) zPcKCnx@H{(L7qo>y?o|MCIXy#3e0sfCt2F$4RT&qb^4A>&1ZBYQr$}(3(0tn^2hQx zV>}Z7V=y|OF&m-jPU*rB@FZ4PRmc+q2=K>Rey-<)16t)(@;DTaG7QmY%tjdcW_<*L zoFI9FJT9AwFu6aG^cguwxXz>tL>P1Bhg$YxTO<<6orTlf000lqc@CAS>%fST;I(w- zQU{K9ur{8iE9&)h%}titPO&&Y=Z^`-hi zm~mjpm2#et43kG&ZP)-pK)t{JAX%GVt3929+`dHk*{x3$zZLu!tJ20D3?J9~gI^Es zVw<%cZ!~|>4as)yK7Rnb!k*ABsMd4&w8k#OaklrTR}J|8^5wrZ=BHG0$JpZv5NB5+CTrPU;9L_O}rk6`K8 z!B|APc}Jh{{cpsA<637dz|vo~r09U7+lzzPh;gplrtFLGpO_>9Dh1V!DvRX|@!ByL<1H40JSoS^# zSHcNoxygl*`*$0rn?jL23`#aak6>5_Lbtk*#b(4V+INf&z0iqVQJ?jbX+IY`9YtPi z3B=VRuPA#Wl$w**UPu3-dGyg@QZoRrOcPJX$aB z+Oa%r<|Ar#pC#GKk%t%so0&mt$h+YbT&CzT5(t5z$I*!_Hh-_7{gt*J3k#7yh*Sr?px&#Was5+>=Ypse!OW$H@QWoGHh-R_lmES{4H__LOt z+g=Xj>I%}cJ=NlmTtLQqmYOjV=kXAAahbZxO7|ijjOQ04kG9dKd(ihbI`T%H9C;CW z->^Gl7GJ=1#|VRTcQ0$<5}YH6u z?%3V?4G*eIkV6gHKwg&Z)Jtg81`0ibmJD7&Sm+m^&vq?J;T4!# zaTNm$Do1m8C9f8rwkVZ^@@>&$dsJ95zsoL5W>acI8_=z2i>A3w z4x_uU1j&q7`w)x{&_Xiz)e=;J+Sj40!5f`9on$_&t)%sC>Lo5O-o{kFMYdmNZt90~ z9n`|5!cv1D?W6?XsFN$wM3Qr_U8YD^fTW$dm))0Hr2s$NIs0{!D-slp`;-drDF<^I ze4_W2MT&3*?3@l(QV%O_!?=evz}~LEX4ZU(&OS1s(I2Ht z60%&2`38L^fx@d)DitI3WiXJHN+O^g;8L7+!LkJN4PFiggMd~lh#545L0W>AD?l`8 zfYGkCDnWZEcvw$$84gU)JB$eG8b#zNI*~;?Xm9aYnuU77)pHSjLr2qVxs))Is~(oR zPi+(N5kNmLco{}YWxAmjxOPxR1OCdRKv?YlRBGd@q!)b&@)YUo2x{jrZe$+-iS>}zRIhV@;$k@?!1C$`x4 zF#x+0V{ICgdvl_D(@0MfT>H;o!5kq*coKNFN!^PAg?O;8Alb&^5j=SOJRyj3sfy3S z5jrHzS;wMYTe>AwqTUAI@UK2K!Zs;ln+8Avq0M4>iDPD^)1%r$61+ zr%$RwJOgs*Bwru7B3S`*FNvgQ4|yTWEV?~-#T||O2CotIP5K0#UGD@Q$`Fbl9hH%T3mhTLYO(8zbU^hzXvqEzJ}Ee^lIam*rXP_~B`%8eVfzMGVJ#S-(DOSq&eZ*3a$g zB>_4=%f!71=89tn^OdFRm)j)HY(G<3C8_h#$pc~MI~%qkHzS$g{>7j+_!F~gBviCJ z)$DAkU5Jse)(9Q#j*xc9hCC}-OhsYiDZPk|p7%%Ad~~v|o9@(-?e5fyDGw2N4G2!s z{l*i~tSq@Y6I1S%eD<-{85Ze*=jPPM%Y<;BXU2ssVTYblRcggz6%11~Sdsis9&2-K z35Q%3#C>!-PJ=`ZtpcQ$;6d*A?>bximjq8j`@5akKy9)o+rGn9D@pmjdA!>7_R{Kn zXR~wljk`(s5+~=GZ@O-pGi_Fl&?fY3e}q3AXPvByCsi;ldGSfuG3Od5kj`2nABslS%h=JS|$@zqxte z#)>(%oEu!?IPIQKkdQJgE{i#FM4%0fJM-nnhD=UQMMm+q739p>bT?I5@z3c$0YI`$ zoLYs3Q7a)Ebn(rs=v1A|*L?NjH?5}?CTzTIm_=U7#SUROhkn58g;p25srOhH0m^vK zCtIH+ztkNn*vrp;1fJn7b*?%yYO^X?HrC0np78&6v)?>nk2KTo(MNmYdtM!z0-9mNqLH3rVh^FapGz|g`)j>MOU4ucdziuSjcr06-(e3LwH%cFX#S5x$R1i zQr05Ga18|UtC26@+$*(EEK<%BNefyVdiAph!Q zdAEh1FWfW`1a5!X_P#&M08LhYz-y12W&Mi)X=%~6Qsm>oZy!q>f>c64$!zM zVLz8_j7U$adb(H%*p5ox7twAV?J1a@uv;EF31v_^sF0 zYz>NAyFXRDV{_M>-hhrB(M*Wo{Ppz{(~Z78jx+lGMj{3W+N$90YH!_}8yi2t{RhZ- z`K4pIML1AR5fu3=Tt=sgmR|Zm5UGuE8I}dJ6{+I4VL6y$KJJ(@+ zNn2;E)1ZSZS!!1BSD>T%{5S6ca-v!<_xI%kWlccB5>%n-O48Q)H{`GKu$sc1_^}R& z7qLM{s7h@=;XLvOxCj!hJfM{+;Pix%PJASO2{?paS9y}V{GA6{6I#{7BEHD)KCdJJ z8roG~N*TW>BRRQP6&?*o(D~30aqP8W&n%X&epnk+0h?BQBkh%ro zlxHqkt0;?B*iwqm{82e#V6UF42TN=A6!XA`JV)SFjnqQCTcPH%KE&O$x;JA(=u)m+M1~1Ki_~j3d-z|UA4%K&$mDe^@DXVI<$=Sa6 zOUKHt{O{U!qH0ag)~Z#$YA`4+Ifgh|HM%Rwz!1>=Y8a|28!xNwk0o^Ak>_%fC5nAv z(cEx`kRv&wMpMuO3x|~XG=%q+kAv|kY@hu43x-#Hz^0lI?SOGWBc6T0cy+w+hlqBm zK2z954r^aekOhrde;u0!(o7>G%3Fu-K375ox34>;rE|sWxO;xdAjh)YJB2BPlF;1e zASDVhZAPE5Pn%JjujYf_0TL_!ev&|77$^d+ak$s~f+codHH?`(OwHsNJT)-5S(Yc` zbo#GsDgOTG=FO9}E4~pQ{kqGBL9`Xd&$OqFr?o<&jFn1T)3jT%lX-2)(y7|1FxF0N zQQ1x_$kV|?tmhS0DK_aDHy0zpX=RXU+gmGhqq1X-J{i536RUz(^bJ9;(|W9Ens!Z* zT;#N0e-vvO$zWOaFPaKtg%(z;lyo(H)fn%2LGV@jE6GpExFF4b?YO^fia63_`kidj zUqnR3$q1@X+?l`b$xyD7E|ntDx`}oCD^G4>J5|pPG6_=aCj;nC=_wmR`Hm{NAF*R~ zi13qklCO7iCF5n2p7K6Pdd@4Hj`X6pXT4`HdfE$(HSZ}s1u-e#(Sx#)JP_oT*NUfy zRHi+vQrUaYtuP;NdSSAAPpBx2q1K` zjseOkPZZ$KZU8weI6%)4;F{nFwI>08o&ej|Gc3FQc`E$GFmS60kO$=5i=fmT1)ui& zK!hGRB}kqLz!n-|gOw%jQQ<@Y0PLX#`LJy(bzC9mJNPBgncDARs^+Vm7Ka6LJ6t1glUW>EdeY zAOO1my?6isndlNTOcFL z8o??ZayYxEJVBz*7^EeDOwo#HCPEp`gC>Cku+c!7EmpND3W&NFC@9R?=@JmW?2nCG zuQleQ0;kofO<=!$iL0fJ6GEBxOmm%xE3^xLXn#kmEYK%l^>}h54HMJS>}lo-5zMpm zSeEk`M@ghjHew8=MgehEy|jh!B!*{q4De}mqPRp(rX%av$von}ZIxs0=CCIg(uX<) z>R)%iZ`s$k&wN~~z*&Y%a{6*8+~ZW}C)Y4BY)-T%nhm8*1c?~_2-?BFXimAr_H$eP z!)8upWI&1-WU^2G5+6MQuRC{W9g|;MiIXq*|&WmVGo~f%X&@E8k=;oPG zJ6eA5eCZzQ14KiqaU#%S^Fa~xyw+A|xynQLoUg=> zb)+Cio5wsFN4+qDqlf1;*%Z0Zuik0rJ6Qi+xsQIO+9jqPxgVo1MnGT7UDP*#c z$gQ|_4}P8G9w*1UGraBf1BzK-75MN%(0rq3KY%NIwF|QHFAay4hikNGwzh#qW5ne) z8XFS{Ksy)_hsF>`58sw3Km#>l7~k(v$PRtVNtWy_4v&rr1%#ZmBPuizRllofN*@Kl z+S!ThC1Rp26Whh+y3$SpmRBqgZ;yXDFQQGXll<684sTzVtXo7ZqDXrlkjUGrkHI2q zyx~yS{JDf0vz-Fxx4bqeTEN`F z)W}|g*TENoLCsRxt{AKTik7|KS8v`-W|hd0=7H+wiB7Z7F6@;WcO`jB4ceL}sYG%c zp$6Ua&EatTrRJ?ayyYLwJCv{A18Yr#-fa|!(EjbYcSc`kBw`?K%Y(Y1z15H#i@sZq zftUv?$F!%3SH$o*Xa{4C6#-jK5ft%$6jZUyupLeY25Ua0+v)9N!Pxeq;7dLEI>4X& zIB5j?1S;@u5Y%(&$ED-?H#w-U{q0*W{2gpW{3np9sRLUK9w`5lpW1|2&08NnKv%(r z`OhX*Qvsglzr({lf@hO!J|CKagz{&@y|`Nh@^z|r?$aLMHG;P2c0&LO1>*+z1eB;X zfc4lkjsFqqksgLf6K?3t@`1X8p^tzb#ev6y-=P&QgPO39n$CcEad3WF_l)dBwT1!u zJ3$|SytZ>d7CI3v(WDu=4gByJ9;s~oU9l!dt-E|DzVA0TMNICyD!&>~QFGL8RuCt4 za))W1DuysPb3OE3`+tzSHtS8>$ny<@X)^rT++UEcts7H>Ewz(qwHnN37z#A+mAm4+5;aL~lhU0?#53-nk~9w&Tj0H1q7r7uy4 zqu&vzux6Ii`Vx#Gj%`-7JWM{a4~FS1D~pHc#zJyQLv+K2#q|1ncbYNelR=e6xTNZk|3?r)^8ykLqPCDs7Ngea5IJ>MC|dXWE|ra@-^*U=u= zlsVqB%@wuvG;;nSfbU=GAbzETQ(OrfEH21N%0b4-h&SCv@4yC`y9}$Q?X_+KQ-4n}2ED@D^kVqXV4p0!b(og024k;3S^c^3h zZsaiapD7c_QlTppy%S4Y1VXtFh#{*ksi+jf6#X;`SQ`d2PBL9&m^{mpuAq-X9YQRO zn3Mjk25=`0`uQzE$2#aPk7PC=QVZN~@(^tONUhvPY~$1bcu(uDjr)cppF#l$N(tEE zwZI;t;wxWeegTpAM@*AP5w^dN&!Hn$vKIDsPlBIqubjg-a*^>Or_Tn2 z57;1&28`h(1b&S<=%krFV|ZK%Rx-6Sas|uOE+BEucN<~SuB3fBLb|xM*xD%#IHa|~ zGC#M)^2aq*KOqYx+;t$Pesw}5mP_vdQ65AWnASRA_kIia1{Theq5yg?u0cOME)h%Q zW`fOHBkW$HdZRjT#o$7+jAx!t>WSCGA!Te9*rKRR_5{AR)YUBEWr<{bHr0xMg>l3F zg8>o2C}W2#hE+nX!J;> z>u!a)Qnstr#2c4*1w9uE|0n}g-TnaH5tAC`t1)Y@^T0k_WU)oe6?yA|Hr5YUaP=*4-N=lS**l(X})JP~oaBc}bWx=^4`c{>bc$ zk_NUq2n}xKI)1vx-F6^BWOasV)g+k-m2C(1L7cAI; z{rqAXKz`Rgt~|B!i1m>5$f2gn65indc$5lLEKZtOe#Zj^Y2nsjYo=Pk9<2pd_lIQK zpQz^w*PTb~X6g35)(eg;kS!^Qy=LN*x@Z$1KgQ!JeJcPRv`?Nl#+IbT)N%AbR#=MZ zne+y~Hgz#zSj(bNG(T#D<%RINMm;}4aywk4tn*XpQonNw4`iBt*+3X~*S~C&S^F`4 z{0=HKnfnd=QN*g6uBoXOR#(@wmE+X=9A6h!2!CJw@4V8;jnfEl6zS`{IJ2>aC?r-J zUxpPSPN;u!7_Nd2{y2M8-tg1q&RL60Ta@V0^8jB-^sZ@zr9q4AY}lv~Zy z9&3(PVaBLe40}4Xfh**$4;`S!F36G@|0?X=`L(XV&ROlYh?f^Uk5x9UufYnj)%rHX zMb8gp{PrD7A$Dt-=dPxsnR_LRs%#UxlT0mDPJG*Ivjzb((Lq_^9ZgfO5kEqaHu$7H z5K-*i#)|B%jHreElIgS+49babuSaUDtfA7lhFxieVOP!4kJTKWvUaxNkGHJ9NVScn zC533ynycJ;92;tQ6F!{$2?LA;0E5~Ms z_N^xLZ5o(*QRe&G<;3P>n0w9LXbEZyyj(_K`^MHY2%*t*AOMXtup|z9hD2t3swlkf z>Nqnbp|_A6#`I4u4XbY+yU@pR<#v?zfD7e;P%*M#qo`XBn-3(g#)dW7p$$#(uUFZ=4z?wX|@{6BCe6RM_847@Y^03GX%aR`Btg9 zaxzP|&!55)zx-=wazE{b_ZLptA)dveOjlR&cS@_|ZOKFsj(p_q4r(X-HI(65T-YVl z6PGizSG$&1(g{yIpWO;cUx-^?BZpb%o_{SL8+2TP0~jvO9u^zHzp$o}hHe{MhPvP8 zy~X|z)_%*k+{;nnV9;Ecp!%_vsh5atlAMnlOf-+&yeyVzWnp2+q*giWs0M0BPg3)t#~Av=DS_;(B#hVo+X)M~{ zQ+djfMobK{V+N}ol$!{~#xf!;x!j1CZSSAEMx)ch-=2X5krA`-7|gl(TN%I)7lW8` zwlZVMHK!$0+V=U75Z{)m8e`#f*)_}=_;41tf0!QgOXv5 z?)Xh+NhQw^5f0z7-+TLfeV11R$#XW3za+>ovo<)yI{>j=YwtH!Vhs{6Bth*m)zYCz z&nX-e6To43{yYR&>FkI_M>E!Ehim%#Zg6NY#LlO z2%&i~jL8Ts%nWSIV|sQ#!*gKY$q~-g2+FAynhea2jmOQv#;nt)1>`*fOwuiIB%)hw zafX1MfsI+ETL5S5jO!wWe~Y|+=(7`|20%dw6W$8ae1&B!8mnAL;x(X&!JxF}LP^K) zYI{Es+KJD>&oJbeZTe%q?#*{j71$elN<094R7YWrvn)hZKS~V`F2yAmrx%k1((6wS z0b=&p*teXSCrttNq*$iC{QfdkpIhQeIf{534Q$Lj-2ymQwm$tnJjZJ{?E|_` ze|7w)S-lqoE*6%vs=fsXTpMW7!rW;dG2;tiv^kTEsjFg2~Y%Je00Tn#*os_dLlKVrA{ZGgJ8)a!b@oC_T9qMhiy z1j`Nlwa!CD(YKASnt&I2rEx`hWtFtNf&?5v<3<&;%3yBpS)bR*y9P1wg2e)}M>dOS zMXW(T8?@5cg{%|z%i_(nopHFa_23(;G3-v5N6%ToSYNHPcBxrC;<1JK6+kMliJP%N z5Oc)?!YEb8bc1c-g27hYQ=O+ZROD&H-ThvLvQ(W{S)x@{rk@NNgGrv2$!wGjCXikO zCjHQi{=odUaiK?)MA*sHUOljaK?Bc;2hRf10V33OE1M%Tv6|4DZ7ra7?|;cXIzYtPpcz^7 zM>M17mfhX3!_a`icaDxP#o92lad2>+xOV|>gGNQI60v&ZErMuj_+BPLV(Xw)1S9BD z%SDSKYW7qzj#}-kqhfB*QY)rXWq;J3_t(#sY5HY7Va~nfWv|M&iOChK0g&`qRns-q z)w|WzHNE9$qmME*^LfSYKdYrq{%$@kyokNQ{LC{OtBJeBYU92qKgaEwpPYobkrAEn z2+WAY-vHL(r1*t=!{-_|8X6_2qbkwn%i|5g7quWCKGuAKV}ik9##H{ZbB`VFhR_Mx z`QUdu^?srENa?bt(@xLl#&%wN1X=TzC8)2j#_nRP^}UE^#{TIy%iT}76h0l>ekU$#T6G4@rLsrP+$LeQ{6B{W3( zz`s_$>?O2PC?!7X<$wF79X_{>j|k&r5h4Y5^7X?qz4DDrr#Cc4JLxH`jjZt1ip3I7 za%f%?Y4uBBv+s?zEo>g>qE3i-szWwrhF%|_Q6}%b56kJFh7mM<`5*B*kYwQ)XR8wS zIq((;j#_MygK#T9;UP+7^xQYLJ0qmh2#z`$(NP$GHL2!^$L|oU>Ya+}%H7K9ioS9T4||)M`kb(P17YFmz#F+&AmS)$uAN?UtO1bW z9BJ|AjL)O#cGk;rDy=To{BI&Ds*U9~X;bUI%YPP4b_6lYPdy^+ycdEUPw{Ian%LK1 z8}`QcDEm~jDyp(lEqUCK252%>f_dR#@arsK{$NX5)qIw2-)Jfje~BFn)u=XYQzV&( zSd@3FEBUWVE9HGDgdRpbarYJK)g?(`-s)y8aVt~HIk2LJMf-<%d524gqI+v7TePOQ zDQhoW)^z9qk?{aIBOI|y*^1$S#&f-I9LZPe#=UMHWx_t3JXwhlDK8hcT zeT-u3_Y3u73k9`;-80;5)en=3s*7DySb)uL6YfqiouFE9s2DPa9QFQSg&@Do+O99p z7$=PxC&E{o{H9tVIe2Y38t{WUQf0Acq|RVB5U2>639Is2?2;mqeXnqOX_WwW0ylyQ zH`-vnRI?gki^Vj1JD7+$g7JZh;VB~7q@nLNtpG0Y9R-i(q!Vxp^bs(F5M&YUt+!!W z?Xrx(0$)2Y!TfU$$xVR|BY`nYB)xs^=V6uk5vs7Hy=`oNXOreeX`+trz~^o(&=1su zLvR8-(5K+ac45n$D^wpeJ9)K$Eb7TE4gS)Q($a5# zD?kYlG_hd+^24spEL=369Ged5T zvF6rAAnN+N`pl&fqN#J#Q6^Ccu4*+Z`o0y7K}do_P2~CnZVcQ2LPFmVpTO@e#Rtvr zBJa`wcQS51zw#x`RDu2Kk3l8cdNhsv6*m}C_(m?n$X<>uhyB;vMY;@pcq3k4{D9&BYb%oU!-T-z*rkXugGqjA(^}|SF;37IP7pqf`_Q8(~ar|~J z?df7eW6`kYv^HCsWPO*9Ze$g zRf@yn@}6U{;!;Asz1`IXhcSE_7axwrQiLsneNkryOS>)j^_L>et^luqVr(%i=MqFA zGPR<;RB!nXM$d{XDJD7{0>){{@%K()Qjg1CzKT(F-bxBmPlUA6aR-Z_dI+tvX^G7G zyG=o?Gr!mN6JqUXsM;O3i0-)gwBE4GEas*ct+A}I%pq<)sL=vli$&h1XV&ujZptp( z97Rc+bJKxRU3GyFm~U>MEm8;P1FX~(lsbu4-C6~&ag{w#+sa(Ia}LuSX z?PFxr;lXXx-0eAO2|A-L8Jf1ovw`S9b!CL``P}MdP%Jc^{?UFCduY%65$^hIw=O94J`dFi(i?`YnB=--Zd@!Vxk$XwkQ{@rp^7`#V; zqG)3FN+MDL&1JPdXz)(rnTJ0f0e(e|CNDfNu?w+Jl1NwAi>f9nP{tS=fqL%B2W2cUp2Vx65S2}UJ?SU*BhziT)-WAJtU|h!7kpj9!v({57&W+O z6tCv-D({9v3bsl=(I9u67(#f{0#bf{Jk3UVee-2{SO zR$2O#m;4$iCfaHaHC2Gs#cZ{M{!S1s#Re0+fs@|8tN;A?mkxT?(l!pF7owl|-j4!C zU??tmef8`6Q?isnl``a zE-z-e((rWAKWD!v*CKAqyw&DNeg9O1R#0|m;^CS$0SJ)Pji zpGzYKy3ckGepetZfG;g(y%Xn`To+&=sw#GO^X-@m!)*?E5*E)7ir;nFn1xE+QzQS_ z4Np;L2L*^4M>7uG*bo-2ekP{S|(C?&7wE5g4{XJM?{#9>+WH&of;u2~P zWuo{_&ximKZLg~1+Dh&MT_!}o?W z9@PpwQ*v10)^O^-MYPEhH*;zFq=g5!wZL5B`dAa*Qwps#a9U$wX-P?6$pe>^l=PMw zFWn6&(beawjVRTwbv6zlh~?)m3`!UMk4f2?ebtA}LwQN@*Zf^NtiBG)|1r4QwP&&> zqRSg|HxUKtE66XQFWhvo4;N0!56Mr$)Kc(w`C<%ERk=1asPNj`r(+)6oS1MY5Vw7| zubq?^l7wGq6`;hGzi%xl=rP6QJXWl(nX7C*rpp53Za5_^ zke+zEPkT4JI^zEop8KEObS)qY1grvj&dat5PiC;qS5AQ*e>i_fZi_}nWMImiC9K-5 z{^gD`EjCUeHJ2HQy;4#p^%OPGz}8SJXu=%%=x}D0GhSPzt8yTERH0Q;P_O?Cv^;X} zx1_2=TMn%ilf0ffQe97gC6y=!Yfx+&UkWRcPIY$EPa)i^2E4BWsDpxeMo-@7d^ItR zLnY!_+f3#xPRB6~6>`Qu+Ahdq1cQwVEa?c`-}{O>^JTd z!mH;QH)&)z!lZZ11@>+LrRyi3zQkbMR$tCiRTZ=YbB*S>?|UnWTn?AWWoNAbWl~@CmE$wSRI6WtvWKKRoNQ@!k*!ML43iry0Nt~pbQ9I^* zAP`kt@Ozb4S3wez;GhC>Ut9JB69n@2{%KLF4=G_Yx5|u|)V9@X0LCpgJkW6NPbn-* zbKsds`q7CI`qLtEW6xNEP=5ZOW+hGtkc>PaSYq%HLQ7>uU%x!HFWXJe zz6OtO5gcR%h5IiXcDudf*;#f>C3V9ZgSW4O80ju5;wH2k?XqVYKjXY4 z!sm{0`(^_q>{bn`l6mN5F@w);a7kEl3;173?p&Cfl<|AULou_7tED zRW9Q))5uqkBAIZMkD$7u=$HG*Ug-FQ5|gLOUbmwCE@-VCKqX9}{=_TZmQbLGcmHL< zuC@!FozZO$??a?|O=c~Oq+UIm7NUw`CnpLNAihOy#oZ4G)V%f{r_3Y!0Mf6}o!nIpY%{;O zEy`GL;*OioBJwyq<7T(1Kf z=l2~DnODT)RS7?OdMuY7bT6?*vz}1GVQy6#FylIQFLKjyD{+W}NXjD03mtrbg+)J0 zQI-CZf1?Dv`BWU15)TfFNo!@QHiE%rZqoyc=kr?*7|bI{;}YQMOk9=2bgXx_*0K=9 zEHv6{&BPSj-OZXPaEDv=A!otdp?Nh>6{TP8HY_3@%F}0pk_v(r8i}TqHe~h$W7^$& zVbZqV(JMlcv{<4_fT_-rW-*A_Lz63<@M#W2Z3U3ukqn&|%X%GVDD`iN{yR|LHh0+* zImi2AyiE2oOrlGk5ME}8OB_TLv)$N$t_FB^nYilwUm@J`-A9(P-LkDV&_($93*r~O zafhYseU7>S88f~*^OqkN)BnK{yNE3@#tX!3!N|FRXUrX!GXkFm9^fBzwdR*E7oDz) z8_5yfB;dAq-h7$7Rqo~UXgd$x#2w=1Aa;ueE}nWB%(?&SRLg%+t2w)mEZ|-6CJny@ zA_lOi0*LNkVMJ~dLLxH2&pq6Ak6IJI^Uwm`0dLYkZ^7`NIS3doQVsQsSxdiGe)Aec z-U$Z5#HT|+gg_At1T>mWXr|xhQ(uFQf)&%6%soFIX6K;=v4hwY^Vd+`5@(bQec^;cT;r6;1HixjgbRms|g9fy&-KvXt(YZngxS%tOQ}uBpgC4X)18*WCgm zq%xmZ?moc+ay=cu%8{}!%S$d?c$;6G+jzWZf;@r2R4k!_huwL2T|1>)EyyqYNPTYv z*O}OY9`k?I)y%11Kqm-67HRxuVz^S&XQuBG#TakI*x6;!zZe9=5YtTW?_XX^i~8p> za&$@hUkQ{BNPDI}W_TRq$J@0F#7wa9Dejv0!8seTu&7 zhY$z8?HQ0LcrdaiZB1CpG|Ygg=Of0Q{kPKf zvj$J&RN}{&w(rZ!PmB{>Ogrf#3JvrB9R*PI?%{KHUPGC3Is2VaKkl>GQ7v2+*B>q8 z{t%>6SGDL*RnHKNXRUo5jOEMs#SC6_DR!R(4?k}intiWq7T}@;uZ_xlw6oNY`4KQBkXx>++6?L8f_^RFV+}L-}!i$QwOD* zk@W`D`OZw%BL^71ugEiBgrJ6v2&00`W;%9#MW6Y(zlb@Y2npn}$b$?PBL>N0r>kvh zGg^c~Q|4&j#!T)gnJ>o8yZg6H3eJv4F*O^PLKb$=;pC)HI16WkHVqSEvnV!0K(s%~ zjDO!bvp!m%Rk1NB`lS2us8w>aVRW#jTk&ZbTi9e{u`j|}<}AVb^?Fx~w9vGU)I#!u zL%^krMCfb@>+x0NkP=fRhkwM5q?z`SuJb#|Cwf>tuUw~RnshVLPMF>V3`Vb^J78@Yv!(LP2vo|1(s(#yr`y_*tq=Fyt3kBW9^~?^I3V z*6g$dE!CXnnFWL!QxyzQ&vl(-VXUOjZb$qCkHqWI4JmbAwgeq$Q1O)wTUce!5APXY zIHl)NPoR-xTT9Q{*2t^HPg-p$2GH;R0QfUW1bbbzw%Q&@gi2XgzQiF z@$oN3(`iVr)Oya}>d;4Obfw3rw$?ac8#y z-4rxTEwgFFK*O5)ku4rOh0@e7+Il>lsaJ{$da=ij(fgyby)rA+0@U878~skQ_Nb*l zzB&IW!b+*csnP|ywWS*?JGwCoiX;)mXDt;?ry-r)X|H?xL@~O`y523KVoqvffyK41 z6I0%GllqXMc$XHdXx4~T-M;1Jujy*SkcSKBI)CVR=5qsN*3OKpuK9(Q4ds!gVz*+A z-TH-myK=&;of%ne{DovleK&*K#jVj=t6+sL$IEQ5=uGcS`(54srMD*Z3MpIrp}Y1` z?cFZaOl}uP0pdHdtl(d%KRh=VVv{@l;F9zrS9bZ&x3|!}zZDzTu$UR|7RN^8Q)TTd z>NUnam~7RD7TgYQjkY$m8`}g?%#?Ndyc=kHxKp)jm?1AA%OJvn-MECz4~ViG*ZfvV z`!%%(H@3!Zz$=5cb`tf%;0wHgHJ^6pME&Jg#qvX6LQ{0M!=1zbz{v1h(qYsKjdvkP z-}u{;K;2t8-U@WyX^u1lWLC_;@Z-U4^1y>0D`39zpyV2sJqn2h;@{|)$Tb~s(Sr&d*Log+x~xk8SDga~B8%ZYwq zj7yh?xKR)%c^00UEBkernJ#J+`$^j}&9|FI*inU-hnP{|L6#TvZ`+BhvAFCZM)|PI zmAB4K?1US?7s(Od(Gj;hQ@;ET3wTF+Xt`;%j8z1W}=WY9;7c@XHXiquOCY&{qo$X_t-s96(^@wmoXtYdF<}O=7 z;3^}5CQ3nYWM2@_$Sr#zLF*4%(~sw`^54wi)T)vseq= z;olCy#aevzrP-c7qL4WT#(%`pLC0Y29Zek_^MEa-waZ4ycoP~Wye765I-B5(k{XJv zP|8?46uT~vr4aXbjD7NzI6H5#Io%a!V*SgArS;XN=f98swSsOb4&s-AI>ztLrx6bW zJ9{Ld61QYG5Dh34HHoC@FOhqa^DAFM-dg;9Cda((LapH5ajXGx!xhZ_Pr@u+!5FnA zu5y{@ZN!^|msYt@@AV|6{~HPE6LK&NKXJy<#X13SG2GNzeH=j`YyWO1%$OPyC!sU< z8})-H8u|vFiW|kpJ8$&P_CYh_kh5D3C}JD~r9KTf55DuZy!@BWW0poZ#7u zP_xid%}e+AgILZtykuJXEZtZwA11*ZMbGe27*Ciou@c9v2e**HCLV2Kn`3H-g9GH% zAV+{ebDw1A#&tsIRCV_bx{J3CGm;r&Rwa({@#lc8J2Nv>~w-7>4UZ~M+1f#`}9LACSFeG_L zbEPw(IitDaD6u)pM*#01=$#b5AMY>9%z;|Z`YMFyJ9F`Q8Mj?yqGR&+qMMpfZ z9gWz}N9smATxOu%aq=*ZcnUbsBMX(eWd#7~BbP{ zT>NqPlWzgzQ(2R-OXJ$$dyP>tFgmn0!c1KBub+`H+a1F;PY!0TN9-pCEivz9+1RP^ z`Jip%6`>2q)_wL}Kwgh9ROl80H^D}36Bqj-;w(AX>y#R= zX~We~s*~7ZMDmw4yV^rn*Y>}i_9|(R7btiN1fWs+=;6`-peOzH{_?nD%P0NcJ^HTy z3HoiX(~N$H#{c}R^c~=jcXl*|`UU!d-+++*pc0F0&sec~m`q%2ny5h;xpotLCzkdg?2>pXS zGpKDpncIr$9bQH){<1O{$c9csa^GM62>&+S+FsK$L~jK@^1~QtKH!V?mJw~jLey!9 z`kie28~ql2A6;;?^+lU=ypaVenzdW5>!_XVi~)jIqml|Lthknt#?!_sbXJB;&eXIqDCG^}w>s20%em%GEi z51-|mQnEQwK_EvVZpF@J>4P{sUw~#%>%OJgt*DCJ-thOfn-6c=ROp>EZj!6$vNWz4 zOn44;z3(asLve@iQu()Roew)pBgv9Z$qGakp$#m`QA4IXPNs-PgKB;PNI6g5eW3z(GNs%aoe7eLZR&X&ATMWDcNJAKC2_rPMCN4v%_l0`@i8dxFflv($ zr4Wxk=&|e$ksxm$^rC$P1b2TcIOozW%p;Q~aTD^v%508y(FNlSQu0@(qG>CVu<-{B zu>xv)e+f-Hh_zz5CsbkzrM`syE@}{iDyR*U*#xSLFT0l-B7-vvw6()u~#6 z($Zl*%G^j5Yii53X-!d42A=+o{}sHj3GKroFm8{I(Y1GwI*O0U^@II(0rjPx5{_~G zkl?()pZS>)U2$2I!~f=2mQP15Ah_h*+y6Ux1T_=jQJU?t??1e6Gn36-W>Vssw$qfD zIZ@}ra5L3-dKP0fEQ<-`0gN|d2NV*aSf&G}j z`na~N%UyFqTXx)eMp*>n&`p2I4rt-XL2Nqu=iZqy>zgMDU~#OswmT2+*oF ztKo(6X5A%HGMX!$iOuqlfFm4+LqQ3EXJP_DLMlbS;Gct+tKZQ{Lrt+ndO9y!*fT}O zUIZqT^}3up^4d3h&G$L#X8!}S2E{K=toOF)!-3LsWLc*yA0RzqiIgl&ae)l3PBc+( z=j#vjrPT_mpOqcJa~c1Y9oSdXgvx7br7WB$b3xE!d3{jx!>DTa+9~EO=yW?Qw%zIM z!uLG|GdDW+6H}I`(3K`LW7hYUv>$$_Hv+bp0nGb*OV?bhQ1lW4rvfV?JE?{YsK&mt zhkys;F>d2MQbHFZxd5zO(M#q4tllt*{^ zgRj1eid)rKUd{}B<8+h7enp1TO>!t7g}142+~SYSr5jE+`5LpEioDXaS37X3{(2`) zi+V>+q0OB+tu?(vrzkC*IuV~brr>^qE}2M5lTYAOqmWJjZIniB?HM9k!X z&@>2-3Y#=!A|T)lOM`H-15dP17C{5OVUr+E@dYqK3uJ`Gf%9VWHvz!-aJe?R*V2#% z&XsY$F!TFoS}0jVM;_y>e46dZPncdHjl3R_qt?v~;52FxdzGY4o@m9*znB##m60r^ z5?Z0$(0It1-Xw&KAKVeJbWapP0&RCs`jyG}UurxusF&`UJmf%VMaD0qoZ&%CKp>2! zOUCTs5!J-Djq0C^<#$Qa$iG*K=*@}i3HFG3qP_e#p_A%9I4&g)BvY}eb&T@X6$; z4PxrU&Hz2ph@^a`JWm89Nux!x{3F>{*%N<=)MY@GTCAS9>{dnT5$9Uu5_i`T37~SW z2o4NBIn>fj*0Y?{E2r264k81>-IaHwIbuW5AT;DZD+Q|77wg5*g!;APNd-e?#o6A_ zP!@z6EB8y|#gd>zD2ZkGyP?U#%!q{v34}u7+C}A<>I3tiqW%*N&d5W+nw(BzA|j#+ z9$6$5b#hZV#5xiFT~c7N3}5t~%2$R|e0=FIUr6 z8gKm5&N=5DH)FnP#%+iL5PZ|us&{3^r{sJ&;zaDWqZ;|N&~{qP-?}-P$Bg5iMwQt) z7u}|taUCL!|D?GJSN%erND_rdnpg2f!nywnu}AFA%7&ydPotb7uU-Gt;@3j0Z%Cox zusH56BPkXGu+ZilI*_;?1;q#qJG0{Kh(chL=84B)Xb!rl%Y$SJwLz^|8-w^Pp+;y6 zo@*siDm;vB$UvG~={zkYv2#H0p|gJr)k5Dh422;SKu{Q)uRn)$eX$rNKmO7ezRrf) ze)sB?cjW>lDNj0iyDLAC6o@;6oubazF5Z zjxi~X3zXP zcAKlpn@en+)Qc;~ExH&){Ga7VlwU~JJed^?RUVfli{(MNNFK}bo^9heRU3+>;($ad zl5TD+ZYt54fZMNm@9J6zxkcXhyeGrtzso*SD4}(neM@U6f17(pM~BG%b$oqgg)_Y^U#@3+#LAt*1~x2wO*OXn>qlmUME^7INsXI ztx}#?5D3Px`?81v~ z^|!tJQ1z;2Rp&eHcc*OBa`Zj7ldL&)L<#^0Sjb$gxbT-0cUocnbDN#>WA@oSNje8fGKJ3&3p{fMiwMp>-oJ;deb z!BfqMuRpZusB=PyU2-i0R|q+XlPtyhl29zcUYtejmQAyfA0iHT6V(M{h_CdGbz?Qe z5!uqXM`{mIiDXF!weO)$M~O3w*d`k#n=kR^LmQT%54-iThOJ$#W}AF8!51KI!2Drq zkGS&jm&%59cv%A-A`--&h!Qo{njhxWeqJj)(eNqodIl>Z9osq4Drx>>GXC+mF!Mpc zt?1isyIW*@^7@a+zx4Z$_w9eP9DTuUkBrUJI-%sPkiSasAA2x9@-1?)pIehFYr-f7 zT!{M;GNM(&Uf`Y1U5K;t`9%D0@7eTUa--&J0c$Y0es=@Gz)d6=U@dsM?ncc?`HGq{ z7nvXE-#uiCY-S!ROk^&nKj_8tTK#_MnlE<_uoE67Vt?{JC7Fu8bs$+W3!>~QNDluf zm#EUibqk`C)#$*E@`1Ayv0L`GX8A<5*ce#SedHU${fT``zGBdFr!@; z`pWesPxOTa1h{hBD%xgwGdK51zr})pPrbTiE9!tZia&C_l0faLQkYp~jjEt>(|=!C zngelMzt+l@*OlBLCTWnHnRk;aCzkezg)}!(yn-!CS8yL?30lh_MWN2Rwf6Az_3~-h zVv2(L5%rY>l0m#e$tpJq3Zh`uN7uI?5cyQBbck2S3!r`TJ$P4l=>>wvmBT(ALsrh^ zJtf0?td{kq%v0^R$2CARYKCsd+)nEmJ^^0Qq%m1eEs+S|<;u(N5adLmZQM*vD{Yf2 z#dXclRPAk5wbJX-g;GV`(=m}gYw}dCNnBt%eZ0EHMjIuL?URViqBNR_$CdMpvUN$4 z3xV$yKa#hS!0f4&t5~I!W~Xs89@Ud(zX!FAl@(RrG>SZ)z~a!WcXQJv{-)f|s@sxu zh43-F-o_Nk#?;62253Uxz;Da~yiqKnyZ|piSshTgE_w2*q-fKVchVi4i|Cy49&h+M6UCu0E8>wyS{bcC7{|V%CQCd+6Nix zO;~_fz#7);)r9JTRP{SAx`{vphzyprLGhyW&jKSzFu`|C2mx_kun6XIXurhEpv56U z8&B|F6AZ%2!vZ{k*i}JVc-})20s+}7zvcb-4Mf9AG=m_~49)U?$Oc0^JTJPHAP7`5 znxgksH%!Fy4z%F~QBoDX5p|b>Wn9036`a9_%i@*ZxqT+ph+g&5LeXB!X zRTZ)G+o?6p9BhGA!^)1R(ot)DxKs(};(5RA#w!CClUM7@N7Kq zw|xXCKqBzvqBcM=bUd$>ogfI1@RF#Zyd(LD&tm$7Y#C_BFExX!{3ri^P>ek9p;kN; zATn4Z^g{xkP?$nV?g0Mytelb=?(mOKweUu%s7R3ukLj-Cw&Z?HkIs5EYJP0gfa^r0(*&THjfc~I_= zhmLK(?d8&yOXP<8r&NCXOu%_h6*j1a!SQl}91kaC-+tUn^rDEFfv4tIlD1cq!rNJg z+q0>%Z1NOKWvuXQd*UVfc-{N>fiVAM%Sf~N!$k*mBN=DjZYh}N?jUg*J_pIcSK+eI zb%X`>)QxYGM>ayPYclHeJ>aqr;MKs@?_i@QgKeI_EDcgH$WJ0c|Ed#e-oDEV_oCpL zjAf`a5Xy9U&JD=Yp9z=vTXrfYk38^?(4YQKp=>>TaFjHTh@{3DPRisdJNQ5I{#JtM z&v`+srDNhZ)89cw#9exoRK1k52f1^ba0OPv)6o%)x?=Ttf+p^m>I(A87*5{gkss`z zQLhgYn17D>P+u8ehi>h%LQj#pnA-_66wfn1u^lo`7`g21$!duMtW8$D!mGu(~V z5XD&FYrxFLMVXO(C(;Weoc&{RVKwS$(vKM{Q;IXAv;0Ut+&fDtF5$r_am5xC9|R0a zQuV#mpti}|6m0S|g+{l(@1=Q@Xhd4P)#Ue-aFDl2W7~n&l_U)v&e^@WVuuA7lcR%$ zC$6ih))^y(q69sqV3M@JV#gUyTlTbjNo<9Kfy}A6WbIE47mAlW%= zoJYrM-j?505S>}EWDLOksv8=dnzW15KQO3UQvvUf5 zkpb}1f9P=N=tk>8n@nh)BI$S1d_^9?S9!^jHy8O^nZAA>%ja7(GdYh*WM1{KJgY0+ z3{{1$WO(t(xa1`hE|&CBg;WPsM0FWvFz%cR>8dRuTX>5tV&{MI*#L2XPY0OXrGRjl z_=}RhY8kDSCZ{=@X3%4nLdmKJLb~u4T|}?=1Q3v$69hNQoe& zrBY~#O1JsL_trFiRSU$GWf@>JF%DGulPKfhxykJF5tmRTbO?pQzQ_!%B$oY;wW6E1 z6kf7T8Ivongo=Q30ffT2!H^d-`-n19D@jgr>Sw^|?9)OrBO;5)%A0ABU0W)e4vQYD zvr?p)m4_+5?jtGGDy5IPiyST=@L4_%Bj3JNQwq*cy5c{MtiQxXFPq z7egILEwT}*L$=Van_X#wPo#3Jm7x8U&_=v!`Pgt?Q{%!Xe*W)*S$iaO=3eDm61tcL zWRThC?$efI2S=*5L|T}tF#}c20)CLjb9aF-i6>Ya^FZV`R3!onP{;?Jy93z=T-m?` zcfxbGj$5}{HxhcGHiFKI&>|WUI>gMT1G@)MA9FWI+6P@_gu1kVEBtA0)Ib1`cavM^ zmXT7VJBx!676n=cGgL3DuE2E=pc&NXDf$ToaO5Q-P$ewjJ=!vNmXlusP7@ts&XO#P zx?yLN&9fu)dsS4uhX^ye2@iR$jtkA+0;^6$`L^S2WYX}ACXRzjVB9hL?BKxAF3Zky zhdX8_1P)#4_Kw{{0!ZfedODO6x-zGSnj(5=2FRM#AOoZaC5cESc5&sbYREG6ei;Xo zY@VZ`!~uSYBYMo^29HSZvtSW9yjUtxS_WAiEYJL((hLM@`q8mn9i&^&pJ)Vz9nV7j&YE$}mEau2W521ycmrV;ognt-kx2@Q4)elm3>f>2DDV`lXutntrK3 z*x#Z#|1~lt71@5c9l1RPS(WdbnNaS*-?)MEa%$@xonmw4RgIj!v6Y*k-`@Y~{?K=+ zx*tLSe;E_{ z-TfRW0-}1A#4whtauQV~#^*Hyj z@78RV&?;c3Ex&qQB_~p(k>|@b|N9>by++(=S~^(IjIv}k$yAOGi;^`(OK2RjBwn3r z)74ZK=~!()wv>wEIM3EYRxF47856SNQ~{F%hXZ3Tld5Ae@eqDy!Use$Y0*d%P;T6_ z$V#g6mHR4vI~L8?&nw9cIow?7F=4$QDOG`AUD`L^zp@i2&ijyzC&#*n$B(#BVy4om zIx3agY1oZcXA|N{&%D|6ci2?+y8kARp5#OTjQWCt$ykZ-&&zK9_vJU%M<#qo#Ik=% z2n!N(HBPIfp)_05ZfBHEr@up|(z8Ap4hRGh^UY%cjvy{+Mt(}hTx%k~pyEfT3qGBZ zvd~>r!eX>4sQV>EYqN3jWGRMDo2FCgT6%+FqkgOfQmiqAXDV$NmIkKDD7^9O)kwe3%M?Z1TXb!=Aqc6)K z*HPC=xxV|Td(@&)LxBp*l4CoI83?|RX(nQ%DiTVn)9(glEK453kl8btO0Fjpn~yi2 z(PgKgFw)y5zGPh7a1WQy)t8VbH~oO-HTj*Cn1Ep(1tgvNN)mR4HX9R9IyM^lNFH`= z@w@u9*uuqVj7&BE)XS9QU>l|P#_bn!bG=BYI%;poY1nGw&T5QSY2|f}-IzU@EA`J- z8a@Ag%*vj#>|H(p-$ZTGJoSHsx<-9IdN&~|{Q;gxj&&3R<*0?wP9%z~MB>Og+Ptqm z8xv3Mjv}DX5$MFY(xM#exrMQw%Jpq?BJ6sN@;tCjNC!L9va@C+#$retHf&l-cQnC5 zIMfwd*QU_LETD~6PEpw+66Fo)c$Z(cyiCUCtP_A>g=6UOa-wg?4-Ql6(8qyph!ON_5;;8fKcDrAPrxH>P9RvGToa!04LfA3NfXeB1P;$lnX zD;n8-lPjm7m{nMiV#j5ha3Au7CdNOC{J8A7cu~Z0V3dV8GZw>EVNqzcNxz4e8oTGS8k9ySo-e!)n#_ggzjr_$N_!DXRj8^sXFyL;_L`5{-27 zx|}MKMy}+Cis9U%`B6{6>ls%O-p-Eg?VW1_(p26~ zMi&c{@WxU|!Egemghdk~zm0Q%BZ{g+47wu(_{iJI zlDP%wKM=@#6Dciq%Od(%< z&N_EM9{Dg?HFpZvE_@-nNcXZMf|ait%=mPvYB8VQJ;1c@QmhkF!zaZzu)^L4or%j3 ztu9sK4){V|OXkjg2@GYQ{hK6j*_~DskE6$_XK@`lnLTG8Ng`?i*R9=~1^(^=TnR1b zsK)t6x(snGqOa{5&wy5EHOM-F6oVus!R?O9S=DBo00pk!jY5v^YWMU^vNLwNK&ubf zu$U5F+#qTL z$C!F*dW??v10E8FKS^B)xSiule<0P1pwe$3~lA78kJ8NVhGtliTl+ z+sO;q`i_2~j&M&S(>b&}L|gr9kx8j2^tE;+d{0$JOJA>Y;X@_eedzj0`NX~i2CE81KYFs z5dEV~9biA?|9Cy?9tQ!Cs604Fpq&KTck3$>03RY84uCh%OaMBNBD$>u1MsD+{xKbZ zmGu`l=4%3GHabd+?1j3)wx6z>_rrG|we$6F8!8bqFr$v%Li5A;5bu2ttqmM_%XjAk zfvB!rFBFv9DS^{^XkOa-SN}Fa`Mw{Jzoqa>yv<52tT6pp-6sP$LwijNnOi9ID-$~x*m zzkPH*H6aQ3BF$?{P4oGEuuFC@>I&6+>x1=-qok@vWtAu7w{KAqxq;J1#RZ|KdLcjr zDwG{B>Aj(jOi`;LOkbEub^3FY{paZ6P@A_c*v9miGcdy2h zWZAdoDa%GGey#j>`6v}~S`}7|MB5?DzBNr*HYEt@r85&$NYK&sbE8iSYQ`y%ViZV1 zFA0u4a?CgsVtzu;ydb)3`q>V0`K>Y3iZO~$t)#s;E`=nas+Yp4&KQp@%?`%>HzNJ0 zR$beK(S=m{ ztpvS7DcZyF#Sxi$4gK9SxFpB0sKJP+CK8zkR(m6C)hsjmN4&^N?})N0fc`q-cGp(iUl(7N>Jr%|!igi2|b3 zA>xpV5b2CU42hK-ND9&Y^f2YYwhg2~*qSwVS_BIW58ZFs95UugfC}&i*X8S6S2Ivg zmOvn|IzSRo5g?sWNSG2OgDGXw*?O4bAZG)G2;0tH^byFrUBI85C;s1n?tXP`lj}Se zplUvWU+pjTuke@7D5OlO3=;wfpq!EuqJppI;3`C*wVdPdBb2L=+Gh;b;*n}4pj0P{ z6IF?l8I?F#ToDv32{x&SHm0B1&)EP1g;sb)rCBBci$i%atS+p{T8~9Q4H7^#B!Mc- z*ia;)NR(s;g+?k4WMd)#LXQj-)1yjYb!H9FIxJ$VSpZATk#H(FqJf%)LX}WyfPO!F z!>1oJhyX~i&@MFjFKJSRh+Rfpi-1t@`qjSuo{Ow%KESW170kXt>thD$n!5}zZnqBs z(i%MuLN<-NjL>%3$N%XM=e4d{%;G0P0Qa^-Ka!a|F;QIMLzEC{m;o@iCNeZb=zb7y ze$K(y?*N=j&b${NrqH%3f{61vR~=?G6ZMq@eFa+z%5zAGbc`M*JD_bana(N+jLsgU zRbP?T7Fm`QtuDHAy%(Ee8?++T^M`>vc@vTF`89yEX;hrM?Flo3~iTlhE*wA6xFnF z4@xQ?!hNJRG9`q^GfYekwl1M}d*htnX}z7Fauevk(xvO1Rx?n)^pajpj{-bLj#iA( zgE?jy-@LF{?;qGMAau~oIj4vWu$qawy?_9yhQv?>q*H+!heDN7P4@xCY>wd|8=TV( zUymJ_5wB`aG;n#9GawcF>{F2w4hI7>7Ut0ZqY zKp_TNeYIulTo+i?frP;70I9k{(cO#sFh}lg^0x4bD}=1Xu^|?>Iur<12Z@6!f|Lnh zuPjgs(xJL2)!J$O+T{{aK!*nF41x)xoyo-$cc+O37X{<~zDdx!Xr<@2XgoboK+uZX zlZ-?8Fs$BLv$esC_G&MJmzpVIR@efAOc($$IuAtekr=mC_ca%nA?A&Q6?^FG+|{iD z1^5`dsk*~%9}xd{4bk7_|FH|A7Mj3pL6@xaSj|L@btR@qOzD+Oky7ZSZX`~y7|CoGM7t!sUvo zYj*O0g?u=mT~e$PCYhh35fRaGu%Q3HsH5t<7Cz`echmq>i9Y*h*0oT`KA<8nMy5j7U22oZ+J zLWHLjLP#j(KtgE#RF-c(y&R_0Bu(2$iYwc?2BvnEqyc6+^Iwm0_&GUU<2uAG3LFbm z1PB9U0rB4}giN87!Hj3lqr74|XywZ^!Wmnsh^@ipv94f5S*7(|(yxLG&q>*>o@;84#rbqf*QJ4C>S1ajPWp6bC>LOe4wacyr4KXK2{nl z{Jt{YFJ8j)6Z#ovMqeep3|^~AFxW~^q`Q#i=JZM&?JHgYlyLMvJVh30JcfW`a2za# z;vuOSpDd0i$4f{K^4#IXe5{nsV!3S&KgoK?gT za-pHaXym}Af4u< zB7vD8Sv+?X(eJS}um&43$+^r7TjfFs3)KTeK=0`rjhzNF^r<COX6q_FiNhyulT5iU$2Vr=cd#3^){n8hARRY^*trMc(y*? z_Y)+}AXVWsd)&~fuZU~QJeQQMF1c&HSDO+Vv|?2ks%vg&sr%X-zeuF3rz=sOttN{F z1FKXrT|o`HO*1FSTh;i=YofGPb-udwhOa30OK&%c*eR8MfepE?yDNiI<$J39qjQ-M zeJtU%r`G~FN-aDxKjmzDp|whzQgx=<@P?Katxc69b_0>JDyvnCB?gi~EMA1j16uTk zQoFB>@j#NcdOEpZ9>bKSIR?ifQHC38$aQV{6z`UG@t~qZQ9~1WIQNE(a{p?KH_(PQu{DY@0|IA0Mu z9$Fj}A0!P*IHiaO<0ULG0erF?3xU)+O;Vaih8tGFnZ*ROc$pyQxX%}s$jKVlA=Y%$ z(F^wEfNH!W_F3Z0za^rDEfVyS$GDc3tZ_Q-6*?YT6eJ9inu#({C}D8}pz%1O#%_W+ zNf?ev3yTkh96Px%MT%&383Gy+rw~fY82eNGDxQ*Wly`1AH7yhgc|ac053N3}cE{}% zUSnQGU_2-Tg{Sgv99UfU`EL;dUnM<{M}a1B##)M6t7NvhfNMf#`fHDx&e%fsGpv)k z6LWwN|A}5pz&)u!e5MIECU+*kp7cU0tO+__iU$!|&_-5k)lU<4^@+l$!UeSjc^1cX z8`Ir30Z9usFdg_! z!}H7bBjw`9*z5CjPjZ9k2)lrZ`&#`5H^6X{fNPo-h#V%~Y`GTB(0HJcrfd@l^HOoo}&_4V3C*8I_rBQ_$?GDg_ zuU3IPYCFDNmEa$fFi1t~6Iy&DE2p_Vr@dwLcvh0)(z~xO+1VHZO)U~cZ?`a{J^u0P z6mfSAFD480OOAi1>YRTVbx|f?H|mKRoA64YEHYwG1h`Z)m}e0?*L>(}T&ro!7xK#X zY$k5U0~p1y1Q;k+^ypzOIV#s#41 znt@*V#~mG)$uAgbCd1D^B|K6a?hoN`Fc;;&E>AVO$7ou&i3R@oqMAi5H^7noV|9i55ca%16oH%Gurk4#4Lt?1*Yg2Sf z%Jq?i0p2icN2FLS$`jg(abnBX(%t1ycsl)hN5+=5L>ELiZ=4pcr1#QSPJRKu0tXn? zE)nWe2q_K0qF{BfMBq;sz|ZEBw#n;#89NkDwQE2c7S3Sq51=*GDNBU+Da0RZW`(&O za0AIX1i>=1`XoZqyuZ*)ZCN`UXw(6d-lfLuxKtJzTj>4G_So2xYZ}TBbF!HIo-_!P z1UEoZp29+V9m{10Esc&PhuGHYXk=8V%`24=RGLG*Yg>~`{O&vB>v|mY^mkzur234Y0R-Ab zOEs6kRf7_+0(?6QSQe%^ShTp_Ddl=qkc~lMcv`hOG@}h z*dSL>p_iA>cdYVmEn?2ZwK!SuVe2wEZIGj>YXzkb-oWo_8f$1PJS(GXZ|_&c98@Kx zF|^C-1khyZv)EZSV(g;EXx91Y?4v5n^vCxu{nka3Lvp06^J+W)Nz^R1r3afYJiO%h zLLeckj|fb_QkR+DGA&D;?UrlF6$LsvQX!2-BtnsvAusevt+5xR8bzZ32)!CPX4zha zK+316+WlEXz2Q?_K1n^fQyQu!1tdr`P?;}*?5m=D z%qoF}^N5hHD<|{9GMB7+UuC~m1{mL-+xCzU=I^t^Kb!Ta8iy*(2Pu=v^mIiw8xDE7 z;{s<>X#BXiipe}tKY(;^TXsALe+) z#EC?^>H?PO7gmG`gj-1)#+b#T?iXG}?%6KBDpX%c^}gm$Qlb`vR|v^td~NY!+Fp(2 zJ)I>eKVdWcF22kEKAj!Jr;4*%E;SA`X#-X~p@q;}RpwRU#hQH(t9W{su#D9n&qWm} zn1qQ$_25Q^K2{G|q%nSBN3dDb%Pof5rH3ris{iCizz5?3;^qlHj=V{)D0PymKm_QW zE}PPf{{8CCc#H>oG3NeZEc5Ak*z_*(Rnxun3M`#V^H194QZHgoSjJ^754$L5Hl_cd zBtQ-v`ctBX6Qx;+?-uv|KdVk*cC#9Ak^*1eW7za%Dv(o0%#DVSx(c!uQaCgXu9wKK z^WLb*FJ?m$Vr%_2eoY`vRZ+AMR1l#=$VK%T>lrqGvgdnywP@i%?qKLeUQLT-7tBx? zH*|E>&Y1Eru7uY(>{n5D&iaPqS_MJi5m;&Pg_Ezyg6|Rb?3p;&J;Ig!ehzSta*0Ci5d(L2Yax47C{TDk z%0Pql2=7H?ry}(TX{k4}^oGl6L9gmmdxjl3-P>Xsn!_CqpV{a1X)8_RNpSj+&@?th zqZ$`zXw!JY?P<@NP`pj0QAS=;QSjSK$|JZ%gKu-jX7~Lo>=~cg7E$sS6*BC(GVa!t zcUT)#G{~jJ+ZD^yUZ{(eZHO?STf*NgY>qUoRGa2A5PN{%A-wxi6{WrefV$z2Od?z> zUYISsw3!T){|e6c6~f)SQF+u$07*`lL=Pbz? zsQa=TZZ~Xs=>u> z+AoN1OfB;Kxi~0%&U1?_L}+EVU|6NmRdi?52FxvRt2-)uu26N&x*cgMMoE>vU<9{T zE-yuy&a|C6D7x|{$(>MP4_;inFd1z)ZdGM^@`(E?3HxoKVcB8yy#@OZirdEBe}kO+ zWXR4H>~|3NrAyfQ0s^`X&PeQT1hLt%ml77AuG{@&LAaeQsVBY>vW~KF)DZ=#w5b39 zw;?HzSnU!qaf&?)aNApwii}fCinIUmuDWzlM;%ANw&4Ot5*`k-CE@2o!c$%vM;{2^ zE>K~1JYSTQVmULy+d`9{j#8J!QaV4?MZ(~?gOS7qvcQJLMpiz$?R<9;E*`}d7fN{Q zfuyuo-Ft0q#1F~e4H}`GS64t!hP!{h-0-yIfiS-p`0U$8zSHnHHV)nfoKG^Fgba5> zkDs&*ES%r-OS#_Gs#QPgmFTmRrMZ;MWJsF8m;4YL;hwtrzMq&3U1_bQ?4#?^5pHsk z-w*JTq3CO=Li3Mfx2VY$?*(Yd;D<;SpO*FlQ9&4BCHv3@#o#glO^$X9MZ!A>7wN$I zArhUaA_2*WMnX!=0x!Y+O)2zfTyl!&UfQJ(0)Cg_VeFRWy})PR{x|P3yd4{{@qXYl z)I0g6z7tdGF+yQTWY7!Zz690s5R7d5UI2*9wNbZcz~hi1yHMo%yHI4e-wVKyq1a@z z???Rt3WW?I2z>G5*m)o_lok&{_9@8<44>C?4t@u#_gsQMvKo7TjZ+cSsWAdF_$AWC zK zO$C26V$4(%^{Z;TdEk*-)M$JPuKy6&xdjBEBA)15H#Lb@`Z+SMi>2JHqUNZ~dBpFJ zCwi#lBouwqRbm1^L=uGDIK>74NkF#0ZtbW$W%W1en83T&n2V;T{OOg>bLP-9Aw>p^ zWSUfdq|FNQlHZMo?~Ny?h>rmQD6fK2@=e>GSKWH1d$blIs^~k0nm}ZS@hwqLqoRji zJ?e^o{wsMzcv%B!Mg9N3aD5Unp$E;C5j zp%7}9UNG*Sxi$2na||)DMYYfRE_Z`6xghdwoCEc=vO*L3jqpuEQGtr81)cYXy_Xd$ z{eEWNFT&@)V*3k_{v95>Ap zP|!5$O)L3^;QQk#7Mk|r&-ab)0C3#aJ$_DIzL;Ql5`KWj}XcM3ELj6i5yNzx01d{V{rr1gEge zNVM(J#++A65$^cryJ)(O7C|}?D+C^|YPcprPH1!P@sHQ#Sd2ONV*?2`%pH~;0UZvc zC)_QF4E;6eLRYlD(7s5aKwVZHS>S6R_$>#-tzBkVnYEBI?QG z_=SWXO;5N7&V!ZgW4*DF&XzT{IrqBXK*J3B9PIIIg8ko~Mgk;bj`Z;#FN@V3hZS4G zB6%F~;Lk}Sutea*%$LmJPR%`7i(t0l+njs-<8|=cxajx*>Y=p~1$g`uP9&wRLFU=l zd8l&4nK--oXiu!Orh$XSai00UhEQqNuwJPb#A_)dXa>_!4d;6UV1yLy+n zjckE_ovxeQxqb3sr=459WG<3eE@vZJz6iVpXbigRdWgZe=4be8WY+iSP9~L?$FQk7 zHg0`J-sV*;ndGOxKr2@xU;>^A1C7B#h8n36b-@+TJO)b=W0EtwMqEX_beEAvAc{$g zphbu|0=@>Mo>6f3AC+}2H2A|2RNQfw*F=Q zEgWfa!HtaD_L*VNjwaaVu*G8ps7Pwc%$j(ua=n+vmf_@%y`l5@OI~oZiM{oWx#(DC&jIeWusT1{^3aAD2ekF3y$GwvO4ayEDOk z!FxEWa=jhr`gAxMu3Eh6GAG48Qv_D!xe-cyCW9>h6f3#tTxeCEK&6;}^suFVVwC3g zOd4GNCrL>ng-4fv!IYdz0C-h=8ivyT1-^i_VSpjQIKoheLrnY%0N)IWF|8@UZqO zFMO>G1oy?N0uK4}SwoJsbD`!>yBf{8pYc6bo2|nWX#bOn4wADD)_eNA3%UO;UKnC9 zl2EF)#rbw$esTSq=ai|w46FkWng{^x$)MGJ`vc#9?#5xjEnAZ1f6daZcd%aZdY_1M zo4+05`!@W??J0oz1rv%#7Fnfmq8si$Osq>m3Li)6b+Ht090{xT=|uNlVE?SrB^_Jt z|DB~>^&RUa_?9p^v80hp9=7I4I1h=+HZM~!{7iRt!QJ)5dNHmgLg9y8eJI6@?e0f2 zYc|h+Qp7%=Hvva?LcQzT4u2_@Ujbc}_~l@RaaD{7%8a4>qdikyU#FH9wo{ z^l^@2Qv8~wy$GM0xasb!TMN@X%4uK=F&XA)UR$1TjaH;UXx>jRx}d{k60v3Yr4f@F z6v>+)k-_g?z-RuiEDZ+UH*pdEKOaY2_GP)cij1HlB~<&HP7<%*+Fv zN%5(1ulLL@fj*t4!@CrU25Fgx(>VF8>~|tv8e&~LAPmwz`P~!p+~#k#@O@n+pv;5k zTEOoD1m7B`DF!0*$;hU_XROW((?0MWIHbAF-{xZd>XmfNuZV1m;1_P_&p4Dw?6}EX z%tHfW|Cd@u!?U9w^r-y#8Ksg|f87`ra<-O5@~=`&K*T%^RvNc62%7rZ@$SgY|V~u@YyduKk&C@mOy5k9D-haJsT4K7UhAG8MEIWc1F?~#K z5$^C{ys7f8#>y*o`K*dY6>l*aAgGLSi*thLc)%c+R5+=*&6z zLs@=jfmYlgL72fH${jxAGNtYdCu>d-_HZ`VteA`Jkv0%Y!JxcO-5LFdy*2+4>01Mr zl2V4SK}0(I{r$<6a@jJ&fi=|D29bS-V+RqcEj9(ZYjRBaU+t88Rtz@YZG*K}@`J0@vY<`!0l#Z5;aR47Wk=-w~*>={hmuLDH zi$|j6E_hMLDnPx5+LR+TuVVGg_xnpJNT)uXAAIiP{o-nd3@fqj=sGvpH-n`An?dQ& zrQTEHY)y%EyZZvFe`+{eXpk><`FNILgy4H+XQlRB1XqmPUV_l|hCWYj5pZ}k-Z+8E zE&8W&VYBgCdsRSiYoq*Kn<%ct6 zMtp0?t#v|&q>i$IQT^1H54mH#{dgVpZP>&05(m4H?$BLn-9`h34a3fi|}74wsw<@`UpLgwiu03w!fMK)j^ezRH;Ol93JD= zsPS1JwwE9X*_x!_cG}A1)%yzZP~{j*f75Px4nUnN2NzTfe2h2~w~|a$SR!lNTY$?} zs$Kst+Jz5xu=YK@M0lKl?It`bU@cQT* zTEi}n&-k*sY6AHp`M8d(@r$)I&onVhr3%*cAV*ex6nhE`fOxbPJ+#0X>;-WBQc}lc~HP~ zcsy0=S-->?&nbataGul6c-JKv_7%FQn|>A}qUKyPvvGe7KgKRmi9KB}tC``_QwjeJ z=h#`-n=ELqHi2^pPYy$^9%AgeQEpDv#0_MWcV1*Nq_qI4FyYf|7YN$^vpYn(% zq`+`z8t*tZHrX$t@8QiGS>_-1GwnDp`f|G?;aI3y{E)lIaHJ{3HeOn#090K9uAe$%KetuaekQ+w@wm?Z|2rvk z9BXLL=oQ~>3{5fN_XvWd>R3>lTmsVYOW#t-_Q=L(d%&@pz~lg&t7lundxqcl3{cd? zsNYTx634GgnZ!TOHhc5vx-I{JkT8cZg}nV-C}U$Om_{vf`uA+P7ra$yF6IQtPQXQBp0#64}%HZoxEBRSf&g!ayrq6kD@%c_A~zE z`Q(mqtcF17>>2EPx9>F%x_nP zoieoO;gbk*iJQ9%sUIou4r(g;=t|u?anB%Y*CTmamL;-h@PmO^k$em+CZ2NgEqz+D zD|OkgW0+g}-YE!J+5*3YJT~ruG^E-- zL>iVYvS;WM?*L6zMEG2+5UC~>8c(d@b0Y^V{`^G#6+DpVrkPa5SlJWcbf=Dxz|M?} zgWVXV+DRO0;8IC|swu|&O`Jc#IAiU~0BZWcGz9J4tj=PAZ$Qv~35vnvdO#qB28O9+ zZ~L3rG*()Kc=fPQ_|Duu)8SdhVg(2-o{od`i8lkEHgk3*TPmDpj@g2Y7HHBU1TAX?RW*vWfn1gdYA<1*3 zDrF=_O;jM>C7F?(f8bj{hg(t!6BoQXpkF?C<}X?FiQPx4335i0#r)$7U>)`)BZ6+C zn|R5uswQQrr{w&W86`RX4n`B>-@D`7$JQt1_;7zI_#)8=b^eVa!7?}F%|D!35{%EN z(-tJH(3xQpOgQ@;)iX_k3~P9ov9w>qh5&I=79jbxq=Vt@x54 zSX<++(d?~_Y!44$^2X;Zu77JodDRm_Hu*M%;D%4k{mzsq=Jq>CC+F%IC}`%Qy2cE3 zQzseS^|Zb*s*39Uk)S>2zt|x}8g?-?rTb`os)-siQH6;DJt+4dm9pNu4&^l}bvS0D z(Ow^uHOMKvmXhK*T9>j?VkW8(-%zRrcx34r6ET6%8>7pRnYdo(Nz2sU!3rnqX;~US>Lry<3_$) zozVTOO=1xZY)o-^%SYj0D~=EGh^(Rp=>$A|Gx7XSu&^;h;C^127!AhzKkt|d!ow!P zFSeayr`)TEaUUz47Grn#);1g=sKD+2^xq3J?f@uE?10VB^Y937mP(#Y#oT-Wy@4B! z{V1CWmSK^;SA#ZqYpWTYy&UOE^na&~eM63(T**2oT$TNdQa7ukZ@)|oK8b7!i6mf@ zPD7=UQ;j$7np{s<{!OK_hqHrc(ur)48`COfW|s=J?qqR2i5z_v6o-&I4I7NCYNR22 zvXt=8XhB0Sdp9Yj{Z}tH&1h^{jX|Gn@y+^}Kn@N~L&A8PaM@iEuww2 z!EC^98dRhI=~8jJN#B=&Ff@iukroZ*M#7;L5BKvbn)mF|F&~en-R`l4L*kGi`16jT) z5hgsfSYA)XRqIdBzm$c>A(T#IrGZ_I0wX5NC_&$pD|;~0WXLctLq zYsaGWdCKx>vah8E+@4ykuP?a^Mh3l&XuAi7HM7em%2-RD@@99lpPBKf=L=XbPY9$- zxa+>*pSZ6twHtNP4@5e=5H!eKJF%AW|5E~1l(ly`oTR~kG9fY!*;d!PW^a1wNT-5B zteIHDTztum8D;*MSZB=IS>kZcSHNw3$+rPX`YyNd$H`epx3{57!j>WB2zM4DY z2f}*qBW!#X^@nCQqla1I@3of1n@BsDTTOSr@0!0!EW}tlZj92cFY)7S10lb`SC2K3 zgZovzDNoyBTZnsRu4+Fw)^p?ZaL!l6ZpDG+DSDm(RiBNeA_D<>5*T{7gsa1nyd_== zT`#b#KT2vRJm~H8AigD}i}1K_;gsIE8B&|`)rkcI&F-#Vv7%sWeX}rYAu#UW;Z$aD8!KrX2TyunsR23o}c{OPPzG@?>^LQj$#?Z+l!MS;A+B%j~X^qY|$R z!ZKe%Eq)^&B(Al-+;q<0h&I#5T4crQ?gp_`aV75=xK=-S*Eb6Rh;eLf#o+GcN>(C29hLM?IwCo>i?Ow+20r!8 zMEE3%5?SmdjO;d5n%Mvhv}!i3xy#;Zvpff5r=BUjFP+DesS3x@kr;nH#g7X|C1lNqP!S>?&Qhb86kpa<8Bq zu6_m!IoDxYo)O5VNvxQ$-lD9LuKmlExR~#E>jvaUj-~sv)zO`4OEkwClyxOW^u4)q zVuxJEq9?(GE>ne>Uj5efO1QtC=g9haTaReDp_a~0YtCv2rl4zm&#w;c6qwj$)(M}` zY6U;e?noVq*sW>AqHFKEs@cpb2&o@J+bxSBn`g9<>;_J{zVzPT97;-dJ_ zvTbU0Rmsf!t)aw>c(a0_?)qMK_(aTU7^%}#X<`GA#)!!>a?nzl!Yh~!T0_(J8-pP4 zGU+OB6*`&C^EfJs`mVJ*YdEY)DA_bR6?jzEz+(!j^P~k~;N?Qs%1{eq2Em2b=-qHO zWuyV`F|9X~DZf;?66)I@tkMDQvj-DCw-#o+x>pQQLK`>94>_C*LtJ^;@n?r7kB?4}I&WGKXI@XYzRBD6ncT4PHOaI4^we1@ zKj!$5zbuk@@dX-9-8q+jG5KOf3o?_qoRZ=>QMdWtJMUBc{P62hE7ILpBD~)l9lIZ~ zNim=pNZSyO${On8EhHuPoT%PxBJG~ofOwbD);GVHbDz7o&)p;*5I-EZBB0l{e-6M5@gj))Dbe7o!HJ;iQ&F{%>9&2_5u5*I!nUQN4nVmj!*O)uiUIB zL{5~$UZNS{o&CkU`*JVd58WgkkiIc!OF*Y^t@K;yG8#fdp7n63i~sM$ZUqlGeSo_hswk*C#QH$)NZ!n1l_Ug zQ47M|U&7Hjp>e^oB*e~upHN(Q6)NQHP*$u*@UP@#&xxANR*&_O?=f;HcW()^o{_@Y z#2?_J|1~zCo5fb~u({zr0T<(DOpNWC9cnDVI?l>Xo7fbA&ezz(y+H@uDSAb(gMK1wRNw#=!$g5{gT ziuDsa;33alSBY$#-MBdL!EP>LQjw37a&$()t}m4!+%2;a&Q(K0%vln&nQuPx5x}Mv zc>Qh&W!JN2S@Wb@c44@gI42rqj(R@IL4LI=zVlc`O3UZmBlPdI7LY5niWbe#dKoq` zqw%?l2ZI~IB}c1qd&O;I8*+ZMnzdKlh8dHAjZGErQluH0op>;I7+RJzgNI^lTP;yq zP1)tQjcjj`Vc<&RGY}7`=Y~7XDEZ<=)pBOt*guD6KDwQrx7iz;XU)ySbB~c0zU;3B z6W86-jhsviT(D;nzsxXeV8_ac@lGn_gKl<4=6qnp@_T*To{6xur+JY2)GPyUh$ee5 z>MV87Z5=*Liuc@JjMA}hm0!+o`H&YPn&=l}6FQDnr3~aqfBDk%paR+sAKN}?*epzn zn!zcmP?$Hfz!g%XEMpUbo-8#(HScD9SAcErZ_wPmGW5kvC^az zztg`C@f(dQi{Mu`{|e%`o55gI`!Tw+Lm-dSWy5-qNn0bw<{U<`)-J`BW9B(jwPWA+ zcaYNGfOebLn@N;}(9t67@6R)Yz25CFUqW^(rT(xgodx|c9bxshrMfWXYK>sE*Pi=+ z<|>Bk(4FS>W+Eki)2N#3gC7h6uWu)}nw^*=Mf%jM9j4=1sW5>cIZf3TA%JyN!VVbf z=En}1yXlaKwf}I?OBWGGYLQ*$GBZ9YHrTJ~c>BJZ+P8TN%i444MRAD3HK;CgnWgSG zXCSF)O^xv{@+fX|nVFOtA2M3_Z71=){+(cJuNg}eNI0C)|;<49|FRZk~ zuUS=GzbFuF+7+ zfnr;;m&nGC)S;#yI_mvz`lYe0*`t(DhHFvdF74VBW8!zO^D8=C{;xEnKe&aRt?|Hj9gBAe5Fi9A zXv0qrcpYtKeYExt05glTR2 zfm}aIWcr|Zn+J(^@-~cZVCFs@#O+)b5w=<>KyDkv3O4`Vu~y~Z^x;eGzFO3T+c2(7 z`}YeBimP~y_td)Et_E@ybib)8Z3h%7nYfvfP~PpB>}ELu?BS3-v1zwdv3doHqqr%pfzaG?RErF}h(R!EY?)fay}QmNUv65t0>^>e#3yxx5?F5O zTM2@5%XFvqS$}yEUC7J$mD8buZM6c&6uPDHDhkr+Ca89P79fPFbxZktmS0{%YcCT! z{5Q`Umt?o*N@zS}eF+4J4;IwJNI@7Qck5P_bJL3lqkc6|6*Qs3_~kmuuHxTyrrCv+ z^4)ln9+MUbQqtQf(HJkRm~e=;Pji%6NnwMha%s0-_fvI$PhIA z+UUUDjfJSYdY>%IKK3RpNGwGDKXz_u!65n<3wT{_D!h@8%!HR!yy!I zuJ|961s)kxX3mh}H_JQh@ge>n__y|s4Kb_b_hnAp^s5pS)e8J`kE_)E_G4rzhpir` z%SZHJlfFiY&pnLc0v{(;BbFohZ(WLEK7A83!{MuCR6`Bhr`8bu8qbyW*-zZEuL~OL zSM-->EdSZBA>dwn6_=7UKZw|EDmT+I62qoeVIJOhO8c5#M1dPh7h6R0fe70NWPOfw z2!i`D+V;FaJdJ1cnQG0_8UZ44qK;AfUAD$;d_@8voB2WckHYUBIA7_ zUOgNpT{<p_<49|_x!g3a(<$%$v;xPObd8%I>EsB1ZjgEH zFaFh)CAx_Ud@O-ZMt>N6)2u#jC|z_BZ3Ilr(!4zkQg73X6mkfoq3cZtw8$McDiIS$ z>aacLG7~;IcH`7~nA=4w9(0~Sl2cdaj`8fs_%(OUaR5vX-OKUvfUHH_Z_$`xE zB9KzfPFl@mmNu<&hBH1mvYf%JkEV+u;Br*rzj8@p>;uy+7dbifqjN&cf0@s<;2$;W z=YM?Twz*pz)-w(<=i$r#RganG!+b*y$a8wmZA@>BZ5(F1hp$lLFUp+#y}IXb`EO$# zwrLMsIZBr*we)Z2X*Zv0%qf|DF%Ft;!LW4mW!Ay!{6+i3 zbN-@Nfcmnv%(Ru@40Tp($phX9?su1@Zb7*8%DT`xy68N0_A~5!(Me9{Tq%9mkLzr- zlW?md&V8&bB`1XYN)ZnzJk+E!b^Zl$TKtW*bIxw^a~Nj?dKYw-jjyS8owTuLS-dq+ z(`Vvka7V=-0xUDx!{Ol3y0@+0qVbJwr*rV);Kw$6pjzySQ2xCwd$DuvnD9?ok6dbY z_9vb{XSr7gqHLVoQT?d^ZD+f7AdMVvKQK*VogGIU$Y@?GF6@c+ZQ=(!5!nuk_Enw( z(TE%Z6p_1dv~NB?QDwBZl97F9w72ggJ<(|H#%YHl(Y~0>^a&#{v=iUWh^ED(zYJyJ zQ4H|*CW`QXkoj&~GTv>w2cv_{-+W#_`;KlBVSoD>Hqa&7lTK5fiN-~tvm-S(B8nIM zYpmtk#-#c`M;Mc@u9n5$%a^T0e|lBcYqpn24e^05Zk9L7lj$N4cx}3DYBc|M^R!Sr z-1}X7ppFQwG+TzGTCew^(~9A6pLfl)+PnF%zwvnA za$25I{M~p>LA~9RoK~2JH#-iRM@<#j&)smEI*;$=#>b5ecY=J}wMha!mWR7R3Pg|X z-)@rT(Zjvl4boV8bl-N>)G*ie&w93-BsJ>ce(lCPQ1x)HcEhA#J?c0}@@O|ms@H@3 z*%O(D*kdR!^|s#nWFTy2=rA2tF4*eg^3>YLcc(x9h5Qom(VVVt>xVw5&Zw&v@cJ>K zW~h(t-b#eMM;z+ootlB`ufG~64k`X9SGQ5*Z;*q14n`PzMNT~a)&|Tmsy4=Aa`&Mo z;ha#m68-U2Nza=CIGDUk{xL4=upi=THVQPueGFGhNjyO00UvKx5Be=wF!s>gQQJnN zpLeL2=`O;%TYzAY906M#JCR};Cy%byk*k~V%5cflELYvCMJC{9U&<4c ztDFj6;-*U$@7rF_6JzaxW*O>ZI_nL-2-&a)8Q$ov-x0BKv39VJ=i08jGaY+J`mS0q z;Di&qAT=VZ+mrkEy0&P@2c5PnSY43W`^X6UEJr&beZ}Fpw`-^esGJh;(X^&t0>X4b z5@b2Hvw6n#(#Lk}5=hDnNI_Q_Ap+n7F(eg!;!GH7#j!$>Jkd>)n?ojQy_ zJ{~dx;(ue#ayg>?di*e6Qp`O5g?S@A2d6Fo#|{VVP3l z@h2~JT@1o++Gi?rtQ!j|r|kabtTZi)hv{}0=~JIvXp|lE*|-YP8*cU#Tfb69#;!;A z3FiaZ3b|X~E{NNQAQCBQ6ie4lqaQ{f_qK|T(=lcbmnGV*!wh3Y#l*4O=JmAxkjh76 z`vQ)pRwyAw?R~vi#cc|2%!{(VH}g}MlxTy~$&?7N(A#+>#$RwRIcHm<;`SJb|839479G&zhH+9jQP4!!sVab* zF=hvpl%kj3`a1Q;+V!q@)98)8Z2R~`2{DKHAh0A7 z{k+i;IB;~zmVUGrY?O1kS(~(9Z-ND<(R(8Ocr1HdHX(2C+G$g&GmwM?h0SKw3@a&~ zL~{Kwasuw33O1Cd!IgC-0cIFnyTX0%YuH(C+Ahky7lxe7Tv@M)2Au ze7bXJbRQfhoJQ}7KyEB83TRMMWsXp!E);PmzYGqr`S~o@HwwO~nBky-Fig-gPZTsU zjHW4o$BqPSO&u_TrV&TgNN$n>s(^h5;G{=ooQD=~%4o{X@j>AClzZp?xkPM3Y7y|^ zH2QD@xwo5{*pt@W*73v0X(Xozf9Ce)DvBeKd@=g0-`NyFU}EI&Lku2L3}#U^m-k{5 zgdW0P3j7m(g^KpP&ZSEKtEJ5TQYx>Ks5+lioJQXafhV_z>B8U6Ie1k;2es61&-@-E z#zYthgP%)gZ<0ZVA-w!O&&u6~wuhZ@% zSP}{usz*GS!Dv?!#y<5Lxzq1Yf6pkUEtTV5tL}bPW*)=T z=VQf2GZ`YDwBX%%RUz+F9mLMe8`YSHm^bz(c4OvKx#$A*enKXqvVFDCmmO+W`vDIP zwA5zFvOszsl#3b{LmCrKSn*wWQ^pk?)WH~{B_FbE9Ek76&L_VGuVP<~Lq#;US9bU4 z4j{>QywWj^t;gtLI?a#5QK_0Dyxs^POZ69tNM+rh#ZKrVSPKOgxV%d@p*$b8Oijk; zv8Ow0+~YzqmF=&EKgCa53x`g$?Vil&VU*hq*2|0o24ok~RES=xfizIF-AK(9^Q7H& zXa{o*oW!1t6NC)0Q}T2(p@z4H3G9gkUPu=?2QQa*Q@}u{Y6@BI>O9cY zXG?^Kw|zfwH0QIGfxng;Y$*Bw{b{%}|NZml&b$~GzM8(peMLrG^ZV-CznKLslkCZ1 zvyU^CJHG_rE&3PqW8Km>rT!q&crDQmImO(ANGS^hyVJ|?(9G^8aqMli+1|s!*AghP zHaaBS$zNWXI0ZVzS);c*qeH(aA`lV42N`BA)82@zKbOL=Y@HoG=E5nuMZnOtLBxBA z^}E&6ey7v|`aJgeICa5G!1#bVKvPHZ>WP2Gn?&8b2c{v`lTXaBx8idCQ=v4Rw%wMfVjCNH>olovuxUyIE#5VrA;lRewctuD6C)& ze6OX}av$#(FPoiHHb4kq$t-cn-OP%fp)iS(n(Lrz=MaH61*Y&lSZgz9kC^8nNx~`u- zIMv;t#Bj;i!HLDnxoNY}2QrF`MUk!RYZ>ReOBK+c?+by<@%>}$5CV~3U^&!S82N&sAP;v zk8&J`$4axO3g$bJu`Nvsa8aUocdJ;}*C|eNuUGP5n~KE~YJoFKsLU*sB3-%E?IL#Q z&Bg{Ig{#P?te8~7bnP(M$nTxUVg{bWKIc`|r~}*ltF+i$hZM^z_!(E$h=sL{lvB4D zdt_JwC02v+B;9UTz6+J`iYUwi9<1&DFKM?H;oR@Jl4>phTec;bSK%A!cE55jRLuJo zZ(KlvmESMHa*HeXUcGL2B)fnTtG+)5TfYcbz7Lh~C+8p0G6_!OHI!V&!o*m~&1h*?r2 z-J)OlK2*$m^ryE0C028HB({o*^t_jb(>Nw*}}6G;wIY~J$sHZjm`HrQH_c1$7`xNJ=xjG=2g7c4PLOOpcrmUI&P9;Vp z4Qj)Q9%?WQ!)m^gNcx9)D{IO-p6>4fq71y*!($5PbeIv0q!>H?#bz7*fhrRTI-KoL zRDwFVjJBiWbjKvND(V9g|8WMW3w}D~yGi!tDEc8&Q&foy{Z;w97AMUN2u)QOK~b`~ zk@4WLGF^R#vkO5A5u2`dd;+%PINjR6D_K+C-gLjC5oThHJ|2~|O#vTi7!WffA6)ie zG+oc#41uJ`O_`mcF#NXqpWGeC8`FBz*YGRCsiE(h6)x$6v6+nb5`l_fn=L?32PusI zd;Zv&Q*m~r6v>|T=snI{*N~lq?KA~RQpMD0#HB$EzIx`u$1fptq=Jl4BW7)}!YNOP zd!{dyJRD1JZn3Pda}{Zz+QJ4ldmH`VjCan3CAFrJw4#Qab*lz`qa<);lWH|e5~0x&#y!@w+$YdMUEAxi=HFb%q~5hsRE|i%H(br%9_bb@Xx_P#;PQBKHyle z=J>s}@a!Xxr61w2PIQd!WA` z%aR}wv(&SBRAbkSmVe2-dISjQ#}9a>^n3#3(8V;yoAA!0`x79+LRpqKek=P#S|PFZ z*h4#`2vUS9-Id=LN`wq=qS5#Cf-hT*{x6@KV#)H#Z+G~V$4JuwgndMjo^CfYaNLS! zgx*}CT)`Ya$~LwR?i> zOLrS%$|J>J$I?d{Pyd7eBAgofdEJV$6GZJtU%x9EI;`>OD#@hw7q+)W`H#0-SncWW zgljxwGg}Lx4fF^HRp*ee!24KaXH_HcT+is_oA)^bjytA$rYfX5ePf_E9XM!Z`4I@K z2s-rf`yq%QjBWM0JYg^>L#$q(MX;Y|iC>^WYLHMA98l5p*6B>LL zpd=8Mee2{vL4;0hC8W(o2c!E|jsZ2@JuQ}jDcfg=8}~DbpM%y2Qi*@smT@14gCrdP zjEn3bTZ_cs=wW?AvXfj@z;&FqibXB8$ljM<`C$HbKFH0HUtsJF((o!qrXwNv3wEM| zXettZrH6HMiB4j5K4w2^k%&V8@GbHzr3kOakIe*5{5f?O53wzZ@HKhxa9@iDg>m6C z@qez7v85^ziHm_1INvi_1l`r>0+W5TA^G0df-raE_@6;j zg5LN&lXM9KA<+{d!f7ksf!7!Deo8^zEW8tM$Y_W22}ag0pk~|mM{SC(;Nf` zA-3qNI%qea;3U)(V2;J*;fl}YZ=eYVBof2LpeaGu8zM)|SD9YN?=v7BNNpkhNCRzQ zAe~5KKIqtGmP4BWE)W zMIlgnsI=-z@RYDCRm^L9+z4%L=e_jn0$^wxZ|imCMySA;=xY9t!b0)gDW0^xlzs6HonnF+n{E!k@9?95~%@{3f{BI47?* zJMt)jK$_EU^efUE^-ZfC&ZV8~OHBnV$H7d|yi;O7PBDnyQugBn^kaGXb#hOEbn)A= zSjvw;y_8iV(~>a!Q%;hDR8}PV#RK#5NlsD)^weHOYT>;DCGG>5qwoRxF|RtDMzII` zmOQqwJ@H-2^U)=Yns68tf6+m5kjzD*uWe8dbF}>K9Jh$YVcPXpIC+#5&N?8^`>xtV zOX3eQ@N?XVfOYq@wg}%z^c^glPi%?b_+`2qEmj#%5$26(2U=Cg`%(*aGSE)6E}yi| znPn0m^@VXxV^_=@WM8EYzf;mZnEv#S>zcKxm$j={%3dRmbYxh520`g+?7J>IlTXe+ zpe+a6*7+ z?g!%Enll`>;DF&;CM#w>3x6fMj(!DfXtkIzv=8|`N5@ad|NcE**}T-8E>0)U3IcLtcdwW|#da0(nnqhK0!z%&oIaIa%xj4ltiuqo zm>_FxFRJRaFF4&?reIGNVG%2SdGoKELm1uDq_W^p?XwJagHs-ZIRkD?mf|J@YN@Nw3m7+O8ASg7c7{FHkzm;6`vB zti&C&M#dfURV$c=X45KsNYhNdhR5UuY>rMCAw+Ivk1=}O0%S9g1}~Sw+^&R=z&SCyJK(nw$|ZEQW7suu$-S1>R3l7y^mlEnN`&j-j1H zCATTz!*D?%IR3F&C6PJ|mp{DZ9n#PS19z^!?`L#yY z|C?u)$i`-7TEGJvbumE7N?e%6;`ujkP))o~_=j=Q8K0fdVqUVeNnl1Gw1m=J(nEu> zLvt?>`?pS)8wgg2}JqvoO{QI?BmN1K*n&Jrj&9A`R#TDBQ9pnblAqQUhOl#YrNEEM_x>^S$i^hq$hgRkGp_O2EyRu zkjTw)$Owc{h_zpgEF*@lk_Y-0p}D>=octCv&CqhED+GZ>(DilTDf9O;9v378QUPM< zSYf0K+lVOIyFrR4jB{&c^}HZ8zXg+iFxnSARx;Qi(yYDRG1}))j`D2#Q*ua6#BrBh zWIMUCNPI&8?H4@04-ExO+|we!k}-ick%wGnp0bJr%>ZcMS&#C_>Dwu4i%1x(xZvuj zL7(zJ6A|2#cA}kFS;W4shj#OL>1y(EtjQ<9kTHQWu>_gAWK)um-YGxQ3y#IPh~T_( zIY=sxz*n1u+^s-!RYD>c_j<$<<+T^9?@M5NWRLG>M}Y)uj|l{Vn81^mPW(5BFLZEu zowY=p7*@KO^c3XO>j+Srxw;*1EaG3~Mc8||f^QINa|$u6m{1b`2Tl3 z3oOkhU2Erb4uYLfQOJF#!NYq1h|`NbahV8@%(jSxp=xlinputxYRUt}#uK>x2BaOS zD zH$eFoHC}Q1o^GwLbS@9roc}hz;dqxep%=fkgYJdDjv7}13_t0kDve4D^WfY>zv|Xy z1JYU8GahjucDmM_pR7OiG7`A<|Du@o1B^Z)SLGdECDr*%3^aPFlQ#7aB!s%H5CGbv zF*53aeGo^5ac8VJJFdKteL*KyZe3cLk70IYN)z8A%^ytU&$}iJ*DJNdLUTbD_60t) zlg&q<-RF?RzlB?fQR+3bOf!Q)UVVxUX^0s9X(!1}vS#>#KK`RtWdRR!hje^CL7X(F zRVWApz%8S8<~C2XR6#{q{w*HvDNcXQ_&;!*!ZzpWH8e{!u}wk`h>(_u;uakwd*4yT zbv?9~_o!8yk7KUTHo))%@zNZ3s2~h`vXg1LT^h*e%pQE z4nJ=~+tG$X)*UXy$-LAk&xcWyHqi@=A76kyusV}e^$uwh5S%1R(@n^aKg1 zMHih-($&WnCPI<`_R`O4l559<5A(Pui2o7KVXaBU%a zn+<8EUFzxbAXKXp)X&HX<7~nVQ5)rA*Rqd_!r^#pcxi~I>lUH;q4o7#&5XuUO!ysy z#17d`or9W7*dILW4egmFXhK{~vHkc*FOFvTYyT&+hfV1;OnKqV7B>R(b0B^Q`;l6e z7$?DcFx0DO`&90O&F`>j*|yQO<1dkBmHRe)LaIxB%mXG`TrkYV0Q!OSJ4$&%ya1IY zv@5T5DQ2{R^XsAhZG@L7yzn2QlyDT)+YBH^1Z>YOF!37Jh4Z(ntJ@u1OBitC~ipK z@D&2Z7^2Cz*Qp&EYz?C3ClFus2cHu+Z}2cte57uqC)yJsBsv6+KqK1fY(TZRXn!T~ zDIGjI9tHbZP=S}d68F3LAs@$&XGf8dLuTC3ei-vjP`-3??CKfIG@P z;Xg^5wur7vi_o#aa`o)ZS1#4AgckW)YAb4q4v`^cI+wO0Gm$Y^aGd;D{ z1^G$!(ztl;iFHGwg*0n<$ufHy(}&qtJG|BS`(?}4gFunL7bv~-bd3tFiM-+CDV@5g z55a74!!aKlRvhOMUBXOzA!t{**<}TKNa(dC~;w>ud4x|CL7R+YLCN zr>{$|ogS}y6WUeA8l47ypHa!slemIUV{~eVRv&;5gHy@kti!>n{zk?fRYO9Y5bYA; zg)>p*et@A1Y-(2Gw}K83gNw{&aDyQ7zhvhcLMPS_?+tLa$tWi&+SM6N(X{iG18-Lw zZ@r4@e;~+VAd;L?cL0pFus5)12ODbqHKaH6qS$yA+yRNlUu~AT54$hnq_pLu2dp;} zWZOF>f!%;$!EHp#)Z4L8^d;*o?|0f>vr#Ft>3xul5geKe!X0mX8#<|G)&JNyd{>}* zX8*hIT}VU4)s0}}WA0*dd25a#D0HVk|97-HqPn`n2$PI$ja;qU$`W&5cd_CuYl#R8 zzF0mcm@9gVc+=;DI`)i}0c!eu=|?_dispNLHP~sndi8N;qtriXpR5?IAU^0nuwIXh z>aAeCHPCHwI;{`{kzbQl8Jt}Qq7h{PS}xkWS)x2wreJ+ckSv8MgV zcSt%tyMtopnEq>V2pvf}9ffp_csmVkiA0Gy64_bcCY~N=oGXJkep_g7n$Gn$!uin` z<=}OMcEIGu>DB4;f2UJ|RutyrbiqmeQ0ZtXf$k5Y5P`T4^?Qbw;mr+SzjFg*?MP;4 zkdUKln$9)(k53+`P(yeX%R4<0(7Jqv^&q^k zDyL>cQaigxm@h2exzwl`E=;Q z^B`p5=Cex@a)5r1rAJ`8vLrU*V|0{_~y*qDA%nAm+QeHF~A?qk|y4ER$UKK_L-H zc&et*etcnx1$XwJ6U=-j-l-eg%VYL9Oe#VuMn5BVp2K&u%N^zL!n;O@62Vo_LtX7^ zy*)q&lD!a@?917VxsgC87N{Sj2&vC3LO}Mc!PDG)*91|)S3ca;rqL_a7w0xy^O+`D zaEJfYSBX3-$kZ>H)FvRC+Oe`rqqDh#X2x_&`@gV^pdRod!XxFz#GCvE#V@qe@J&D)Z#rqzP?1 zZp%7q14$p^UXV9)2(Sc5lkelAzTgr;)hpu6S$r#NnT))1;}mSOe#hy?E&tFXr-?%T zc8FECe2PXyGqM@QNcF_n0_3V3)+<6eI{CR-Kk29}yF;^Z);re2Hw#net=`;}X?Jzzbwm-=5{@B%?TjCRIqY2GzS_Oc+gr=CPHlRLI~Drk zC-09ouPX690T7(KM7-|IoUIo;r2g|@H~Y$j#NWHZJGpaD2DcXBS^4V zCi-xM0nHGJ2u12=7&~YdY;We{j#j2R8m=dUTDyBgmB0G4mUL?erhO9{3p}sLa0V0} zQ+RUmjVJy%yhy^G;q~c9JE3QRZ9TXb{ek!+cmk_8bPpG8N4C~gMR%U)VUp&XWjDKy zK%f;lmHoqs%3tS>%yV}+ISD$NK zU=O7l2~W#Yt5fGRW4HF@ZdkGgG$Yh*k8&2@#wvA`qHq643gj?+i08T@YJ*CtyKZUA zSv|5$I1;1JPX9t8w>%$xwmd|x6NDsnt2^hB7kIiC5=&4;xs0&HVPW#-!Dqftw7!B5 z)7P}DDS7W_JxmGR-n<6c-Q|-Rw2JwYjU-Jry5@9CEiTC^zt_%(r)sM9?^aw|nfRm| z8d}b(wlE|S{D;t$@jaapwNWLVr&qC){Nb2<>^t_iL}gYJWDS&3hE-6vFN>Bvc!D#fRXj`&wEomLYf5CHu~tvk5FYyjO$wS|EoSA#ZcD3L z(^}Dt$_L(nc;^&Ev^Nh27=kGX2pXh{24%L8@84E%Du+LNm!+kvJKN}82#UmGl;I@G z97Rc^yv%IhPDZIb)N83|2?@U9qG9pgFQgu86HgD`ARBQB?1_Jmf% z4+R@+E4#4hFUL>hG=SM}|6UM4@4XI&Vkca#P2gK%l%PtBm zWie~7hjuM9#E5wNiCYjJQ4IgUriz>d;EQ2soSOzD3C6Ztb_q7TX(>?l_wdDp*g)-C z1hg^UjRt3CFhls~kuT`3ZvsvN_8%en1r!dj%347f@J*M^X`3U1a;_XepIxS%B#5KX z7?UGcUZa8f9%~-R@VcPCuZm`Kp~NIy=r*@%G|~zaG9y`kj_thfR-Lu`sXV7w>DEH%mxFiHf$u_kA# zdrj`wx8Kd>L;e}-NVi_3Hb@{QWMNXc{08ET3%IYb3g~*1J{L)Y0&?;nRn&B7akn+u z*uqRfw8WkVs1cK+P`23{6AFs^ zhrWW!sG+txA08Uz%f|A@I(zMp?23qagWNnmy+We6W_6ih<#mq%&@JT&-aP&g$eba`l&I@o238;X36PuUH#3`}IqwA|AqPcV8Q--B&w*f2Nr5XWKqk=8j&R zIcqE~I>uuD{~QgUAR+j8sMpW?npFF2SkQ-ls486uI)e|SA?ZHp?z{zK zM=RW_95~jhg5lQ6#4%#U7iV!uEeD<>5Kmv}Y|tFgjA~#H;Vd$Z`;rx6?PDDp$r%&v z^Mcr)t(#9YUEfnQEtM+Z;whcMI$ZMUTs91EZN@6~ew|J?qiQmCBy;R&MOb45g0!hh zFco(9m}=8&w$0C@iS6GVeHg zUl*XB>2^R&*XHhzipbd>pZH`Q%-KhOJIa3Y*vz&-nqvEAy zk*A4N4It)myz*ha9)Y*e^VpmW9F#gnC4JgTq!(pu1u8xnz3D!aRFB%C*XD8A`G$_-pL0hlrvEX^GsJBfoS$)1c>4&1I#sKXb8wm4d?Ya?vl7LhM$4``t~7(VcSqS z(?`50JoMqCH81+>(PWFV6pz#*{7m{?X;pH85SP)bXGT1H)gBA95_97aa^Dq&z{Rwo zJ4fc7tjoKUXi9G=_{v4xGPi*!;(OjQX=(ZFYY77sGsg&z-8^zmTgGmt7qjFUA|!1L zs{K8Rxhk%W^smuxyuVhc+~vd}F3iPqGx0C!iS*1TUST-09%p;*ONj*VIcNwVx4LJUI>iT`GZppH~nlNGis%f7*;kaeb9VF&@? z&dR5V4ST6XD{7tV)iMnYE~==$nxnh(!4~mZvvdt1uAtG^MfA5wI@KtBILvjO@KQgZ zJHig((Wr^!05cv<^S%C!795#Q++*H)n_C6Hs2jUA3nRkL-a7%K^FrxgK^K>q_Y<0h zen~kWUqC!4uy{zS0}wHShKFwJnH-{?0y>@v%+I$sOcZ1E>gGS38)&DGl1OcPe~6a3_3TCX1?Wg zL$Q_)7-kzorzd=Jx-71M{o=$Qy42OE-mBKCVHXDxZ;FZHCe(yi0j>L-d8p17mK5u& zPa2{cP7w4!+}#bO!Sbe6Enfk2S|y1L8n^v;wB{tzSa8~qEK^M~Q$mh~VkufNHfCEe z(g!EBxzzc!(+Zp>^}=2f!JNg`+%G;5-Czzto?t_R-T;;oguy?+7DMpB-bebdR(jc?p`b3bNlR5Qcb8((rfZt)Q8~PsOL2JD_CQ71a zrE%IgaeLxu-)mZTmgCu{-tyw0W8*3Z2UNQv|){4cbJ9@nV*P z9np^|m${@uy*=L)(jAiabnaqIKBA5tb6{wfSfv%+vk{JTo9YgWDFWsU8;l}?&x;2f z#Sy$!5MOp9I&f!ASIIpap{Z&*H>pr>%QuBsH))9GBSR`<92}}HseJ?{^*8fS4_(cP zSLS#XeR^KK{GLm4#H{5!G?4^4o3N>Suh9Nw<;D&cLh?A~4O**W+|EhufaLI|UaN?7 z1UO6kWiM-&%5)YNL7@}+ z9>5vt40K|GCyU8j!`)5x*W*Dk!pU|1ty#!yX=?gAU7us;Y~S8&XmNP2@5$AU&mLsO=GiIM zQ|+AN&CPKcC$|Zd$OHf(X=dC>zPy*5s59(|_~UB&ZPYwhb03fAaw=P>ulRy@CtPV{ z(wA`3Ktzq9u99~WIg}=hb#Jic!U5wdG ztrJH`u!AQE5-0op$?t)a4%wRJ7bh3|DWD#i&*IPDx#*^YUMDD-Bk`=)3K!sy->nci zBG+=}qu=rPkW$1Nc8h?qm5%2-*-RshLTA#$*mu-?x-;f6ebq=5Xl*4e;nwig@>7iVLHmY*3!0Yt~)bi^|;e3G02$aYTg6%=0i_+~h}jj5_-Y))b+_#9`UCMrC1HsenEs z@f1ajpw(NI2C-X_@7D%^$s7isygvQlCwh8}+SxgG%(7XMk{SYpWX`;VG>VZS;t*PW znbR+ganJF_eT>}@nYb?^4&dlvgn%IsCqGUrJ&6!UvDG*%auiwbhU zQ^UWff^8ijCUrsnw#n0G^K-TL%oCkjbH( z{OB8lB6Bf;4Jm*JsED+3i-=QRmRGnadR*LkG@{z@PIxWyUy zlfb|bXy}5f?6|Dk=@dl9ay-Afl1RZ@#N0nU7j;wo%Sy^{ zb$Q^5HQ(q4px7y-MtP|BWx$_r+X9>X&uW>c?+xR$tUu>)qdH$v)<%D_f)@EJ@MfFY zUy0B0dD2zJ{`ohuP}pUu)n#6F`3P#_zZ=ce)aO0GIRDQodG#uFnQtb(y=zVNkAy1z za^aJLauA?1y}9}7lwLjB;7(2Fuf($!<7f6);n%sw2Fq_{CZKe%gbg#}^+X~h5*i7a zfe@}bb2kJW3Tr19eb8r(O#ss=o+AuFiu|q_^Min{htmNKU0Nci{!}lVzOnnzcB0@@ zlROG(lir>3qi##yVz+{yF`95EQ$PKa%KsdT-VtCDxH zILCS&<6VKsTS|x!c~=kvrOZ>I6vE%~X2|P=HTrijJP2y%RL^pDxyUnz_5ON7YwR@{ z-*uo(Moc6tu{&b2$kvjPB;Hk{W!+uY9GUVZIBAl&SEj#4;GxL&oO!Z9ZJ*0%;Z}j+ z^AtfVO<{Z_{So$7<&@cE(R6L_VeRx>XzQGr#M}a!%H0Vn`H;}2Gh5|dA{EMx39pPk z7=h@Z&Hl+Snx>U5?Jx|RVeO?q;>d!6aKa_YPwm`b;vlGlRR2gTT_jhfZ$%L(iq zLilzinNe<$aLc7U%%U_98}uE)aOSU)ceA{4okG7h!0!ONYTsMT;1IVi?f;NL$$E=T z_|wQe1cWsd-JUUzYUSfZ{Oorm|Jm$S4Bv)9pi>ucgT9d_wZ`Tt?w}x%a3${X$yJ0l z6xvSN=lJBm>>cs1i1x)4nw^4i^c4Ywrgk@8L8%bUp`1L!T*5AP#H4(dQ(o>N{Vhx% zL38Vm6mX=ZN zk-toxTPR86$)R1{YnIk%s#a_y$E3aV1W=)5w)8F9m}UQl)qz`Kk%d~jq&w0YNid#o zi4mjQ@sV+5uR)^JRQ@f%O_S#RTPfzNGY5nmry5!)zf6?7wOwQQ`YDKCdYWS;XVO-> z?Ih!zFHmL|yNCco1vUN+b6CBW{!i8pRyt=7FL_Tg(|_MT%-Yj=NcI=&wTkMRx`#Gj z`HwCZOl4yVW#U6sbD_800?tr=ar)A=9gCdg??|7s8$w#XnORtZ(!WnSq!lZ*<(GI# z#!;Bw$P{vn<>ASOmgA52!T|`qV#QmTq)fK&dsn6(AJ#GHsh&J&n$SD_Or8s;918m+ z1<$wJZ6;Z$VIsJ?tj_HGxs9lJAkDf@q1!yg+vcHkM-Fn-?uw^tUSOy^9V>xbMG7tn z#w>r6S|m)RGy33=Tv%s#BSJMEF^^t_YyH7|hdjNT)0ZadRR96k_$buoN4gAqc$gRSY5lyetViKLx1Zx?F4RK$%`h_>8 zex?PNfHA*4tOco+%4G+kUaR~+2xlkCs8w5%E5Y?e5)$zRr zw(`BaO>UxtZ@r}Z1?5Xsdd^XxOYmz8g%WWssPbQh^kC_Q@u2Ye(6F*@JV=>AU|7Wu1 zIE74Xi51Ur*dT`JBLugMmL<0${!%JSlXS+&$<@)OGij8jiRxG$Q-5WUglZO&Q=bjB zLdl=*oXtI{th~C{D80EatVG9ThjB=wwCilTx@gk~wjSwQK@$42ooDJRW&m9Qi;Z6B z~*%1DOyQg zZ3#njoXmK1=8Vr9%fR*ud$1iLA#3JIq~b%nw<+@xs{;CcX{y&BZk4wPeAM^f(g32h zC1=MgoGpg6D|d4gyh_w!fV(C)zj;U}iCyAtAzoST_Noux<24qkM^yQ5{S}d)MCSvB>jjkRf_`f{(by_iV&u`PA(6^gM47(K$44B zmM1?rC2;X3o4R@3Bwo7#v(hHM`P_xL4)68ss#KR@hAG3*#;s*iV~Lm9(dl+9R-+K4EHZYPi&U< zvWTIZB$!!D)?b(&_{W8yR4C)PP(@T^wrr^|SziMx%AL(swPC9})nH^Vu@ro}#+6HE zCEfq<&Wa{Qh6D??Cup4JcXC|DvQ{vS=85PXK}gEU3vJygeXhI+n+wQIuVbU^DAqR( zyNQqc$sB!eUvbR|BUQ!jwas)mJJ!syqOA2Y2P~Z5YjY>}$y}QJc1sJH&ihM_`QMR4 z(8Y>D`1W`;T9#3O>vYEX^J+>~mfsw5+i!5a6%P0dQoQ^XJ-%@n6d%4NO@)wrv%LkW z5@u$-zWqzDGCf+LeW2JN zp(rcc=PUrBnDhE$7dsR#$|Np0Z|~^`_@M|x9j+@dSDDABRJN&-iWNpsMDnL21&Sm% zP?VKTy_5@$RhWBRc8w21_5}6E7P0b+RrQ4WIUb}ZYHl+vS_;k+cK_NXp8y74E;D)> z+aHojZ?H873zqRpO<~ z7x`$;>r~U8#LrPS9wQ`}oIGBQE^T+;Mq&XdBT4!KZ4$Wa0w()+-zk?saE7kv@GF*V z3tzJTcs;kIJgDe18%*Lt)Jyh9=E052Px4``E=7l2ENUJ%#4g#d+CYUa|IFsY>}uD+ zvIR%{Uyw_9i?XJJn_SxJW;IQz2x`gI;m_m1#lWwL@QLN9?Rg^BZjZ4dNU>yZWKpWb z9rITEE1RP0Zt_a@+XIA3=BN4o%;c&ktz^G#lT2x|2X>;rpf4@rezHpT?=C<}iAy}U zz;t@xbao0N{2xe_>_1LGlvaFUC$ooqqC9-`g=Rv%WkF3>IPr5>`;ny*eO7}n_*boS>wlgB2(;%d=0 z8e7NN;4Q!gFUwJ47q@Z-v#X$>;c|i;FKOd*I|>pGw%A&FAiHUXaM+Zw#$Iv{=ghF? zp%gBiqEvD@1!u}AHcA0FkDC26KojH$$~{2-))bo=#|!O}71GYKZH%$uG*j!8X$|4Yil zseM7Ww*$^pp!aGHV1X%B)x7HJI9@(Sx=)Yu;Y9B<8|gSdPJ1}Sbiv8|HG%^eFOUqk zh>5T<=7504-6Dtk;fx~WwLi__}^S8>Vkrp+Cb1rxzk; zUf9C>Q#*qmZ!>~WARN2Z#$f64>cErjZ38 z^9Li*+^MzJ*Cr|yMO8o|yK4sVBhr#Rlc?OSAM)Y1cU*5XiYbF1!yB>HLcy+;cMsoV zS3fnkgq`kA1XF?i2X3TQdz@hTP$R~~mwD5vqnIRyS43P|!q?I&)+LXo_J*$2rfbMX zm@xR(Tv;x-JfTkK_H?wCDLq?*XC@p4Q`3~=3KAuDQ3ViBl z$mxzESPEROet-~mB*o4<%RMtu4@B(kCEP4VTa9Z6U~%w;YhFn~d^*0IpHU7N2tIt13ql_XQ07Xy$3Kv#e zR5|ict%FO8Ae$c*F~We~t4lR^s#z!-X$qzXc0rO5cK%aa<{Cn}AHx05iLpci=^LB4BZSLGyy9a9Mto(|3cg<8`Ro z3F~S#7QBs;^ic$ZEK8ya-f?yx1sk^GU{U!=LC z4to^C$abSA8qslB6zG_i!s2v%Oab5e-;dpGwjG3a942dZ9F(*jmf_`}WD-XiaDNwr zbdc#Y77SX#lz5$Xl<`B$Ao=^Z#bwg(7+i4MjH5yDO!V{>vSCHgnfwM)_9gjMJX_F_Bv+l2R%B^QW1N30_Px%*gIy1Z^u4lFab2wZCG(OBeWyF7vj@h1Ac z8=LdKirepL`tLVBAEWXihB{|(j^{gVjLQ2x7HN(y#<$Xif2Bj5PM1S1!i0I0v{~2i z4BW>gY=>YMpD(FEV<1bsPJhT2+%notg|VbbT$?|2eYK( zrljpAhNu5tCSe=r=JO@FZ6}At7G%CT?0bzVTRKYqQ9D+L+D{@Xt9LAvw5^)qUH=%9 zI6{NbZ4AA4xhM zh+8^-$ab7L2vc>3rFc#d?uRZat;uL~yP)je3UVtjx3qo8v9UV{RW|e-#xp)&ZB=v1 zI9|X#b{EOp{ni6@%Rg^qhNE& zZ=1@?O{*A;gj%XJG{#7IgA@*2I)2EiV-uECsiz!Q@}s2`PtoD#{NUiiCBa(Ik|E(} zSsuo?#U|nchl?X-c~h^7SLH(@_Z+ufqPQ}EHTCs&3E~x(D5GqA$?juE)X0QbmT}ph zeNKDxOJE6>VBa+Hl91z){~_15XzDakhlGvSE^?4d#}5T2Ca`4HO$K3Ff+-Ez-f1}} zxj158+kxc247leu$lMxQRQo^Vv{;Or5IRlF5Zn}?9iA*I5f_ct@k>QQquu<^dzw}k z?fzU8M0{PW!sw+i{)eq}_1|p%a(PJRzuB3E5YO7IgBwt=b)7{ek%&gSco#x%04?tU zEtt7DVm35r`kksr!&0N>A6#-JM(wwzu~b&Wme0~USObG@rQb%z3>ssme`nx27e^lo zSH~H6jQd>h?$THwbV)F8>tu;AgW$1Iw0*;g!02*N=GDVGEZMrqNXOig;J*uy7L}YZ zMUM8sWOpwsEmq+I zearw%T7nGpu>^41B-lV5V*rgs=)f}i0NNAa10W+6LI4zzVFdP!#{e%bIWceou&#Va zfj7lr1$~eNoJs*&&`-`SUb)A*IH&^J6CsAmj1482fjkHU+6+Ps`suu#KQ6)zRSNU} z6Nen|!5lCF33kv1dB6k(=m9KX9DZQCQR`q4XitP8^g$%hvLA}T2bVzf(q1t=_YPis zN$Nl7kBIu%na__eEfoc_)fr+g7Zt#oulpeY#+O_^@~#m_!^u*$Jqcmp>p{P?!_45 zNaJ#VOcoGl5IQs+u8&24G0j4_(c{iLe^8`$~ z^#ePSI!x^6ka0qQiy@vdeh5^sLr#@0F5Jpdg9;4p@t7Bm#4<36)*D*YSqDZLhXkJduvW zk<$v#oHUai+?veyv3P;g$kImm?DT;?-q}kIfu0Z~#Zl~SEsl|)nwN-6Z4WwB<~qrr&3S}DOywNA0E_)nXISw9^gnqxeX&G+y&0c!vYEJQG^-`$i4Z|x2=k>dN@?qYyuj(P^TYldXOtN4T0OBwe;@JFT< z_a+Ox&%B;;x!>o?JjY6kM17cdz}KHTF(*OReTEfhW>N%Kt8)N<)Tprpq*^9TtrQ&% z3DEz%*HQNML0Q+?mVyx$IK|#~n+p5g;Sm?x>DWYzAH&xdT?`#{MH;JzSHVm3nJ48o z8@x=hq+bBRhm?IJu2V@IVHr=!kO{PDu2MMV2f=&N?gQBlm6^P!f|t_Rl+iUwpK%_o zIjbp=$>2NSIrJ4(kx|9FsOV|~z4)I5MBwlt`l(rp-@+dDVP7<07 zqdfW0uD01d3r-Z@7r~z@y<6P^ZJHT%g<_UZW?!D_ztBbJaAe1$S>(C%R)A4sl5H`6hkRe4-LONPV zbGHM8ac*#N(YihKpgdnAkflh+V$DF8S%e%-zFs#t9(Bq1H4NoKBKw77Bi9pxk?IhE1#3G!Eem^m37^c-Wt(EQI|LDQjep9SHUN*%jtJO);P_Qd7TB0(JyV`W);hhoYE^)-~zvn z|DWG|?7Ye^)WLDOkS4IalAVI+1iDE^6JqOUPK+lSfHwfbHpQMk0?Y2;7#7)K-av`~ z!-k@RHg&thjw&Hh0D)ss>_~rvh$9r0rbI$&!p*J?1d*HW8|Jq+TK`eDHf04D5P*)UCnfq)L z4Em^)3qJUq??t*MiH5Hx%Hn{@8M80gk4m@(|0r2etN78Na;;yDRiFA0^YPE|)`r`w zzqz~8Crq^5*e&~nS+U`JG_HX~`)g?dAJDlVuE!fzo4N_z4Valz|V$uLxvAqR}WwC#McRQD$oi8tMZ<#gh5@DPz>Hy zqn2JDY6EG}^QBPufi>Fb+Mq4eliJdPbpcGr?nB!Tph?Q6A6NtaW(?P~3tt(o=wPw< z1HU``*Y>(Vu2V<^>i{|lbfWFGxleAww!bXN;vaZpj@s}#tyTk1Ksy?MV6k4?_ahKj z!{aaepPYoclI{HLDci@OLBb^N|5b@B?}UDMV{dozKISMz2#LV6r(@=6{4< zMlcYpbyU~(n*uS^Z2pRVC!w}*dwI^2q_E9LBwPrBuj+pcb#HiWkG$MMK3vfvXyHZW zAKfwirYRN0Ka`?U*E|O9a&~*un+pV+hW3{7&<@$$?m zT;H~L_>-*fGza?;>cmZ@ZHQ6@DTyQH2}zRx$~P4A_!g|xlO;K7lfxnlR`Hf7FrjZZ8@;yF@q^9 zM8(fqGYh@a%Z^9m*CmIKaY_YnL0X7&U`IFess;vC@Md3U`u$s&a`XvI08Ii-^DzIU7l>)dP&a@l^5h}eM7BFWIiEnMGnC`9{uj5*jp zV+SVn70STMB43UGa&pTXM3P#}!P_qFe1nFF)f?N?L{r2^L9A?{YZDU(i^}Qp)_1Qy zi$eVz`Z?77Zeu0*@-3o|utIH4 zhJa!QshK(Q4brey8;`4vrX2>+PS?bPPgKjz(e*6{Lv&mRnLLT*wYVp{V=792eC7R< zgy6awMQ(*bI_|q7r;-;|*m+`Clpun%-ybQ$IlTJ7h?NU)okh1xT_+`}qy*Daaw}I6 zMesBAqI5c~BY(Vk|$Seg?2gX{gIvM^6_WYU;#qy>_w+)Ex?$-6=H z7#kp8utgbEa{Rk1ss}2GBJ|t!O8@?M;|^xRn9#`WRffz+=#J+o#qgqn*VDzzZoYvV zx={=#OJIZqQ~Oprj-rZCl6bNq-}VZVN{%3eP$(@G(c-=@2uHT6r{+?v#`P$CS8-w} z1~XS`fzl&LL6jg$FOACkxhnhRSGb|38&(oA{x)?7S4yQ4N0aNbgkdMDwDs`TUw0f{ zH2$P87MEc1j9+(0HGFaWjG5uH=SvSIl|?~0uzCT|sJ$?0Sl-almaPY*4zGzD$BN=` z2`1lgdQ-CHOMpCH9H(<&lCa!O<-M;m9vc9g&bLYn7TT*nO%wA;y6{d!Ryv2fa^M4E z$twYJ0AP$1UZoeRY;gG z6*kNMC4hWbSb5Ru_h=;lsxE(xZIMb=>4U)Jxc6padpdy=%`<4k6QPkaM{G_{vN+-AYm28QCb#nZ`W5<2I>UL& zNoVLYSEPFLL=Nc@jMb}R)noAl0q~D&jv?;3e+IYczO-^EA2f`7;J}eU#e>q3=Mw2; zs3||T7V)zqt`n`VGCd#sutD8zw|aOd#v8X~fAo;%P=_FE%ghZp!&@BX%<7>YXEM># zi0>KdX-p)0oH!U#_^p+-Dbk@h+ee^om0(Xqy~G~oE6gXN0_5;D^Ak}H1pq~=UjGL; z!<~gII8cOD4#fsV*fkmyil|Vy3vC8q9%=XXpSDLuZ|rD2#VKPeMG_=#E>E?)mb}wLP_Blor^~@ zyK1P{qbGaa_^zQ|cT(^5;6R9^WAreSdJm3)65vS@RRYt4F04{S#xhPWMO6PXr#Wy; zX-oAtj>#~s$XnXs@Lo~-odwpH3JX~LuK{W-hT#09(BrTlX z)#jI#W4y>A#ET47mcM+%uH=Ao|MJ>=eSZkDc`{^biQ@}QMH#JXpeV#CapP$~ptR}N znZvr{_cg{K_LwV7eQe17J(Aufj**{=G+GrvT8L8OMooYr%k<~Oh{MZkd=dVT!@h@u z!6w<9hd2dbg9-7z+$N4GWa6L^=>ZGUl`=Pvv2|-w1RGE?SmHN|iM=0Zx4h6Vk}N4& z5WGutzHOX|V+2!?Mm+{Zg)k*yD3=-G~ByMiL9obGFp zG?mj(#G9oqM@f`W;89?Xt+XKISt9jZQql&q~JSFP!lU<*%>Su zN4Dvst+T8)3b99>;Wr-}a-=*#U^xvFiHkO`vsg|;#og-cqOzQZxyD76we=|u8j@;j zOsp(%y8%Y5TS5Y%W_jrz82L&uF^#N%_BokDjzAUE9$!sVh%d1v!4cVVx@QxFiYf%| zDbC9g=BhAMIwg%Dd*MXC6n|=~?kXO!qB7!Z%K5u<54LQg2bcOg>UKrTp8c0=5ay01 zhXt0urFe`{OI93Tpcy5wtALEGgV0%L0i@QB20pBe2g|yP-v$HxtTq5tYes{)e!gaBTt6cKpSi-25J1@LdJ-^kg|T3=Mjpc1R30UG z9laxTc@d7d{#~cbhAfVgZLt-^mzOl+6oNRVN(Jo1s6TTX z{95~tst$XL`kI~4?s&G$S{6$kr{AT`rWOMNxvPbx zI)k8Dd`lO(aX{M^`URNw+phZnuYIm?)Q{_2AgdK+R75QV<2SR5>hccDe7l%`C`ND38#Jl=yx)A z?yq&L`hpKlk9`i4HZYEWoYOxI;dOw)r)QFu$I&@qJBdQr14DSaF5;Q3%E9=uOVT6R zoo)W^y8T2Yi%dIge+AlYM$UcUjj))Hf^2R$S|%%)r7&U#rrVaKtARqq8RhROR>HL9 z%MH>;_k~rB1unDzchf@LEJuZu$n>BEC6zLfr=?f>=Q_r98Q8b31_Y^8v7#WD!TsblZ zWRALj-J_d~j)7IJNl)RiXdcLR3Cn5zr zl32(>(;QdA+?#`jE9%eSUTAo1ST0N7F>(Kv-V_?g$xlaG>`Gb2V~p{bC1c38{ImqM z!3?t{#3MhyM+mbg7fuxFMT6JgmUxUj;*g#q# zt->_4Qvy%e(C$)QxiY9Up2p~u-Rsh{UFKXKDU&t6!AFs@PV3yVmK~2z!F4#CE{EP6 z4nmKl2Buu-%a_GgSff;>QRyQdVhx^sdL>^w({r?X&C{(RN)NbF6w!QDPyg{;co{QL z%4P>j%9;G*{BmZHl*JB`mNCOMiokF>krd7dEDVfbkcbiVz>8Qy|B6wF8XK~Z^B^T~W)r{(m-!!?68cpeTqEMsToIik8eKw<4iTZUlfbP5D zoigKc!G0=-00DF&P&xaNW841g&>+CRgdXnd+jT6LzS0K9yM~18W_MdGTGd4b)PF>3 zOK`kpXpn)@M=@)DAI(_4OTIl5S!mCcZ%3Zz6zV(%yN4#c`@GHGgRq3f6e)YA>q(dn z`?hOYpdJ(pgFAXB5?DeM3lwM;mRa$f^dz#k)-eGc>9h)2#e+y5%lpj<)t4fC-s*#} zu=Kn%XNY*7qtPv7r1?cU<8nbWHH?&(6(+sdO*8VA%GY6iFle6AM_Ca*c7kWPusEId zK&>2Z(GYRcy(5li?TpKL%~T#~c~+S8VmHk$x79eO^+?go6Z?qBclQEQqMa3oQ}x~e zB)B;Q_c#wn4dH@|s-39y@Ilx8`uxnM5K0Ryhv{)qu9nc4$3F?|d1kiRj-T%{mNVsB zGFI&w@-3TB%+acIb0g))E53cc-FnQ@sNRQk9!OwjFd6n{58`>J!azJTgTZ8Gln{80 zG)5@e(=!yq5Hq+KPfsqI@r5OW^1pyD`G7q6gza1AhwR!Fo2oR~;a#<2PXwUdyCWSQ zHTT}Sdo6E$rot>ev|t9oswsoWbjuiDuEk>UFI~4XCo`>KM7`>O#*Box#&qBmz=Osm zG-d#e=CtZ9n>PnOx)V6yJhAqNdB~y7LeW()CYrbz#uhik>xb{uYoK4Qra0x z>N)(ddbZ>jpn)C6ujfeGN11eMxVuWGa);BcnH7s%r_nFTDV^~&-UFKVG~SC4_S0BT z?gkv>K#eb-2qx6{FrxTSV?!0)DvcGjn8B&?ZX1}1e>$h@&|Xs}&_ui~LQrato`AO3 z)x!sNyg9J?jFWndzh~KWFSz^}iXBBK>>WU>zBN;&#w5PPw-!Bhn%?Y*3MD82zGO39!Gdbr} zMKrL*CLE1!tB3~Q8wiE|@iepQj#ln%Z>zWJs7{IKYWG&OknHQH$qfA+dtvs?>FHj2 z)g7((GmHj_Utaq#RtO{{E)US$Ww1Lu?j4*tS5!H(M5Y#y8(HsTr0Tyr``VJteKdC= z_!bYE#acl0T;44wgpg>p&6Ril6!5z<3Kr4@xB7LPWu`XQmX#t&DNi=aa*-tT4onzc z$_v9|;Fw+R5?;7F#x{$(`acR-{-4-fE3vqnG48IDNa3crb84SK&@+3Bx=|kQrURZr zy}EFDaU+wM!sD6w6O+p|I3UOXtk+oijVG&~?<>vqa9U@YyAU$M-)?PZ9_N`!K|vf*Q$X5V;H*5aLb zX4Xzu9=r6@v&Oe?+BsS~+Bs$eX(wupcW-32)(froFh<{uTN@dbH(+L6g9|BJAH;fy zq18w%;bvFRBwl{X40mT%5{v1)t?jKm4aR;-SA2I0dh4YhKH;G$%sZ+x#(i;#+s1Mi zL1zCSSp4ea@rq+9p>S=!^8d+)Y^k4}&*AK^}uUuFO@S{3o+))Lvud6Iq#8y_0oL9Ys;x3^9!0XzH_2>|F8$%&?jZaMi8D8@` z=A{e?lVIFN&~aWnSy?ROA1N!a*DVI3`b4Gcl1`Yxoo!0Ru}-G?b!xYVM{&7Vs3q>$ z9#Y@|$k#XOLt~?1S=DM>Y`~TuxnD1p9Dohfg#$R)lT*wY)rz$Dp|D;zk0<~kUX6uy z*zzL+>N`#Yy&7X6^ZjrRq zEvzbWD7M`(Rg9Rh*EV%2PG*|lMuy!asTS$x0|;+A`)}1UvWC!hC{^#tBb)1Cw?&!e zANgUoNO~bnbc&P30327*$QQ<0s}jaM2(CkDOI^7KcIsjCyL6b>Ei4UQH1s)vhHfLq zz~?-g(5SAFy4wNEAjAZd7MYZ_Rw}(m(6V^djqnZptvPiFIcZYkNcx>1&e#LTX}0vM zcO?CNKoEfJ9tFi=U1rG0hj^b)tJ+62Yus+VK~+Ga_IZz77GVJ-;@{HBZjtPP=xoV_ z61NMO6CLjV3~f7r~Z~z-4!oG)A@oKpzKCeJcPQbi`;?LlWcooYm1#*%dld zo8pRVr&SZl!RGo`rPfPatRrZh8YDJ0phlCCW;aT-G9CuK8a8curZN%>A$)F&f5SJs zP_kQ!kB8Jp0(!c3hsHP(@o!;gFO%+t=&yW`x*Kx933Eb~Bo;!`u8Mz7K0DM_I{bF*sJR7uCi#ffwc2#@NF@=y{87Sr5S3-!puo%PV!Dgjj6YUQb~ z(;@EhpocCn#O=eo=VBFSt9`I#cWvuhpyMr!+C!}e8qrE}50jT6&ax-$;^RP0tyfak zzI6m_`I>?ow#golO>8(VMQ^%w1bqZpcbm z$b)}>!K5q@AwsP22)4g0@whf#4M^@}tl+E#1b5NgnKjc~Xxa{T^Fdr!Y}7Qiqv|kW z=Fx~JGRj>wa>pCI&*9y$vksvKlTCFMZy|uNWJcS#3yEvH@mRxzC%28aXgG-5c<``1 zw};}X#<~SJ6mUY(Za=(XdUAN(lcKP~DQ`b#eZY874 z!h73dW$ssOrI$iksv%|R1iyWw4|KGd$)(qa5sC=SU5i|WpjB5Gau)hFceP0&;8s^Q zr;8~(wDqDbSHWL3CE*e4w9?=PqsS^=LdOu#0)>ibmEywfU`05kxL$4s#QnIIzle}p zz~&ytxThYF!b@}K)z5IbGmfyQqS#njaocV*{#q6aD;OF#e(x8ixuX~qJO{*A5(m@K^EZ9gp+uy}KN@x1Sp_S+|36-TQ%3pwoa=%FY${d23d(J;ZpN3{ zK_A-qr!reypAQhKb*kuMAn=l4gPRsG}=hflv8A;a<4*v|eI5ZfxV?@kMBr#C$aipZbRd;9yN zyqLJ53Ts}bb>++2aCvkR!;HTG6pvDBBP-$pb#}2;t^2a{j)i%Vv!cI+*rHajSx-y{ z!S4>n*@~JT9lRcJlKwQgxxjHJ#JU5=?ct3GPTGY7(r`zin-(0O5vAR)ywkFPEbs0# z+3f5>ssIg)-yT>f3sc(8Y!)2-sU~tE*M3;Ef%Sb;@2PY*RDj@m9(?YVE(F|dieLTT zku~v1V>uYjfhn0+jQ&yuv+1`Z67X{ax2u*VEV!F09PhM5EQ`OorOc>)1BO#(qUqe@ z!DQ2~AHm;8htCC)W%(nnS;HmrS>913+Jh!I1tOkOc0AFIrkAZt-0B!kUX5|l@_J%# zRwlrBo=LVr=BW-5JZ^b>D!`1Fme&(ovl1Sl^GuQr5>IuQpm0k^jmA;S^ylL)j@l1% z7I}vQq@%U~)P~5f5dVZ|1&(|!>X_!$z;-fz{IKE#G z)R|k{n7n&UiOX~ zX1nh3-h$g~9UliSvw|Z5621;+F2mcJSiI?s+ko{g?!?O!Q_XF;25Q5LQ|QXoi~nmy ze6`LyltNOE{iswY*Kly%jlbT^F?BpIb?Q3mI1K8{=R#oAyNtxH{#^7F8_rdSRXQ%5 z3&4zqm&E4>GkCmV$Ia_Nd`KtjFvH)%%HwH)V_l#j!`|bp9t%2t{Ot3+D)U;mg8>Wx zwgP$L(B7g1WamrXak1@tG+H=u*FReKl&@nxYVhGO=DsBJKB2;aKd(KlCEMjL?_R^U zz%eGCUy^w*NsuJmS>i*%cBAs1iApP4I98`)c>c0h^yG%D%e{eYE_o(n!hzd*eT{=e zav3zx-7oy&>2l&OC`&#mQwib}RGLQ!%v#b(by^QrQ4xeo#$x5gz5UIOPUOplAYZy(@}aUn7FWu`uEIf`dn$6f=z z8e+soF-)@Hi_AKAg6ZEtbCY4^bA{G>RLtawBY%SsBlZ!tWTNt+9x|W1SE=`X=nQ&8?ov*ljF6%XEDCf`Xqq zGq8b5JOJVl-*C3YtYslPpe{G*n|@8>qMiyVeE`a9-4))$FAg@ z)|mCU%X@I%z}C$ycGSjL7XGHw@JMf%Nt`>|nCsnSZzT0uOrmh!$g`##P2F8rmY5&T zq>k(f`Ur0z1Nm6--*m{qI#rp+4Po%zu)Z?)2VJgrQ@k1R9?014DSYbb+YXQF_!IG5 z(Jz*@x|82G?KImR?H0H0r(Vh-p>C#)ymomo6MPb3A|J%lLI#A&QHUN+>!#Zsvah?t zqVYl0+GRm7_=Eh@L*cD$q(t>qDnlW7D5aZfw}W2$>9LP4hqyzqKS)-}wX-ifw}D15 z_=r+=5EMx!*V_rGGSBgkq;=D6J3jwwXRN=aG8et&uqTPpl{ON4eIqH>QLfUhTOUYm zwwwQS(h}FkHy{Qe$k}9y)J@sQs_v?zbQ4=L&B~z0iAmjLOZ=sa0TUi$+w#bNI#P0B4X(k({V#q&GCQ>EEy7wknRf5szvhs4;8~3v z%Kks5Pz%6k#yzrQ4(}}4sE)y%5B-2upre0Gk9Yz2MxF zfs2{o;S>Qfe;tk*HXu~i0{D=|A=|Gd8XB9rp*!kwrX+}Y^q>*B*S`o;cxxMj_$?Q5 z1cjHx1F_VIzFO5;2#F&0HwrQ0)FosqF~8gGunHN}C3w#0Tzlzp*TJv~@IQvd!8N)A z0^;Gm)g%^Fiwo;ZmGbmq?p}vA{Mtl_FZ*UQ)=6`${r~`U_iRr+9uyCF-I5#=Z=i%h z0Cc}L^~7S?VPZV+%07A)a7lKz*e@$dsdX_L+1oN0{k z9hb{W@p69~*Ts0;{k=akiZ;^Y;fJZ|acz>Wp6?MLX`V@VG<_6lT0MLT=DCW`-3AB0 z=?NXREna>V%{B>&q>jQ(%ZFQQc%G)qe6*q^$%CDlSc>F)Q2<&&A?4wbc$zk@r3sa! zR-1@G>z^QqrjH@bo3~v)(Q+`J)wQ319AOm2P|Nl4E2u_hBy|klYaTl7Yw`Sf>V9Ho zGBf1+GBibxmNcj?&XmN1`@j-@pO6kT6RM$@8(O@ADw=H~97!HkHZ31+tL1wT7tgAm zT9P(AiTkZ6pcBCia97jh?UB?mxY?-ll!4{1t4UJQ=Am%!-TA8@h4-#ioYdQvnb~3m zpWcDR6dqQDBm(jCV0yo8HeSc-(yTrfSix)5nZ?8yGkgl$*x0xwi`g#SW5Gc@(5v84 z^kCg+t!5`5gK13(1c({E2QXx)dQ5~wVi_!KTs?}VhsM3X?Nk-K3YrOCdN<6ir@FXZ zC>@y|qJ&Fitil#6-PfT=224NfI!f5=!;TvEYOYg1r{x7+3?S;^hZQ=XdG6n0`BLIR=jnluziQ-HQEii;u-!SC@;#gFNUEU@VVXdz zhtB_Vp=llUyj57}n21<1iQ6cRaeuoc6szb`>%qnYtEDpg%PaV*l>bes)Z**mCm2VD zK{6xh9)2lRON*wC!s?B-Qx=B%_tW=13zQgZOXoVdo(JQf&axP5q))Sl%b;24zHwU@ z(oBu@XLsS#-j=SG!#t{@hqZ@?xo<%=J1R*&?sBR?6`k3znRI)xmEt=yk2zI@;_boi zaT{J0d{S)HGwNzWFdlqH(zzI;Pm0F0ul@x2Wk|d5k0JcTlz`Hp7}q_2_G{09YEdvA zeA&@WTmjgPZVlJdJ;&&I{$qeZiPeAoJ)9Z?2s-KX55R`5O`92Dup55txV##Z5%;`z zQ=e&ouyXyjHBpFd6Ne$50LP*D642!*tb^-?BassYhoVF($?E$U-pLVI%7z2Dlo3%f zhO;kpS+#!gED#*`vR?;l+kZ*Vt?A-X%2DqnH^0m(zho$6RiZinAEA-bMx{U}SE}2~ ze!Ujjd%n)upK0i%>CoazNh?pHm9nvtqZsUZ8@j487!N)V=cvD=^pgIHeTWRIwCO>X zH|;~r`buI({bJ!_)|Zm;qMuj1bsq$qVrCmwKY05-h;jngMjJg{>+a^7m7UqD-t+QJ zOV%o%!^(TFr)qvV^I?5(}^LEq8RTi?uNtKZBI5q(<}Fy_aZUWAmDB4N~z zQi`X(sUNIrIxM^8IXq=`bfOp~sS?R-!*B8>4pn(`KbS4^SGgBm)vsgLmssr2E8gM{ z5q-sEo%-lC?+kf`3w~l1*DI>-k@^w>ugjqT_rc}?iYsb9yjtGs4;zFpf7@t+P+{K- z-Tz?{m@mKGAIus%tp4kPi3=Pqxdbg9lnrF9tKSw%K&@MM7}kxkcILFX+fa4?vfbN6Yry^n6=;|O zRP-TZcp5&ZuGvUlUmJICq_GrGZ8m?y3)|a771>~O*a}Df_}f#UmvR?}1|lB{_8+v2 zz@zXnwP;g`{aYO=b?J4MHZgm!s*SIKf3}m8-#Zuy0n~6P%e($QtAE!I4;}72i_a$I zVC~LJ)Pna&EFR*6GVV%o`5-(7AKj(_3X@VGb?yaxmcdCq>MBQ1+nF{1n_mA*Yni3E zwrer%3QA59?+lE?eV>qJ)^FQM$q#3R*8niaSr=g|H9~73;jmShAzuF{3lB4h)%35} z`PxlSd>taQD>~Kt!NbZ;V+4o3lSgNVIz-G)_!WE=tLa~!)nOv>t88hTT#~DYW9I^2 zEt%Kb-2S9$dbq01ZqMs@e`XpAFspG>E!;I6VlO(q4$|Xa#x`?ntHTkWY)jo(#ZNH) zW`GUiXc2w2y0Z{EoYG6RJ8pXuX2b{>VQMD2sKn~ zqtM-gqI6Bd0_jmiwKCTP^PR|Zq=EQe+l>k1!P$WtvaXKb)lyBdO@#cZQCPKnxT%)! zuGw$NqXzTa{lfxk!T#CtX|h|q=aQpO;3!?F3F8MDCAuT>Gy}Wx}wR|fqU-ZCR5UCVuzwv ze6JC7GIK6BB%d_WSjqFW?!5%b#{q#M^K0_lLzyob`|LObRg1}+_pwic0?EzFMp9S5 zX8$FlG{E;vT1(JXu>->Y5ppj!IW~=i1qfTdLGbdLOku*)cz|(@HxF(^FU_Yu1;Kq8sD-Ur3 zZJ`(Cc?a{ByC%B3p#x{ghNNmRH7jm}6G((ybZtLb%z~FzGmsQbJ>S!Upg1SNfz)QW zaRuBY<+*-6l*uEDsZPf=l9m?Gan&X;4xYRB0l5PTp2FKDpqt#}?TgIRqO1A$y2Q!7aCjJOHc+HQ{V|`V6pUqM)7@f%s2c8>g z%pgCU$!!uipct2IuY7c+gu+w05wwpbgAJZ%M3%`ZEc`j8)P~ZrY%Y-qxUYV|F3E(&Z z4O-ll&)l5;J$-D|n-9ULz~w`&y;86$7W~5Fm=yFrbUo(74mGoaYJ|j=kG%NW_0Q>? zCV@vwxXJw(HqBbCh);)AnurV?q&EBD=SA8+GrEjSJNzJQb<|7dVT#;3l62!l(U$CY z_8s=#M~4&LsU?{3hy;yA>fBF8?%c{?6C={Z2q~+i<^phY>i5(!{j<^#CpL|IO|0qp7U|neCVNLK#1CA0# zQzLC95@j-Xbr+Vghnzl?eU~Uo4(7W z$BFSboiembbpWy3hC&qJ5}=Pq3>O{TWP(>3v6Lv98f`1~nyqnXPkAFTl}-~=rK_c* zS4V7iQ&B|OIDWIW!3YH0=pCRYjD4fGiA9~5-)t-etKvc{&^|ep6>P449tkWWB%0f{ zHyr~GDvNRFZhW=SxJFl1OH2jO=H&0mV|rr~(|#ezJR&=XNnO~qxNK#piJq8LNleK8 z>n*KFjy8|Bqq#04#zu?4R&hU0potY!nM-fjq1fqPf;o@+^QN|?YTIBMaA}}w>#J7m zspp}I53?fT#|kzvL#i67B_GO{3}pc$PSSxZod!PDk7! zb;NvSsyyBzyGv_{Tp_cVdo&(MzX3yMnDG^kqwC{i?S=Z z1VoUw|EhXEKHa5N5ygdXzXl?P;bMuK5-ljwL{xN3(P;N#bf%hK*_ynwx${1;M~b3T z&3d+ks;|o`kgf^QdjEh9w#Y%2&hIvfiYWf8Nkrc`_NJkYFqMYe)U4pKc4hq7l$dH! zZc0t0-tzx7D#JrNo80bJNmV*GMu+uPiGZ*W;_KMW~J zjHPw2Yn?Px#E3-mHHw;3;-^F<5EC|rj5Hk0lS^5Qm(vytQ-Rz(&Ob-4QHFk10l?Z${%U5(63Wkj~S073d{ zewVk$K{9abR%}fsVTbkx;fO&nEkpIUB_9Kc$%(U!-R{qt;qb()S`0T#Ohv+VB{6UL zV@**}_!{1iAG3SD8!sZvc-iC&<_w|Beyo}0F;<(u2-mFG}lgyqQ7rMVJ|MIajkc1Jh=#rq|w#9H=d}DmLurn1AsYv2Z zRVaBM7{tGTbXQ=u(;=_L-Q++R)_i%SJM4$`K>6SFWW^UU=oIzfL z;8i(U<%pQxb*3pbN(>esd;IF$(ZiEH?$z!Q~vjjWQuS1 zjID_Ft>eUfzn}c#!I5l~80L01d6@s+Js%tqvE{cpTnbGa)>=4_|Kp|yb9Un4S1NJBpt4@ z6?vg;aRPeVFL5jR(~3XcyM5qqzW@by1vGBrd!SoRxvOn&NJRVC*qP=OqOqV&C081iv+d-N|CCoie1Mc_uixAH_e^-TB$ z)MHmP9JQl8^SbCBMWxH3`AUW()8gWoPa3D*UkRfUMWgqX&3q4P!g}(yA(u5Wn-5tK z)JYSOnb9XpG*})l#0^sD#GkYrr2JUCz5j0nIve|*2VcaDWK5TL z=tRa&U$=OSW6L=1^lxV4NH7jc0PAXUxahZ{=c^^fvX<<`uaL=6Wm*ipqCVV1a)~)iaR9n z;?|P;ecV?;JZ!Xs@(C&Cxi+%6YT!+s~e&^fa$S5_VyXghs({cs{QKI{?qu=YB4w-{8iPU2i z^q)`kICY;zNuM$3Mpt%9+)!B5ct9wWN$mVpVsqb8o6;X3Elrpnlu(tErcZwsH{Lfy z+AxGjV{8nLo_GLI1fjGbC!~Phqy_vNQOLFSf)Z*1epe}dAf(ashlQ8dn`me%jcu&m z7>2Cjukn#`IZ@fimh5=cFRl$!W-P1>IC)M+X`kn@5^v&51XHA-t+;Q2z^sA~355sK zz{=pS-2@r~z+aexNf1v%cZbh9G!~+KmhRFM^84r9F|Y zj#oWj0AcfcbxvIu{hgi?@J4K$Bxb~)W-KN^i@?tGLWT#pec}Pm)an2~Ktd?>H66Ux z|9oGgL2SHQ^f}R3ZwvEF*1+mipX6=1v!RQ6~1VtY7a*;`niF_V!Vfk45PTPsly+5~{fHf}C&o`f>bTMNr8#1&f3m_J#&v=vl|v4F=*_?Ld9L4` zkEc&q(7G_1#h|A|^@0{yTLCgyZ%&9ps?p57H6|*?>9voK>dj7z(U}a_Qe0VR=dAy*76iaBdy{JMq!*@NFHCAiO zhxKdEd`;SfC0Fi-p8OUPX0ShvPYNzZO~HGW#f_{h1Pdr@7~bVdXWQ}3AM2dD zE(C6R8VwA2Fp~+nAoAGc0Ufj@%`VE}g9lW(7L&0N!M42G__wW|JoP8-JJ(rgKcO)N zK+py}Fv7Ij;km3md*>CpzbkgD!4*!&m)TnK(@=MVH#3ivIv zHvdVWO_NzM2J^Aw-@!bif$&)XM#%olDnUkM0MJ@7Sx&Uc58_;BegdV}Ij7IOXtwws zI5tt#zO^roR>AzS`hLu4b(!rB^TAl+w~v*P;Y&`iYW0hHo3CIcK3;u7+}63_b(=RR z#DDFqWb%bNk&ty1j^&A!ZpL}>`ad0-?|hre(0nS`u3Ud;3Tq?>?u8LNgjoT~AC4s) zOQP)>Rp?Ek<@)st`blt-?=nS3rM`3hLAK>!^TV@#%nC_4!ushGc{H_b&I=>uRP+xl z4vd2q*A*T>0EgfewCVv84v8XV|d?49zV93&9c z=Q*dk)*UscrNb@URKmvb-U*wAXg~HrF1hOB_9jc7X4;3k982R%{((N_k9UR~>NW20WAcSM5sHxYelV6>7G{@}0{aY@iEC(&H;Ee5_b&8KnSrrKXAV_@9lm+hpIL#rYWV?c zNcZZgYpv-%U=@RE%i`3J##(rLF zS8(SvRyjEStkf0@3U?^cYYf}lhrOB=lv{pj3{S{YLbrIa z2GZ*BdSzncwIhDb3Pe=P4qIHH0=__zK4_^=x1gK$!X6AKXfDNn*A;MlLKGb+OEZh? zzJBbEe4$QISXb1UY`JY=WOVz5_Zlkrf=(So za#G_*!V;|ksZb`d^VPV#0C)>gPnEW&Wwd%JiPMjNmJ4Oii4+r>nZ_6iVUB+la#$+@ zzg;Leo9hQ}jGq?6Jd#lEr66S`IPaVdpX1h>X`Ufoy88)?jn{{%(+?gUfP2n_cK(=~ z)bsvAxp0O=*n-Sd>G2eYgk2h55uMN8Y77I<{*&oR&EXs)q!NrO`h{g3qU%D@^C+^} zLy$@xS;riVSskgDaR(AE!{16$?tf83R!QlWX1~IQ#2dR1=;BedTI3~bE=c@$-(OCF zgIUJk*W;83fDlv40CJu`xe zOVY0J3K;ZW@ZEDjKiic+hwlh(gX`lZv0MCw2FB~ONAUP|ruRs!5xj!)={OW1Z{&is z>8FPKyk%}bd0sZOKA~A;xR$FN5*Pn-QHhj6@)kI`?Qs9IlAsudV7d4Uyvi0cY@*hH zXkqdhB|NQ${N)W`>t6%q@j~D=Jdpp((#^)+1X2MFb0!J?8cT*tVN6P0y<4*d)&vxl z;(I}@E<;O6^`z%^B^Nhk(RZ!{fA%6cbA+drSwV(bTc&q^*u1eX>)Al*zu>!PzYZ=D z6tFlob~Kl8wg{dSL-mpGyv2N-lPzCHcoDTNM$bU&rq9Qqxp`s$J{eJFt1qBA@PC`S zEm8HMeVgGuVuY!b;b7LFjSFKBe5Bz>a6$(CSHW~Ih-U9&51c4B0r73Mkprt)O(4}>b-$r{4 z`!Q1pTY`9FLWtv@((IyEuo4Zv6JBqW{*3oUV6xrJ>4gnb_2fJemgZkn#QboKnD1q8 zoFc3O6Dn*4rYoqUxM@OODF8mQ7@?FyM87I_Pp3Rtc9sW?Oe1ss3zT6dN$lk!h#-O* zv(=H;jA!vhx*pH&5X9f!j=&tSz*^`(=rMY96q@vzVV~4kdZfPYNg8#tKSm6&IJIb5 z1VvT4JR!z^U(%C)hKMAd5gTdRRL^-p^mX%$27PSox6D%L93_862xtBN>hakZ#{n_X zmI68Rg9xTu@G=yTeVt=QAB9K9KiSiBOQLb3bgkJ9i4Q_qXvk4DX8|q4^?)z=N8Bw+cDXGO ze|hnHM~t0Rr>aN>gyt?Bf86V#M-1`jjvZajp%e;E-zlo2eiX!k}5^f=Jl25P9Ec+n$>rla-K9soW^IKbcG!N{>`rEJ8C zL_{a6=WaU3j6V*Kj{j}f-FSM@I8plUzDV1x^~;DEZP7i%;p3Q?DDD*1_&(;%zlLXi zSsc}$p|ppcix>$c9jTwR_UywK@4w(* z6k>)<>=^#{@CW=sp0Q-IuJB$`2`l+NCKt{iO#8D~qx<`COB{z3ZLF&0-3kRgf>zoY zHZPS|1%phCHkVej-Xek_*aUXis`|~Fa^u~*UNs2U9)N=2V3T6^xdc;lnJiv_Mawuu?l`OnGjz)|$Z>r(E zNd!Y?9}M??3~1)wHM(sYhWoUNd^c1)#bjf{y30^p8zZztDpH)rI>cZ=o?pxxYiHnn z9WoV@NfG)!K`rTKaGst4$3Ftk*Vja-bI%%3Hy*6_4$zH_ZWf=c?w7W5YnM&9kG;89J&`+Q%UL|PRhGj>35rbELoOW@sSk@6QT?x>SEHEAGX&>nF% zQgCviGGpalbqYpgljik$$}pk-@Gw}u2`vxFSljfeo}j;2@?T$#vCWAUQTsPdk4Ku& z;%&99vdb@(-1!r;Jo13IVwiJ61>0rSOn#hZ+%L5(c0ZDRLS)+i@od1it*z!HU3yMQ zP+kmB{TIo5h!tAFm?pYR4CB4Fq*h>HeJj{yl_>1>xyU(f!s*6F&@tzH{ z!m1ck#2Hhx2f^BI?m=H_)ksX4Gvlyb%q&aoq~6&rvo_PV<=>n*3&(5UX{s@^m|5%d(k60g@_L7Mep|+G z-xQF&RmmPVzvEFW!~lS*wSm+s1BVpCmClwj1|RpToS*{5O!KDSSo`BX+G1s1pAWNV z{0bF(KprUcj@Os$78S`t%jba>q5+w7$5+$Msc}vV6>Jk3B5o*(J!Ok+p>Esd&15Ol z`{SwL*;-Q7-fidc8P$bhxXRdo|o(>`?F_er|v(AQro_v0Y}; z<%&yxybBfBI|@8$Em*sl)Aq<0GNSd}of_xBP_;Y48<%IBR@g*uZJHlzpIiLzbQMc@ zM0xlO)iwU%Poj;4pKE>b=ZR%tP3F$#N@dPv&ooP3V&aZ-j3Q|wv1v6gR2c2_%?W2Q}J^s0ZFu= z&hSaaB&1<$g1m@Wd6W)aD=4TS4t-K)qx%8JfsDuN&@!;z?rW;ZRNZkSa+9uKa0Bc$ zlOme8L){=*8JQdTu60S+!SP#8hQ*pMrF0m4n^PkBU0x_BS^N%t6j}*w7La5LFm14T zZ3O5c>Du)vVC5fj9uKX6B-;Y&%w4G1p35ffPw(VM0CCYg#77CO(r0~I5zh!e8fWzo zFbr!?y3C{H}uzI7x zxBmb1*$A73Wl=tq#*u(~OlvB(4{66-UXkXnPjQe40ye@x%nx~^{d+Ai3m3WxZ8ZPl zu@PG8krJd3?<=hgew0$5NeZJhg-eG_h=G%#mLF=9O)onn$>VY13-|CXX{0+fT3G6- zA}m^&bMnG1ejZCUxnXIvk>H7sVu6UVfv#jXs;#KlLlL=f2FA;EEg1VPm1M^7q?Ft` z+ef@0A}RF3n3U~OfRR!G{|MG?`W7IWvf1Hm+zV%7qK=ph2R9Jo7i zIT(D<0--npV5G3vLm9d7VBIi|&jC+QUOHuX-Bh?P1glxK>@z#!!kl?_%S*3_+UwVQ ztQRqO38H$2chj$(6j(3rrvZ5s~dbi)` zYSzhkebD)$CiUHJqX1AqufJ;2W?GOrI$jZ_ZS#rcV|#mWa_aD~WOP=R8d`QjZUMz-3yKXxWkbdrDFrEjN(&^Brk?9W z{5>5-)x%x!#9}f!H*LA%Ip41j9$Kp3t>Z)uWs>SP^90iZ(&u%eMpkY}i#flfG+uSs z%I8+)P-*=Q90Z5Z1>%xL(!%wj&2ZF`^KKfnJxhd+{tm+S$W~=5nx$R1%nlLv`t`2% z!etUSPiagJJ3A4H=22VvOGAj~gpXA<4>WhiV)2U>sTRfy-_H!Bo8DL(Fs)K0&;(Qh z{4IokbTHJmOoNnRCqsy0mpym2#bcx0Z(6~Tw`_5mjW+S%w=p%#O(Jzz<~yy#L1ZE9 zD0W9g>G|O~M3>xlYnR^aJ*}Y1>oW$7Y+V*vVB1M>lx}9$x*c`YhoD!t$Ww1ckp@;> zxG&lRi7|O3oSbsCH^(~(HoB#b>5nyWNp<1-4Eawh`v^hF8!en)r=5$v>EzBx(?hCR zEiCLwX$YWJc&8~yut{8kiN?+s-?N2?_RX2q3iMN$cJ^@?`Nd-))an@@?K$ zk$=~r_uCFlS;l(~2GCNYhq1E@2plWRenAxg_hgXmVe6Ad?QiQbz4xy?kY{Jh^K;A} zJ5n;7Xf_1^ZJ& z6FobWpv}nK3^qoqu@%0>C&!((^jz7+W0j=d`?B-isDWSMMXlx~A>uq+^Rf^nQkKoL zLv-dWYcoV-_jb0#(XwTp$dGlM9^)W%BYFV*950Py%ZL=53L}5Ph#r5-Pn}x+X;?Vp zm!GZuGjs(gRJ>jzt|i~Zf~_dk^(5qrour#MvYNE}{Yj{l#-p*hY&=*yqbL_G>GS1} z@OD{03K2n$;bovy92ARY2}JCQrm~$DGuxM~t*zcOm?OqsKhxw`AkS+H^cNN-MdO^4 zX7fB@2IigcSi@}JuwsZASR)a|?3SKzNc8rO@@)IE1m;s&R(Mc3A z&QJnKB>v4K?fRKl1o?5tT-V=6spJ^kKtHdVcsnR>h?mSiZW9A(^qlap9JN3*KD1oO zG!(2gv^>mfbl>zcQ5Y{g<2l5rE2(1u5N~5-;YpHKuJ$ZUzpd z@wyorkZ?z{Lkot4Hqa6==s<8tvU3 zaU5hrBT0T(*VEys&cKvMq<1{*Le2Ca>}t;hq`$eC=Z)%t3%XU2J?499D@a4A}5xwB3~gJov)lLoeCEr zwN@W0i0<{CsA|w9$8Z^4i-I?7okZp5W8f2Mox~)<2zXmv5<6KNJNYVR z5{Q0JqDvAcD-$HHX2%)OcdG;H7|8BA;Jaa~AYllqh^aEnyM+!v_q+inA)#C5$4&5JGep$FK^_I{4Z5oU^XlFS5!DehlTMqJUVqM~b&58fZ z=woB&2X@3iB!dy6dIz055*8-cG|s~P@AB9~-^@PTk1@&(F(b`l#M&Ud zBmOQr6NuRL+{QjDRkLn^V01KX^g8sbZ`)C;ucG$<3@Z$>d7G+eqb8))weCzHJ#Zs; z;$1dtSlYBd+GWV$ce1p=_53~WvREVU#TjRvl|d#yOsUQLA4c%)vm1Lv)p+L?aFjml%yfgOE&C znVIY@gj4n4ay@HGQD;}+&wP}Zt4hb?_>&a+teJdnB;6$YMBqmpI$_wKAFiU0nvfOl zNF1f0&R)gvr)u|mmvq}%yiM^gbFDiYNT1)Xm=wVuaiq@MY|%yv!(+x+n-{|)_Xq#} z^5o@Jj$wb6^V)-_HNst3!UR@>&J@4b;)*RM&;;reD9vUEI=zp=8*2Q_RzZ>Wa> ztR(CHdQEh>s-Mz`6+8@kH9K~UPsV2LtG{WG&Dn*k@D~+X<)54#Ngo+mD*2zNdaw*j zrVR;+{~LmDijK?b*cEP$9BPueT>CHVmOy~jN{Viu$a?Gu4cXb-oGbWS)SFBhNLk6O4E zMrW0)Z2h+6F}gE&k&m3~$>GUfCVBgMcge+iJBpBE*1c$1-%dTH;F#8p#X|c9d;6ov zIy$*s;teI7mHLzX03r!IO3YTNBI#>Oe_ z{awjJQg4#itA75pJ)127d(d7He7bj=tl40NAxdoE@?K1~Mg0|GhrBZlV=%EQTfaSd zv`4R+bmqpGSUesJ6^UOZZZ{$^cB!mswPvZ)=}Gbc%+%hFY)B98Mtia$otxLUwwO$C zNM5>x+z*H*vE4|y3D3+?s?0>27!%cP?w_x;0lHmdoQcm-sENt;%@Gu01EZMu{av$+ zniV>wZvIRuV(%ESjSV^zv&7xIl3}CY4nY|#yv8=zo4iMsr$3c??xr(G$UIolN$mke zv%UvG$ov4H0l9t0c56D>fNRwpjLE{CI?%IZ;!mZVy%ET+XB@0xfA3yJv)%#6<^JW) z7SpHB{ylB4E8OmcBOI*UPQu|GZ!5h?UZD8YC3OyJfOyc}>?-$`O>I(R7aW#je*Y?* zBnBj-W;UiSoA`ULz75Fz*=zUreO8p1x2q8_w^Z8H*Rj0$X2inqyecQO?LP~_-DpoX zyk&E+MQYZ+8Q!HiZ$9HKV05maiAdUZWi&N%BlON2F?Ltqd~nsgDU{k&&B?f8a`3*- z7{t%>AzN|t&x%XpJ9rrtBWx~)zt&h01F0gDCH_LR|A9YsKDu=$AiWh6=QsLs^WYZc z*xvFx2C)V!3KfC>Pb{q7yH#v7#Gi=rJ@BQ%KYQYz(Ts@q8GX3yU9v!U)-{d$%V}AA zWFrlbOIkyhSya4UP4j3L3BQ7gJ!`J=7`i`{HcukUe3+YVT>|NQ=ZDJYOC-UB{ol$= z;&)cFFx*%X{^wpCogo|NicPxs!&_qvy7W5?PJ^e-`^sb6_=Cjp(WPL;fjSbpg9v}G z#`k?G;E$G}G~<>TJLUc{`uNDH!HN8BzdXog2dQyI&?v9jY=}D%>AUYsgKUIDm{^Y~dDZZ6q zF5T1F0?&+c%hu}B-ZF@87>8Q~|8KnFeWH~O5LHJ4;g#u6A`Zu!V@ZtaQAz320&qL8 zx!{9=BdbXTN~{m0U`2t>Z#1T!`)BCm4@LVPsIK%?ha7`Yl)fmHcLtIsSYi)=!%c&ff`0m!eb1Zs&oms&%_$DDgbyQ?a5*1F5XFVCG2U z5;aF0dkCFg@xrJ&9*8LTB9kfpOqAj&gRd$(BlI;ma5 z2YAun1*z_5HS^~m=cC~CB|5Tv=){zm(GsAg4D%Wcw!94&6l8D-Pfv+4jR0NBQ&eI` zgMt@1Sg|+$DF$?UV=h` z);qrDS{T=$pyq9`a>DGDj4-1q1)C^XnSXdXIZSDAaN~y=4GM4aFsUg5ocv^#*qjE1 zIGy>sKA|P1H7Lxf!>lF~bn;qO@zR#Ctj=1HXa|XY2cf6YcWOr-UgQ$!b<9jL^-!ay zD=*dWd#G>pcO&zoe)M64ei>aIesQBxz>kDk0|!YSb?wcqzC zl)=DjEQ9??du6^QJ^=RFvN?yx{1&&Xxp{>)JJ3NimxzI^iPAH(e02mJCrNK zFVMDQ_G@P1s>x3R!33MI;^UQ1I(sYdQe>B$(j9DXHn`xJ3|E@^jd|6Hi^CKDz-rro zHF;c7%mHBphXO(%2AFS=_Q6g(&RylHfGueERW~{zkfJU|P0kiR-Ws&3HYg(b+e%FK5?CJyO9=yJD)<_RR$C;jek%XPzES7@cyca{9N5 zj9qaTBmDRLsq^8b3-Rebm{{W(;^q-Uu4xIqv9tc(sbl%!ubJ{Qr$=K(rya^yH^ZBa z#<&v^zI(ou`QYaHxO5L>EIf6%oc*=?#kE{x>v3jO?g7e&jqn$=c+?1Q&5Zac0KvH( zRc-z?%YWR=MJrjefpr18BbY-qH}eSu=A608ZRpdX^m!r~)_iiBWeKe3of*Q-SKW5s zkk{1p6(Ij%W@g`i`fuaN+!J_BnRTdFJ+)b^SH~|z`abogLN1LiPN%_ReFk6Ie2~|> zvzfuu_fHKGuwQfiO6K0tFGizwwanWfHfrOZi13@2 ziM}OqPo(!#Z)(f6453|h!J&wv`-QMZ=?)b9lxpbR^VOM z)S_**n*__4U;hnCI^aJy2MSKCxs&((|4=7<(7imiq&5jLLq3^sH_JKT&epu|XYL*S zarAr)kXMzUouOgMaUI}KPd14;V8K7*%GEPmNFo4TxUz{M<$z;)C6|ah9r&Gc!J#Ms zJ9#3bIqrggh_o1H|0nTqZ*<&_z2J~m*EHjsv*g!~9MiwQH*Sl0{pvK^RYb@0W_WJ|36ug$m=SXze}NyerMH z&o3^QaX{klyK?%Y@H}wE_AqpLJpVm8Ft-LC1kN~QoKU@3-yXlen^rIWa3nUJO!-H^@zGb-N&A&L!*>ByYyh}|ERFRZ2+PShEu{SzMW4HcW%oC z)zS$nv&)sVkndmMcdx%3(PzrJpkBB?1AchVv36cZF9Z>mJ5E2MQcCNKmp||qct#18 zNl;q)9Etn$eG7csOm2jk}Op7?O!~A%OB}u|+=|uATCf7_9Q_vLvPyq(>_1fk=NU$AJ#@h}%T5HbtBzc)gPyZG&E z-bEML2y;}T6XNU0QJ9R<5)w~CD6nA^Iw~yT&tPB&W8QJcu zVSHfbys*vZWJ-ZC*4Bg9-kt}hF>vw^`l(@v5J-fHYEm*uro0G)_0VkLKQ?oUk#nt? z-*{N{OcFma*pGiOJURtsy(g8rU5SUqzJ)#y)|=~GnKDk$mkIpbo@oV7>4adSGH!vW zNuou5czg~-#=8N=4wD;NsIp0V6{V!nHiKw%ywdD)BpqC==TZD&g)URd3QM3T;)sH; zbV5)eHgEZv8vb;W0ezEXr%2&{fd}{_ye5msSh0IgTa)_m+Tef}XIt|$6d4c-6C<jskFAg`*(Q2)>^J7*i+t`!><3Q$hASPJ zCgqfmGo~l7x3*8khm`37CLc_;Q2;BTPXF4+W9vSg_d%~Sp8bh={Flbg3^41NIOn24 z8)aTa1EOToi;KaHk<v1JPc=&Da?Kgda1HGt%>}gu>~3HT&CVa~2-!G*AAW ztvj$}t7+}9<4|)=ol!QRFvBHs;Tp_(3xS*OmM>)<^84C<;3iazZ^GxwaXQNg0Ts!S zq#$v}4!m87U;0oWN(F(5x@4wv z_1+&!i7`u~%$T&~#n55z#8BycgA{b>j=YNK$%T({m%E+nKtN5hlZfnpdmw3ZC|NGj zYTr5=?z`n%8N=*b^AFsJY}pA39kTBg((3i#iMmBJm-jA&jZ{a+k5!V0+}j1e4p)j)x2%m zaONli314S9)=`k*$iTiq4OA@%ErYAqUR*kQ?e;Yum>Qu`OIsISMvUXDpD>bPg;wt8 zyRa?T0=v$}MCPHwHog_z8&v>JOq*$F(doFgfE?Nxm&`0Z9~cIJa=CVxgOs~`F>$fy z_dL=7AJfe^3b7voMMS@yV;lK>EUKdGu#VmO+x0ohJ|cMfU!inil`dh-3#9e)?=fJa zM4DOj&P+Zu_KAGeA}kp6{k=hf*(Fr5u5_I?+`7o}OT0`|w8S9p-$Aq%98}HZ+f{DK zj4tb3?(DCzMT_<)Y;7eChdQF`k!z>WTQhm!Htf%Xf}oK<*UQl-P2xn?DFaI!hCI=` zjEuJFlDMz)`pBQ08z zaBkhGnRR$xw=Pcpz8(PJ9o1crb@Si1xumB7VImw98a=w@6K97nOIE?29Q)dsDX8kc zBtcPH)IL9rGWbspXA>ffO2t<+J^8F?E^a^#6i+vLpph?|%8czxxl-KncYT=)NmeMC z3ZxQwUq(O9cg*c2sRN>Y`|#?Jcz21b80-22Bc!%#1*;^=|hP`4D$GRfPK~(J-VP8bne~ zc_ra}-lx$d<8NKbAA0zHWCW{gSU${MnkB+Pb!l*<7nO=nc;NJEohm4PzIl*NYb1ok zIs`Qw`Ki7U`3O5Br;J7*H{l-b$e_yhLQE0Z*M5!1&N)zAyq<(jwo5%NpwiYDY!}u! zC?DkJl!`F7jk-bY;2>$7a?@E1;+?Toq>Pk@xU3!x|upIdYG-XMlV}$!p$k_#QVpANl zXfts5o;CXHlTJCs;r*`LBr$D63<>S2Zr!TIBSBGInphYDcXG-}*8BD)@*xf`RYib- z+32@?DF>^Cr$W-u{=j1!C3EG^EIP@$cf86T2A1kn$0A^;leL~je~-O0a0^RRcm$YH z0RvA44}g9CJ8Viu;#VX#qB>jIL&uodBIsyoC~0kN2ySr82l+4sVy>M^ zGUUW~(Msm^MCT%>v{p7AQkp`BhG;5nQK$GBRmb}`lg{!)Xxq4!#k*q!)k%*IvR*mn zRhYxNY)}xa8|-i3-a_NPJkh5x3FZlg|5s-*&Y-@8a0QM|T~VX0FQX`m5+K2^s2W_0 zTvA}i#F$R!bwSF}*kXe2f88FLqh;sd38W`QW4vhY$tWa67lv;Arq;2@A;%Z;gx@kvWE92d z5uZNY#3GlnY^z5nu(ZoRO;4SR_k}m&eWOj9t#HHnpOf;bgaWyp2pZ-!r{9R*8?+Ih zi#Otr8u+@ey)E&W;j9~V^kFwlxqZ1&>tAJ_RtEwRs}NeD5TB65Gmk%qA?E4??~@F+ zr)g?QHMe^Y8IN?RQLECMk%)9SQ4Hp5V`O^B#?Ii zo28~knjHoFxwhQ!mkpQpJ+l~Uo6Jq8FVU*Am=_xA+fZUFOsdfC>g8mlV_$hKVPD$) z$A&hH&vs8PSVUfqKF`047T*vxd4;AQiZ^IIhtlwyu1SvJCB?B@PH>{z^s%~7>AdMw z$5gZjMN)%ui@9L|P9=$^g!t2W$@heSG3zgY0caijpWM|Cea`F0GNr*S^6w_hQRK zlD=CmaN6G1YkpRhYr&;V8*Cqzi`3>fiT5UX#Guh(*e#G`axp8rIc@P zk5P0K{EHGs(`Y~*W%51WW*LS()s*<_g$!S1ge+8MRr- z+M_sB1DE3Y*0;Hd6ryg@=@L2u=k)%m>NHiG?^MNpQ)Bi4hExf>mnhRgxPi^x^twWS zEE6w53IhH)ZQ$X3tU89l1mA{>`)_tYtLlfxem4&;bZGOW^=6jLDn5;GSm=Ls!^C+@ z$=c*a8U(aep)7K6>+>ArtK;m1&MV8ILGF!mq(D})HlYJPF@?#=MtD>1-F8J%eELSR zDOis)NNRI$tY9HvENc?|1O?}LTa27fJ>R5s_3Bdu`>QNDOD_ar^&HOurr?Y{mgU?X zE5Z;zQGMA?d95@aR9RY#1OYnNl~b`e3_07t&t)dFJ^LB#mu(cL$<(v4kLpHM`WGHyWRpWuy+3>g$B(zdnf3M(snCD|9@9TQ@rTGF?%r zd&2NnR5VwXOHQbs9McTerJZ>b{#)qz-?AAjZ-`#Xw#G7N@4r;l z?^Rk`^mQoyuOeMT+sdg$ye{Nj(?q5#z8GHd9U+kAQd7M;p{+}S+K@iuuU8O#L^Hhn zd8o&Q_{uzy<@XL`Q(Bd^TT#4AG`QE_(d$OMTdoz_@JJtv$FOH;sXu^}!yz8x>rXuN z0`ncvLMQ(yc>li6_*y+K#CugQ*9)zv42(J!jz)4$BK#Y8!?bYDOkSncIR8G7S$fVl zY#PfOChx?pJz0+EtfZW{Z)zRc!=JX@rfiBUr-DJ1JP>CMvySE6#Gqf(r>nx;2VuZV zmsTkbL#FBkxy%%{w}rWyXO-Hok}(3b{86Ga%PC*4oCqkbEe3%MmCJ%p1mZ0Zet}?t z#i%kMvKxHXDXke=gZe?Wx8E^2C*gs-txUEQG&n;|n#TfLJ7$mpc_jO0_681so^mPJFI_nZ znSeCP69h*H0M|0IluPk+`;0Mgr5iJ2yh&G*S9-(W@@Bn@%t{85@x?y3Z=LrA=XMj- zLH@ouqADn4jg&uc()7s7BN;J|&1e?uediL*5FeeUBOyS9H)I+bu2P&1Ny7(%ulu0; z{3jw{s$w1*19AGf;XoAJUCij9W>Aou)q(?SHJm}y;BY1Bj7uCj=sD&G?Q`|CHd58> zVA*!@9*e=F(j!RHXVE2^AwhO_Fox<_oFUT?As&14LGLpG$UgTo%^>QIS(nejpV>B^ zTfSitInopTBbpH&rBp{Zyqpq@m_~+evKOO@;DNS1KIHzE{s=N-yX?n%yFBk%?P2YK z_3Q~E9T`zjS8_bi8qANV@oFT?cb>M1nh&}rLg4A9iMGb99oWxr_3p)<c_CGC!Ds6A|YMR{!YRa+WMH>jDu=MJmXGg_uF3$xqMsI zvUp{b|aBV<4(gDbx<5v}8@Sa2&k>2n|pG%jlKXZ$C zBeb%3gUh)>K;55Q~}&dbHZUF7z?-_ooWJXEXW zJ{*d8)+-Jl^i2jK`#g!3Pu}8@;W$(1Q(h;=mxf?c~Bfyz(s7lhrd`$X>Uv8BC2HW!vz|H3HmY(OOc% zrVv>JTKh|q7u#I>ZQGctQDdA4F%N^@LR;q!dKL~bFN65RSbOWrKFGRd z14T@v>rl{$c^LE!w9SLxGiBgM%*)8>J(T+uDhcbdskKaD6JB|?y>?LPs+mH_kaTVG zH|v1^@KU4~$&?o!2nd?tt(#cPL2<2R6N{s|@3!r;m2 zlu;iFeTK7|gAkB~NXM@TSAWWjUbBs6*<*_n#nr2l2D9y|Eb4?oXzfzIF05@;Vp%oX z(K7IA*_s(qQ%=2gQB6}gp68B1=|tWcLUreY6|=* zDlPPI2gOD}g0elUDQSz~{?7R0yE<*g3~VzP)&bssF?1UbCakg~tc|PRw$L#)-kyXC zn*yJlT${Y-*kR6?S&3F0dXwysGXYLM3!z*Q@n2S@t}XV zz%+odWrMQeuOzFgkGJ33j_Rtr?@D-p*{-Bgpm8pKZoPf+6afT!;7(W^y=8~(6#KVb z-)z5W*DluB)J(aZSAWRI-^~KJGk^Xo;LGX+5a=2Pg~Zw`bj@EzE+1CktYF9;+^lO& z=F1?iGqVB+1Pj^yrX9M%Vr_jGby;DE$mwtA=mz}6on~!QJY6;Y4%}wBwC9!sn%JJa zB+6Gi795&&&W0wA)GV`%_~b40`u6pDq%b0IinIRcKN6~8ssRgv?ptl}u`P61Qq<4F3qrXh z5X|_M)+x#*%QXBe_)as11b_{|9nh#S3wKR@qV@3xAOb4@h`MGz9kq)!mLGOqy^YmO z&nk~S@I~Pd6M(2{=K0+>+h8IsF)A{x`X)I8_LwMkj(o>lBQO9vMA2Jz=*n{I$fsuZ z1-mA?(56sm`j%eK^V2m%kImY_clzB=8aNON#G(fPdTGwP_#| zCAEKz^lWMx&blx6cNW;*>1`%mp!p%r#^(%qGfH~4&Hd1AvxDB9);~pZ9vY0qUemkorLN+4`kElN3e`ZxuWj=^-J0SmXJ4jk zcj3ekimjL#52#3%a1FVW|wAfG$mBr^*nGBgK^zBmRYmk(gpoaiMd_(ys)lShiBG}e?n&j zh-92;*`wL9)&>5=Hjvqru#%yv$Vq9+YSOF;>y@%By*HRgid|A9s2SXWk9B=#of)*u z(3ItCa%xj{WuN#G;b%$!T`rlpzS%@)J~?s!DE?J9vzil@7igfHQ<}4zHS0D@!S=!f z8TcwPOSuwlh_i| zv&G5_(+t4V%txB(>&WQ;&+-_(H~N_2&2lJlMg4Axsau?<DQSlO@mt{ZU8{4~uJF~Z3y|9Fp z8nVos!}FJKPeMhZtIDrx3YkAC3Dkr@qfZ`B<~}~ zaQJNq#cC1?PQ?BStTR2=A`9&c_xa#~U~dT4x(PIGAQ3$9UNsfGACiJ91o0m%mEdRH z2<;avNSEGNmvRPIy&|buffCmY2KezjXupXq+q6W0@VD!K-epToZSN#iEryC8(~57S z3x&em0iq@#*>{kn^NWLjD$YMc&b2-xo(fjmuHVk+KRaYaOhXm4D+#tQ5{}2+>!j?4&T$zj@2oB;-u2rZI(CCa7!Bd z$K1}WgFs@|^$IK|ML)nkHR9iv9tCw!_}baUBGh$__OGC!^@LM)ab%zKs28}$F%xNM zCRSD4y7t1=g2V(T7YTA&pRS?`d}#6AbD^uA>>JEG>HpoLo+lH!HXAJ0;EJ!Yggn3L z73Xh?0WikHG!51>=_I9$Dvpbe*?7yS-=r@H8(K^tte(~>rHbRCV>Y_qq8FHyRzof` zIk!_z6_H1a-3PN*)X-vB$E>G&fwSnN_8Ue0CO#vCGZ;&5i|ee-9TiD?bO1itomkA$8iHb z+y+UW;hM9cNmvz*;us%q-Q#(1>RhIh+nC?20h1b4HdEb z=lei;fsvelU#R1uV^-Y+N{?^4yef{1j{frwP`?H5;-psXH*6ZcSz;Bj4}Nq`O?-)V z4YQ8!y-75)R8|ptRC(*C-=>~e$j!!FW=d`+Cm+p?>S1i`k%F5({Wkr?LT)iGuo$#X zPCuF%^9SSrB5uC!c2B>JULi@Xs-K*+f)2WAbj*4OwyelEEARcpkL!w?e)Q>Gp46j< zh^}Jr(WIE&PjB%giScDr*c8rTPlvy~XmF!$j$C1V5$1XZI?h&FaGD+otDTp(+#ir! zm8{Ds2&rbY-`jnDQErNFby9m3Khv=xuz*9dD|8iM&uao-{jOu)uz>?6^_VUMI+wRHY}UhB)!u3nC2w6zN6~D(s3E zLPni)j-zGWoPT0Qmeuq4PpQo>8S;D7jJLB8(FNKV)90LG1L6GQFrH_{0yL!x) z|GMR3b|^3bS12ic@jBKU1&q(ZX&j^NMSb3pl_S-n!$0g;Z%Fg38L=)qabwP5igdtH zHMSUiuHMUN@$X?D=`8Yk$m)u+z|K9S`S!z9n7!Gl?#*ehj1>;LrvSu9-wB;gA2eC} z-0BzkS6LjCk5M`q7@~QXdwAtAfR|j*CrZ=0R}WhWH9NN2tgX#ZP=i@biB&7xVK@(^ zDD!&WI{p3IVQo9MP}sBREW)6tqIM*~L3YzYnx1Tu(DYY5%?%t;Be_wcr$37{y{7MV z7Q(Wk=pF5=JO~0-8JPUbO0W=*%=7_QA&(U*v!ad2-kpgDs)MJJ4*oqZ&5EmwI$=x> zR_z!W!tUaO4-}OGNuX9wzB$*_$r_zJE7Y&@SLBCkk~cVdgsYTjh5FTvSenH?)>|+U z;#tjl?J26f>gxGs0qom()MThC6p;yC@KGL8?i_L#H>`O&cH-YliGmXYwsJ?xYHbT4 zAQk+duK~($SaGa-|As7BLWW{LVO+lRUwXHNTU&ho7XQCjC>F8!MCQl3j=IYzsplfH zHZ+qGiejDe`ce2&{IFy^b#0#NCojGG`IaCU{2*tZBc{I3)Mw}NdLat4ua3|yU!{}W zJF2`CJ1iPcURzW6la-oWzzk-B@8^tj3vVIsxJyjO{JNE*9}6a&47>O!XQFhKp6-wd zuy@Q5)%>i7(4Bu{DuB#!AC>Uq1UJngJ6)D zJN3Vw4qOi`C-o8>dKQCEo(y=Y<4E!nZ&)y%ytXRsM-wGE|LMTkN7P*c~Dv{=jd`IxdlYM|wOa(I^K_X>P!&co69bxi3) z1FYEDKl=+59t-nBJ7^{yg;P_*Gjo8ma@aiUo9a-)6nJ=?B-wc8>uswP7k6$^H&1G5 z#3p?rK*i%JH$YNkRPYG}EwhJbjHI1CkGPaaFMI(ZM&ohl>m$~|V6DRPtL^P6DtDj~ z;GmjP9crfIG2!zf2uJuv?R4RZQdO;F{p@-lk;j|oeC2s1nCj3n9i0(KckU^~8+o|G zr!jdPZWW^)hi8C4Siv@{*Xro`l*4`6vxp0Mq{6fGNRtowZ877av?!wTSjNu6?92Cm zCr8OW5<3EL(oc!o5^mMDTqk&U>M~MN^Dp|syOdkZJyzg|xju1U?$?HhhTel0|MO2T zM*Q5~lx*<15hPj}PC}RWM8jq5SkdP`)_TOjk2ic}*u0*X%CX{Qm@@q%oOL4>E z@zk}_f}cF}p6916G=jnDbN*}wic@Pxar0Q$(PDRlIa0&BcFK32HCH|~>Sy=uotz<2 zQT*l=Io1~6&C)O^spluNHq;XmiZwdf)uYN%Fv)8r%bc{Hg$0V-5uAdsP9nAf-3Kj2 zEO{Yb_#eY2Qo}aB%V9cR-6q~Fe-7Qr>9CJ2jXMa-BSO8AaCYg+=5Gk^*hk&s?z~=a zAaxMk(3ZSJ+w#saWq-^7|9tZLiu50JKzGrju4*v&1#HN_)8x-cDh_KAdYtScxzJbL z2O|gu-^r14>EpF}2c#?fMXJUm%gDJQWsex9$6>Ubf~UvA((5_x&htP$CgM*|mfVwB z6wMotaHyLRn2y9(G?f4MY5OAwxaX6@GtRt@!=`4v-3yAIyrAV`r_WwJ(=Kqr_W@Go z`)3sqIiX;d;M_c)EOe$+O>J|v@+`EECML!*@;XgjBT9mHI?;w9dpM&Kka^^|Xc!HDRjpyIBU%wFu;wk^o{Tng$GCCGm!VHHYcjpi3CIL`RxL8D zb2Ug%1dX6(JA=mj3OnGms3HviC!V z&`+f?&K=6fiY4Wl`S8P}UR|Vp;Kv21)P4Bg`j5+^afxUGlm~8ioC5*)IIC!qWKyZ( zWd;37T-9EeU54Jsyv!Vi4rJ%D?-0B9$!ifyt*aF!|2S10^Nh?`#*9z(8Q3LI+XgsL z1TSYbUG7aLRk2yqRvPql$xs0$$7|bk2qzxMAbSNVVBZ$CRbGqp~9B zY`TEez|j<+(fTf?{SREq(-+=je+Nz7K&wR!CfZYRf=hRc&#iP6#BuTR&H5y4>Jr7S z!!3e6g1DP;ijimO3v_a6r>-TI1ZgR(SL3sP%fn(l z_qM7d5jv#>*?6Mvnc=BR|DxYSQm59J5ehBcoShtRtLe52A`=&Oq|+X|K4G|!K%Mp~ z_<-%Yk{Y187H8%~P&Cif&@n6>2d4IHPdYrK&uQ9A;AkG3p}MmLJtbSQwBqb?;X3nD zo>~wBm{u~eXeQf3QQh^-@~z3RbCVWQ#3u#WRlL<|@tN6=-et9Acn7NA3+XqGzBE() z;D7zH!4YMOQZe4AYgi`|@Ud6Xr9Hy(`UUEWMBi&nPus7j)rk}$+^6BcBjo2n9_(Xz zJyJx8ZLvHAlM2`e7XMtn&1*HreAPs5HCD#d_awrV>_pMe{?>X#AGLD&Ju6&^%>yHy zXsac6aZ6}we^06*E-T)c!Yv%<>+faA2WkjCE>3YD4r7_xihXr#W_u;wds^;;sxB)f%VLx+lAx1LbfAbf z&_~&uRI1{#;`-ZN;%Onnx9SFTE2Guq%YCgQqLWA>S~y}`w5?`T*KzlMELX1T62~G} zrhx+3wT6PEQNnBs9cZWmt-1^ui5Sb$%KC3F>q!tS^dRs7_A;6v(XDKV$?`WQaR=F$ zk`h>Uj{OGs9PD7D)%kx$adXLw!|yBxb_UqT#K+bAL!Q}$*tmQ3ykmk4rA_&!x}S@> zJ0t{q)XugJ#7VJT8?&c<_dkda1upnxeb2a#7Ff=1Wj;sy-3^P57A1Ob^vXD^`v;k# zOkOjCY4%q(H8K~|8Jm0N{Kzc#uiI9(o^2t8U)u$3&x~X=&^BlWDts{?{I!f9J_x-hu}%nRzu(RTn% zK(fE$)uLb`_<4J`4v~L`641e0maHyhj?dRAZpvrmezx@cAcp`dy=yzR`^y^94-c7zTH!0~yGPM=!_XU?+E(9F;Oa7I7xD3KN#ibT8?&!ysFUvhk zZn8>rah+_ZT)_r5W4?Y+cBeRjzXkzft6XyUU-6d!-rW97CIY-wfp696ALz|(O<|>g zv+C|!#q>Y;GCAO7JU|hB+U+b|fnR0@#@QYqlxnmIFqJI@Fq05m%!MG$>>QK8oVp9a zOagFOBp@4Tzp?<9>U$Mta=^*xfTH|&ul{ztLx&+<0W1jMmTwJsZ7k1}I0r?tNPs)Z z@qJ}_)}h5b38VsGZPcO0_YNh}sK@#59sUDm4A2kD2#S2K)9r3kT&~GHTAqUGRb_Sx z5Hb$HjqdJ!8v35gxveQI3NV)G4kLjLZ<9F(3s?dmDFu;tJNOaOKd}eaM3a*b8L9X!{>^JaJ`KCj%BG2#MTDo?l^s_e;(b=TrNd}5e=sTfjm*`${dI%r zcp{C{&1~(!V(_m>XyRcakdwiZ6#G>TwBR7Gup^kAu&&P4VuI9G7O%N=ZHyeG9%MS>Q=7SwcVj17(}dD_>WKb#j)s#LnYZM0ltkC zhuV+4l)ckJ@u6h_r4|Bi5-cCnJT-l2m2h`nm0TSRRS|ipreASVymY{e zB!v`BLg+r?u1Q`0r!O~_NsAaHWP1F>p{l4}D(KuJFkP>_o1??Q5>CCbo!7$%&7E8Y zy+^Lvd%9So*+9!XHQX@;JA1M{pu+NsGO zd_;O*9kGA;7zLw3BHY*HQz1j9p2L6mw@Kf_r0Xxdgca#XI7E~iLtQmQW+hI>)bzx| zNwL7g%Z-zTL!`ukuwC-vWeSK4P?-nvzi_p^C6FJB% zu#ucl6t~~~xL;#_;~m%#9?6ys6o>xfXCzu)(fuW>P1k*@iy+pLmH#oX0iVJd2xym5 zFU5{b(Se^Tni7s_vUbw=FP{zq5&L_op?=|IJ&9t$3<%YzNm;HFT|Tbt=M4(Z84agl zL---IYiOSJM-$MkK&{zjR~fK(k*1mbUE&KdM|?_tE9~s5{9eN=KX?lgumNj7{dJE> z2=>oPsTo*96ze16PE#oZ-6M$QJewA_s0#;YJ8NCsTNLRXK%ZvKRq2>?-svY0TF1#u z{MJArZLFzpzm^S0YeWz5&UF}j!Bc`|4mC8sO2sDDy!taQt^ID~VmS18SdNg6R=1p= z>lR1Hwrdy)n}lznemo&Lo~f^EtwT|$$ps^(M|V%23TUzcLv^#usYXjYsYuAm*2kE) zfiZZ~7*?$69uRTdhjRiefH^IcVVr;dig@qBfBm#YYrtDwb*pMxVfWE}K1RsgSULjN!mX#q^XZ9RMS51< z*Q>S~x!nHy!|ack3sRH&gpQ*d_vwB6K8>0fz*s}-Vy&jgebHonY`yq~#@BIu4O6){spol(Tx<^Vq}Wf5r6QEKyfcvlcKRY>1DCt$z+YH&MRWDWbgF zSu03_xsC#JKZ-g!W663!R@xVLzl~}$=W-+RmEHY&*q)kstfh4nU_vvoKCZtL8SFE8 zC+MH6*ee_N_Fz%m#W)Oe>!bPr>(u+)*d*LIoIuCrZdm9W9b8f z`*@^fviAL3m0bx#vVF-u%gEy(Cwi$5CCuUcvr^k=q$%h#VXIj2H@mQuNIfMcE|$qp zZGpSuhQ#|)eLJjVFijZ4yH+mz!`t61TAIjFPfo1yz{QHorfgwYO=)=P*PAK&#Fw$n zLJzsc+gjfmE+n?~cBK!g_x1MeIP+UB&Zm{ZSI=AU1!v(8Jsf?^=xQRxYRNItDw*uW zW@T6GkZ51>gt`8{m6?!CosBpPw)@s?Ou#x{hoO|Gy4Jm+3r+8)EQAA!kU1Tu8=|$5 z6lT?J^aI<34{Mm3ze!QcnKhqfVCG;SgW1^)J-lZ+d?wC#d1Ibek z?e{grIBx+QV00TRj4q=eezh7csVpRbjfp)+4?e)(pFC-<{Xk2MohgroKN+D@{%d>I zOH3Vx-F9O9eN&u9N+yQiZK`na>J?QrSR22F7}q92Vl{3&5uMs{X$#z%I%#ArSdzcs zk0Zw9ho5_5kyTJPZ{3o(4_w71!tyn^zug<3LcLqsa&!w!QtRvPYl$)59C+tx;sq3w z|A)j{pmq9#j?(+9Ug$vx3Vi@80rw8k3QE{(5HE}#{~1>g5ZG57|9la-6-~#!GpYz44?OwYios9Xg=fGyGL|4kz$ygpJi{d4=N^z zt-QnZeauH6fI7FHHIAZ>>Z??;H|OGqRB6@m_$i=n!C)HF{9SacMZrbG$?YxyhTaV> zefOSM`rp0Xl_3ZepDpgz_r3yh@GWfyRWtANWya3b(9n*dNq5F%QG_~)oDK;b4Q7Fk ziC*(I^8`ndO0G^inGCb&;gg@>j8?WJZEO`uT=+VKA5WVAFMigGf<0KWOAJC?;huP} zVVhxsB}ovt;l#D>yM*^Z`jSSyLWh@5*7(psUtEnGMX9UnCx|KcW!h`&ZV}b=2*-AjNM8vk7P8D_b_`qI3{sN`BBAG zV99PV5VHq*CVKVT^c!i?G2eb(jNYTQ85rr zN4Gaf#!$$BR&nRjwH{F4v>HVqtOK&;$69AcCW-mA8_^y|NlM?<w8nbvI5%KT~G?Mn!s)j_n{qJj&JP*krVT zs0Pg#-%V&QUs9UW2d*}E{*0@$Zrca&l3w7dF-mkc!qsP?(XgI7PfbZY5=$*iAspmx zMV?o_7IN;c<{yo|tfX?&#?pn6V>pQ7253Py_aUwM#C}YFoLdt?9yGIij0Fi#5E(}y z0@~5deM`n|fz+bZ@lWGZ5t%#>lTaQ3KsF`Hf#GR~KiXM+w3ASTxCrb{2^8@+M<-&Y z?WT=fNlMyjY>HgaqJI9?Z5*wSCM|R&NpvehuH%!PaAOe|bA>YD#9ZJ-c8?=C{Yeb$ zhyA@QfIWCtrx=2IB0ce5shnU+5}nu_vO-YEkKii@lP0>e%M{IC(D zwh?eWc%IEYY9HmKo%W)LsHg!md!rM*+HKkivSd)&$TAqo{i|$nTT|=8({hB}dvxKx z*^jEmiaGp|v83<;E$!w$gjqhiBHaQfPl0rmcpEwXg2ZTTL1g3VP045Q{V3fRI>HDr zDgvM?XU{~Rdb2t~ki=5&ph#&WNpE+b97+rNK*i$%tQaId_Je{y)>bi6xbaD6|{>aadeGwEIbZ6pnTs1IwPT;J8hVi)~N~pTl zX@%0^xid892Sr$zgB(NR@b5D;F^Qc_@OJgUO6R!F9_aEE4u=$~DR*Bbs62L`CT*>i znll4@91a{=9^g6t;S9pSIiB-qVMze$U1^SYpfr{G7=!JejPPQx7DmjaIBOw^`TSaX zsIq;t0wC+0{|8E`1Ud`aB*y$=KjB2rHT6I1fUX6>=EFU~RG6T8zqV zH#C!BzwMdQ`T#Z$Udaw`O?fkNsC8Wq_^(q!3U_=bLX*kv&mi#{Xhf<#r)a!4{x7Vc zX2g>us=(QVwNFA5C~{2N1g!9rD&HEqAc0T? zV+e|aczB8@r&^2(kJTrh;!Jqm)Khi`La(Umc=?ZsU*lc%%F|O&Kdg)=6cJJR>4RIL zq~y1?$$Sl&UP&6s_iq-k(pIe1II&mRk5=L8Rg9K-#~KiRi5~4n*z0WB!jDBX+Xbhu z+1a1(e9ZshPX_XB`)$nbd=1uKE6DCi(fAhFye9(e!>yq&<3asF>h>4Uu|Z}_Cx!}I zaPWH-(1$LN1uXpth_4lFd^w)7rV2q==E{X~1>iTW#c4V*?2ykCX5q5vkonQgK8h^SbnQg>B5}{{}wRdUO zf)onL23z+6#pN|=Z4#k7T}9m{(~TU+mFTpw5tKt_+jX08DMYNq| z$Epn_n11z_7+U=03nh;^sxE?-yAhv7e6#ia0V6s5==pc5=^brnkDE`GZz(@xJ|F(Yo9YPti%Cs^SxjYa zhP3>(ioXDTLN&f3`aiJBYw>;x=5t5&Cxuqw1^uV%Q-0x7Le52OGns+?ZV|Ak9s{|+ z8vWuwAsY_SvK^l-oMUTYLX=7W*NG+opvrrDv5L3}@90kotbz;r1vl5vET#_36~_-n z{;&vGRgVBQuoj)0M0)HRvPnDP2y`?Y{V}Lt0ML`(?3irMFrbtEg-}`}3)f`*(<42e zKAV1e;Cy7-ujRslx7cFgc-$Ai+g4drG?;xD5Cj2*q4@dpR!D>%iY&qaNa*LJk^*+X=?=6D23& zLjqy=HNsnIebraN^z1P#BPw*PUZ7394CcP2zL_1!t2A~dkn;!tmZo63S$qTPS3w`i z(rHu;jF$dA%k^kC-bi!&*a0h=+cdPLQ9TGOr~f7()kwL-E|5}-pK&Y2rNOlj?{o4B zSWo{2fT1Tqb?J$4g%NE-=J*K^qDOh@$vVMi@}6w|xXN2`zKVoN)9d-L?%JQZtbP|h z+eBjeeE0qfQIS>xO!FZkz!^*kQD1s?#e^8v)nCO~#*ss)-7koKUh~cZxI0x!8RTuKbBh(W25)n^jp^u@3S=KYycwDX?6LWD$|H|A2Q$^ zuK*k!%1q;303c|ZNaH_5M;(Ygk-gUdMxji{n%&+uU}ySOmu(`vetx8=bFVg@TF+s1 z<}v6hNXD>vqn*}D;k+II#XC8it~(OFCK|rN zsA=SvR5e2a|4O`EB(xT!% z(kIhr2j(|4td;V+&XxD7=zSSPn@+VovQ3K0)=9I7DK`DBjef+%(in%0`Z3-ZZ;Rdm z)}5z=>W94MK3t9ixM_33iP20V)Ta5%Tn-bgP#CORc{aZ;-2CotL$~FH`sF_2VQGvl zgL(^Zj5n_bv~M5tu*K8zgvq;UOB8ha#z0eyF~&`kwDXV_c(Y}ILS2cRrTX3onA2p< zF!47nW(|-xeWcay0veS#Hmn|qh zP;=S2y(8KhpQ5O!--N(vvRkWWHh^xi&nFm~j?zlwuLO5U>PegYbYXA)mcKA7{HF#o zFlyg+;{M|CkLe}k(s=HClIdD;TcN}*{GGgDuD*SZ%{e=AG<(`w896Av-+pIrG|Qr( zSJNFB(pg!ifD`ZB+rNyPE9pb#>2wB2tw7sw^vwiAr~Rb*D*rf-n!ct~htB^13#=Nc zcF=E?Z1cV7=|XL=y24_W+47y9(7xx18U^&l`p()?v0sih-JrE-!*2P#WnFN(%R5V; zCIae#;OWGK+&n7Y=1wGyc2uNjSC3$KTCZ1yEMnN6>UA5oGm=hOvDW)Z^OMS{?@0Bb-GGC700i@X8qvk{Q9#Yb2>z$j?h)qcchtuM zh_+;ULn0sRWQnu!VsxOMG*qm?IO#rQbWr!>V?`IJhog>w#sOH33u^o~0FClh9nIKw z_O$tY`IhoE^QRlWd{-Sl@QY28H!h(wyP$O}p?*^cC+h(aUe+%m zgRl7HFsvw}h0MfC=HNnoH5^Yk$F2hp0EL=cH2$gFM;$lk2rIA(+{<3FnK}f|-v*KC zEuDi6wIu?|9vCpx{Ng{&gcJI+f^kMcWHmX!9%^ybVep3f8$@wdh3T^X8I*pSKAV1i z;3_`#&A9@@A2_ba7MJl0il}j9esyVf@qGMHe}fqdrCus(`HKE5Z=82ozqIjHJaYg= zmMLPGUeYBpQSThbOB$e$!K4TpQA^LSYKc9+A@v`4R>r`l{?F1U$$W8DT_Xam;^ ztf}4nbNlQZtxn08=uEao$=NZ{yiUd_6yHzh>CqTyhNP2WL;L1DGxyczF&^sr59j6?nF{umG}mNLQhdZVsv-Gd0LdJxy83tW$WGP=DKR%h4N7QEr89o zj@%IJ>UQ2CiZw7x_gsDFG*OEv=xaqOH5Uy&sZS{VVVReTT6Rc(j%RfRCbB`aQpoj%<0mJ;(QqzPYxJU6Ol`zUb6dJ4I?yMBgG=FPrvBcu++wPdP_m*s z$Jx!f+Py4(Nv7y9!W7zQSj7w=0F-sOf0O3uwctS%u+16WD80F}DDN;CrXfzv#Q?ae z)8&XcjC5HG=6(k{pPw;+4k%(+TF6uLNoufDGdFqBOGkAVN|C~yE%XG`eK!b~1?MbL z38%|#HL!I5k7;t7r7g5PL#}mK1EugOMCSd1*_7eB?G2l53dzrH`md$a^7ZW0tYsGD z9mS9$GhiANILCu%kSqAYd~!%$<*}9A>49;jJXLqAp9-b~Hi1$R@$#6xpC^N-7*yyW zs$`A>8AJjrw+vEHUJ|@5rpt}%S~d5cI697v^IjkIg2^?(rE<90I<}3y28(=oNs4b2Y2UR-9g?Nz5QiVC>ki5cUE5ZHsEO>Y5Gmk&X zW#Lf+MXQOtx_&WmDUCH>kVR}f0L5zcK`+E>sW!isVk>*HuJ8|zbWr(=Pm%Xwjik)vk@Lb!9+z@3Iuzx)RR*5{f^ zB{`u5L7rHk-YY4*6g&=N&PkldA*p8ZW=2@vCKEl0E!cwu>!Cx_92KGIGhtz`j;rc; zQewEJc-?SJtNU5mxPrO3quuikS;R3YI=ka%wVDz#YqZpZCBlij$w1Ih)!r(Y9K*01 zioG zbRf>Ic(y9YOtB^vsQJSKe!V$H``_*H8_u(hnEP8`j5V!5=e}Fo%$)V-uM+J2Y)BGM zQ9c%_fkDW6NIC1zuMzBrFQz53>yNGoDHJVu&8%2iNZF3ID#~+8#V}jEbUdl-M!|kZyXOqJUS@0mS1*0B6|52O(CoDAJ z&x;aX(G6uy?83Joy>#2Xw4d((G)Yr*iH~j)>udo8 zm*^FW)7Dx0s+L;jM6P(N%z$)LA*r}+U5@Z>1SmGjQ&oFMMbu}4XL}~{Yw~9r|L2ju z9G5tNkY=S%vHD&VxH6niok7o4sY2!{)z!hc^;4BV$q7{u|5VpxP*2+Vu36R^8R#b@ zqJ)9~b?Z|i>7mNv%du0pHmTc;D)R z3xatl#S-qTb27L){e0)Fv(sN;4Dp4y_nXagZ{b4VccYl{)_*o{MBXp2;=#QESZPUE zsOtVV-|xB;(oK53QgST-$CgdR(Y7|BPkrmh+C&$FO3#EdP18XwX|qk&8UM#Sbkb-W zn}}k}#AONGsH2`bw3CV;9DaPczDgNIf$QiUJ!KUhTyJaOHQwH{O>OKs-=Zt?b$bX9 zymJPt=M6F8I*n?(h3=v^0a2j(Hho5jYkJ3{^6Nv!)2Vp^t)5IVUR={VCGW5HVNld2 zSo5plO`mPN?(F#Iw8SoNCYEC+O{}~Si_k$3pVlR)RWiK;bUS;v@%Xr2bxn!Y z0QyXLB1fKFCn;Ml)m{?!^-teRxPlIMEj%d%YA1GC5ZdFN{${*flRL9IEb8Y?#awQ@ zhBF(L3J@AdVfin|+JabDC4~5KcOqjng|z7h^_S?Gc-mYO9tjO*Cvm%ipxj1b48WIp zjbfq%qR%yD1@Rx;Lq8ET=zN^|0ryBNZ@P$#MA0=mGQrA_o&e(fugImTD=)U5BO$?b zy}tjcr3npvziWu`cg-TIVhBBfg3lIR>T8)3&0z*VCz953Xvc8^1J(84WF=f^f)Im5 z$VvI@0U@p6x^78)V&VVV54!GzcKaKnw??lGM*7asvFIGguCcykiW(3()~*}Wkt8rk z{=W96Rx{>&*Kcu>W0e8W;&!|92)5sVKU@rTG)Hp8EhMp*!BZfuG1+B*Mg zDtdf|K?En)4g#dFRZY3;ziQNbA1V3zru)OZ0;~Gr!S7mJA~M?M@D~P{cb#T`!5MhX zaH*c=q33%C>E;K{#sq_ci;;uCK*#RG2S=|`n?WL83&mRce&bAVi;I)=%Vty;D9cr~Pf1wTN zJ6m~b4!bamh61TjRr z2m8h(laiUfIWGG`20M5)b4C@t_FUSP(@DCO%#9}~5um-U4~JN8d675WYl3AG>Rp6q zos0JA{)RkT5{z}Tc1=}J!Rwm&)lyoh3^+yKny=^XHD1Yk54Sts5?C&XxRU9+#@WMc zKz%B)`zfaG_c+8*S6*0@7Ecus!`J*}z2Z@Z;Ai{@cP2E%8N`F#R0UI0FeCCC;FYHp0!taw zujyAMNAAHPb<8S#>0OYLiRDF=n17&6aJbI)7{LgBfO$o z!7dUwrmO?MQ@iwD^A5|g}xCsWtS5=!)|tx$O}F4p%WSGer#msvej2s~i( z?NBQo9HDa8HPOm4(X)Z4F!P;+X{#D&78sJ&5){Dxeyr%P<|c%Y*pzqp3b3+V+Xr3 zZDaLUe?3-R%*TO`7UNTo%8A%#?wVlfS=+mIdT`D~;97r-nJHgKLSL^>gmb4z=JFR- z$tihP^%_K!jaS-=eqjiXHU2i)%;Xb=FQ-A?^uVX^Wq_^3sxLNy#j1@Qy*wYFKYb(>faXoxuAl zag>#d7QDr+IcTyW8$a^P(Oh32L>$4ef5vHo^(vg9;MvK+^MzXq*M_g=WxYw`j{K2d zDxFD;nNhi^pg>pf#ZNq?IVT(wUe(+POndFX>__EqY9+9} z+D^#;S#u=eu>Fg7L_Y=0KTV!$THdL1&k4o^S9@;;2fY$fweHzzEzuk=`KdynaA7R* zu{CsTfnY78Yi<+zW)HlKDAyC?r zJ4DUD1Ka^_b>I-29~=Vl(r3rOT9;5&#Fr0g&hf^0S2Z`GnsBYJ!b6bS63O+HPXH;v zT`HBWd%zKU=Hf9t+$|TR>a_2=GVqj+Kvr^Hs(Q>QeRVpFu%so5S-93%Gf&GYY~hJw)8HzDbG`UyB={LmP9mr`sRT`;9hfS8$4EwPHZy& zv%$l(prsL0qbaxT*QkBekK0$-8wrtZQDm+uP8_JI20*~AQ24>qnGx7yO&_Ay2`Wed zDK;w5$f!MU=RAv#`1=?D17KY^VpOm2x2YmAX1iqZU44Ch|5fV$E7j{?p)NTDT0&R& zv($qCkS z{UpBsF!e^IaQ#DM>bXh|@TK>WmoZd3VaENdQS7k8|uWTo1@^PBO3>OLuH-+E4M*lxZF&FJ&PL z{N_9DmfxuTMxg!;$!L3CLOoL0>p1W_aMKQZY(uRiVAN+Wxkr7@7>k+^P(}A0+!HvC z0>Xj@Vn4PGN>^UuUarYuDR-V#v6;sBM`mz>5a(BA{8a*fHZNr%)%eYK+pjYA7Pl-Q zFDD@z_Yjk5DF>k@miBn!f-!)C>_xbmkm=Til;E8_p;I-A>u=nY(g7NWkdEm zM}rP0Aa1?f)2?Pf2;54iO*RZ0H2nJF@IypYWV7KSi<$ON-NgYox-^8A;MkB|Wp>PG z+q!5t;s(ZhVG1<8IBDx$oVL4rkF=}!%0F+G`{y7%|6QI!I&Qb*$b>7X-a%HiJ z!A3Rj%vu>TRxt8F4u1x@08ZHzU)4-!`QeB(JYYEDsFA$~RoT-sLd|D>7*k;%(r^1b zu`h9#-QUk223Ac`;^cd{v*^l(*rW2;jr;iw8FnNiKH-KY*-5FPNBV~4Y|Exx|0k#o6(XW9>{tohOv;tsZcCZA|2}Y6?IEy$a ziE2F`vd<^>5m!wmq{sSr+87Rj&tP`8C*6N+H7Wkj%;~DG$8Fc? zee_k^NW%D~w!;~78P93W{{^Z7diL}?{4MMpHX9Zs7|dv5D}nh4+mHs9aO1MRmZq5TQ6gHF;-*zeBQ464c!LvUHK!*Vh%NGbAEO&M}zTfYIDER|B+;I zTdleBz*S^_4hSZ% zG>hkmy=E~ZgPf0pei0diu8iYhFv|}wWZDB#OTnNQ2FJdj9iWL9L$&+SNs|->6fzcgAZ3>KP-pUaqG(@hUJxAFj+U6V!F9GiKEQT% z%M`^Y3Ep?`P!!}0VV?U@1r*q;?8GrbC~Ok_Om2L)wv>Qes1i}#IJpG#l)N&z#nStA z@utN{Y7WS@$PN>E{(sB}{m=HyjTT8o`d7|-o<2qp?RtfuHgV#+`m@4G;YIzTyX%#J z9)${1k_MwUiY+pPz7=Duu|lbZG*$ghsgH)f_)tJFDVPh>Q`In>>f^9jFTohIaPm!{UtT-tjUnx%9@xCvr5IHR% zt2m-U*Im8$j=sU_DU9`Hpf#c;n8vAOQ>=llFopiy?d6bR*_4E_)8u#GPzq_S`V*s< zn%uAqCde1;E@{m%3@^!U*5U6<+b#6RB^FGVGuv(p9a4Dv_=!XB{W6MC>8>)YI{vjo z`ZGeCtDTE>atLSu%G=aTWcY~oNsVS$ETL|QLf?0C-wQzo&4~-HV+h51G*=l`6aU)b zynyxGdpQFzUPi`rf8qe!Q&1rMD_|hn-rBYw9b;8URmRW`>dtb;IhVVa1TRUxMt8VG z5yir^K91`d-r`@;ok-vYJuw`#$3`y=rF6cKP0rM}y>0PXC|6Ffxf9gFjUQYR-Dbed zRyo4eZ;0Eh+mp`KUGK5=FJLx?aIG6OhG>E{^z;7__AQ|l;s39r(%=3L>vg*=`c9kW z-gB&rnUP3G-AIPS74()(O~fAU8k6GwIrxTTSaLNrT2%2QpPCHMj0WZ-{SOq)^vh)l zl{wr9^k`O@#P`OPH$=mttI5$~>644(ba3v1QkeHnF&!2wp>c-l;tuPC*#q#KYIx~0 zVq?gySq44aQET*0Mb7n(D2J6-dq-Cu{bv}7B!l5oL`*rf^wF_`&Kj=8rq#<${CCEb zBZ6VUwdC0H^d~9gbl^gs?R2V?RjQlC`&~_rF3b2eg>*H%f)g2~tFeT}8fxf**^Mbj zF4Bg1C)uPwi<_2z70~IM5tz=j#RkUXG3AYxftKsZUuSs!8jFy?pTN8-Bq>BaTt0&~ zim2;IU2J4L8!!E7QI`63`rODgwin7!q&#V9XIkL#xRRFyaIjK}AVuGh=+UgVS^znA zXVyy`MfRRERXS)CodKFJ%B{2`wfxywDR0yb_$AC<$Q4Db#<^32sUM|@-X|-Vtif7b z`U3G4-B4&^Key%Szb2D<19^+vr+)<^8n-dQ4(h)=^H=F|IL2d#{xak$3VXO2=+>+; zwtYJekBEoGS5u=U^55{ZWO&-FKm6_uWN0U!dX-W9&`3NZKj06Q>p_C2E5M+mGN3ZH zpzAu)ml!yzdr1BO|9bM*Nuj?b;*(vEV8c|lOL(AJbI;G6wHE7aGY1rZ@8I}P-m(kM z2fm`+@aYibT0g)6N2#CB$YBSSwg*|;nfi)>^7p9r26upaJ^5=P@*|WZ%I{U(1?~gY zu2EdjY)@UH{)HE`fcAc`f4v2LUwh|q^sNC?@BW6e5j9+nEnMrtKLCNje5W)rdw*bI z<;%~WEK!)6gHdHXExg`8-|S7e1T}(-k|g@?ns!jxdsvv|z_)jQC;Do3hgYyd@Y;Vm zEp-j5154uVylnp(uZi>5?>&g$m}Gg2!B=Zt#`bZ9JYf~OY$yPM2YfNj9Xl;o2qwiAx>P1!b zT?Vew3-EWR)rW7R3Gyck*^`IsRe9)4p!KegFz@^J<}!}1IVzbgAQwYo$kfo{$)a$SPO3m$nW%~D5KJ4Xj6dWx?5-v*1FPdg^_jYVdobW z)P&kb#hjJjAbEZ1Y3TDwksWw;|95|eW?w`Z+l^@T&+kmHREoF9_|KOS)SbthHMIv? zK)5}JfxC$6eH|jXrM-6h?Z)k)5$fg8Vn!FDE$}&`5BUa659S4z>tFZ`J!MbMhl5TN zOTBpermwPZ8en11UVg*m$4|pG#||ky!q(f>OY6gX4+L$Zgy9Vju-i%zcFxd2fCW+S zB>O)54@ORxRbP9@rgK>MN~wODBqjtiCs0wc|yHEvxw8~qA~sA^B0-_~e~ zrZ&$IMR8VmJ_v$Td({FEFW;4;nUa0~v~Vr4BHp`c&32-YK*xD+9SjLoJe`j`NwpPl zbBGeF1uA>+s%n%pYmbAn2yz{#}k@Ju#0i#Gi6=Z;{ z=!~q-C0oy0*Sh13Q2&kOAaFK%CH3!BNdw(RN*8)EPYFw}Vrx2qaIC%_u6|Wi=`jNNB0uZ`#%71TWhL)d!0FwqL_{n(cQ325Cp06#sCm+w6Bk5 z%6{Z2;n#f||JpQOkqEsBW+GRUpf{OOx&Ga~jZfy)+0UDBM>}fF{D^!KAyq6bE77M za-_a8nq;|8pCk3u<#ly4WxtoUysqBx(%(y(1U`e*ba#$lKlOUvsA&zw{|Dic_G>tTaKA1XdQSY=Ixp>%dCiNIw8F@CyN< zq-9cA=``qRaIet66#D0&aFsHhDcW0paybZDIm(t~Hp8+!rOE>_3F#%Jw&00;^70D; z2VpCRVjW|AcExOVj*gvtpj`@VQw+r>w2j3k z$Jt@2pnAaQh1{}VVIE6w`@vw4gR&C<~TH*)U$!AZ~@ ztd)&v;Eg>D4=OwYLBJdlns5EJwhSwn!2y-iQOpOedQTBCxPq7Q4Y$W&{xYvYjSyLs zTL0RM{oTj|6?HV=y@c=!aE-1&M)?<>J- z?1-!zv##L#nm#QH!y8W}-GrL_uLOx1zOZITzr?;5ADYj%283&l230Wn5eg6rslrn4 z!VKU9MuX-RhkIuD9B>WjE;y~#j_U6fo2Hx*MOHbD^I7$^tLW3=-u`59u`XOm2v%MO zuin2AA=d)ne6%kQSn*D9spDen2XU89k-3eWbHF0d^OHNo^s%$ici8%~Z{Ks{cvJ=6 zsEdyT$r$mXIDycj`i_oybsIke+{upAaS1mV&JrG_0Bb;$zdq;T;4Hb}d2PDmiAFs7 z*c*uvmnz2BNB5n8?5yu)KtbV1>^%DZc82+Vh*q65R@RS4@JG<#deX@04EzfEbGd88 zH+~jGgPOt1P_zEEch3Fc|7*!3dt$@PrhI7$k62F(hITJ5dt9cx zRaK1sV~xw;FNh5u43}|yvqr452mDgJ_Le+zFARODGmmtl>%pPt*|;a-Fs?d}j^+DK z&svcsFueCj@TRyvgnHd1<2mvwY6SC9P5Rev>F0+p0dK&WyDtprQKlR12#wbis1aiM z$Ft;d5$L@*lE1bdPb~*FR2&{bN_@B%)>o@XNBl;7;FBzi{|3!UKqWN}ukZ}?UK2OO zzsTpxbysRxlNDQw{vS<)*kev==qJu3ESINm>c+*Z>ZE#R*;nLn9o zXpj7tU0xps?c!8rdz5%zE=r0@_3crLKb{7AE8f36UDXyT+F22>x<@tI`!42`=v(`N z&smjf>u#kA_UlSxcc&@eqy6B&Kaw|Fsf@f~+&KcOO{#;Bc*yV*$`N1A_IV*A z)Z4_Pz~#XHVi)BCB58`hkqo(Ao zM9SX56y9W-fj`pw&VAm(XY|hb6uWcJlT!5_LOY^(Gu3U;bj_U#SNBJbR1PnR*7`@o z!&%unUDA#d)jQ0m*`&7r=ptx-{do-N@-%>%03=QIaf88(fqU49w0F( z&9V1cM*B=|#|DCCm5NsjNYCY@^`zYqK6~xoCgFztY3}er2()Ul_1jwP)KMuN(!WM~ z0`Q8@r_Yi$?cd@>+zYAxg~+$tL?G=6z&Cv{elGTNxfk_fuzyPe?`}Pj;P3+@~ibFWmlJDrWMq)j;}MoRCWnw0FXr4mjJg2jH!H`#02!O z{$^$nJxzkN0hSz5|E1w__|DU8`Vg`me8EBa6$;Xxx8m!+G+YYbsDFz$?l41f^ylnoM6cH{e9kj_DB#*jOz zzlRt^pz1;5jpI|Q-H8YE_G=)d^hjbZW&i20ZTGi$Q$l`;>oX)$DNL?onvsy!q;-_|LZg4> zD_h%)?L2c4G*7fotY}~K+`87NAr1W2=#IGA)^0MkeT0$BuY~fkE5{f@vcAA$P4*#} zHl&>>PZt_rDo&fp-BhDBN08>4dI*gjBh)>owOEGTia`9II*})##cGKa6&%08*6_Q^ zy6}aH%@i`lFyR)cNpSN!`QKXa#)4MoOMCrgeBbPh2-Z};GLF(==A;Of-e>0+V#
    2W$D*xF+_ioMLM6fsQQ4r-hXclIXmzvu-;z>Qca%I~(OK^JD`xUy` z&MpdWx`xb3Z}SBHhyZd3Xl(!vVa%Nm-pik z?W1@R)%tz~q#e@BcWME%VvX2QmJ1th$cv8S!k>*-dJ}!8Y2eJ1@QSfp85cacH$XSc zc#)-;k}f=Dia8y-UH$p3k0u8vqi=aoawD0b#9@of^F_tP1-N{M)SV{9VW$|9Fb3yz zlXHA&>z&{g0sm&xyXdb>QjpeCK=@}T)=iLe6a zMWCDKOL*jSaP+*xy@NNC?^>6q8%H9!F!qjaCd1Pj%C0AtIvy;=Tid$y(p`30!paid( z%r+c;YCG)1s_(nz@-E*BmUW4@;IR+wQRO(?%p&!CUKU|?QeIjdqYVd7?MQ+YyX=Kd z)1axk@bWzl0l~g}?gShY-d>USO2h^o2)tK90^nB6*~iY>8h6Iy_yY(pm;OqO7xYTR zE*5X~=1NHat7||Gpfei6g~KUEmft#PE#T+T1`x3aJ?gQP$Wuqg8sxh)StX*_E!73h zt>c+>nG^q$RCOgG59jR+pwiE!rQib<782(PycrS;Q*b-U;M{L{!4oimkW}>gM0d%}ycg)xu){K1k!m;?FbfVL?}Lr|SXFO638=^HpPFOO-Ru8|iN zW;Z2#o<{B~$+J2^drNRH$NQ+0Id9BDT38mw~E|2&9^!A7?Da6|{lh#XW&a7cx4tGM6 zvX2u`y5GB3gO^7!|DdXglZ?9azkICAoZD#g7-`{wJ#8Rv9(eQOjEH%yU%Oy-D7H;LdZK$Xf2o> zNt-9if)h8#W+fcH5-WcR>?7~`PzGvz14$Jkzn@LVkCZs=eNH$c`~j9bPd1#Nrz||c z6RUf?2evV*dJ@pHo{oh&eRT%M!E)tE++nBDd9uQ5ij@V{Sgrs@a;`OV3ed5l79ynU z1RXf+J=9Vi^Crn4xQcjo+foDH!;fo|Zf6*GlXskucd~koctD(k#I*wPm*Wvm|(E4$JZpCvA86RbkM5|@($@c$zAKrcENj-6)#K`{1j2AjP%x_!qeU)mTKu^Usk(x-* zm^>jx)?#UrZN<|JNun_71s_xv$Hcq*)+yC{3`sN9=mf4bFqzaP#uGkplcl~JykNeh zNj<@P!w2zNtVetRj`D{1>juWP5yPavC4DkE52Pm~J_zeHd{}(I8%`vDD~tkSxQ5*I zLBYdKjF)^>R^_B_Hmm{cyMir4XFX)iaJ(J&{n! zphV+GeCrFlSXN;WqCMq9vZL0S1J6Ry_~FPYW!O_$#QVyJW$l;Lt+}mO2`NTbWK0m! zm{yr&{g@B%P73vx4^|!3^;{YWa9t|`)F>UwNhyLuILg&d()oHE(*5cS#OjIk;I?A< zhMaf`@|h0>xvV~A{DTAMH6O&=b$tqO3);&+&W!hTjPHD~8n3pAA3k|noW7se##XhM ze~^5FcIoFEVBrvAh_5GYiBON*z%*oJ{VqOD>vqf#LC}< zI~E7uq<33l_T2_zkM*PvPsZ!`oSLAz`e{Ed_5jP7CmUjCSzC#KCsX@)Hyp;SY7;a< zEg-&6!mD9_h(K!Fl(e=uj?5Ef9@A_)542?_-yL8Mxz>znV3PH4d|nw3yKuBtp`_Ko z9+)Qrk__w{CbVSDlHFzb?wYn&jv?955 z0S|~vYurc#teN5W5_^|sP1=Ur3AN~Q;(>-6Bup*>ty$ssTo6j6A(RrT1*tmk^w>{) zQVQuO={su{m|%I(2eF-iS3IwHbHe=RL((fPmw#0|)v-Wu0S^2-Fbx=3s_CKFN$`QK z6Y+gY|M{RkEOBL*U|@xk_FZph*pvochx5{`K7q!CR);)mX4%&Dp$`ka3tu~ixno$E z25)CwkleNh2nwMO58`#WX&?x=qLY46q^UOMzB#|OOl1|;660R`1yC z1uFWHs37{V(EHL>;bOEi5@i7)t1>p9ix@xppnAzHZJ9zz=MGU<5JB|eLA<*5hX}Mz z(McbxVMglXKDp0UhkR?cY()mqhn9y82QfmnFsya`=!4i3SXVWBR~MkNfvq#P%(AWr ztxE>tmJd=xLG&T%eerbPZa+1&V4s-u6hU6}p$NxtZCnV(+7X6{b8SW+E(9MI)gwe% zzob8U_tS}Al>M(Kz7}6up>Pr>Ob0VjgAX%uh`U(6g^Y*k^)OkUivc~~H`OQV`gLEH zjn(JYf7_?kA&o;(B!wfUhS6Ft)x)$j{1%#R!Bv5B1S{+62RB`{E!9|6Zq>DGq(;O% zbvYm&*El3~vVeuD5GVYlp@-S|)cZKcLJgJ65u$vBb2H8N^K454JJW5w)nIFoHn1wy zp>^g zV_gd>$4qO7I|g-};Ia@?i}T17c%_RHMxo8L{LXKNvf1A5o?98V3~5I5j}!+t#gC|k zP9oLUt>)UEBM{{fHfje419=W{{-B@^RMI94>qbtxEnS)(Q%QCR3?T~d5Eu}e@emg0 z;u*dKJ;cdsT`BEhXsl#z!giwNUpbWaRAwuamhDYxfl^@;-%}gafM4CFEo>NTV*(|y zRat_vVq<(>eD^bbb~Sn6b(c#XHSa2+(jAq-F=s`%z6f=QBV<3MQE#L8V0$uYkuXJX$m+@%GLa}f|||Kq>k!~>GVd&U`{wNts_ZxzBCgb#Y6j^L+*svRURhuhNCgS+f-LO& zDJ-{(ICXN-5D}k)kv?<(oz;^ktNLOjE#v*9DnQ zWaqklx*-jct6u~MhQSMFs=WhVzypF!2Ry zMMF+;P}n-)>ji-ACVTErTNv>`3ZGCv1*Z*@I=xqdSWm9$HY)f4KbOB* z4r3xs30I`rx#bC;-QWKSxz9@tj}Qy)*_G0X8GcJa-@%kO0KSxpxI-)Q zawFIpf6g7klXbzD#QRnd`cO4J;^acp!pd$wRV%14RiTy@4f7>E(jp|rVwgk*xp_R& zW9LbDNP!fm$gNQ+~QGe{Gand zpN}VfKxh5Wz$$>Gez|Ljm3D)Ns@VLm<42RXssKmx~)9`#R zL52~!REzDK0Lynsu1$X<&5bzyAJuDR+WKKwsAq2vv^PK?b#=;<=nT>Qbp0yR8|UMS z&;v#tytV1e<+%$kmq#V4$*Qp$hT&u?!M@G~Eu(|tqIGiRNpu!(xkp@rA>m6zpI{LN z+-Dtrad@pwpORd6o!*ZP^bl?#AAy^u8aE0|t~`#*5`zJo!ZYo9EPgP>1Un&ufSOZ~ z*6M`My2s(M9&KXQ+QkOQ$JfBx;4$@l>m=bqSGS!+rLo2j*YQ`yN;^$mFvC@mRnuVB z%D0KDJ*&L(gT)Bd#yom2Yn=yZY(I7!)s41F!7qkerrcHDy+0g(l^EEUrph-7 zg5$jitffH!S0V&fEpi44-dJc->%jU1zmqp@`8U15Uom9g`ZAh(XP+C)=V>1>^A@p0zKo*)?hHWO08$X@N| zpf-I}ay=B>l#tgS9i{BNmE@hru{pBuWk)<6gP8;`GXnYD)Mol=QKFk@otI#~J-$JWu+a{Tyb#HLK$8%Nw}wFq;90gW0UYyO=+s_5{bBm1A z%6lI<=3#`QEgpeo?OiqA3ow4-hfb#{eq7V8I)^Q?OpArmgvAw}jf#3A1M~_b!M;9~ zb^gF+2k};^M_~6MS#5%A!hd}NytF$0v%}?&RI170iB==1oB+YDd=m_{1`D;o(y}0C z2{x>2e$K=;g7|)peU6RtSvF>xAVk;F1J9NL@#QsGX9N`I^+@4hA9}*Xvvc<9D0D~< z)7}2Ta&BFYkjNWWgP~W~gZ>GP#7G!uQSU0Iz1sy%9uutm^hh zi-Nj+0vYP4M2%ontQ^;dgI4a82qodHPV?z0Qn&E!hL!$2Fv1Ecm=04k7veYtDohIG zWxL8`xGn;Cc4^p@%sfGeDK8c`fftrAkvjqGXs4zy<-$6qD8icb58?nnJ+OBFVRoCzcLA*_LBY<@xhn_J>pInK^JX*K%{crMb{#W$m%qktAQ`4Fz*G(;@HMFLU3 ze$}%5D=z}suCC`9YSARtRQ}>aQ!Ik04A$NLYzt0Z#I{6QYMtS%2$nKP$^(2BRFvJH zdxZgc6>NWLDE>Qx12Jt z!%tTjiXbY}8}=V{BUL$w6c7otLv_z@mf_3KKVHfX4^g#qs>C&)&f01jq zV?*)&pbkZ}Fn09+S^54Iwc8iF6#DL`?;J1KBuL(yMA^A@PuaVHT7V7))ckC0~7q!L7dI196#ng?s~rfUg(5lDHtS-qJto< zhT7(V{%+^!973%=7HnWIr-0;$=Ad`Q)VW&_!13Cj=RM)N)Ob}HA>-@~CD7K4VCnD4 z?PV>$A8T3q=Q&U~Cphu;$wAK%K{}DJjXo?>xhM7 zI0({$EGycW5Oie|-((Pko2F_qHKq}D-+5{?M62uSx(QZUd|U9sV(^s3rT5o4ruE@n zq84T0Xbx_&O_K2@Ab{s4u<1=gnUn8|{$Fr`7OsnP8Ru5%e2p~g+A%E*X2Ls5wQz6l zFt%Z=C9gFME_I9#l7k%vwD~nq0W*?LQ z?+(JoHR==IT9)lNd4^t~Q7F>_X8@w9=rGD&@NJPjE#2h4Yio=|dH!}89K(R~=62yE zM0YAtu3Kd}?5b8D^M+XSb|pUgUw`UGSJfgf+%M*Cdu5zr$6=}uz~&qC4lq5_q6J?# zVPKR)B8u=mDLIZ1+2l)9LeRWbFIl{iV+IaaI`B?Rv;>`6eRQYri?K zPg`KX$&ZhvJhtYsAG{7jKsXim@zHrB~{p_vI=)VWoL2Jh7wG{50M&NZ|CDc&rFvoNzId zO&|%VD@j6?1cOE~QpB$=W9-0&q8lZ5hGC=JXIe=;K&*ptT`=}voE@NS@lXVj{S$E* zL}%LJibO$|?r?Nz^o8Bxk*=~gYLdy`XJWf(;mbL&9bnDF5(L7vIZY?&b^uNq@=y>M z+Zpm+5WND)L;ya~&*}+?milqO1(E&Fhn9H+AA1KFe$sX*SQ5OjY>%d(4A6b@9iEBN77>ND!c6NKuepbn zN>`Tipv9Hd4CdCuNLeNZ>Mi%$GLE#=Y5N=3DhcdRmK)<6?@g>Qy1hQY=iot}7$wDP zR>4IzePO&ic4LFf?OzK}ctF0@Zs?zMaBYJ&CA~+ffOgyc`i_zZTrvmr7pOcSlj3-J;2NY} zKY4NI^a(T%*u0>~dBEPI@p-^isCZu;Wat6clbZb8wZVZ5e-BXbkM|@!poYDppg(8` z4-OyLLM5-#eRw_hHUqzj7QL7z>H%pZoTmLs<5F<^;Wdq`2OGa4ba0B=7Kue}!>7de z0)ryK>)E4@%YSab>jC$Url!&p@v-}XVKmLIa0u!K(?_WF^E=ezNa3^3Vo?jKN2o@euGa?$BBefYRJ6+X2>)2e z+Of?WZcP1bipiO3w7-7j4o>J?se>vFtZSEhz7!j3oJ2_aPS|N`>S^-uu)B}0-jN{f zRT{|ef(-#HS2P&4Uys?{{qb8(<`WBkGjApn1Lct|y+bkwvuwq_$O zK^g-#{Xujezm;J<1t9y}4PQ7u0hzyn)R-VvzrO4KY3jLDifu=N+~IpE!xQHRcfNgJ zfB63{jic0t*(0xEZeM>o&V(x`-s_*BC09e?w-;HK@nsSd$j>lj!#qLjx9;q|F@){w zy9W!?in1{X@k9Z()Gt)|@QHAv)7EA!yocXs7>s=yYc8(1eMsH+^z(ODj6kvF-XJ9_ zM6jdP4fI3UzTc4uSGqhNm!~A#Yix{t@=P8}57rk$dIRfP_?q+ZcLoTWpA%k+b?q23 z*E4UZ+4tkSk5i^uTa(F1JwAo$p!D_NBNRY1hS?=nxhg20Y8dufv}~qE0`##`e=+pH z-~C3MZe!&J_E;!9Jl|;1GiWJ&=2^@gg@{0CB@7R|?BttA9|8pg^1&zm|7aQ>c;VpN zJD>c#2UxwiIWQiEC;#w?H@80fpSKQP>HVKc)9{q|4=w!uF8EsTi2Ywm)9`>D$KOtW z=DH5pX0|EFFm-JLr5Wif2NdDdeF`FoB@o_=y1D@-k6ZtlX&Npt=h(Yz-xyc(#|!`3 zG|h!)FOv~N4g&@&@38s6lJf%fJppWmf&-FsC?p3FLFsA>%xO(&a$p;&NJ$rbk8TSq z8{}os;IV*Qw$X-R?xKPPO*EtxP{eB!7{gG|Jv6~}Gf&@3z!t13)lc6;0t{D&swPo8TNSl2Q7?g0i58?g*J*Wm%X2i}c+1ut6%8-ZV&;GdPP z?-;VrQG6Iud)7xZ0+YzTTw_kP;f<#UE znl2r(>ve3EXA{oc3UupuJyXyGgmMBOzM%^uES-HOrx})25bZ9s2Ox_c?6=t3VrSJC z1gZZ&>QZj8GFgOz=bGXv*$5!YQr$B#&9JD}kgw`Z9gU&J9#f@HhXP_H5UE3ke+`n7 zC8e04Fh6}ESRj^yp~Hb;CV8Rg!qm*N zKB5zwlLLF8?*a6o!#VLg8#U;!D}@JoQ8HXqKRSG^Ise3G~Y7XSBfp7i* z4nOaCpnh=wZRsBkZ$G8D-7%!}r6gyefS zW=D_>FMKLjU2C`e0M_8g8NPsbv5YzWHm7L##MMr1;bQ%Odtk;(%YfFN2) zDuYnBv-dU^b#WnhBvw*#9GPBeLmQ<=EPM(541_^OT=ig~?<5SO)nScoYmqpA2xd{% z=>zx~lX1|K7MfTwoT9H77pugJUdAG$4?Z(tW^TEJl`SDmf<>D^3$P$u#wPKijRJ<- z%aKrfFHUWTy zaRg}t5MstL#0D^#5fo`_uVG;1e-VJqg5KFHy_#~8`J=F|zD1AXuJ>AP1CbEZMM=zx zrRCzl%MTg|EO&U|fjM5fGKDamO{c-zba@hUEhyh~OR*rWUdou5DUAuG;OZ^_go=_t zP=$UktkZ3{ku;84!7b_nkXK@2Y6?`cT)4Ie2i?{;VxHx%q2+%stgEdz#A;O^%A0H% zT84CTiGkuJX0SvHuIcy^LltbOV_F0=$w~`4Opsw>x=~D*F);xdVzo5}7+!dE(`hDF zDQLqKQ?NxaBa|E6o0&_n@Vc&FbF0(v%!j8}2lY_Y6n~%xowYN|1~4dqBBL;Qs{em; zzRPK7=4HJ@c(wg`nu981B!3ZpaymP+&7cShqm)s0^He|Ce>(BaYQrC^H)jpud!Wa!RbR7pb%A- zAe2RjluYKX9}aKy>`#hTP8AD|$u#ZFsIgu(F1larxVK{Keml;B{*gQ6e17Jw0SqKl zWE2{&u~n)AJ>^}8IskcUY$H*m6zb2PSOq+wGvfjsVy6L9BhwRYXo{4A{XGr7(H{?s zmOWqtUZ2#SZU4vyUg^aH#)~4Npn1?i$lVO>E$4N~=SRfJZ36qd@@hBC*b%h?nTmr0d=%uHG1^$He@{xYy=P7x0?xiYlVkZJh&*1Ek8X0g!S{*m34UNj^zKq{m_%ZH&b9O<#fQm1P)!YqH^DyA zs*DWxU^=x4WQsbiM0phE$j${u)*mVHCTJUf#O~P2~ za5ikWy6#iXVV{bg`Vq5v?^@@uo*nguwZ>t)v)4D+3hV4XZeDtlWyqnm4U{~J{@Fq1 zhq3s1N?v08aSSGB!AU)LZ`xnC|5WCF}!#2B?PJA@!*PR)VznG8@os8>@8ZBg>Fc%*sljjaT?tz1+>$ zMdpHIRF%WBS*H|nMmIYqcaQ&GkRfr*dI@X-FkU3jb zcfulm3(V3QX^yM}bQ{;c3L6);0eEV)6fZqjIJ%QOURgCbn~o1r{Ctr5`0be%yn%DxCRoS%Ttc0D^&BhH!JBvw*)%GA}s1^?6 zzOQ8o*Fx9n(!@70lcEqD?RWil!pB3d|^1|;=*upCN#49R(#(Ar&+5k}_p@}EQFvqmh za)lL7J(k2op8Vzu>ExZJ80+;jn_pdR-2C03SC7MNY6nTWTeBXmwBlJoLQ>XQ$`Y;x zuYa2sD0#SP*!VDu=MR4M)$z3RSG}6!!s@|}Zq4aka@FT`5}13nM*l{HXfzdVEEjl z|Fu_FJ7uVb)GSMGQ|9E}(@{ct9?an6%-5yrYC2C~@E2jEp5Po7 z>(fY}RKOSROVaz^n!SOrp*UeX(a~Tf%BN|-heOH7YNf`K>;3=Y^9?xHdyv9cuT(*x z62ZO3x`renMs!nfp9L(hu?`jwtLgZetUfQp42h#*jvm=$^^ml z^gtB>OrY4Wg9$&e@iC{FC}srt#eGls z|6A<^&n9usGF9)fc=Blo(fmfGvTLmJ49P~><_7qz2|)acRwjIF_YK%ph92i?yLLGL>>f92dR2wO=r%iqKE}?3Tfd)m){%Vsbyx}0#7zUCgwPN`A%1?rP zF!2c4g%z1)as=_alUZ)<-a@xUnQ%L)UL9;Q%BLB~J44CDdb&Il?(W|1`|tXnB!#J2 zt)QpLC<}G{^jBiS`i6q`@?;bz;Pz&?FVm9D<_t&6LpKna3H!kKuv>X7cOwX^Kh;1N z)pK`RI+HgOz&9x5!WoH0V$5bQ%_3b4sU*Qj_~Cdpb!G=D%A3q2X427Re(zOKqDrbg zFSR(acxG74Wq6iI*awA=Jy7@%c2*YY^m8u0&SWGJ+=0mdFiksBJ=Dva7KR~N_BD`` z{|J@6C8#ANaEb_3z9sn3zXM!5sqe9d@hGLsYJT zK8oUV^LOEQAWD~Gs=+e^Isho%+0olis$9;FQM>sy`~t+{a!oaPMnPwehE4Nd$Hx$b z%RXiD41)FpigP>Dt!r2j*2jjSAy4@M4qe8n+OxF*3cI1VpF%EEQ|_jozoy-d<#Y*S z-d2_$#A3TnzNy!W8MEy^3WjBT>zUd3lV`?UvZ*=WGDAJZM&>j`=}MU$VU?ISnjN+Q z^E??T;*2GpIQ%NU1d+SirnH`c(C*P@3DgbuhKwcNEXEwI<5Rq4{%`mn<*J^l@eF`U z04!8ov8Bb1S8>i$F#?*9=|*Sz zx(z6)M(a67LJ_4}AeUB{(JVknq_2c+VdWwg%h-~nKI?T-`RdfMCsKKeoPz|&WLn10 z2~oJA%7@xd{un6e3N-@IGh7D8yYKr4$}4fS( zkymgj@xOlAOUWtL45x=r?4`sMYmT#%-_Vp)D7r93po$3ZAx0AtuAG}Ld~bYMtv;mk z`3y5{_#>l_z0s%odSl4_$IM9zP@+~&%@i=Qh!+q{hLwwr#|BB#B@6kbgM>ON6diBd z#OO_31_gbYAhd80V$2p5`0>qW{2v-ER;VIsJz=kT_=xJ<)nMX^bLPmqds|$2Cl+Z} zyQPZL&0>v$|A_Ca68K~Gx;s+kgPRiiY-Fjfy7Cd4mYTJMlZDh(Q2G)m?v|~aNrtcz z@-RE#!)oOzT1XnCq=&Gcu{<KxG$fy=CEf4v+z#pJwM~G;|3yRJBO%10}Ip z79_F2^`STqDfLKIZD~%FBD*&Q0*j|*{HNvO*dvS&wK|fS1DDkmBB7&8`%wzFLS^w* zG1V0=-BeX^v$$B4VEjt%^xa~V;t>zUHXuq*D5kQ=WHOc2UC=1?Pmb|j@?qh~Rf;89 zm8<3$#g1pHZv3>sP-cQ=DhrAxqfApKPh|cIQMvvHCK0PfsRxs(stR+AW&}=Q7)B`$ z14av6-BcC!0hC%XnI9-%t4Hm!`@%j54>Ab(XJ^v*Z{FbAs}PgREV+ZVK2dFpXEj^E z5$%jhQkjW_THO;l1Zi|BBOi)w*6DxPl@^0f57VrBA zi;zZHT&+-2ZwLXm2E~wvN#0mxgb8~d-o{yyVxV0D_9BUBbIWdKmZ zMSnM-MH>uwS-kfnFduD(6c_-zb1J9wZ%RUER zFut$%WOnXn7v;1=Qge*MN4wHQ^4Yt*@3ZmB3uaZi?X%CH(NlZI(r%RQ)Arx1JiBq# zNs$lkm_Y#Y7v$j9X%)JivkqS}U1$zzPamzY5qiB7d3M{X3qD(C=Hbu16r@8EAW$4O z*st3+d;eLl3*$yA0eiD)02%H6{F%$;q(hQ}RYsDq_&vq5KYnwtcIn77n~UMN8lVXu zXgY{zH;=mDw^Le}^0SR%*W_!*@WvP%oc_`wys=QwpQ^f)E0NGwhal)I#UXW=Muc9V zPjZT647>(3f53L`&Tdq7@M*2i>Ia)1(CsA{z!H3omFsoQ&OUQdtn8EQ&(RjCOj8Wl zSEC^}Uu!R)xm+*~i4JFI`H%LgT-{?k|07iw{AB=yUol#(cS|5 zGL^a!(6LcnuvEug_!$i#=B52#N?okWT4L)TaN5mBay+pYSI>{!^%WDrg8@Nrknph3 z;bvIRH759lvD6wPw1M6iYrSE?WDx%_-=TA3@#j-v69dxWr<%`;@0~LH9HAOCx~En9 zf=)${H~RkC8P<)MK8Nuq+9Q$VAIXT5>aRIO(uk9TrUt}Hdxq(pqr z;>4FpUmEyvDYpumLhEWd4hWT^RRr!~u0x>&{{n|qM!n|EuMz7B1zInSZXPxmc9H1) zOLf?p+Dkf(pA~*lyi~`ySKG^ZmaT+Ouefd>lAZ(4yA^khUgQwdMRk@PjlnmG<+@ei`jI{Ta7%eEm0At?#X zq2oMkeB%E=g1h5+KR)^M8K4J91KSnWf60GCHlY`ob?);eHdB6KNB5y6tfsYt*b|q` z+m-I5U(RE9Rx zkkR5xc87gYht-RNz>~Gd$tP&W>A|7lw*3}I(m4C_E&7s(;Q)A{I+GRbkg9Hk2uZ9y&r7E&$= zvgUDCezk@b$22Pg5HQ)1B*jkLca(-9Lcf?8G0FEW`6P};EzL}L1$|!?Y24cv2@}wJ znZh=qajsoYiu&}+eo?P$cNb<+Vc7Q$)$AQ$z;b~B555>V(emSGS`WVegY1$MfAZ$Y zs+}16fINPG3@qSA70Q zYeZfW`ogU`xnJN0qN+gNbTTq{Hmv{;e<_K9ykP>R0HZer)759{gpLXMF-h&y%VymxX` z4(&>=nqsYi!#uWo!h%o%t;amNuBv|GB(E{X=E_7(p%Cu?vlVkT01Ls`K1OZ(^4MQe)ZzqSR*%KgY$O#Qf@YiTF=* zF2=plJv##I9Y;jJ6?*NpL{HiS)qsXbZ(MxWL7U;Ju_Gx~Fy5uk507F2$zt%=K zmkf&kQ*+Dz#w+S0QOMd^44FrHWx6!wVv;cm(YFXEKuT`Ut#0r10(8YI(j{_a1_Yr% zFQHL1;tH-{1ZIQ+8nVYgjN#eVBeMn;t?4~Y)1PSku`)O#N)_GC@sBz=bEM@x0OHNP zMl@}?m5@}$Xu`K#+e~o;{uDKMiocDu=?4W%@C{7ge}oC;0S^P;EO{r3%t%8yIh)&f zlOnEi-2&XWIgLE$aymSyha=GbL z4vWv28De^?^L%tHx>Nwu~Q%g1=!-;$Q-?znhi8qTgo|NY7L>j ze+HVt35&u_SsYGJ-dljY`d#sh1LJ=V$!$1ada|q&Kl>^WvGBpZ5ucSWu8P{bqDG7J z0YVQ6Y_H#Y7(O=lJBSc-}Bcy$beK{Q$Vh(kr2#_dGis3!i_LCqFE$_XGjuc8LYR=i4i0 zpnuw}v}mCzC?|(&Gp2h%4px0fv&qn#O+v5=&O$f_PD8};c!+sE5rKq6CIWLd6(vs|G}?pGKOqg&QKr>HQH$m{++k|a2T8^SVo;;02NE^dHNpX zV#Nv^7MFh!q!SY$WNT28s-;$5Nz)O{Yhm$*s(5{{xC0bHwdvl5L8p*PalDL{T2;kx zgAPJAvU##Ua5XvUXc;z=p5%Mnc+8)E+ED~8UaI% zTXMFyKyw2JL&Bu|Y!SA7u^24s1$F89+5Aeo;|{RHYV{K4{-pO!*Ph)CpsF+Cj`{1q zVo$cwp|D-=(aCNY%%A7*5Af+jS<12ziZl#NH~h5TiU&^BoJwNqo6I%R(JT3*#%-?J zvPYDWB`WzR1jH+D@Yf!JZ7KkYl$~M7b z%jGkda}MT=3%+C6Y~>PE83(}+>F_*O>y&@~!B=qh0a>Ti!08hp`6o{}*K=Y7iH6Kp zxiBSPoJ2N{S~gV1qjc{9vEUeA98!GV5IIYHaRU8u_tPWb!Wk7>+c2>zyJ;eTGj)l0 zh{xDWfR42eiH}`fu0iwIwd_2!p5BdT05`^jlHc2QO%BsI=U8q!B`FD%o(KYCL9FdS zbu{M&(CmhM-qE-#dG4ZF!>I-&L=|2TF$z=`*MR5ha6Rsp^q&Qkda1tuusB-Zjn?A| zR7t&OSJ&gD87cq69^lexnQU;W@MOguMY$Cllf{2?%iDq0aH%a8U5cGoq=;Ni^WioI zS;kNsVGjOI34UzGU*(#c@LD(cyk13Y@173P)HE4Op#QS@hOwC*y|WYcmFA*r*MQN(zHriLT% z=amK!=yGHr%s1lkr6XqFFBzJZ4lNsRn_p8SQc}^5P6(V2IrwU}+j+Mvoxg0@)|NLd z%_ScY4(A;}@->??-r-&hw2-u&!W z#dg)k(2lOTBSl>pkb=CH~1Lhaz1B92ddwQZ_s;D(&>RjxN!njuSJ;p0C zt3+GF8iKCN1pU)_X=Cz_=opfdc$GXTG{}A>=V3X~gy;Kir!=lgJlrgk@hO!=TVo>N zvLi`w#FO5GZ^kS}#xm zc53lMt@bcz_NI9jw~mV*TWKE}sgO22rR^wc{lwi3n?Wr0C@!rHwHT3}$%a3dA$!=+ zPgasWu{81nJIHr~`q(gxTC5FfDTCdr`Box3A6AyBJ923!XU-!*^_6H1gh8`5sbRD0 zveELl4-73>HaV_aITP==1XmEO_n4~J&aM?JW8T+~y0*wC=m zh}o`2!;HcG13NMG2V7dM;5m4RD&2H+wE2;z1kPKJ6v5ewMBrYf_EdWh-dwvt0oYr} zKWJccnYE;+#fgZJ8Z!6*W$CmE!7wOCU0c`N@LcaZz=j5`>ou?Wv@4>oMUvIw^{M@^ zTh;H0#V+6A!yO#^dLzc8ZrJxznOm)1mPV^g;!YKmhC;g4(Xp@Bg68NO2+5s)NtJ1| zO5p@rRaChHH@;Lz;&4YTl&*|VEwR#Ws+%-;T9D9Jx!iWRkxQ!!@uqe8xZsnlVCxqp zgfb(q!%Z8smOKXA3_}Rgr`{YMeXWEb=AqH+8c-##7hOf`kfoK{Pr`pv>5J3+dH8Fk zeQ31udCzdA5V9PR@b2+Tei`VUTCLR@4w37?&Eef44no!NG?%V|HWbhb-YMD}xMDSF zB5$3Sgr7|~q^)&Yt?|Tz)odAkYUA+0j1@rgm;6bzZ9-n}6mKW39p-MUj)p4>81!ZR zmpI&0MbeeAH|z14CEY;=#pNh|4HRTbX{}A=pFo>#rfqUD=M$58^&o$8=K*Ri(C!O5 z1h-LwhI*^$?SR&*(hb3lS*gLl&tMQoz;WaVs5f?>gQ@2Q@A?mo>w^JaZ-8*O(CsF% z$2k^Mtw{v5f%KodOCCNkXxAGwt``O)^K8B<5;wH6=K3g6>KuEXgr%(5SkbD4<$sI9 zmMf9b=hz;kyxv6|*$Gzgp_jN4T0QKMwYBoBO7@O4gcCI<{^NVM?c?DBD`q{qU$dY} z7-Bc13dgPHzWeuaxq?Qfq9BHTDMMk~BaG=DNO!$KC40rBZX|5*ow_wLF-(NBX|A_d zEP2Dh;tdF*?8e5qA&YR9we?PIAKFH66o$N2?+8}jxb8Gk4+rCdu>_yJg)9pMI)jS=xeg;WCV{cx zc6nH+4DPh!s>pc{sqYrIId$yD)w2{Z;&Hv3vY&$Z`NZ!2i})!pS8)l2)5)zj^VkRl z^f;nA1S@YeJBi6Ggeceu)Weve#ZK0B8B_{aS)^!bgjG0II)Z-+X=O`a;=Fl`;#lS(2l?GEU?0z^_rj_ ztMX?F*QPxq!O*M?YNYJ4Y%F+A8%%SYJCe^ym@Ay$q~f{D;$Go^U;0@UoEk434mrdq zhFiwPcH?0V+dX*&3T0@j&cDVZyM#j$O-(4q34;`OsO z@8(v)>D%{ob=G^r1qz@jlTueZ!=j-$aL*G8Zv&|aSke&h>me8hZaV*%)axi~=o^Zhyh|5$;+SYx6P%4Ga6namPUJZwJmewRrqvSy&EBvW>jKH!kV_V<5U!%(x6=6eF5!UQj`E3_Xis+t zB%3zFs3~hJWFV0=wHToDz+E=C3{D;Q)v{<)r?_`XU)&+u{8hk&OuD(JMRIK_<>kO- z%P8|eci9{2XD)bA(!{z*>8vUrwmyKT8K2%mC`BU<{B6>a+mP(;{k~Wzb!^XQ?wq&^ z;w+i=UR;UOBd@BM)vo$S+r&>G+{S-+?Y$6|2DQ!k(W*m2fCZ;$h8d)Khk&9pZBpq% zaUp#9=YZFL`L1(C=GdV6PaEzOH*&6P{jWSN>vXj$RqRugUJ*mH`-j*EN&ZaDI$fC)xP3tVP zDpBNWrMdfX9?FHzzdTq%qh*U}%}UogU9CWcQ~_Qo*0g(1NFnR_?0UhohRzkN07aZa zd_`RE60o}k#X;8omn9>APMKH{4>v)sUp(|ZcYZ32YPP>7Z!szml`ykU0TM1GM7@R% z(5*DCgV;P~ZYhkH6mWSks^@L~S$l7Mx0J43s4?p+Cd0e6Q1L1uBHjgkm`DoC z$SKe}=24ukm%tEd2)MC`YE$CPP$rb28Ey*%sEUo)#pOG*qo|8)21 z!sd+2($2!adg9P_*MC=_hQSbF{p~^)sNHV$$aH^|g&8?_A;-aMEb6oy-8ibNRgWQD zZ!vDb8YkcN1-##f^Bo2_d=6l-TjhrWT2E@fhhyTU#?R3Q5RKF9#`=;8>@1dXc#0BY zGAYL4KCt-3@!j;<*kQ?MOSB&Om38RiwCif9PAv{u8xvR@eETnjM_5*In(IgOVFQff zT&({$m>k?W<<__1I^Gizo6Fh6!TmKKR0Ji?G*`GCi=tbL-a{~Q8Mjku#A)mrVl(E- zFvP*l%JYW99}eDjiFfaShqLSYA&Ph8k0T6&AyG;?QR_Zudg6P-2bXeoz6CmJ2?j!~ zwia)|*EVj?4l#rfg_A!(0BQROe(fMhN&>YYQAz|Gv**p;b;xlkw{L+ZoW=p-Y$EYW z-aJnp(8)cV9b()p7r%fJ4(EA1RJu$~$`8(%ToCK^?&K;%`N7fBJKkHEf_B!UwO5gv zNmbh7dD~CQHg~+n;5KuyQgU##X=tYtsvRT>i6*QNlED4j>>sh8xfX6#2s1eOuU3G+ zoj`SH1Lsg-51mCGccTTTz_=;r?bLVl0`I>F6l=196P$eGx~z+HBy0yj;*$U^K;#pF zMvoqx_ngZg%PxQsocsYq?$?nv2C6!6$`V3#IWQMLikBiE^Ns7}6imBhilh-$jK-2j ze3!VnTKrg`5vQshJ-zA{y-Kk};3PHj2j1WoOuIy#qE&sqWdD}2JOKz-OZLEjlW$DH27QHJJ4h6% zB%&ARey_+?OkkDd=C}oJ*xztg#WjwBg2&}u%ggdqRN!xTl&RGj6^U^oXq-za9Mo^L zsca`z++DcajNwGbGCJfp+H|(Fg3t~S6Gz^PL=v#yN6iTN#?^D>T)=Pg2D~CS7^N>P zQ=gsdhUtl}`dHuO8STeu4GMR5*q^yY^o>)aL-=#a-<{?g{T#RRd0egyHU!rqYJ&_x zwIhz%NrohdZ?t)C=Lmk6!BA-^hyXcK4mgr?aJs%x3eCnWzXeI=#dF6ZQPrsQ+vJJOkr;NW_*e6iCt3(K2BY__BgS8HlR24*%;o`ZPry{A1F27 ze!FSH9HASRH!;!nh1w}P?Al)T4wkZCZn7B+K;HDONH;m_VTS=Op9|O*i4o6B>u~7* zEL!|R?*J5Uk~)h6C50;9%QGVO-Si^j7lda)c!SsBAT<-e8*x$ycsIQZ?SIfq1~ubF~j!GXfNLsw-^i94PP}8L?|%1IY8Ep zmY?v*&V*M;g~~SWzvanj;Zcs%P47Zt!fl`~PhwXb_KH+UEkMG-~fnsBH0wj%N%BIvMP#pv1`!@gnbh_EI0Ae z@>EU<-Y6P%dQ6GA#P{}-8kLg(lbb@_j_%^!tQD5i&-l0z8`897-0^x3ZLPnzcK$NOcGVr`xO?$P6F8&SiJ%Kqkkn-Z||K$Pok0L%Z!x zEyxHST_<~X9yj*wZu5)TZ*=V?~*m-wsyfL(i1luX;7^{mh$PTNR zb~}&$HxU`!5{OF%8{=|vp?mvt54~S^-hEE>tTNJlbXVS~1=+`_b)Ylv=$)P9&O3vh zs+O1=mN@i|es|!z^v)O47->826q<5B6kZ)DHM!e>%03s_Hw{sv%X)of=hJ z>rkuN3m4y!uxXp*2TUVvyNP%x#&=YOJPt}x8GMx#k-;U@^`w{YT%{UGUBt0j7uMTL zin1$ZibK;OwLym~(LzaSTsfm#? zN~y_R7CGW~jBIuG>B;cn+C~;7Xv9dTZqdzblWrEIgl^{PLT4G5%$ku@mIF0hb-~?< ziBIV7==4+9OnjiTK2_`i-C>SZ&MWVD{@8LbRV`sagd2i(#O`J z!-TdzhA-0u*KZ0G`d+I&hX6t7sLSd^BH)pDc_mRhH3~AZIx_(IK0Cdd`j!P%A*zDA zf|UqmP-{|Gk_9Cn@Ti{lUu8t2iV>nNh$=W@!Ey~NR}xA>2XrIEH8%PS%8RGB=1_B; zsD3TC!oGr=S&SG}VP;{E54JVx(R2gibTbH@tVutxHEMtChrcMj_!CoAKrfgwMYTrl z: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

    FtkNn!0g9R{V2fyuRoB@ti*A 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

    Jy%0>bobzPi$5jcbt{&(Dj2T~mBP0yboH5Lu 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≷ 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�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�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

    vo>G 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

    6Xr;mpME$@pP+{YWM#Gw>wrFU!m|{$h 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

    g;Q3mi>ff+7v7<2A+TzN53l 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 D13ce^ literal 0 HcmV?d00001 diff --git a/frontend/src/components/RouterTransition.tsx b/frontend/src/components/RouterTransition.tsx new file mode 100644 index 00000000..76352b37 --- /dev/null +++ b/frontend/src/components/RouterTransition.tsx @@ -0,0 +1,29 @@ +import { useEffect } from 'react'; +import { useRouter } from 'next/router'; +import { + startNavigationProgress, + completeNavigationProgress, + NavigationProgress, +} from '@mantine/nprogress'; + +const RouterTransition = () => { + const router = useRouter(); + useEffect(() => { + const handleStart = (url: string) => url !== router.asPath && startNavigationProgress(); + const handleComplete = () => completeNavigationProgress(); + + router.events.on('routeChangeStart', handleStart); + router.events.on('routeChangeComplete', handleComplete); + router.events.on('routeChangeError', handleComplete); + + return () => { + router.events.off('routeChangeStart', handleStart); + router.events.off('routeChangeComplete', handleComplete); + router.events.off('routeChangeError', handleComplete); + }; + }, [router]); + + return ; +}; + +export default RouterTransition; diff --git a/frontend/src/components/StatCounter/index.stories.tsx b/frontend/src/components/StatCounter/index.stories.tsx new file mode 100644 index 00000000..1bd2da74 --- /dev/null +++ b/frontend/src/components/StatCounter/index.stories.tsx @@ -0,0 +1,27 @@ +import { ComponentMeta, ComponentStory } from '@storybook/react'; +import StatCounter from '.'; + +export default { + title: 'Component/StatCounter', + component: StatCounter, +} as ComponentMeta; + +const Template: ComponentStory = (args) => ; + +export const Like = Template.bind({}); +Like.args = { + variant: 'like', + count: 100, +}; + +export const Comment = Template.bind({}); +Comment.args = { + variant: 'comment', + count: 80, +}; + +export const Scrap = Template.bind({}); +Scrap.args = { + variant: 'scrap', + count: 75, +}; diff --git a/frontend/src/components/StatCounter/index.tsx b/frontend/src/components/StatCounter/index.tsx new file mode 100644 index 00000000..130b5252 --- /dev/null +++ b/frontend/src/components/StatCounter/index.tsx @@ -0,0 +1,47 @@ +import styled from '@emotion/styled'; +import { useTheme } from '@emotion/react'; +import { IconHeart, IconBookmark, IconMessageCircle2 } from '@tabler/icons'; +import { Text } from '@mantine/core'; + +export interface Props { + /** + * Stat์˜ ์ข…๋ฅ˜๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. + * ๊ฐ๊ฐ ์ข‹์•„์š”, ๋Œ“๊ธ€, ์Šคํฌ๋žฉ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. + */ + variant: 'like' | 'comment' | 'scrap'; + /** + * Stat์˜ ์ˆ˜๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. + */ + count: number; +} + +const StatCounter = ({ variant, count = 0 }: Props) => { + const { + colors: { red, cyan, yellow }, + } = useTheme(); + const color = variant === 'like' ? red[7] : variant === 'comment' ? cyan[7] : yellow[7]; + const Icon = + variant === 'like' ? ( + + ) : variant === 'comment' ? ( + + ) : ( + + ); + return ( + + {Icon} + + {count} + + + ); +}; + +const StatCounterWrapper = styled.div` + display: flex; + align-items: center; + gap: 0.5rem; +`; + +export default StatCounter; diff --git a/frontend/src/pages/_app.tsx b/frontend/src/pages/_app.tsx index 45580992..426e0c95 100644 --- a/frontend/src/pages/_app.tsx +++ b/frontend/src/pages/_app.tsx @@ -1,6 +1,23 @@ -import '@styles/globals.css'; -import type { AppProps } from 'next/app'; +import { MantineProvider } from '@mantine/core'; +import Head from 'next/head'; +import { AppProps } from 'next/app'; + +import RouterTransition from '@components/RouterTransition'; +import theme from '@styles/theme'; +import CustomFonts from '@styles/CustomFont'; export default function App({ Component, pageProps }: AppProps) { - return ; + return ( + <> + + Page title + + + + + + + + + ); } diff --git a/frontend/src/pages/_document.tsx b/frontend/src/pages/_document.tsx new file mode 100644 index 00000000..6c633fbf --- /dev/null +++ b/frontend/src/pages/_document.tsx @@ -0,0 +1,20 @@ +import { createGetInitialProps } from '@mantine/next'; +import Document, { Head, Html, Main, NextScript } from 'next/document'; + +const getInitialProps = createGetInitialProps(); + +export default class _Document extends Document { + static getInitialProps = getInitialProps; + + render() { + return ( + + + +

    + + + + ); + } +} diff --git a/frontend/src/pages/index.tsx b/frontend/src/pages/index.tsx index c422f753..f5a355c8 100644 --- a/frontend/src/pages/index.tsx +++ b/frontend/src/pages/index.tsx @@ -1,65 +1,51 @@ import Head from 'next/head'; -import Image from 'next/image'; -import styles from '@styles/Home.module.css'; +import { Button, Slider, createPolymorphicComponent, ButtonProps } from '@mantine/core'; +import { IconDatabase } from '@tabler/icons'; +import styled from '@emotion/styled'; +import { useRouter } from 'next/router'; + +const _StyledButton = styled(Button)` + box-shadow: rgba(0, 0, 0, 0.24) 0px 3px 8px; + font-weight: ${({ theme }) => theme.headings.fontWeight}; + color: ${({ theme }) => theme.colors.indigo[8]}; +`; + +const StyledButton = createPolymorphicComponent<'button', ButtonProps>(_StyledButton); + +const StyledSlider = styled(Slider)` + & .mantine-Slider-bar { + background-color: pink; + } + + & .mantine-Slider-thumb { + border-color: pink; + background-color: white; + width: 24px; + height: 24px; + } +`; export default function Home() { + const router = useRouter(); + + const handleClick = () => { + void router.push('/hello'); + }; + return ( -
    + ); } diff --git a/frontend/src/styles/CustomFont.tsx b/frontend/src/styles/CustomFont.tsx new file mode 100644 index 00000000..8ba55aea --- /dev/null +++ b/frontend/src/styles/CustomFont.tsx @@ -0,0 +1,47 @@ +import { Global } from '@mantine/core'; + +const CustomFonts = () => { + return ( + + ); +}; + +export default CustomFonts; diff --git a/frontend/src/styles/Home.module.css b/frontend/src/styles/Home.module.css deleted file mode 100644 index bd50f42f..00000000 --- a/frontend/src/styles/Home.module.css +++ /dev/null @@ -1,129 +0,0 @@ -.container { - padding: 0 2rem; -} - -.main { - min-height: 100vh; - padding: 4rem 0; - flex: 1; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; -} - -.footer { - display: flex; - flex: 1; - padding: 2rem 0; - border-top: 1px solid #eaeaea; - justify-content: center; - align-items: center; -} - -.footer a { - display: flex; - justify-content: center; - align-items: center; - flex-grow: 1; -} - -.title a { - color: #0070f3; - text-decoration: none; -} - -.title a:hover, -.title a:focus, -.title a:active { - text-decoration: underline; -} - -.title { - margin: 0; - line-height: 1.15; - font-size: 4rem; -} - -.title, -.description { - text-align: center; -} - -.description { - margin: 4rem 0; - line-height: 1.5; - font-size: 1.5rem; -} - -.code { - background: #fafafa; - border-radius: 5px; - padding: 0.75rem; - font-size: 1.1rem; - font-family: Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, - Bitstream Vera Sans Mono, Courier New, monospace; -} - -.grid { - display: flex; - align-items: center; - justify-content: center; - flex-wrap: wrap; - max-width: 800px; -} - -.card { - margin: 1rem; - padding: 1.5rem; - text-align: left; - color: inherit; - text-decoration: none; - border: 1px solid #eaeaea; - border-radius: 10px; - transition: color 0.15s ease, border-color 0.15s ease; - max-width: 300px; -} - -.card:hover, -.card:focus, -.card:active { - color: #0070f3; - border-color: #0070f3; -} - -.card h2 { - margin: 0 0 1rem 0; - font-size: 1.5rem; -} - -.card p { - margin: 0; - font-size: 1.25rem; - line-height: 1.5; -} - -.logo { - height: 1em; - margin-left: 0.5rem; -} - -@media (max-width: 600px) { - .grid { - width: 100%; - flex-direction: column; - } -} - -@media (prefers-color-scheme: dark) { - .card, - .footer { - border-color: #222; - } - .code { - background: #111; - } - .logo img { - filter: invert(1); - } -} diff --git a/frontend/src/styles/globals.css b/frontend/src/styles/globals.css deleted file mode 100644 index 36aac7e7..00000000 --- a/frontend/src/styles/globals.css +++ /dev/null @@ -1,26 +0,0 @@ -html, -body { - padding: 0; - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, - Fira Sans, Droid Sans, Helvetica Neue, sans-serif; -} - -a { - color: inherit; - text-decoration: none; -} - -* { - box-sizing: border-box; -} - -@media (prefers-color-scheme: dark) { - html { - color-scheme: dark; - } - body { - color: white; - background: black; - } -} diff --git a/frontend/src/styles/theme.ts b/frontend/src/styles/theme.ts new file mode 100644 index 00000000..84a805ce --- /dev/null +++ b/frontend/src/styles/theme.ts @@ -0,0 +1,49 @@ +import { MantineThemeOverride } from '@mantine/core'; + +const theme: MantineThemeOverride = { + colorScheme: 'light', + focusRing: 'auto', + defaultRadius: 'sm', + primaryColor: 'indigo', + activeStyles: { + transform: 'scale(0.95)', + }, + defaultGradient: { + from: 'indigo', + to: 'cyan', + deg: 45, + }, + loader: 'oval', + cursorType: 'pointer', + fontFamily: 'NanumSquareNeo, sans-serif', + lineHeight: 1.2, + fontSizes: { + xs: 10, + sm: 12, + md: 14, + lg: 16, + xl: 20, + }, + spacing: { + xs: 4, + sm: 8, + md: 12, + lg: 16, + xl: 20, + }, + + headings: { + fontFamily: 'NanumSquareNeo, sans-serif', + fontWeight: 900, + sizes: { + h1: { fontSize: 32 }, + h2: { fontSize: 24 }, + h3: { fontSize: 20 }, + h4: { fontSize: 16 }, + h5: { fontSize: 14 }, + h6: { fontSize: 12 }, + }, + }, +}; + +export default theme; diff --git a/frontend/src/typings/emotion.d.ts b/frontend/src/typings/emotion.d.ts new file mode 100644 index 00000000..b78730f2 --- /dev/null +++ b/frontend/src/typings/emotion.d.ts @@ -0,0 +1,6 @@ +import '@emotion/react'; +import type { MantineTheme } from '@mantine/core'; + +declare module '@emotion/react' { + export interface Theme extends MantineTheme {} +} diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json index 9aff2a97..dae93b32 100644 --- a/frontend/tsconfig.json +++ b/frontend/tsconfig.json @@ -19,6 +19,7 @@ "skipLibCheck": true, "sourceMap": true, "strict": true, + "strictNullChecks": false, "target": "es2018", "incremental": true, "baseUrl": "src", @@ -26,6 +27,6 @@ "@*": ["*"] } }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".storybook/**/*.tsx"], "exclude": ["node_modules"] } From ca6a531946ad97006e9b8367c231c593d4d5abb8 Mon Sep 17 00:00:00 2001 From: MinGyeong Park <37508296+kong430@users.noreply.github.com> Date: Wed, 16 Nov 2022 21:12:27 +0900 Subject: [PATCH 004/142] =?UTF-8?q?[Feature]=20=ED=94=84=EB=A1=A0=ED=8A=B8?= =?UTF-8?q?=EC=97=94=EB=93=9C=20react-query=20=EA=B8=B0=EB=B3=B8=20?= =?UTF-8?q?=EC=84=B8=ED=8C=85=20(#22)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :goal_net: chore: react-query ์„ค์น˜ * :goal_net: chore: eslint strict-boolean-expressions rule off ์„ค์ • * :goal_net: chore: react-query, react-query-devtools ์„ค์น˜ * :goal_net: chore: ์›๊ฒฉ์— ์˜ฌ๋ผ๊ฐ„ .idea ํด๋” ์ œ๊ฑฐ * :sparkles: feature: QueryClient ์ ์šฉ --- frontend/.eslintrc.json | 2 +- frontend/package-lock.json | 19551 +--------------------------------- frontend/package.json | 3 + frontend/src/pages/_app.tsx | 18 +- 4 files changed, 393 insertions(+), 19181 deletions(-) diff --git a/frontend/.eslintrc.json b/frontend/.eslintrc.json index a88da503..3a5268b1 100644 --- a/frontend/.eslintrc.json +++ b/frontend/.eslintrc.json @@ -36,10 +36,10 @@ "allowTemplateLiterals": true } ], // ๋ฌธ์ž์—ด ๋“ค์„ ์Œ๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ธ๋„๋ก ๊ฐ•์ œ, - "no-console": "warn", "@typescript-eslint/explicit-function-return-type": "off", "@typescript-eslint/semi": "off", "@typescript-eslint/space-before-function-paren": "off", + "no-console": "warn", "@typescript-eslint/strict-boolean-expressions": "off", "@typescript-eslint/no-floating-promises": "warn" } diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 0cb923ad..4e31d4c6 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1,7 +1,7 @@ { "name": "frontend", "version": "0.1.0", - "lockfileVersion": 2, + "lockfileVersion": 3, "requires": true, "packages": { "": { @@ -16,6 +16,8 @@ "@mantine/next": "^5.7.2", "@mantine/nprogress": "^5.7.2", "@tabler/icons": "^1.111.0", + "@tanstack/react-query": "^4.16.1", + "@tanstack/react-query-devtools": "^4.16.1", "next": "^12.3.3", "react": "^17.0.2", "react-dom": "^17.0.2" @@ -33,6 +35,7 @@ "@types/node": "^18.11.9", "@types/react": "^18.0.25", "@types/react-dom": "^18.0.9", + "@types/react-query": "^1.2.9", "@typescript-eslint/eslint-plugin": "^5.43.0", "babel-loader": "^8.3.0", "eslint": "8.22.0", @@ -3047,36 +3050,6 @@ "glob": "7.1.7" } }, - "node_modules/@next/swc-android-arm-eabi": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.3.3.tgz", - "integrity": "sha512-5O/ZIX6hlIRGMy1R2f/8WiCZ4Hp4WTC0FcTuz8ycQ28j/mzDnmzjVoayVVr+ZmfEKQayFrRu+vxHjFyY0JGQlQ==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-android-arm64": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.3.3.tgz", - "integrity": "sha512-2QWreRmlxYRDtnLYn+BI8oukHwcP7W0zGIY5R2mEXRjI4ARqCLdu8RmcT9Vemw7RfeAVKA/4cv/9PY0pCcQpNA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, "node_modules/@next/swc-darwin-arm64": { "version": "12.3.3", "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.3.3.tgz", @@ -3092,156 +3065,6 @@ "node": ">= 10" } }, - "node_modules/@next/swc-darwin-x64": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.3.3.tgz", - "integrity": "sha512-gRYvTKrRYynjFQUDJ+upHMcBiNz0ii0m7zGgmUTlTSmrBWqVSzx79EHYT7Nn4GWHM+a/W+2VXfu+lqHcJeQ9gQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-freebsd-x64": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.3.3.tgz", - "integrity": "sha512-r+GLATzCjjQI82bgrIPXWEYBwZonSO64OThk5wU6HduZlDYTEDxZsFNoNoesCDWCgRrgg+OXj7WLNy1WlvfX7w==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm-gnueabihf": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.3.3.tgz", - "integrity": "sha512-juvRj1QX9jmQScL4nV0rROtYUFgWP76zfdn1fdfZ2BhvwUugIAq8x+jLVGlnXKUhDrP9+RrAufqXjjVkK+uBxA==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.3.3.tgz", - "integrity": "sha512-hzinybStPB+SzS68hR5rzOngOH7Yd/jFuWGeg9qS5WifYXHpqwGH2BQeKpjVV0iJuyO9r309JKrRWMrbfhnuBA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.3.3.tgz", - "integrity": "sha512-oyfQYljCwf+9zUu1YkTZbRbyxmcHzvJPMGOxC3kJOReh3kCUoGcmvAxUPMtFD6FSYjJ+eaog4+2IFHtYuAw/bQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.3.3.tgz", - "integrity": "sha512-epv4FMazj/XG70KTTnrZ0H1VtL6DeWOvyHLHYy7f5PdgDpBXpDTFjVqhP8NFNH8HmaDDdeL1NvQD07AXhyvUKA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.3.3.tgz", - "integrity": "sha512-bG5QODFy59XnSFTiPyIAt+rbPdphtvQMibtOVvyjwIwsBUw7swJ6k+6PSPVYEYpi6SHzi3qYBsro39ayGJKQJg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.3.3.tgz", - "integrity": "sha512-FbnT3reJ3MbTJ5W0hvlCCGGVDSpburzT5XGC9ljBJ4kr+85iNTLjv7+vrPeDdwHEqtGmdZgnabkLVCI4yFyCag==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-ia32-msvc": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.3.3.tgz", - "integrity": "sha512-M/fKZC2tMGWA6eTsIniNEBpx2prdR8lIxvSO3gv5P6ymZOGVWCvEMksnTkPAjHnU6d8r8eCiuGKm3UNo7zCTpQ==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.3.3.tgz", - "integrity": "sha512-Ku9mfGwmNtk44o4B/jEWUxBAT4tJ3S7QbBMLJdL1GmtRZ05LGL36OqWjLvBPr8dFiHOQQbYoAmYfQw7zeGypYA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, "node_modules/@nicolo-ribaudo/chokidar-2": { "version": "2.1.8-no-fsevents.3", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", @@ -9346,6 +9169,75 @@ } } }, + "node_modules/@tanstack/match-sorter-utils": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@tanstack/match-sorter-utils/-/match-sorter-utils-8.1.1.tgz", + "integrity": "sha512-IdmEekEYxQsoLOR0XQyw3jD1GujBpRRYaGJYQUw1eOT1eUugWxdc7jomh1VQ1EKHcdwDLpLaCz/8y4KraU4T9A==", + "dependencies": { + "remove-accents": "0.4.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kentcdodds" + } + }, + "node_modules/@tanstack/query-core": { + "version": "4.15.1", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.15.1.tgz", + "integrity": "sha512-+UfqJsNbPIVo0a9ANW0ZxtjiMfGLaaoIaL9vZeVycvmBuWywJGtSi7fgPVMCPdZQFOzMsaXaOsDtSKQD5xLRVQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/react-query": { + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.16.1.tgz", + "integrity": "sha512-PDE9u49wSDykPazlCoLFevUpceLjQ0Mm8i6038HgtTEKb/aoVnUZdlUP7C392ds3Cd75+EGlHU7qpEX06R7d9Q==", + "dependencies": { + "@tanstack/query-core": "4.15.1", + "use-sync-external-store": "^1.2.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-native": "*" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, + "node_modules/@tanstack/react-query-devtools": { + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-4.16.1.tgz", + "integrity": "sha512-VrDYLmG+OOcvGSZL5avG4R8jhqeMFP7pzW2sh2BWEV9UfI+aocG+CW8y8ygacxuKy48m8Tyo/xfe8H1z9BGb+g==", + "dependencies": { + "@tanstack/match-sorter-utils": "8.1.1", + "superjson": "^1.10.0", + "use-sync-external-store": "^1.2.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "@tanstack/react-query": "4.16.1", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/@testing-library/dom": { "version": "8.19.0", "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.19.0.tgz", @@ -9596,6 +9488,16 @@ "@types/react": "*" } }, + "node_modules/@types/react-query": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@types/react-query/-/react-query-1.2.9.tgz", + "integrity": "sha512-xfVcv5zjC6fGf6axPyKxdXNm9RKK9OFzSIyZeCR3r9h4zDuqSpHc8ilTBtfQ1zU/uCx+tAsB+W6vzdCBMu1jtg==", + "deprecated": "This is a stub types definition. react-query provides its own type definitions, so you do not need this installed.", + "dev": true, + "dependencies": { + "react-query": "*" + } + }, "node_modules/@types/scheduler": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", @@ -11291,7 +11193,6 @@ "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", "dev": true, - "optional": true, "engines": { "node": ">=0.6" } @@ -11456,6 +11357,22 @@ "node": ">=8" } }, + "node_modules/broadcast-channel": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/broadcast-channel/-/broadcast-channel-3.7.0.tgz", + "integrity": "sha512-cIAKJXAxGJceNZGTZSBzMxzyOn72cVgPnKx4dc6LRjQgbaJUQqhy5rzL3zbMxkMWsGKkv2hSFkPRMEXfoMZ2Mg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.7.2", + "detect-node": "^2.1.0", + "js-sha3": "0.8.0", + "microseconds": "0.2.0", + "nano-time": "1.0.0", + "oblivious-set": "1.0.0", + "rimraf": "3.0.2", + "unload": "2.2.0" + } + }, "node_modules/brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", @@ -12487,6 +12404,20 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "dev": true }, + "node_modules/copy-anything": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.2.tgz", + "integrity": "sha512-CzATjGXzUQ0EvuvgOCI6A4BGOo2bcVx8B+eC2nF862iv9fopnPQwlrbACakNCHRIJbCSBj+J/9JeDf60k64MkA==", + "dependencies": { + "is-what": "^4.1.6" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, "node_modules/copy-concurrently": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", @@ -13312,6 +13243,12 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, "node_modules/detect-package-manager": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/detect-package-manager/-/detect-package-manager-2.0.1.tgz", @@ -17185,6 +17122,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-what": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.7.tgz", + "integrity": "sha512-DBVOQNiPKnGMxRMLIYSwERAS5MVY1B7xYiGnpgctsOFvVDz9f9PFXXxMcTOHuoqYp4NK9qFYQaIC1NRRxLMpBQ==", + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, "node_modules/is-whitespace-character": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", @@ -17487,6 +17435,12 @@ "node": ">= 10.13.0" } }, + "node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", + "dev": true + }, "node_modules/js-string-escape": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", @@ -17944,6 +17898,16 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/match-sorter": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/match-sorter/-/match-sorter-6.3.1.tgz", + "integrity": "sha512-mxybbo3pPNuA+ZuCUhm5bwNkXrJTbsk5VWbR5wiwz/GC6LIiegBGn2w3O08UG/jdbYLinw51fSQ5xNU1U3MgBw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.12.5", + "remove-accents": "0.4.2" + } + }, "node_modules/md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -18264,7 +18228,13 @@ "node": ">=8.6" } }, - "node_modules/miller-rabin": { + "node_modules/microseconds": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/microseconds/-/microseconds-0.2.0.tgz", + "integrity": "sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA==", + "dev": true + }, + "node_modules/miller-rabin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", @@ -18597,6 +18567,15 @@ "dev": true, "optional": true }, + "node_modules/nano-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/nano-time/-/nano-time-1.0.0.tgz", + "integrity": "sha512-flnngywOoQ0lLQOTRNexn2gGSNuM9bKj9RZAWSzhQ+UJYaAFG9bac4DW9VHjUAzrOaIcajHybCTHe/bkvozQqA==", + "dev": true, + "dependencies": { + "big-integer": "^1.6.16" + } + }, "node_modules/nanoid": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", @@ -19218,6 +19197,12 @@ "integrity": "sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==", "dev": true }, + "node_modules/oblivious-set": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/oblivious-set/-/oblivious-set-1.0.0.tgz", + "integrity": "sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw==", + "dev": true + }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -20486,6 +20471,32 @@ "resolved": "https://registry.npmjs.org/react-property/-/react-property-2.0.0.tgz", "integrity": "sha512-kzmNjIgU32mO4mmH5+iUyrqlpFQhF8K2k7eZ4fdLSOPFrD1XgEuSBv9LDEgxRXTMBqMd8ppT0x6TIzqE5pdGdw==" }, + "node_modules/react-query": { + "version": "3.39.2", + "resolved": "https://registry.npmjs.org/react-query/-/react-query-3.39.2.tgz", + "integrity": "sha512-F6hYDKyNgDQfQOuR1Rsp3VRzJnWHx6aRnnIZHMNGGgbL3SBgpZTDg8MQwmxOgpCAoqZJA+JSNCydF1xGJqKOCA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.5.5", + "broadcast-channel": "^3.4.1", + "match-sorter": "^6.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, "node_modules/react-refresh": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", @@ -21008,6 +21019,11 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/remove-accents": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.2.tgz", + "integrity": "sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA==" + }, "node_modules/remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", @@ -22874,6 +22890,17 @@ "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz", "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==" }, + "node_modules/superjson": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-1.11.0.tgz", + "integrity": "sha512-6PfAg1FKhqkwWvPb2uXhH4MkMttdc17eJ91+Aoz4s1XUEDZFmLfFx/xVA3wgkPxAGy5dpozgGdK6V/n20Wj9yg==", + "dependencies": { + "copy-anything": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -23679,6 +23706,16 @@ "node": ">= 10.0.0" } }, + "node_modules/unload": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unload/-/unload-2.2.0.tgz", + "integrity": "sha512-B60uB5TNBLtN6/LsgAf3udH9saB5p7gqJwcFfbOEZ8BcBHnGwCf6G/TGiEqkRAxX7zAFIUtzdrXQSdL3Q/wqNA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.6.2", + "detect-node": "^2.0.4" + } + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -24845,19022 +24882,186 @@ "type": "github", "url": "https://github.com/sponsors/wooorm" } - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@babel/cli": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.19.3.tgz", - "integrity": "sha512-643/TybmaCAe101m2tSVHi9UKpETXP9c/Ff4mD2tAwkdP6esKIfaauZFc67vGEM6r9fekbEGid+sZhbEnSe3dg==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.8", - "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.3", - "chokidar": "^3.4.0", - "commander": "^4.0.1", - "convert-source-map": "^1.1.0", - "fs-readdir-recursive": "^1.1.0", - "glob": "^7.2.0", - "make-dir": "^2.1.0", - "slash": "^2.0.0" - }, - "dependencies": { - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - } - } }, - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "requires": { - "@babel/highlight": "^7.18.6" + "node_modules/@next/swc-android-arm-eabi": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.3.3.tgz", + "integrity": "sha512-5O/ZIX6hlIRGMy1R2f/8WiCZ4Hp4WTC0FcTuz8ycQ28j/mzDnmzjVoayVVr+ZmfEKQayFrRu+vxHjFyY0JGQlQ==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" } }, - "@babel/compat-data": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", - "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==", - "dev": true - }, - "@babel/core": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.2.tgz", - "integrity": "sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.2", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-module-transforms": "^7.20.2", - "@babel/helpers": "^7.20.1", - "@babel/parser": "^7.20.2", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "dependencies": { - "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "node_modules/@next/swc-android-arm64": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.3.3.tgz", + "integrity": "sha512-2QWreRmlxYRDtnLYn+BI8oukHwcP7W0zGIY5R2mEXRjI4ARqCLdu8RmcT9Vemw7RfeAVKA/4cv/9PY0pCcQpNA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" } }, - "@babel/generator": { - "version": "7.20.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz", - "integrity": "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==", - "dev": true, - "requires": { - "@babel/types": "^7.20.2", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } + "node_modules/@next/swc-darwin-x64": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.3.3.tgz", + "integrity": "sha512-gRYvTKrRYynjFQUDJ+upHMcBiNz0ii0m7zGgmUTlTSmrBWqVSzx79EHYT7Nn4GWHM+a/W+2VXfu+lqHcJeQ9gQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" } }, - "@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" + "node_modules/@next/swc-freebsd-x64": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.3.3.tgz", + "integrity": "sha512-r+GLATzCjjQI82bgrIPXWEYBwZonSO64OThk5wU6HduZlDYTEDxZsFNoNoesCDWCgRrgg+OXj7WLNy1WlvfX7w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" } }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", - "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", - "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.9" + "node_modules/@next/swc-linux-arm-gnueabihf": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.3.3.tgz", + "integrity": "sha512-juvRj1QX9jmQScL4nV0rROtYUFgWP76zfdn1fdfZ2BhvwUugIAq8x+jLVGlnXKUhDrP9+RrAufqXjjVkK+uBxA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" } }, - "@babel/helper-compilation-targets": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", - "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.20.0", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.3.3.tgz", + "integrity": "sha512-hzinybStPB+SzS68hR5rzOngOH7Yd/jFuWGeg9qS5WifYXHpqwGH2BQeKpjVV0iJuyO9r309JKrRWMrbfhnuBA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" } }, - "@babel/helper-create-class-features-plugin": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.2.tgz", - "integrity": "sha512-k22GoYRAHPYr9I+Gvy2ZQlAe5mGy8BqWst2wRt8cwIufWTxrsVshhIBvYNqC80N0GSFWTsqRVexOtfzlgOEDvA==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.19.1", - "@babel/helper-split-export-declaration": "^7.18.6" + "node_modules/@next/swc-linux-arm64-musl": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.3.3.tgz", + "integrity": "sha512-oyfQYljCwf+9zUu1YkTZbRbyxmcHzvJPMGOxC3kJOReh3kCUoGcmvAxUPMtFD6FSYjJ+eaog4+2IFHtYuAw/bQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" } }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz", - "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.1.0" + "node_modules/@next/swc-linux-x64-gnu": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.3.3.tgz", + "integrity": "sha512-epv4FMazj/XG70KTTnrZ0H1VtL6DeWOvyHLHYy7f5PdgDpBXpDTFjVqhP8NFNH8HmaDDdeL1NvQD07AXhyvUKA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" } }, - "@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "dev": true - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", - "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", - "dev": true, - "requires": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", - "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", - "dev": true, - "requires": { - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-transforms": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", - "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==" - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-replace-supers": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", - "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.19.1", - "@babel/types": "^7.19.0" - } - }, - "@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "dev": true, - "requires": { - "@babel/types": "^7.20.2" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", - "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", - "dev": true, - "requires": { - "@babel/types": "^7.20.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" - }, - "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" - }, - "@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "dev": true - }, - "@babel/helper-wrap-function": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz", - "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.0", - "@babel/types": "^7.19.0" - } - }, - "@babel/helpers": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz", - "integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==", - "dev": true, - "requires": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.0" - } - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "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" - } - } - } - }, - "@babel/parser": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", - "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==", - "dev": true - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", - "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-proposal-optional-chaining": "^7.18.9" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.1.tgz", - "integrity": "sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", - "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-proposal-decorators": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.20.2.tgz", - "integrity": "sha512-nkBH96IBmgKnbHQ5gXFrcmez+Z9S2EIDKDQGp005ROqBigc88Tky4rzCnlP/lnlj245dCEQl4/YyV0V1kYh5dw==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.20.2", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.19.1", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/plugin-syntax-decorators": "^7.19.0" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-proposal-export-default-from": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.18.10.tgz", - "integrity": "sha512-5H2N3R2aQFxkV4PIBUR/i7PUSwgTZjouJKzI8eKswfIjT0PhvzkPn0t0wIS5zn6maQuvtT0t1oHtMUz61LOuow==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-default-from": "^7.18.6" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", - "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz", - "integrity": "sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.1" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", - "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", - "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@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==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-decorators": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.19.0.tgz", - "integrity": "sha512-xaBZUEDntt4faL1yN8oIFlhfXeQAWJW7CLKYsHTUqriCUbj8xOra8bfxxKGi/UwExPFBuPdH4XfHc9rGQhrVkQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@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==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-default-from": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.18.6.tgz", - "integrity": "sha512-Kr//z3ujSVNx6E9z9ih5xXXMqK07VVTuqPmqGe6Mss/zW5XPeLZeSDZoP9ab/hT4wPKqAgjl2PnhPrcpk8Seew==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-flow": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz", - "integrity": "sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", - "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.19.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==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", - "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", - "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", - "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-remap-async-to-generator": "^7.18.6" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.2.tgz", - "integrity": "sha512-y5V15+04ry69OV2wULmwhEA6jwSWXO1TwAtIwiPXcvHcoOQUqpyMVd2bDsQJMW8AurjulIyUV8kDqtjSwHy1uQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz", - "integrity": "sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.19.1", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" - }, - "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/plugin-transform-computed-properties": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", - "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz", - "integrity": "sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", - "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-flow-strip-types": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.19.0.tgz", - "integrity": "sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/plugin-syntax-flow": "^7.18.6" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", - "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", - "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz", - "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", - "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-simple-access": "^7.19.4" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz", - "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-validator-identifier": "^7.19.1" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz", - "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.19.0", - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.3.tgz", - "integrity": "sha512-oZg/Fpx0YDrj13KsLyO8I/CX3Zdw7z0O9qOd95SqcoIzuqy/WTGWvePeHAnZCN54SfdyjHcb1S30gc8zlzlHcA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-react-display-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", - "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", - "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.19.0" - } - }, - "@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", - "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", - "dev": true, - "requires": { - "@babel/plugin-transform-react-jsx": "^7.18.6" - } - }, - "@babel/plugin-transform-react-pure-annotations": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", - "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", - "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "regenerator-transform": "^0.15.0" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", - "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", - "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-typescript": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.2.tgz", - "integrity": "sha512-jvS+ngBfrnTUBfOQq8NfGnSbF9BrqlR6hjJ2yVxMkmO5nL/cdifNbI30EfjRlN4g5wYWNnMPyj5Sa6R1pbLeag==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.20.2", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-typescript": "^7.20.0" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", - "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/preset-env": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", - "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.20.1", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.20.2", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.20.0", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.20.2", - "@babel/plugin-transform-classes": "^7.20.2", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.20.2", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.19.6", - "@babel/plugin-transform-modules-commonjs": "^7.19.6", - "@babel/plugin-transform-modules-systemjs": "^7.19.6", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.20.1", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.19.0", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.20.2", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/preset-flow": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.18.6.tgz", - "integrity": "sha512-E7BDhL64W6OUqpuyHnSroLnqyRTcG6ZdOBl1OKI/QK/HJfplqK/S3sq1Cckx7oTodJ5yOXyfw7rEADJ6UjoQDQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-flow-strip-types": "^7.18.6" - } - }, - "@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dev": true, - "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.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", - "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-react-display-name": "^7.18.6", - "@babel/plugin-transform-react-jsx": "^7.18.6", - "@babel/plugin-transform-react-jsx-development": "^7.18.6", - "@babel/plugin-transform-react-pure-annotations": "^7.18.6" - } - }, - "@babel/preset-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", - "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-typescript": "^7.18.6" - } - }, - "@babel/register": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.18.9.tgz", - "integrity": "sha512-ZlbnXDcNYHMR25ITwwNKT88JiaukkdVj/nG7r3wnuXkOTHc60Uy05PwMCPre0hSkY68E6zK3xz+vUJSP2jWmcw==", - "dev": true, - "requires": { - "clone-deep": "^4.0.1", - "find-cache-dir": "^2.0.0", - "make-dir": "^2.1.0", - "pirates": "^4.0.5", - "source-map-support": "^0.5.16" - } - }, - "@babel/runtime": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", - "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", - "requires": { - "regenerator-runtime": "^0.13.10" - } - }, - "@babel/runtime-corejs3": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.20.1.tgz", - "integrity": "sha512-CGulbEDcg/ND1Im7fUNRZdGXmX2MTWVVZacQi/6DiKE5HNwZ3aVTm5PV4lO8HHz0B2h8WQyvKKjbX5XgTtydsg==", - "dev": true, - "requires": { - "core-js-pure": "^3.25.1", - "regenerator-runtime": "^0.13.10" - } - }, - "@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" - } - }, - "@babel/traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", - "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.1", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.1", - "@babel/types": "^7.20.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "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.20.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", - "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", - "requires": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" - } - }, - "@base2/pretty-print-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@base2/pretty-print-object/-/pretty-print-object-1.0.1.tgz", - "integrity": "sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==", - "dev": true - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", - "dev": true, - "requires": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - } - }, - "@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true, - "optional": true - }, - "@design-systems/utils": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@design-systems/utils/-/utils-2.12.0.tgz", - "integrity": "sha512-Y/d2Zzr+JJfN6u1gbuBUb1ufBuLMJJRZQk+dRmw8GaTpqKx5uf7cGUYGTwN02dIb3I+Tf+cW8jcGBTRiFxdYFg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.11.2", - "clsx": "^1.0.4", - "focus-lock": "^0.8.0", - "react-merge-refs": "^1.0.0" - } - }, - "@devtools-ds/object-inspector": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@devtools-ds/object-inspector/-/object-inspector-1.2.0.tgz", - "integrity": "sha512-VztcwqVwScSvYdvJVZBJYsVO/2Pew3JPpFV3T9fuCHQLlHcLYOV3aU/kBS2ScuE2O1JN0ZbobLqFLa3vQF54Fw==", - "dev": true, - "requires": { - "@babel/runtime": "7.7.2", - "@devtools-ds/object-parser": "^1.2.0", - "@devtools-ds/themes": "^1.2.0", - "@devtools-ds/tree": "^1.2.0", - "clsx": "1.1.0" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.7.2.tgz", - "integrity": "sha512-JONRbXbTXc9WQE2mAZd1p0Z3DZ/6vaQIkgYMSTP3KjRCyd7rCZCcfhCyX+YjwcKxcZ82UrxbRD358bpExNgrjw==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.2" - } - }, - "clsx": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.0.tgz", - "integrity": "sha512-3avwM37fSK5oP6M5rQ9CNe99lwxhXDOeSWVPAOYF6OazUTgZCMb0yWlJpmdD74REy1gkEaFiub2ULv4fq9GUhA==", - "dev": true - } - } - }, - "@devtools-ds/object-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@devtools-ds/object-parser/-/object-parser-1.2.0.tgz", - "integrity": "sha512-SjGGyiFFY8dtUpiWXAvRSzRT+hE11EAAysrq2PsC/GVLf2ZLyT2nHlQO5kDStywyTz+fjw7S7pyDRj1HG9YTTA==", - "dev": true, - "requires": { - "@babel/runtime": "~7.5.4" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", - "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.2" - } - } - } - }, - "@devtools-ds/themes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@devtools-ds/themes/-/themes-1.2.0.tgz", - "integrity": "sha512-LimEITorE6yWZWWuMc6OiBfLQgPrQqWbyMEmfRUDPa3PHXoAY4SpDxczfg31fgyRDUNWnZhjaJH5bBbu8VEbIw==", - "dev": true, - "requires": { - "@babel/runtime": "~7.5.4", - "@design-systems/utils": "2.12.0", - "clsx": "1.1.0" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", - "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.2" - } - }, - "clsx": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.0.tgz", - "integrity": "sha512-3avwM37fSK5oP6M5rQ9CNe99lwxhXDOeSWVPAOYF6OazUTgZCMb0yWlJpmdD74REy1gkEaFiub2ULv4fq9GUhA==", - "dev": true - } - } - }, - "@devtools-ds/tree": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@devtools-ds/tree/-/tree-1.2.0.tgz", - "integrity": "sha512-hC4g4ocuo2eg7jsnzKdauxH0sDQiPW3KSM2+uK3kRgcmr9PzpBD5Kob+Y/WFSVKswFleftOGKL4BQLuRv0sPxA==", - "dev": true, - "requires": { - "@babel/runtime": "7.7.2", - "@devtools-ds/themes": "^1.2.0", - "clsx": "1.1.0" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.7.2.tgz", - "integrity": "sha512-JONRbXbTXc9WQE2mAZd1p0Z3DZ/6vaQIkgYMSTP3KjRCyd7rCZCcfhCyX+YjwcKxcZ82UrxbRD358bpExNgrjw==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.2" - } - }, - "clsx": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.0.tgz", - "integrity": "sha512-3avwM37fSK5oP6M5rQ9CNe99lwxhXDOeSWVPAOYF6OazUTgZCMb0yWlJpmdD74REy1gkEaFiub2ULv4fq9GUhA==", - "dev": true - } - } - }, - "@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "dev": true - }, - "@emotion/babel-plugin": { - "version": "11.10.5", - "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.5.tgz", - "integrity": "sha512-xE7/hyLHJac7D2Ve9dKroBBZqBT7WuPQmWcq7HSGb84sUuP4mlOWoB8dvVfD9yk5DHkU1m6RW7xSoDtnQHNQeA==", - "requires": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/plugin-syntax-jsx": "^7.17.12", - "@babel/runtime": "^7.18.3", - "@emotion/hash": "^0.9.0", - "@emotion/memoize": "^0.8.0", - "@emotion/serialize": "^1.1.1", - "babel-plugin-macros": "^3.1.0", - "convert-source-map": "^1.5.0", - "escape-string-regexp": "^4.0.0", - "find-root": "^1.1.0", - "source-map": "^0.5.7", - "stylis": "4.1.3" - } - }, - "@emotion/cache": { - "version": "11.10.5", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.5.tgz", - "integrity": "sha512-dGYHWyzTdmK+f2+EnIGBpkz1lKc4Zbj2KHd4cX3Wi8/OWr5pKslNjc3yABKH4adRGCvSX4VDC0i04mrrq0aiRA==", - "requires": { - "@emotion/memoize": "^0.8.0", - "@emotion/sheet": "^1.2.1", - "@emotion/utils": "^1.2.0", - "@emotion/weak-memoize": "^0.3.0", - "stylis": "4.1.3" - } - }, - "@emotion/hash": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.0.tgz", - "integrity": "sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==" - }, - "@emotion/is-prop-valid": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz", - "integrity": "sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==", - "requires": { - "@emotion/memoize": "^0.8.0" - } - }, - "@emotion/memoize": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.0.tgz", - "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==" - }, - "@emotion/react": { - "version": "11.10.5", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.5.tgz", - "integrity": "sha512-TZs6235tCJ/7iF6/rvTaOH4oxQg2gMAcdHemjwLKIjKz4rRuYe1HJ2TQJKnAcRAfOUDdU8XoDadCe1rl72iv8A==", - "requires": { - "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.10.5", - "@emotion/cache": "^11.10.5", - "@emotion/serialize": "^1.1.1", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@emotion/utils": "^1.2.0", - "@emotion/weak-memoize": "^0.3.0", - "hoist-non-react-statics": "^3.3.1" - } - }, - "@emotion/serialize": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.1.tgz", - "integrity": "sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA==", - "requires": { - "@emotion/hash": "^0.9.0", - "@emotion/memoize": "^0.8.0", - "@emotion/unitless": "^0.8.0", - "@emotion/utils": "^1.2.0", - "csstype": "^3.0.2" - } - }, - "@emotion/server": { - "version": "11.10.0", - "resolved": "https://registry.npmjs.org/@emotion/server/-/server-11.10.0.tgz", - "integrity": "sha512-MTvJ21JPo9aS02GdjFW4nhdwOi2tNNpMmAM/YED0pkxzjDNi5WbiTwXqaCnvLc2Lr8NFtjhT0az1vTJyLIHYcw==", - "requires": { - "@emotion/utils": "^1.2.0", - "html-tokenize": "^2.0.0", - "multipipe": "^1.0.2", - "through": "^2.3.8" - } - }, - "@emotion/sheet": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.1.tgz", - "integrity": "sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA==" - }, - "@emotion/styled": { - "version": "11.10.5", - "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.10.5.tgz", - "integrity": "sha512-8EP6dD7dMkdku2foLoruPCNkRevzdcBaY6q0l0OsbyJK+x8D9HWjX27ARiSIKNF634hY9Zdoedh8bJCiva8yZw==", - "requires": { - "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.10.5", - "@emotion/is-prop-valid": "^1.2.0", - "@emotion/serialize": "^1.1.1", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@emotion/utils": "^1.2.0" - } - }, - "@emotion/unitless": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", - "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" - }, - "@emotion/use-insertion-effect-with-fallbacks": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz", - "integrity": "sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==" - }, - "@emotion/utils": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz", - "integrity": "sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==" - }, - "@emotion/weak-memoize": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz", - "integrity": "sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==" - }, - "@eslint/eslintrc": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", - "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - } - }, - "@floating-ui/core": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.0.1.tgz", - "integrity": "sha512-bO37brCPfteXQfFY0DyNDGB3+IMe4j150KFQcgJ5aBP295p9nBGeHEs/p0czrRbtlHq4Px/yoPXO/+dOCcF4uA==" - }, - "@floating-ui/dom": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.0.4.tgz", - "integrity": "sha512-maYJRv+sAXTy4K9mzdv0JPyNW5YPVHrqtY90tEdI6XNpuLOP26Ci2pfwPsKBA/Wh4Z3FX5sUrtUFTdMYj9v+ug==", - "requires": { - "@floating-ui/core": "^1.0.1" - } - }, - "@floating-ui/react-dom": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-1.0.0.tgz", - "integrity": "sha512-uiOalFKPG937UCLm42RxjESTWUVpbbatvlphQAU6bsv+ence6IoVG8JOUZcy8eW81NkU+Idiwvx10WFLmR4MIg==", - "requires": { - "@floating-ui/dom": "^1.0.0" - } - }, - "@floating-ui/react-dom-interactions": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom-interactions/-/react-dom-interactions-0.10.3.tgz", - "integrity": "sha512-UEHqdnzyoiWNU5az/tAljr9iXFzN18DcvpMqW+/cXz4FEhDEB1ogLtWldOWCujLerPBnSRocADALafelOReMpw==", - "requires": { - "@floating-ui/react-dom": "^1.0.0", - "aria-hidden": "^1.1.3" - } - }, - "@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "dev": true - }, - "@humanwhocodes/config-array": { - "version": "0.10.7", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz", - "integrity": "sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/gitignore-to-minimatch": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", - "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", - "dev": true - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "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" - } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^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" - } - }, - "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" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true - }, - "@jest/transform": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", - "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^26.6.2", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-util": "^26.6.2", - "micromatch": "^4.0.2", - "pirates": "^4.0.1", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "dependencies": { - "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 - } - } - }, - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true - }, - "@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "@mantine/core": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/@mantine/core/-/core-5.7.2.tgz", - "integrity": "sha512-cDDvlYhDCzREfIZ33CRLQpXlv+UXRb4VBZWbfYxWXTRPV6gKNGXwlVmXcdDUJCcjRWLh9Wc4erWT8gdTAbvzsQ==", - "requires": { - "@floating-ui/react-dom-interactions": "^0.10.1", - "@mantine/styles": "5.7.2", - "@mantine/utils": "5.7.2", - "@radix-ui/react-scroll-area": "1.0.0", - "react-textarea-autosize": "8.3.4" - } - }, - "@mantine/hooks": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-5.7.2.tgz", - "integrity": "sha512-g+fxcnQwEeVM/5h+SAX/rDNL2s1652DGbP4xxfNg6yFqqhQzmtxQN7xsmkZ+ffx8wKhbsP5z13x6WZoxuJQh9Q==" - }, - "@mantine/next": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/@mantine/next/-/next-5.7.2.tgz", - "integrity": "sha512-rcGmr2u7SwG+/Zw/eZPmr/jloiHdeW+rW66q+MtUCoVdMD4ik9fXrOFRcIhDmeSFmE6aQ4hPFwXdSY3AdEYGQg==", - "requires": { - "@mantine/ssr": "5.7.2", - "@mantine/styles": "5.7.2" - } - }, - "@mantine/nprogress": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/@mantine/nprogress/-/nprogress-5.7.2.tgz", - "integrity": "sha512-PdVB8PImiz3TawFyNRgIrD/7t2pMfxmB6d+JPfs5+UZcG0nbATF17wvop+YsjsQ92LmEMby5sYIgH7qEhze1Sw==", - "requires": { - "@mantine/utils": "5.7.2" - } - }, - "@mantine/ssr": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/@mantine/ssr/-/ssr-5.7.2.tgz", - "integrity": "sha512-2DB5Df6eR4C9/V7lpmwQE8jVkSHSJBTqkZxjsYa1HsKeX4cNFM0SbRsNYk1bQHSq377DXh6PkVMqTzSDqGcFgw==", - "requires": { - "@mantine/styles": "5.7.2", - "html-react-parser": "1.4.12" - } - }, - "@mantine/styles": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/@mantine/styles/-/styles-5.7.2.tgz", - "integrity": "sha512-z5Mxf6Zp7lXzfIM77XkZ68Wp62lDSMJwEMoKm0Kz5tRGV4oMQwirbZf4ZJznZKK3HkaT7ct1ScxnCouEWzlKUg==", - "requires": { - "clsx": "1.1.1", - "csstype": "3.0.9" - }, - "dependencies": { - "csstype": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.9.tgz", - "integrity": "sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw==" - } - } - }, - "@mantine/utils": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/@mantine/utils/-/utils-5.7.2.tgz", - "integrity": "sha512-LE/ckEX+d1f5GOP1ARNEldUYybOp3Tualx5IYgeV06oyBOaeJaXs9Tco2NTM6j+opZwUbNuYEUmtp4bkArhpOg==" - }, - "@mdx-js/mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", - "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", - "dev": true, - "requires": { - "@babel/core": "7.12.9", - "@babel/plugin-syntax-jsx": "7.12.1", - "@babel/plugin-syntax-object-rest-spread": "7.8.3", - "@mdx-js/util": "1.6.22", - "babel-plugin-apply-mdx-type-prop": "1.6.22", - "babel-plugin-extract-import-names": "1.6.22", - "camelcase-css": "2.0.1", - "detab": "2.0.4", - "hast-util-raw": "6.0.1", - "lodash.uniq": "4.5.0", - "mdast-util-to-hast": "10.0.1", - "remark-footnotes": "2.0.0", - "remark-mdx": "1.6.22", - "remark-parse": "8.0.3", - "remark-squeeze-paragraphs": "4.0.0", - "style-to-object": "0.3.0", - "unified": "9.2.0", - "unist-builder": "2.0.3", - "unist-util-visit": "2.0.3" - }, - "dependencies": { - "@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "@mdx-js/react": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", - "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", - "dev": true - }, - "@mdx-js/util": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", - "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==", - "dev": true - }, - "@mrmlnc/readdir-enhanced": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", - "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", - "dev": true, - "requires": { - "call-me-maybe": "^1.0.1", - "glob-to-regexp": "^0.3.0" - }, - "dependencies": { - "glob-to-regexp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", - "integrity": "sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==", - "dev": true - } - } - }, - "@next/env": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/env/-/env-12.3.3.tgz", - "integrity": "sha512-H2pKuOasV9RgvVaWosB2rGSNeQShQpiDaF4EEjLyagIc3HwqdOw2/VAG/8Lq+adOwPv2P73O1hulTNad3k5MDw==" - }, - "@next/eslint-plugin-next": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.0.3.tgz", - "integrity": "sha512-slmTAHNKDyc7jhx4VF8lFbmOPWJ3PShtUUWpb6x9+ga59CyOxgP6AdcDhxfapnWYACKe/TwYiaveufu7LqXgZg==", - "dev": true, - "requires": { - "glob": "7.1.7" - } - }, - "@next/swc-android-arm-eabi": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.3.3.tgz", - "integrity": "sha512-5O/ZIX6hlIRGMy1R2f/8WiCZ4Hp4WTC0FcTuz8ycQ28j/mzDnmzjVoayVVr+ZmfEKQayFrRu+vxHjFyY0JGQlQ==", - "optional": true - }, - "@next/swc-android-arm64": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.3.3.tgz", - "integrity": "sha512-2QWreRmlxYRDtnLYn+BI8oukHwcP7W0zGIY5R2mEXRjI4ARqCLdu8RmcT9Vemw7RfeAVKA/4cv/9PY0pCcQpNA==", - "optional": true - }, - "@next/swc-darwin-arm64": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.3.3.tgz", - "integrity": "sha512-GtZdDLerM+VToCMFp+W+WhnT6sxHePQH4xZZiYD/Y8KFiwHbDRcJr2FPG0bAJnGNiSvv/QQnBq74wjZ9+7vhcQ==", - "optional": true - }, - "@next/swc-darwin-x64": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.3.3.tgz", - "integrity": "sha512-gRYvTKrRYynjFQUDJ+upHMcBiNz0ii0m7zGgmUTlTSmrBWqVSzx79EHYT7Nn4GWHM+a/W+2VXfu+lqHcJeQ9gQ==", - "optional": true - }, - "@next/swc-freebsd-x64": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.3.3.tgz", - "integrity": "sha512-r+GLATzCjjQI82bgrIPXWEYBwZonSO64OThk5wU6HduZlDYTEDxZsFNoNoesCDWCgRrgg+OXj7WLNy1WlvfX7w==", - "optional": true - }, - "@next/swc-linux-arm-gnueabihf": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.3.3.tgz", - "integrity": "sha512-juvRj1QX9jmQScL4nV0rROtYUFgWP76zfdn1fdfZ2BhvwUugIAq8x+jLVGlnXKUhDrP9+RrAufqXjjVkK+uBxA==", - "optional": true - }, - "@next/swc-linux-arm64-gnu": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.3.3.tgz", - "integrity": "sha512-hzinybStPB+SzS68hR5rzOngOH7Yd/jFuWGeg9qS5WifYXHpqwGH2BQeKpjVV0iJuyO9r309JKrRWMrbfhnuBA==", - "optional": true - }, - "@next/swc-linux-arm64-musl": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.3.3.tgz", - "integrity": "sha512-oyfQYljCwf+9zUu1YkTZbRbyxmcHzvJPMGOxC3kJOReh3kCUoGcmvAxUPMtFD6FSYjJ+eaog4+2IFHtYuAw/bQ==", - "optional": true - }, - "@next/swc-linux-x64-gnu": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.3.3.tgz", - "integrity": "sha512-epv4FMazj/XG70KTTnrZ0H1VtL6DeWOvyHLHYy7f5PdgDpBXpDTFjVqhP8NFNH8HmaDDdeL1NvQD07AXhyvUKA==", - "optional": true - }, - "@next/swc-linux-x64-musl": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.3.3.tgz", - "integrity": "sha512-bG5QODFy59XnSFTiPyIAt+rbPdphtvQMibtOVvyjwIwsBUw7swJ6k+6PSPVYEYpi6SHzi3qYBsro39ayGJKQJg==", - "optional": true - }, - "@next/swc-win32-arm64-msvc": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.3.3.tgz", - "integrity": "sha512-FbnT3reJ3MbTJ5W0hvlCCGGVDSpburzT5XGC9ljBJ4kr+85iNTLjv7+vrPeDdwHEqtGmdZgnabkLVCI4yFyCag==", - "optional": true - }, - "@next/swc-win32-ia32-msvc": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.3.3.tgz", - "integrity": "sha512-M/fKZC2tMGWA6eTsIniNEBpx2prdR8lIxvSO3gv5P6ymZOGVWCvEMksnTkPAjHnU6d8r8eCiuGKm3UNo7zCTpQ==", - "optional": true - }, - "@next/swc-win32-x64-msvc": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.3.3.tgz", - "integrity": "sha512-Ku9mfGwmNtk44o4B/jEWUxBAT4tJ3S7QbBMLJdL1GmtRZ05LGL36OqWjLvBPr8dFiHOQQbYoAmYfQw7zeGypYA==", - "optional": true - }, - "@nicolo-ribaudo/chokidar-2": { - "version": "2.1.8-no-fsevents.3", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", - "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==", - "dev": true, - "optional": true - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", - "dev": true, - "requires": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - } - }, - "@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "dev": true, - "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - } - }, - "@pmmmwh/react-refresh-webpack-plugin": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.9.tgz", - "integrity": "sha512-7QV4cqUwhkDIHpMAZ9mestSJ2DMIotVTbOUwbiudhjCRTAWWKIaBecELiEM2LT3AHFeOAaHIcFu4dbXjX+9GBA==", - "dev": true, - "requires": { - "ansi-html-community": "^0.0.8", - "common-path-prefix": "^3.0.0", - "core-js-pure": "^3.23.3", - "error-stack-parser": "^2.0.6", - "find-up": "^5.0.0", - "html-entities": "^2.1.0", - "loader-utils": "^2.0.3", - "schema-utils": "^3.0.0", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true - } - } - }, - "@radix-ui/number": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.0.0.tgz", - "integrity": "sha512-Ofwh/1HX69ZfJRiRBMTy7rgjAzHmwe4kW9C9Y99HTRUcYLUuVT0KESFj15rPjRgKJs20GPq8Bm5aEDJ8DuA3vA==", - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@radix-ui/primitive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.0.tgz", - "integrity": "sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==", - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@radix-ui/react-compose-refs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.0.tgz", - "integrity": "sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==", - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@radix-ui/react-context": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.0.tgz", - "integrity": "sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg==", - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@radix-ui/react-direction": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.0.tgz", - "integrity": "sha512-2HV05lGUgYcA6xgLQ4BKPDmtL+QbIZYH5fCOTAOOcJ5O0QbWS3i9lKaurLzliYUDhORI2Qr3pyjhJh44lKA3rQ==", - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@radix-ui/react-presence": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.0.tgz", - "integrity": "sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.0", - "@radix-ui/react-use-layout-effect": "1.0.0" - } - }, - "@radix-ui/react-primitive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.0.tgz", - "integrity": "sha512-EyXe6mnRlHZ8b6f4ilTDrXmkLShICIuOTTj0GX4w1rp+wSxf3+TD05u1UOITC8VsJ2a9nwHvdXtOXEOl0Cw/zQ==", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-slot": "1.0.0" - } - }, - "@radix-ui/react-scroll-area": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.0.0.tgz", - "integrity": "sha512-3SNFukAjS5remgtpAVR9m3Zgo23ZojBZ8V3TCyR3A+56x2mtVqKlPV4+e8rScZUFMuvtbjIdQCmsJBFBazKZig==", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/number": "1.0.0", - "@radix-ui/primitive": "1.0.0", - "@radix-ui/react-compose-refs": "1.0.0", - "@radix-ui/react-context": "1.0.0", - "@radix-ui/react-direction": "1.0.0", - "@radix-ui/react-presence": "1.0.0", - "@radix-ui/react-primitive": "1.0.0", - "@radix-ui/react-use-callback-ref": "1.0.0", - "@radix-ui/react-use-layout-effect": "1.0.0" - } - }, - "@radix-ui/react-slot": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.0.tgz", - "integrity": "sha512-3mrKauI/tWXo1Ll+gN5dHcxDPdm/Df1ufcDLCecn+pnCIVcdWE7CujXo8QaXOWRJyZyQWWbpB8eFwHzWXlv5mQ==", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.0" - } - }, - "@radix-ui/react-use-callback-ref": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.0.tgz", - "integrity": "sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==", - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@radix-ui/react-use-layout-effect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.0.tgz", - "integrity": "sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==", - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@rushstack/eslint-patch": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", - "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==", - "dev": true - }, - "@storybook/addon-actions": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-6.5.13.tgz", - "integrity": "sha512-3Tji0gIy95havhTpSc6CsFl5lNxGn4O5Y1U9fyji+GRkKqDFOrvVLYAHPtLOpYdEI5tF0bDo+akiqfDouY8+eA==", - "dev": true, - "requires": { - "@storybook/addons": "6.5.13", - "@storybook/api": "6.5.13", - "@storybook/client-logger": "6.5.13", - "@storybook/components": "6.5.13", - "@storybook/core-events": "6.5.13", - "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/theming": "6.5.13", - "core-js": "^3.8.2", - "fast-deep-equal": "^3.1.3", - "global": "^4.4.0", - "lodash": "^4.17.21", - "polished": "^4.2.2", - "prop-types": "^15.7.2", - "react-inspector": "^5.1.0", - "regenerator-runtime": "^0.13.7", - "telejson": "^6.0.8", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2", - "uuid-browser": "^3.1.0" - } - }, - "@storybook/addon-backgrounds": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-6.5.13.tgz", - "integrity": "sha512-b4JX7JMY7e50y1l6g71D+2XWV3GO0TO2z1ta8J6W4OQt8f44V7sSkRQaJUzXdLjQMrA+Anojuy1ZwPjVeLC6vg==", - "dev": true, - "requires": { - "@storybook/addons": "6.5.13", - "@storybook/api": "6.5.13", - "@storybook/client-logger": "6.5.13", - "@storybook/components": "6.5.13", - "@storybook/core-events": "6.5.13", - "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/theming": "6.5.13", - "core-js": "^3.8.2", - "global": "^4.4.0", - "memoizerific": "^1.11.3", - "regenerator-runtime": "^0.13.7", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - } - }, - "@storybook/addon-controls": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-6.5.13.tgz", - "integrity": "sha512-lYq3uf2mlVevm0bi6ueL3H6TpUMRYW9s/pTNTVJT225l27kLdFR9wEKxAkCBrlKaTgDLJmzzDRsJE3NLZlR/5Q==", - "dev": true, - "requires": { - "@storybook/addons": "6.5.13", - "@storybook/api": "6.5.13", - "@storybook/client-logger": "6.5.13", - "@storybook/components": "6.5.13", - "@storybook/core-common": "6.5.13", - "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/node-logger": "6.5.13", - "@storybook/store": "6.5.13", - "@storybook/theming": "6.5.13", - "core-js": "^3.8.2", - "lodash": "^4.17.21", - "ts-dedent": "^2.0.0" - } - }, - "@storybook/addon-docs": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-6.5.13.tgz", - "integrity": "sha512-RG/NjsheD9FixZ789RJlNyNccaR2Cuy7CtAwph4oUNi3aDFjtOI8Oe9L+FOT7qtVnZLw/YMjF+pZxoDqJNKLPw==", - "dev": true, - "requires": { - "@babel/plugin-transform-react-jsx": "^7.12.12", - "@babel/preset-env": "^7.12.11", - "@jest/transform": "^26.6.2", - "@mdx-js/react": "^1.6.22", - "@storybook/addons": "6.5.13", - "@storybook/api": "6.5.13", - "@storybook/components": "6.5.13", - "@storybook/core-common": "6.5.13", - "@storybook/core-events": "6.5.13", - "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/docs-tools": "6.5.13", - "@storybook/mdx1-csf": "^0.0.1", - "@storybook/node-logger": "6.5.13", - "@storybook/postinstall": "6.5.13", - "@storybook/preview-web": "6.5.13", - "@storybook/source-loader": "6.5.13", - "@storybook/store": "6.5.13", - "@storybook/theming": "6.5.13", - "babel-loader": "^8.0.0", - "core-js": "^3.8.2", - "fast-deep-equal": "^3.1.3", - "global": "^4.4.0", - "lodash": "^4.17.21", - "regenerator-runtime": "^0.13.7", - "remark-external-links": "^8.0.0", - "remark-slug": "^6.0.0", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - } - }, - "@storybook/addon-essentials": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-6.5.13.tgz", - "integrity": "sha512-G9FVAWV7ixjVLWeLgIX+VT90tcAk6yQxfZQegfg5ucRilGysJCDaNnoab4xuuvm1R40TfFhba3iAGZtQYsddmw==", - "dev": true, - "requires": { - "@storybook/addon-actions": "6.5.13", - "@storybook/addon-backgrounds": "6.5.13", - "@storybook/addon-controls": "6.5.13", - "@storybook/addon-docs": "6.5.13", - "@storybook/addon-measure": "6.5.13", - "@storybook/addon-outline": "6.5.13", - "@storybook/addon-toolbars": "6.5.13", - "@storybook/addon-viewport": "6.5.13", - "@storybook/addons": "6.5.13", - "@storybook/api": "6.5.13", - "@storybook/core-common": "6.5.13", - "@storybook/node-logger": "6.5.13", - "core-js": "^3.8.2", - "regenerator-runtime": "^0.13.7", - "ts-dedent": "^2.0.0" - } - }, - "@storybook/addon-interactions": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-6.5.13.tgz", - "integrity": "sha512-FPOeS7AT/Odxl6z7E0qYI4F0Sh06jFRttRvSgpKC5P2lYUWUstLP5TC8N+F5ijBeLfIdIsf5zBK7l5Y/cluueg==", - "dev": true, - "requires": { - "@devtools-ds/object-inspector": "^1.1.2", - "@storybook/addons": "6.5.13", - "@storybook/api": "6.5.13", - "@storybook/client-logger": "6.5.13", - "@storybook/components": "6.5.13", - "@storybook/core-common": "6.5.13", - "@storybook/core-events": "6.5.13", - "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/instrumenter": "6.5.13", - "@storybook/theming": "6.5.13", - "core-js": "^3.8.2", - "global": "^4.4.0", - "jest-mock": "^27.0.6", - "polished": "^4.2.2", - "ts-dedent": "^2.2.0" - } - }, - "@storybook/addon-links": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-6.5.13.tgz", - "integrity": "sha512-K/LYYu9R/Xoah5h9MNh4mSHOic3q5csqjderLqr2YW/KPYiuNubgvzEbAAbzI5xq5JrtAZqnINrZUv2A4CyYbQ==", - "dev": true, - "requires": { - "@storybook/addons": "6.5.13", - "@storybook/client-logger": "6.5.13", - "@storybook/core-events": "6.5.13", - "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/router": "6.5.13", - "@types/qs": "^6.9.5", - "core-js": "^3.8.2", - "global": "^4.4.0", - "prop-types": "^15.7.2", - "qs": "^6.10.0", - "regenerator-runtime": "^0.13.7", - "ts-dedent": "^2.0.0" - } - }, - "@storybook/addon-measure": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-6.5.13.tgz", - "integrity": "sha512-pi5RFB9YTnESRFtYHAVRUrgEI5to0TFc4KndtwcCKt1fMJ8OFjXQeznEfdj95PFeUvW5TNUwjL38vK4LhicB+g==", - "dev": true, - "requires": { - "@storybook/addons": "6.5.13", - "@storybook/api": "6.5.13", - "@storybook/client-logger": "6.5.13", - "@storybook/components": "6.5.13", - "@storybook/core-events": "6.5.13", - "@storybook/csf": "0.0.2--canary.4566f4d.1", - "core-js": "^3.8.2", - "global": "^4.4.0" - } - }, - "@storybook/addon-outline": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-6.5.13.tgz", - "integrity": "sha512-8d8taPheO/tryflzXbj2QRuxHOIS8CtzRzcaglCcioqHEMhOIDOx9BdXKdheq54gdk/UN94HdGJUoVxYyXwZ4Q==", - "dev": true, - "requires": { - "@storybook/addons": "6.5.13", - "@storybook/api": "6.5.13", - "@storybook/client-logger": "6.5.13", - "@storybook/components": "6.5.13", - "@storybook/core-events": "6.5.13", - "@storybook/csf": "0.0.2--canary.4566f4d.1", - "core-js": "^3.8.2", - "global": "^4.4.0", - "regenerator-runtime": "^0.13.7", - "ts-dedent": "^2.0.0" - } - }, - "@storybook/addon-toolbars": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-6.5.13.tgz", - "integrity": "sha512-Qgr4wKRSP+gY1VaN7PYT4TM1um7KY341X3GHTglXLFHd8nDsCweawfV2shaX3WxCfZmVro8g4G+Oest30kLLCw==", - "dev": true, - "requires": { - "@storybook/addons": "6.5.13", - "@storybook/api": "6.5.13", - "@storybook/client-logger": "6.5.13", - "@storybook/components": "6.5.13", - "@storybook/theming": "6.5.13", - "core-js": "^3.8.2", - "regenerator-runtime": "^0.13.7" - } - }, - "@storybook/addon-viewport": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-6.5.13.tgz", - "integrity": "sha512-KSfeuCSIjncwWGnUu6cZBx8WNqYvm5gHyFvkSPKEu0+MJtgncbUy7pl53lrEEr6QmIq0GRXvS3A0XzV8RCnrSA==", - "dev": true, - "requires": { - "@storybook/addons": "6.5.13", - "@storybook/api": "6.5.13", - "@storybook/client-logger": "6.5.13", - "@storybook/components": "6.5.13", - "@storybook/core-events": "6.5.13", - "@storybook/theming": "6.5.13", - "core-js": "^3.8.2", - "global": "^4.4.0", - "memoizerific": "^1.11.3", - "prop-types": "^15.7.2", - "regenerator-runtime": "^0.13.7" - } - }, - "@storybook/addons": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-6.5.13.tgz", - "integrity": "sha512-18CqzNnrGMfeZtiKz+R/3rHtSNnfNwz6y6prIQIbWseK16jY8ELTfIFGviwO5V2OqpbHDQi5+xQQ63QAIb89YA==", - "dev": true, - "requires": { - "@storybook/api": "6.5.13", - "@storybook/channels": "6.5.13", - "@storybook/client-logger": "6.5.13", - "@storybook/core-events": "6.5.13", - "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/router": "6.5.13", - "@storybook/theming": "6.5.13", - "@types/webpack-env": "^1.16.0", - "core-js": "^3.8.2", - "global": "^4.4.0", - "regenerator-runtime": "^0.13.7" - } - }, - "@storybook/api": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/@storybook/api/-/api-6.5.13.tgz", - "integrity": "sha512-xVSmB7/IuFd6G7eiJjbI2MuS7SZunoUM6d+YCWpjiehfMeX47MXt1gZtOwFrgJC1ShZlefXFahq/dvxwtmWs+w==", - "dev": true, - "requires": { - "@storybook/channels": "6.5.13", - "@storybook/client-logger": "6.5.13", - "@storybook/core-events": "6.5.13", - "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/router": "6.5.13", - "@storybook/semver": "^7.3.2", - "@storybook/theming": "6.5.13", - "core-js": "^3.8.2", - "fast-deep-equal": "^3.1.3", - "global": "^4.4.0", - "lodash": "^4.17.21", - "memoizerific": "^1.11.3", - "regenerator-runtime": "^0.13.7", - "store2": "^2.12.0", - "telejson": "^6.0.8", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - } - }, - "@storybook/builder-webpack4": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/@storybook/builder-webpack4/-/builder-webpack4-6.5.13.tgz", - "integrity": "sha512-Agqy3IKPv3Nl8QqdS7PjtqLp+c0BD8+/3A2ki/YfKqVz+F+J34EpbZlh3uU053avm1EoNQHSmhZok3ZlWH6O7A==", - "dev": true, - "requires": { - "@babel/core": "^7.12.10", - "@storybook/addons": "6.5.13", - "@storybook/api": "6.5.13", - "@storybook/channel-postmessage": "6.5.13", - "@storybook/channels": "6.5.13", - "@storybook/client-api": "6.5.13", - "@storybook/client-logger": "6.5.13", - "@storybook/components": "6.5.13", - "@storybook/core-common": "6.5.13", - "@storybook/core-events": "6.5.13", - "@storybook/node-logger": "6.5.13", - "@storybook/preview-web": "6.5.13", - "@storybook/router": "6.5.13", - "@storybook/semver": "^7.3.2", - "@storybook/store": "6.5.13", - "@storybook/theming": "6.5.13", - "@storybook/ui": "6.5.13", - "@types/node": "^14.0.10 || ^16.0.0", - "@types/webpack": "^4.41.26", - "autoprefixer": "^9.8.6", - "babel-loader": "^8.0.0", - "case-sensitive-paths-webpack-plugin": "^2.3.0", - "core-js": "^3.8.2", - "css-loader": "^3.6.0", - "file-loader": "^6.2.0", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^4.1.6", - "glob": "^7.1.6", - "glob-promise": "^3.4.0", - "global": "^4.4.0", - "html-webpack-plugin": "^4.0.0", - "pnp-webpack-plugin": "1.6.4", - "postcss": "^7.0.36", - "postcss-flexbugs-fixes": "^4.2.1", - "postcss-loader": "^4.2.0", - "raw-loader": "^4.0.2", - "stable": "^0.1.8", - "style-loader": "^1.3.0", - "terser-webpack-plugin": "^4.2.3", - "ts-dedent": "^2.0.0", - "url-loader": "^4.1.1", - "util-deprecate": "^1.0.2", - "webpack": "4", - "webpack-dev-middleware": "^3.7.3", - "webpack-filter-warnings-plugin": "^1.2.1", - "webpack-hot-middleware": "^2.25.1", - "webpack-virtual-modules": "^0.2.2" - }, - "dependencies": { - "@types/html-minifier-terser": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", - "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==", - "dev": true - }, - "@types/node": { - "version": "16.18.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", - "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", - "dev": true - }, - "@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/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-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-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" - } - }, - "acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "clean-css": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", - "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", - "dev": true, - "requires": { - "source-map": "~0.6.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==", - "dev": true, - "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true - }, - "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": { - "loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "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" - } - } - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "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" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "fork-ts-checker-webpack-plugin": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz", - "integrity": "sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.5.5", - "chalk": "^2.4.1", - "micromatch": "^3.1.10", - "minimatch": "^3.0.4", - "semver": "^5.6.0", - "tapable": "^1.0.0", - "worker-rpc": "^0.1.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "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": { - "terser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "dependencies": { - "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==", - "dev": true - } - } - } - } - }, - "html-webpack-plugin": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz", - "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==", - "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.20", - "pretty-error": "^2.1.1", - "tapable": "^1.1.3", - "util.promisify": "1.0.0" - }, - "dependencies": { - "loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - } - } - }, - "htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "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" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "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 - }, - "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" - } - }, - "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" - } - }, - "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" - } - }, - "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" - } - }, - "mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "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" - } - } - } - }, - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "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" - }, - "dependencies": { - "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" - } - } - } - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "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.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", - "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", - "dev": true, - "requires": { - "icss-utils": "^4.1.1", - "postcss": "^7.0.32", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.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" - } - }, - "pretty-error": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", - "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", - "dev": true, - "requires": { - "lodash": "^4.17.20", - "renderkid": "^2.0.4" - } - }, - "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" - } - }, - "renderkid": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", - "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", - "dev": true, - "requires": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^3.0.1" - } - }, - "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" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", - "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 - }, - "ssri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", - "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "style-loader": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.3.0.tgz", - "integrity": "sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^2.7.0" - }, - "dependencies": { - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "terser-webpack-plugin": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz", - "integrity": "sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==", - "dev": true, - "requires": { - "cacache": "^15.0.5", - "find-cache-dir": "^3.3.1", - "jest-worker": "^26.5.0", - "p-limit": "^3.0.2", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", - "source-map": "^0.6.1", - "terser": "^5.3.4", - "webpack-sources": "^1.4.3" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", - "dev": true, - "requires": { - "chokidar": "^3.4.1", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.1" - } - }, - "webpack": { - "version": "4.46.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", - "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", - "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.5.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": { - "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" - } - }, - "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==", - "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==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "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" - } - }, - "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==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.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" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "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 - }, - "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" - } - }, - "terser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - } - }, - "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" - } - } - } - }, - "webpack-dev-middleware": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", - "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", - "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-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" - } - }, - "webpack-virtual-modules": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.2.2.tgz", - "integrity": "sha512-kDUmfm3BZrei0y+1NTHJInejzxfhtU8eDj2M7OKb2IWrPFAeO1SOH2KuQ68MSZu9IGEHcxbkKKR1v18FrUSOmA==", - "dev": true, - "requires": { - "debug": "^3.0.0" - } - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, - "@storybook/builder-webpack5": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-6.5.13.tgz", - "integrity": "sha512-juNH31ZljWbaoBD6Yx2/iQ4G66UBkwq+cFUqLzgVROKMXmYaT0AJYbfyY8CgGqcXkc+sqNA63yWaLWd8/K9vTg==", - "dev": true, - "requires": { - "@babel/core": "^7.12.10", - "@storybook/addons": "6.5.13", - "@storybook/api": "6.5.13", - "@storybook/channel-postmessage": "6.5.13", - "@storybook/channels": "6.5.13", - "@storybook/client-api": "6.5.13", - "@storybook/client-logger": "6.5.13", - "@storybook/components": "6.5.13", - "@storybook/core-common": "6.5.13", - "@storybook/core-events": "6.5.13", - "@storybook/node-logger": "6.5.13", - "@storybook/preview-web": "6.5.13", - "@storybook/router": "6.5.13", - "@storybook/semver": "^7.3.2", - "@storybook/store": "6.5.13", - "@storybook/theming": "6.5.13", - "@types/node": "^14.0.10 || ^16.0.0", - "babel-loader": "^8.0.0", - "babel-plugin-named-exports-order": "^0.0.2", - "browser-assert": "^1.2.1", - "case-sensitive-paths-webpack-plugin": "^2.3.0", - "core-js": "^3.8.2", - "css-loader": "^5.0.1", - "fork-ts-checker-webpack-plugin": "^6.0.4", - "glob": "^7.1.6", - "glob-promise": "^3.4.0", - "html-webpack-plugin": "^5.0.0", - "path-browserify": "^1.0.1", - "process": "^0.11.10", - "stable": "^0.1.8", - "style-loader": "^2.0.0", - "terser-webpack-plugin": "^5.0.3", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2", - "webpack": "^5.9.0", - "webpack-dev-middleware": "^4.1.0", - "webpack-hot-middleware": "^2.25.1", - "webpack-virtual-modules": "^0.4.1" - }, - "dependencies": { - "@types/node": { - "version": "16.18.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", - "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", - "dev": true - } - } - }, - "@storybook/channel-postmessage": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-6.5.13.tgz", - "integrity": "sha512-R79MBs0mQ7TV8M/a6x/SiTRyvZBidDfMEEthG7Cyo9p35JYiKOhj2535zhW4qlVMESBu95pwKYBibTjASoStPw==", - "dev": true, - "requires": { - "@storybook/channels": "6.5.13", - "@storybook/client-logger": "6.5.13", - "@storybook/core-events": "6.5.13", - "core-js": "^3.8.2", - "global": "^4.4.0", - "qs": "^6.10.0", - "telejson": "^6.0.8" - } - }, - "@storybook/channel-websocket": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/@storybook/channel-websocket/-/channel-websocket-6.5.13.tgz", - "integrity": "sha512-kwh667H+tzCiNvs92GNwYOwVXdj9uHZyieRAN5rJtTBJ7XgLzGkpTEU50mWlbc0nDKhgE0qYvzyr5H393Iy5ug==", - "dev": true, - "requires": { - "@storybook/channels": "6.5.13", - "@storybook/client-logger": "6.5.13", - "core-js": "^3.8.2", - "global": "^4.4.0", - "telejson": "^6.0.8" - } - }, - "@storybook/channels": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.5.13.tgz", - "integrity": "sha512-sGYSilE30bz0jG+HdHnkv0B4XkAv2hP+KRZr4xmnv+MOOQpRnZpJ5Z3HVU16s17cj/83NWihKj6BuKcEVzyilg==", - "dev": true, - "requires": { - "core-js": "^3.8.2", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - } - }, - "@storybook/client-api": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-6.5.13.tgz", - "integrity": "sha512-uH1mAWbidPiuuTdMUVEiuaNOfrYXm+9QLSP1MMYTKULqEOZI5MSOGkEDqRfVWxbYv/iWBOPTQ+OM9TQ6ecYacg==", - "dev": true, - "requires": { - "@storybook/addons": "6.5.13", - "@storybook/channel-postmessage": "6.5.13", - "@storybook/channels": "6.5.13", - "@storybook/client-logger": "6.5.13", - "@storybook/core-events": "6.5.13", - "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/store": "6.5.13", - "@types/qs": "^6.9.5", - "@types/webpack-env": "^1.16.0", - "core-js": "^3.8.2", - "fast-deep-equal": "^3.1.3", - "global": "^4.4.0", - "lodash": "^4.17.21", - "memoizerific": "^1.11.3", - "qs": "^6.10.0", - "regenerator-runtime": "^0.13.7", - "store2": "^2.12.0", - "synchronous-promise": "^2.0.15", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - } - }, - "@storybook/client-logger": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.5.13.tgz", - "integrity": "sha512-F2SMW3LWFGXLm2ENTwTitrLWJgmMXRf3CWQXdN2EbkNCIBHy5Zcbt+91K4OX8e2e5h9gjGfrdYbyYDYOoUCEfA==", - "dev": true, - "requires": { - "core-js": "^3.8.2", - "global": "^4.4.0" - } - }, - "@storybook/components": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-6.5.13.tgz", - "integrity": "sha512-6Hhx70JK5pGfKCkqMU4yq/BBH+vRTmzj7tZKfPwba+f8VmTMoOr/2ysTQFRtXryiHB6Z15xBYgfq5x2pIwQzLQ==", - "dev": true, - "requires": { - "@storybook/client-logger": "6.5.13", - "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/theming": "6.5.13", - "core-js": "^3.8.2", - "memoizerific": "^1.11.3", - "qs": "^6.10.0", - "regenerator-runtime": "^0.13.7", - "util-deprecate": "^1.0.2" - } - }, - "@storybook/core": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/@storybook/core/-/core-6.5.13.tgz", - "integrity": "sha512-kw1lCgbsxzUimGww6t5rmuWJmFPe9kGGyzIqvj4RC4BBcEsP40LEu9XhSfvnb8vTOLIULFZeZpdRFfJs4TYbUw==", - "dev": true, - "requires": { - "@storybook/core-client": "6.5.13", - "@storybook/core-server": "6.5.13" - } - }, - "@storybook/core-client": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-6.5.13.tgz", - "integrity": "sha512-YuELbRokTBdqjbx/R4/7O4rou9kvbBIOJjlUkor9hdLLuJ3P0yGianERGNkZFfvcfMBAxU0p52o7QvDldSR3kA==", - "dev": true, - "requires": { - "@storybook/addons": "6.5.13", - "@storybook/channel-postmessage": "6.5.13", - "@storybook/channel-websocket": "6.5.13", - "@storybook/client-api": "6.5.13", - "@storybook/client-logger": "6.5.13", - "@storybook/core-events": "6.5.13", - "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/preview-web": "6.5.13", - "@storybook/store": "6.5.13", - "@storybook/ui": "6.5.13", - "airbnb-js-shims": "^2.2.1", - "ansi-to-html": "^0.6.11", - "core-js": "^3.8.2", - "global": "^4.4.0", - "lodash": "^4.17.21", - "qs": "^6.10.0", - "regenerator-runtime": "^0.13.7", - "ts-dedent": "^2.0.0", - "unfetch": "^4.2.0", - "util-deprecate": "^1.0.2" - } - }, - "@storybook/core-common": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-6.5.13.tgz", - "integrity": "sha512-+DVZrRsteE9pw0X5MNffkdBgejQnbnL+UOG3qXkE9xxUamQALnuqS/w1BzpHE9WmOHuf7RWMKflyQEW3OLKAJg==", - "dev": true, - "requires": { - "@babel/core": "^7.12.10", - "@babel/plugin-proposal-class-properties": "^7.12.1", - "@babel/plugin-proposal-decorators": "^7.12.12", - "@babel/plugin-proposal-export-default-from": "^7.12.1", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", - "@babel/plugin-proposal-object-rest-spread": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.12.7", - "@babel/plugin-proposal-private-methods": "^7.12.1", - "@babel/plugin-proposal-private-property-in-object": "^7.12.1", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-arrow-functions": "^7.12.1", - "@babel/plugin-transform-block-scoping": "^7.12.12", - "@babel/plugin-transform-classes": "^7.12.1", - "@babel/plugin-transform-destructuring": "^7.12.1", - "@babel/plugin-transform-for-of": "^7.12.1", - "@babel/plugin-transform-parameters": "^7.12.1", - "@babel/plugin-transform-shorthand-properties": "^7.12.1", - "@babel/plugin-transform-spread": "^7.12.1", - "@babel/preset-env": "^7.12.11", - "@babel/preset-react": "^7.12.10", - "@babel/preset-typescript": "^7.12.7", - "@babel/register": "^7.12.1", - "@storybook/node-logger": "6.5.13", - "@storybook/semver": "^7.3.2", - "@types/node": "^14.0.10 || ^16.0.0", - "@types/pretty-hrtime": "^1.0.0", - "babel-loader": "^8.0.0", - "babel-plugin-macros": "^3.0.1", - "babel-plugin-polyfill-corejs3": "^0.1.0", - "chalk": "^4.1.0", - "core-js": "^3.8.2", - "express": "^4.17.1", - "file-system-cache": "^1.0.5", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^6.0.4", - "fs-extra": "^9.0.1", - "glob": "^7.1.6", - "handlebars": "^4.7.7", - "interpret": "^2.2.0", - "json5": "^2.1.3", - "lazy-universal-dotenv": "^3.0.1", - "picomatch": "^2.3.0", - "pkg-dir": "^5.0.0", - "pretty-hrtime": "^1.0.3", - "resolve-from": "^5.0.0", - "slash": "^3.0.0", - "telejson": "^6.0.8", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2", - "webpack": "4" - }, - "dependencies": { - "@babel/helper-define-polyfill-provider": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz", - "integrity": "sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - } - }, - "@types/node": { - "version": "16.18.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", - "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", - "dev": true - }, - "@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/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-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-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" - } - }, - "acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "dev": true - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz", - "integrity": "sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.1.5", - "core-js-compat": "^3.8.1" - } - }, - "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "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" - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "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==", - "dev": true - }, - "enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "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" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.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==", - "dev": true - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true - }, - "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.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - } - } - }, - "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" - } - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "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" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "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" - } - }, - "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": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "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" - } - }, - "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.2", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", - "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "terser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - } - }, - "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" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", - "dev": true, - "requires": { - "chokidar": "^3.4.1", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.1" - } - }, - "webpack": { - "version": "4.46.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", - "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", - "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.5.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" - } - }, - "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" - } - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, - "@storybook/core-events": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.5.13.tgz", - "integrity": "sha512-kL745tPpRKejzHToA3/CoBNbI+NPRVk186vGxXBmk95OEg0TlwgQExP8BnqEtLlRZMbW08e4+6kilc1M1M4N5w==", - "dev": true, - "requires": { - "core-js": "^3.8.2" - } - }, - "@storybook/core-server": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-6.5.13.tgz", - "integrity": "sha512-vs7tu3kAnFwuINio1p87WyqDNlFyZESmeh9s7vvrZVbe/xS/ElqDscr9DT5seW+jbtxufAaHsx+JUTver1dheQ==", - "dev": true, - "requires": { - "@discoveryjs/json-ext": "^0.5.3", - "@storybook/builder-webpack4": "6.5.13", - "@storybook/core-client": "6.5.13", - "@storybook/core-common": "6.5.13", - "@storybook/core-events": "6.5.13", - "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/csf-tools": "6.5.13", - "@storybook/manager-webpack4": "6.5.13", - "@storybook/node-logger": "6.5.13", - "@storybook/semver": "^7.3.2", - "@storybook/store": "6.5.13", - "@storybook/telemetry": "6.5.13", - "@types/node": "^14.0.10 || ^16.0.0", - "@types/node-fetch": "^2.5.7", - "@types/pretty-hrtime": "^1.0.0", - "@types/webpack": "^4.41.26", - "better-opn": "^2.1.1", - "boxen": "^5.1.2", - "chalk": "^4.1.0", - "cli-table3": "^0.6.1", - "commander": "^6.2.1", - "compression": "^1.7.4", - "core-js": "^3.8.2", - "cpy": "^8.1.2", - "detect-port": "^1.3.0", - "express": "^4.17.1", - "fs-extra": "^9.0.1", - "global": "^4.4.0", - "globby": "^11.0.2", - "ip": "^2.0.0", - "lodash": "^4.17.21", - "node-fetch": "^2.6.7", - "open": "^8.4.0", - "pretty-hrtime": "^1.0.3", - "prompts": "^2.4.0", - "regenerator-runtime": "^0.13.7", - "serve-favicon": "^2.5.0", - "slash": "^3.0.0", - "telejson": "^6.0.8", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2", - "watchpack": "^2.2.0", - "webpack": "4", - "ws": "^8.2.3", - "x-default-browser": "^0.4.0" - }, - "dependencies": { - "@types/node": { - "version": "16.18.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", - "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", - "dev": true - }, - "@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/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-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-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" - } - }, - "acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "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" - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "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" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.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==", - "dev": true - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "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.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "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" - } - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "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" - } - }, - "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" - } - }, - "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" - } - }, - "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 - }, - "ssri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", - "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "terser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "dependencies": { - "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==", - "dev": true - } - } - }, - "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" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "webpack": { - "version": "4.46.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", - "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", - "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.5.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": { - "watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", - "dev": true, - "requires": { - "chokidar": "^3.4.1", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.1" - } - } - } - }, - "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" - } - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, - "@storybook/csf": { - "version": "0.0.2--canary.4566f4d.1", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.2--canary.4566f4d.1.tgz", - "integrity": "sha512-9OVvMVh3t9znYZwb0Svf/YQoxX2gVOeQTGe2bses2yj+a3+OJnCrUF3/hGv6Em7KujtOdL2LL+JnG49oMVGFgQ==", - "dev": true, - "requires": { - "lodash": "^4.17.15" - } - }, - "@storybook/csf-tools": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-6.5.13.tgz", - "integrity": "sha512-63Ev+VmBqzwSwfUzbuXOLKBD5dMTK2zBYLQ9anTVw70FuTikwTsGIbPgb098K0vsxRCgxl7KM7NpivHqtZtdjw==", - "dev": true, - "requires": { - "@babel/core": "^7.12.10", - "@babel/generator": "^7.12.11", - "@babel/parser": "^7.12.11", - "@babel/plugin-transform-react-jsx": "^7.12.12", - "@babel/preset-env": "^7.12.11", - "@babel/traverse": "^7.12.11", - "@babel/types": "^7.12.11", - "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/mdx1-csf": "^0.0.1", - "core-js": "^3.8.2", - "fs-extra": "^9.0.1", - "global": "^4.4.0", - "regenerator-runtime": "^0.13.7", - "ts-dedent": "^2.0.0" - } - }, - "@storybook/docs-tools": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-6.5.13.tgz", - "integrity": "sha512-hB+hk+895ny4SW84j3X5iV55DHs3bCfTOp7cDdcZJdQrlm0wuDb4A6d4ffNC7ZLh9VkUjU6ST4VEV5Bb0Cptow==", - "dev": true, - "requires": { - "@babel/core": "^7.12.10", - "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/store": "6.5.13", - "core-js": "^3.8.2", - "doctrine": "^3.0.0", - "lodash": "^4.17.21", - "regenerator-runtime": "^0.13.7" - } - }, - "@storybook/instrumenter": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-6.5.13.tgz", - "integrity": "sha512-izRF64BU+gGCP7qE1N3kOVLSv5Xk4M0OWcRmFIXoIS46qNDzmd8hmbkkx3M9wrvw0kcQ97kIyADF+UInbcr/dQ==", - "dev": true, - "requires": { - "@storybook/addons": "6.5.13", - "@storybook/client-logger": "6.5.13", - "@storybook/core-events": "6.5.13", - "core-js": "^3.8.2", - "global": "^4.4.0" - } - }, - "@storybook/manager-webpack4": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/@storybook/manager-webpack4/-/manager-webpack4-6.5.13.tgz", - "integrity": "sha512-pURzS5W3XM0F7bCBWzpl7TRsuy+OXFwLXiWLaexuvo0POZe31Ueo2A1R4rx3MT5Iee8O9mYvG2XTmvK9MlLefQ==", - "dev": true, - "requires": { - "@babel/core": "^7.12.10", - "@babel/plugin-transform-template-literals": "^7.12.1", - "@babel/preset-react": "^7.12.10", - "@storybook/addons": "6.5.13", - "@storybook/core-client": "6.5.13", - "@storybook/core-common": "6.5.13", - "@storybook/node-logger": "6.5.13", - "@storybook/theming": "6.5.13", - "@storybook/ui": "6.5.13", - "@types/node": "^14.0.10 || ^16.0.0", - "@types/webpack": "^4.41.26", - "babel-loader": "^8.0.0", - "case-sensitive-paths-webpack-plugin": "^2.3.0", - "chalk": "^4.1.0", - "core-js": "^3.8.2", - "css-loader": "^3.6.0", - "express": "^4.17.1", - "file-loader": "^6.2.0", - "find-up": "^5.0.0", - "fs-extra": "^9.0.1", - "html-webpack-plugin": "^4.0.0", - "node-fetch": "^2.6.7", - "pnp-webpack-plugin": "1.6.4", - "read-pkg-up": "^7.0.1", - "regenerator-runtime": "^0.13.7", - "resolve-from": "^5.0.0", - "style-loader": "^1.3.0", - "telejson": "^6.0.8", - "terser-webpack-plugin": "^4.2.3", - "ts-dedent": "^2.0.0", - "url-loader": "^4.1.1", - "util-deprecate": "^1.0.2", - "webpack": "4", - "webpack-dev-middleware": "^3.7.3", - "webpack-virtual-modules": "^0.2.2" - }, - "dependencies": { - "@types/html-minifier-terser": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", - "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==", - "dev": true - }, - "@types/node": { - "version": "16.18.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", - "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", - "dev": true - }, - "@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/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-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-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" - } - }, - "acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "clean-css": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", - "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", - "dev": true, - "requires": { - "source-map": "~0.6.0" - } - }, - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true - }, - "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": { - "loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "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" - } - } - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true - }, - "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" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "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": { - "terser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "dependencies": { - "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==", - "dev": true - } - } - } - } - }, - "html-webpack-plugin": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz", - "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==", - "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.20", - "pretty-error": "^2.1.1", - "tapable": "^1.1.3", - "util.promisify": "1.0.0" - }, - "dependencies": { - "loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - } - } - }, - "htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "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" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "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 - }, - "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" - } - }, - "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" - } - }, - "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" - } - }, - "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" - } - }, - "mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "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" - } - } - } - }, - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "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" - }, - "dependencies": { - "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" - } - } - } - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "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.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", - "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", - "dev": true, - "requires": { - "icss-utils": "^4.1.1", - "postcss": "^7.0.32", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.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" - } - }, - "pretty-error": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", - "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", - "dev": true, - "requires": { - "lodash": "^4.17.20", - "renderkid": "^2.0.4" - } - }, - "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" - } - }, - "renderkid": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", - "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", - "dev": true, - "requires": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^3.0.1" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "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" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", - "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 - }, - "ssri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", - "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "style-loader": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.3.0.tgz", - "integrity": "sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^2.7.0" - }, - "dependencies": { - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "terser-webpack-plugin": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz", - "integrity": "sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==", - "dev": true, - "requires": { - "cacache": "^15.0.5", - "find-cache-dir": "^3.3.1", - "jest-worker": "^26.5.0", - "p-limit": "^3.0.2", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", - "source-map": "^0.6.1", - "terser": "^5.3.4", - "webpack-sources": "^1.4.3" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", - "dev": true, - "requires": { - "chokidar": "^3.4.1", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.1" - } - }, - "webpack": { - "version": "4.46.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", - "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", - "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.5.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": { - "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" - } - }, - "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==", - "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==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "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" - } - }, - "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==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.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" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "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 - }, - "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" - } - }, - "terser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - } - }, - "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" - } - } - } - }, - "webpack-dev-middleware": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", - "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", - "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-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" - } - }, - "webpack-virtual-modules": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.2.2.tgz", - "integrity": "sha512-kDUmfm3BZrei0y+1NTHJInejzxfhtU8eDj2M7OKb2IWrPFAeO1SOH2KuQ68MSZu9IGEHcxbkKKR1v18FrUSOmA==", - "dev": true, - "requires": { - "debug": "^3.0.0" - } - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, - "@storybook/manager-webpack5": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/@storybook/manager-webpack5/-/manager-webpack5-6.5.13.tgz", - "integrity": "sha512-lQEZacSfeRsbqfJE7TVk35Hm1vkr0I2i1pyYqM+4862gRbMh1nJQXbJ5GqZ+Fo/bf0ZfyFZ32jGDIJAFdlpkuQ==", - "dev": true, - "requires": { - "@babel/core": "^7.12.10", - "@babel/plugin-transform-template-literals": "^7.12.1", - "@babel/preset-react": "^7.12.10", - "@storybook/addons": "6.5.13", - "@storybook/core-client": "6.5.13", - "@storybook/core-common": "6.5.13", - "@storybook/node-logger": "6.5.13", - "@storybook/theming": "6.5.13", - "@storybook/ui": "6.5.13", - "@types/node": "^14.0.10 || ^16.0.0", - "babel-loader": "^8.0.0", - "case-sensitive-paths-webpack-plugin": "^2.3.0", - "chalk": "^4.1.0", - "core-js": "^3.8.2", - "css-loader": "^5.0.1", - "express": "^4.17.1", - "find-up": "^5.0.0", - "fs-extra": "^9.0.1", - "html-webpack-plugin": "^5.0.0", - "node-fetch": "^2.6.7", - "process": "^0.11.10", - "read-pkg-up": "^7.0.1", - "regenerator-runtime": "^0.13.7", - "resolve-from": "^5.0.0", - "style-loader": "^2.0.0", - "telejson": "^6.0.8", - "terser-webpack-plugin": "^5.0.3", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2", - "webpack": "^5.9.0", - "webpack-dev-middleware": "^4.1.0", - "webpack-virtual-modules": "^0.4.1" - }, - "dependencies": { - "@types/node": { - "version": "16.18.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", - "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", - "dev": true - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } - } - }, - "@storybook/mdx1-csf": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@storybook/mdx1-csf/-/mdx1-csf-0.0.1.tgz", - "integrity": "sha512-4biZIWWzoWlCarMZmTpqcJNgo/RBesYZwGFbQeXiGYsswuvfWARZnW9RE9aUEMZ4XPn7B1N3EKkWcdcWe/K2tg==", - "dev": true, - "requires": { - "@babel/generator": "^7.12.11", - "@babel/parser": "^7.12.11", - "@babel/preset-env": "^7.12.11", - "@babel/types": "^7.12.11", - "@mdx-js/mdx": "^1.6.22", - "@types/lodash": "^4.14.167", - "js-string-escape": "^1.0.1", - "loader-utils": "^2.0.0", - "lodash": "^4.17.21", - "prettier": ">=2.2.1 <=2.3.0", - "ts-dedent": "^2.0.0" - }, - "dependencies": { - "prettier": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.0.tgz", - "integrity": "sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w==", - "dev": true - } - } - }, - "@storybook/node-logger": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-6.5.13.tgz", - "integrity": "sha512-/r5aVZAqZRoy5FyNk/G4pj7yKJd3lJfPbAaOHVROv2IF7PJP/vtRaDkcfh0g2U6zwuDxGIqSn80j+qoEli9m5A==", - "dev": true, - "requires": { - "@types/npmlog": "^4.1.2", - "chalk": "^4.1.0", - "core-js": "^3.8.2", - "npmlog": "^5.0.1", - "pretty-hrtime": "^1.0.3" - } - }, - "@storybook/postinstall": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-6.5.13.tgz", - "integrity": "sha512-qmqP39FGIP5NdhXC5IpAs9cFoYx9fg1psoQKwb9snYb98eVQU31uHc1W2MBUh3lG4AjAm7pQaXJci7ti4jOh3g==", - "dev": true, - "requires": { - "core-js": "^3.8.2" - } - }, - "@storybook/preview-web": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/@storybook/preview-web/-/preview-web-6.5.13.tgz", - "integrity": "sha512-GNNYVzw4SmRua3dOc52Ye6Us4iQbq5GKQ56U3iwnzZM3TBdJB+Rft94Fn1/pypHujEHS8hl5Xgp9td6C1lLCow==", - "dev": true, - "requires": { - "@storybook/addons": "6.5.13", - "@storybook/channel-postmessage": "6.5.13", - "@storybook/client-logger": "6.5.13", - "@storybook/core-events": "6.5.13", - "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/store": "6.5.13", - "ansi-to-html": "^0.6.11", - "core-js": "^3.8.2", - "global": "^4.4.0", - "lodash": "^4.17.21", - "qs": "^6.10.0", - "regenerator-runtime": "^0.13.7", - "synchronous-promise": "^2.0.15", - "ts-dedent": "^2.0.0", - "unfetch": "^4.2.0", - "util-deprecate": "^1.0.2" - } - }, - "@storybook/react": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/@storybook/react/-/react-6.5.13.tgz", - "integrity": "sha512-4gO8qihEkVZ8RNm9iQd7G2iZz4rRAHizJ6T5m58Sn21fxfyg9zAMzhgd0JzXuPXR8lTTj4AvRyPv1Qx7b43smg==", - "dev": true, - "requires": { - "@babel/preset-flow": "^7.12.1", - "@babel/preset-react": "^7.12.10", - "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", - "@storybook/addons": "6.5.13", - "@storybook/client-logger": "6.5.13", - "@storybook/core": "6.5.13", - "@storybook/core-common": "6.5.13", - "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/docs-tools": "6.5.13", - "@storybook/node-logger": "6.5.13", - "@storybook/react-docgen-typescript-plugin": "1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0", - "@storybook/semver": "^7.3.2", - "@storybook/store": "6.5.13", - "@types/estree": "^0.0.51", - "@types/node": "^14.14.20 || ^16.0.0", - "@types/webpack-env": "^1.16.0", - "acorn": "^7.4.1", - "acorn-jsx": "^5.3.1", - "acorn-walk": "^7.2.0", - "babel-plugin-add-react-displayname": "^0.0.5", - "babel-plugin-react-docgen": "^4.2.1", - "core-js": "^3.8.2", - "escodegen": "^2.0.0", - "fs-extra": "^9.0.1", - "global": "^4.4.0", - "html-tags": "^3.1.0", - "lodash": "^4.17.21", - "prop-types": "^15.7.2", - "react-element-to-jsx-string": "^14.3.4", - "react-refresh": "^0.11.0", - "read-pkg-up": "^7.0.1", - "regenerator-runtime": "^0.13.7", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2", - "webpack": ">=4.43.0 <6.0.0" - }, - "dependencies": { - "@types/node": { - "version": "16.18.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", - "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", - "dev": true - }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - } - } - }, - "@storybook/react-docgen-typescript-plugin": { - "version": "1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0", - "resolved": "https://registry.npmjs.org/@storybook/react-docgen-typescript-plugin/-/react-docgen-typescript-plugin-1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0.tgz", - "integrity": "sha512-eVg3BxlOm2P+chijHBTByr90IZVUtgRW56qEOLX7xlww2NBuKrcavBlcmn+HH7GIUktquWkMPtvy6e0W0NgA5w==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "endent": "^2.0.1", - "find-cache-dir": "^3.3.1", - "flat-cache": "^3.0.4", - "micromatch": "^4.0.2", - "react-docgen-typescript": "^2.1.1", - "tslib": "^2.0.0" - }, - "dependencies": { - "find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "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" - } - }, - "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" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@storybook/router": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.5.13.tgz", - "integrity": "sha512-sf5aogfirH5ucD0d0hc2mKf2iyWsZsvXhr5kjxUQmgkcoflkGUWhc34sbSQVRQ1i8K5lkLIDH/q2s1Zr2SbzhQ==", - "dev": true, - "requires": { - "@storybook/client-logger": "6.5.13", - "core-js": "^3.8.2", - "memoizerific": "^1.11.3", - "qs": "^6.10.0", - "regenerator-runtime": "^0.13.7" - } - }, - "@storybook/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==", - "dev": true, - "requires": { - "core-js": "^3.6.5", - "find-up": "^4.1.0" - }, - "dependencies": { - "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" - } - }, - "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" - } - } - } - }, - "@storybook/source-loader": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/@storybook/source-loader/-/source-loader-6.5.13.tgz", - "integrity": "sha512-tHuM8PfeB/0m+JigbaFp+Ld0euFH+fgOObH2W9rjEXy5vnwmaeex/JAdCprv4oL+LcDQEERqNULUUNIvbcTPAg==", - "dev": true, - "requires": { - "@storybook/addons": "6.5.13", - "@storybook/client-logger": "6.5.13", - "@storybook/csf": "0.0.2--canary.4566f4d.1", - "core-js": "^3.8.2", - "estraverse": "^5.2.0", - "global": "^4.4.0", - "loader-utils": "^2.0.0", - "lodash": "^4.17.21", - "prettier": ">=2.2.1 <=2.3.0", - "regenerator-runtime": "^0.13.7" - }, - "dependencies": { - "prettier": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.0.tgz", - "integrity": "sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w==", - "dev": true - } - } - }, - "@storybook/store": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/@storybook/store/-/store-6.5.13.tgz", - "integrity": "sha512-GG6lm+8fBX1tNUnX7x3raBOjYhhf14bPWLtYiPlxDTFEMs3sJte7zWKZq6NQ79MoBLL6jjzTeolBfDCBw6fiWQ==", - "dev": true, - "requires": { - "@storybook/addons": "6.5.13", - "@storybook/client-logger": "6.5.13", - "@storybook/core-events": "6.5.13", - "@storybook/csf": "0.0.2--canary.4566f4d.1", - "core-js": "^3.8.2", - "fast-deep-equal": "^3.1.3", - "global": "^4.4.0", - "lodash": "^4.17.21", - "memoizerific": "^1.11.3", - "regenerator-runtime": "^0.13.7", - "slash": "^3.0.0", - "stable": "^0.1.8", - "synchronous-promise": "^2.0.15", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - } - }, - "@storybook/telemetry": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-6.5.13.tgz", - "integrity": "sha512-PFJEfGbunmfFWabD3rdCF8EHH+45578OHOkMPpXJjqXl94vPQxUH2XTVKQgEQJbYrgX0Vx9Z4tSkdMHuzYDbWQ==", - "dev": true, - "requires": { - "@storybook/client-logger": "6.5.13", - "@storybook/core-common": "6.5.13", - "chalk": "^4.1.0", - "core-js": "^3.8.2", - "detect-package-manager": "^2.0.1", - "fetch-retry": "^5.0.2", - "fs-extra": "^9.0.1", - "global": "^4.4.0", - "isomorphic-unfetch": "^3.1.0", - "nanoid": "^3.3.1", - "read-pkg-up": "^7.0.1", - "regenerator-runtime": "^0.13.7" - } - }, - "@storybook/testing-library": { - "version": "0.0.13", - "resolved": "https://registry.npmjs.org/@storybook/testing-library/-/testing-library-0.0.13.tgz", - "integrity": "sha512-vRMeIGer4EjJkTgI8sQyK9W431ekPWYCWL//OmSDJ64IT3h7FnW7Xg6p+eqM3oII98/O5pcya5049GxnjaPtxw==", - "dev": true, - "requires": { - "@storybook/client-logger": "^6.4.0", - "@storybook/instrumenter": "^6.4.0", - "@testing-library/dom": "^8.3.0", - "@testing-library/user-event": "^13.2.1", - "ts-dedent": "^2.2.0" - } - }, - "@storybook/theming": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.5.13.tgz", - "integrity": "sha512-oif5NGFAUQhizo50r+ctw2hZNLWV4dPHai+L/gFvbaSeRBeHSNkIcMoZ2FlrO566HdGZTDutYXcR+xus8rI28g==", - "dev": true, - "requires": { - "@storybook/client-logger": "6.5.13", - "core-js": "^3.8.2", - "memoizerific": "^1.11.3", - "regenerator-runtime": "^0.13.7" - } - }, - "@storybook/ui": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/@storybook/ui/-/ui-6.5.13.tgz", - "integrity": "sha512-MklJuSg4Bc+MWjwhZVmZhJaucaeEBUMMa2V9oRWbIgZOdRHqdW72S2vCbaarDAYfBQdnfaoq1GkSQiw+EnWOzA==", - "dev": true, - "requires": { - "@storybook/addons": "6.5.13", - "@storybook/api": "6.5.13", - "@storybook/channels": "6.5.13", - "@storybook/client-logger": "6.5.13", - "@storybook/components": "6.5.13", - "@storybook/core-events": "6.5.13", - "@storybook/router": "6.5.13", - "@storybook/semver": "^7.3.2", - "@storybook/theming": "6.5.13", - "core-js": "^3.8.2", - "memoizerific": "^1.11.3", - "qs": "^6.10.0", - "regenerator-runtime": "^0.13.7", - "resolve-from": "^5.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } - } - }, - "@swc/helpers": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.11.tgz", - "integrity": "sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==", - "requires": { - "tslib": "^2.4.0" - } - }, - "@tabler/icons": { - "version": "1.111.0", - "resolved": "https://registry.npmjs.org/@tabler/icons/-/icons-1.111.0.tgz", - "integrity": "sha512-TZWYiMT5ccqfHxRE0Qtgvl+sGsMbNkrv7cJMt/tm8TN9l/CDXx/o7d8uAwUN+3PAlSFfF5e/rD1bi1WJs2xNIA==" - }, - "@testing-library/dom": { - "version": "8.19.0", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.19.0.tgz", - "integrity": "sha512-6YWYPPpxG3e/xOo6HIWwB/58HukkwIVTOaZ0VwdMVjhRUX/01E4FtQbck9GazOOj7MXHc5RBzMrU86iBJHbI+A==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^4.2.0", - "aria-query": "^5.0.0", - "chalk": "^4.1.0", - "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.4.4", - "pretty-format": "^27.0.2" - }, - "dependencies": { - "aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", - "dev": true, - "requires": { - "deep-equal": "^2.0.5" - } - } - } - }, - "@testing-library/user-event": { - "version": "13.5.0", - "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-13.5.0.tgz", - "integrity": "sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.12.5" - } - }, - "@types/aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==", - "dev": true - }, - "@types/eslint": { - "version": "8.4.10", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", - "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", - "dev": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dev": true, - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true - }, - "@types/glob": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.0.0.tgz", - "integrity": "sha512-l6NQsDDyQUVeoTynNpC9uRvCUint/gSUXQA2euwmTuWGvPY5LSDUu6tkCtJB2SvGQlJQzLaKqcGZP4//7EDveA==", - "dev": true, - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/hast": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz", - "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==", - "dev": true, - "requires": { - "@types/unist": "*" - } - }, - "@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", - "dev": true - }, - "@types/is-function": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/is-function/-/is-function-1.0.1.tgz", - "integrity": "sha512-A79HEEiwXTFtfY+Bcbo58M2GRYzCr9itHWzbzHVFNEYCcoU/MMGwYYf721gBrnhpj1s6RGVVha/IgNFnR0Iw/Q==", - "dev": true - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "@types/lodash": { - "version": "4.14.189", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.189.tgz", - "integrity": "sha512-kb9/98N6X8gyME9Cf7YaqIMvYGnBSWqEci6tiettE6iJWH1XdJz/PO8LB0GtLCG7x8dU3KWhZT+lA1a35127tA==", - "dev": true - }, - "@types/mdast": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", - "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", - "dev": true, - "requires": { - "@types/unist": "*" - } - }, - "@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "dev": true - }, - "@types/node": { - "version": "18.11.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", - "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", - "dev": true - }, - "@types/node-fetch": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz", - "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==", - "dev": true, - "requires": { - "@types/node": "*", - "form-data": "^3.0.0" - } - }, - "@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true - }, - "@types/npmlog": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@types/npmlog/-/npmlog-4.1.4.tgz", - "integrity": "sha512-WKG4gTr8przEZBiJ5r3s8ZIAoMXNbOgQ+j/d5O4X3x6kZJRLNvyUJuUK/KoG3+8BaOHPhp2m7WC6JKKeovDSzQ==", - "dev": true - }, - "@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==" - }, - "@types/parse5": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", - "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==", - "dev": true - }, - "@types/pretty-hrtime": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/pretty-hrtime/-/pretty-hrtime-1.0.1.tgz", - "integrity": "sha512-VjID5MJb1eGKthz2qUerWT8+R4b9N+CHvGCzg9fn4kWZgaF9AhdYikQio3R7wV8YY1NsQKPaCwKz1Yff+aHNUQ==", - "dev": true - }, - "@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "dev": true - }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true - }, - "@types/react": { - "version": "18.0.25", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.25.tgz", - "integrity": "sha512-xD6c0KDT4m7n9uD4ZHi02lzskaiqcBxf4zi+tXZY98a04wvc0hi/TcCPC2FOESZi51Nd7tlUeOJY8RofL799/g==", - "dev": true, - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "@types/react-dom": { - "version": "18.0.9", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.9.tgz", - "integrity": "sha512-qnVvHxASt/H7i+XG1U1xMiY5t+IHcPGUK7TDMDzom08xa7e86eCeKOiLZezwCKVxJn6NEiiy2ekgX8aQssjIKg==", - "dev": true, - "requires": { - "@types/react": "*" - } - }, - "@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", - "dev": true - }, - "@types/semver": { - "version": "7.3.13", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", - "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", - "dev": true - }, - "@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.8", - "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.8.tgz", - "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==", - "dev": true - }, - "@types/uglify-js": { - "version": "3.17.1", - "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.17.1.tgz", - "integrity": "sha512-GkewRA4i5oXacU/n4MA9+bLgt5/L3F1mKrYvFGm7r2ouLXhRKjuWwo9XHNnbx6WF3vlGW21S3fCvgqxvxXXc5g==", - "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/unist": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", - "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==", - "dev": true - }, - "@types/webpack": { - "version": "4.41.33", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.33.tgz", - "integrity": "sha512-PPajH64Ft2vWevkerISMtnZ8rTs4YmRbs+23c402J0INmxDKCrhZNvwZYtzx96gY2wAtXdrK1BS2fiC8MlLr3g==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/tapable": "^1", - "@types/uglify-js": "*", - "@types/webpack-sources": "*", - "anymatch": "^3.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 - } - } - }, - "@types/webpack-env": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.18.0.tgz", - "integrity": "sha512-56/MAlX5WMsPVbOg7tAxnYvNYMMWr/QJiIp6BxVSW3JJXUVzzOn64qW8TzQyMSqSUFM2+PVI4aUHcHOzIz/1tg==", - "dev": true - }, - "@types/webpack-sources": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.0.tgz", - "integrity": "sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/source-list-map": "*", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true - } - } - }, - "@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.43.0.tgz", - "integrity": "sha512-wNPzG+eDR6+hhW4yobEmpR36jrqqQv1vxBq5LJO3fBAktjkvekfr4BRl+3Fn1CM/A+s8/EiGUbOMDoYqWdbtXA==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.43.0", - "@typescript-eslint/type-utils": "5.43.0", - "@typescript-eslint/utils": "5.43.0", - "debug": "^4.3.4", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/experimental-utils": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.43.0.tgz", - "integrity": "sha512-WkT637CumTJbm/hRbFfnHBMgfUYTKr08LitVsD7gQId7bi6rnkx3pu3jac67lmp5ObW4MpJ9SNFZAIOUB/Qbsw==", - "dev": true, - "requires": { - "@typescript-eslint/utils": "5.43.0" - } - }, - "@typescript-eslint/parser": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.43.0.tgz", - "integrity": "sha512-2iHUK2Lh7PwNUlhFxxLI2haSDNyXvebBO9izhjhMoDC+S3XI9qt2DGFUsiJ89m2k7gGYch2aEpYqV5F/+nwZug==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.43.0", - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/typescript-estree": "5.43.0", - "debug": "^4.3.4" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.43.0.tgz", - "integrity": "sha512-XNWnGaqAtTJsUiZaoiGIrdJYHsUOd3BZ3Qj5zKp9w6km6HsrjPk/TGZv0qMTWyWj0+1QOqpHQ2gZOLXaGA9Ekw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/visitor-keys": "5.43.0" - } - }, - "@typescript-eslint/type-utils": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.43.0.tgz", - "integrity": "sha512-K21f+KY2/VvYggLf5Pk4tgBOPs2otTaIHy2zjclo7UZGLyFH86VfUOm5iq+OtDtxq/Zwu2I3ujDBykVW4Xtmtg==", - "dev": true, - "requires": { - "@typescript-eslint/typescript-estree": "5.43.0", - "@typescript-eslint/utils": "5.43.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/types": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.43.0.tgz", - "integrity": "sha512-jpsbcD0x6AUvV7tyOlyvon0aUsQpF8W+7TpJntfCUWU1qaIKu2K34pMwQKSzQH8ORgUrGYY6pVIh1Pi8TNeteg==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.43.0.tgz", - "integrity": "sha512-BZ1WVe+QQ+igWal2tDbNg1j2HWUkAa+CVqdU79L4HP9izQY6CNhXfkNwd1SS4+sSZAP/EthI1uiCSY/+H0pROg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/visitor-keys": "5.43.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/utils": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.43.0.tgz", - "integrity": "sha512-8nVpA6yX0sCjf7v/NDfeaOlyaIIqL7OaIGOWSPFqUKK59Gnumd3Wa+2l8oAaYO2lk0sO+SbWFWRSvhu8gLGv4A==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.43.0", - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/typescript-estree": "5.43.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0", - "semver": "^7.3.7" - }, - "dependencies": { - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - } - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.43.0.tgz", - "integrity": "sha512-icl1jNH/d18OVHLfcwdL3bWUKsBeIiKYTGxMJCoGe7xFht+E4QgzOqoWYrU8XSLJWhVw8nTacbm03v23J/hFTg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.43.0", - "eslint-visitor-keys": "^3.3.0" - } - }, - "@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dev": true, - "requires": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "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" - }, - "dependencies": { - "@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/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/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" - } - } - } - }, - "@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" - }, - "dependencies": { - "@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/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-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dev": true, - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@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" - }, - "dependencies": { - "@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-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/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@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 - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", - "dev": true - }, - "acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true - }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true - }, - "address": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.1.tgz", - "integrity": "sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA==", - "dev": true - }, - "adjust-sourcemap-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", - "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - } - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "airbnb-js-shims": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/airbnb-js-shims/-/airbnb-js-shims-2.2.1.tgz", - "integrity": "sha512-wJNXPH66U2xjgo1Zwyjf9EydvJ2Si94+vSdk6EERcBfB2VZkeltpqIats0cqIZMLCXP3zcyaUKGYQeIBT6XjsQ==", - "dev": true, - "requires": { - "array-includes": "^3.0.3", - "array.prototype.flat": "^1.2.1", - "array.prototype.flatmap": "^1.2.1", - "es5-shim": "^4.5.13", - "es6-shim": "^0.35.5", - "function.prototype.name": "^1.1.0", - "globalthis": "^1.0.0", - "object.entries": "^1.1.0", - "object.fromentries": "^2.0.0 || ^1.0.0", - "object.getownpropertydescriptors": "^2.0.3", - "object.values": "^1.1.0", - "promise.allsettled": "^1.0.0", - "promise.prototype.finally": "^3.1.0", - "string.prototype.matchall": "^4.0.0 || ^3.0.1", - "string.prototype.padend": "^3.0.0", - "string.prototype.padstart": "^3.0.0", - "symbol.prototype.description": "^1.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true - }, - "ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dev": true, - "requires": { - "string-width": "^4.1.0" - } - }, - "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-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "ansi-to-html": { - "version": "0.6.15", - "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.6.15.tgz", - "integrity": "sha512-28ijx2aHJGdzbs+O5SNQF65r6rrKYnkuwTYm8lZlChuoJ9P1vVzIpWO20sQTqTPDXYp6NFwk326vApTtLVFXpQ==", - "dev": true, - "requires": { - "entities": "^2.0.0" - }, - "dependencies": { - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true - } - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "app-root-dir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/app-root-dir/-/app-root-dir-1.0.2.tgz", - "integrity": "sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==", - "dev": true - }, - "aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.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 - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - } - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "aria-hidden": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.2.tgz", - "integrity": "sha512-6y/ogyDTk/7YAe91T3E2PR1ALVKyM2QbTio5HwM+N1Q6CMlCKhvClyIjkckBswa0f2xJhjsfzIGa1yVSe1UMVA==", - "requires": { - "tslib": "^2.0.0" - } - }, - "aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", - "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": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "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": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", - "dev": true, - "optional": true - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, - "array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "is-string": "^1.0.7" - } - }, - "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 - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", - "dev": true - }, - "array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - } - }, - "array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - } - }, - "array.prototype.map": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.5.tgz", - "integrity": "sha512-gfaKntvwqYIuC7mLLyv2wzZIJqrRhn5PZ9EfFejSx6a78sV7iDsGpG9P+3oUPtm1Rerqm6nrKS4FYuTIvWfo3g==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - } - }, - "array.prototype.reduce": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz", - "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - } - }, - "arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "dev": true - }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "dev": true, - "requires": { - "object-assign": "^4.1.1", - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==", - "dev": true, - "requires": { - "inherits": "2.0.1" - } - } - } - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", - "dev": true - }, - "ast-types": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", - "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", - "dev": true, - "requires": { - "tslib": "^2.0.1" - } - }, - "ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", - "dev": true - }, - "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, - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "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==", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "autoprefixer": { - "version": "9.8.8", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", - "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", - "dev": true, - "requires": { - "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001109", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "picocolors": "^0.2.1", - "postcss": "^7.0.32", - "postcss-value-parser": "^4.1.0" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.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 - } - } - }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true - }, - "axe-core": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.5.2.tgz", - "integrity": "sha512-u2MVsXfew5HBvjsczCv+xlwdNnB1oQR9HlAcsejZttNjKKSkeDNVwB1vMThIUIFI9GoT57Vtk8iQLwqOfAkboA==", - "dev": true - }, - "axobject-query": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", - "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", - "dev": true - }, - "babel-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", - "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", - "dev": true, - "requires": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "dependencies": { - "find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "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" - } - }, - "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.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "babel-plugin-add-react-displayname": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/babel-plugin-add-react-displayname/-/babel-plugin-add-react-displayname-0.0.5.tgz", - "integrity": "sha512-LY3+Y0XVDYcShHHorshrDbt4KFWL4bSeniCtl4SYZbask+Syngk1uMPCeN9+nSiZo6zX5s0RTq/J9Pnaaf/KHw==", - "dev": true - }, - "babel-plugin-apply-mdx-type-prop": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", - "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@mdx-js/util": "1.6.22" - }, - "dependencies": { - "@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==", - "dev": true - } - } - }, - "babel-plugin-extract-import-names": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz", - "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.10.4" - }, - "dependencies": { - "@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==", - "dev": true - } - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-macros": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", - "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", - "requires": { - "@babel/runtime": "^7.12.5", - "cosmiconfig": "^7.0.0", - "resolve": "^1.19.0" - } - }, - "babel-plugin-named-exports-order": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/babel-plugin-named-exports-order/-/babel-plugin-named-exports-order-0.0.2.tgz", - "integrity": "sha512-OgOYHOLoRK+/mvXU9imKHlG6GkPLYrUCvFXG/CM93R/aNNO8pOOF4aS+S8CCHMDQoNSeiOYEZb/G6RwL95Jktw==", - "dev": true - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3" - } - }, - "babel-plugin-react-docgen": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/babel-plugin-react-docgen/-/babel-plugin-react-docgen-4.2.1.tgz", - "integrity": "sha512-UQ0NmGHj/HAqi5Bew8WvNfCk8wSsmdgNd8ZdMjBCICtyCJCq9LiqgqvjCYe570/Wg7AQArSq1VQ60Dd/CHN7mQ==", - "dev": true, - "requires": { - "ast-types": "^0.14.2", - "lodash": "^4.17.15", - "react-docgen": "^5.0.0" - } - }, - "bail": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", - "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "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": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, - "better-opn": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-2.1.1.tgz", - "integrity": "sha512-kIPXZS5qwyKiX/HcRvDYfmBQUa8XP17I0mYZZ0y4UhpYOSvtsLHDYqmomS+Mj20aDvD3knEiQ0ecQy2nhio3yA==", - "dev": true, - "requires": { - "open": "^7.0.3" - }, - "dependencies": { - "open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "dev": true, - "requires": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - } - } - } - }, - "big-integer": { - "version": "1.6.51", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", - "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", - "dev": true, - "optional": true - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "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" - } - }, - "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.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "dev": true - }, - "body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dev": true, - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "dev": true, - "requires": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - } - } - }, - "bplist-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.1.1.tgz", - "integrity": "sha512-2AEM0FXy8ZxVLBuqX0hqt1gDwcnz2zygEkQ6zaD5Wko/sB9paUNwlpawrFtKeHUAQUOzjVy9AO4oeonqIHKA9Q==", - "dev": true, - "optional": true, - "requires": { - "big-integer": "^1.6.7" - } - }, - "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": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "dev": true - }, - "browser-assert": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/browser-assert/-/browser-assert-1.2.1.tgz", - "integrity": "sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==", - "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.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "dev": true, - "requires": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "dev": true, - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "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 - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - } - } - }, - "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.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - } - } - }, - "buffer-from": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.2.tgz", - "integrity": "sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg==" - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "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": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", - "dev": true - }, - "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "requires": { - "semver": "^7.0.0" - } - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "dev": true - }, - "c8": { - "version": "7.12.0", - "resolved": "https://registry.npmjs.org/c8/-/c8-7.12.0.tgz", - "integrity": "sha512-CtgQrHOkyxr5koX1wEUmN/5cfDa2ckbHRA4Gy5LAL0zaCFtVWJS5++n+w4/sr2GWGerBxgTjpKeDclk/Qk6W/A==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@istanbuljs/schema": "^0.1.3", - "find-up": "^5.0.0", - "foreground-child": "^2.0.0", - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-reports": "^3.1.4", - "rimraf": "^3.0.2", - "test-exclude": "^6.0.0", - "v8-to-istanbul": "^9.0.0", - "yargs": "^16.2.0", - "yargs-parser": "^20.2.9" - } - }, - "cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "dev": true, - "requires": { - "@npmcli/fs": "^1.0.0", - "@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.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, - "dependencies": { - "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" - } - } - } - }, - "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" - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "call-me-maybe": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", - "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==", - "dev": true - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - }, - "camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dev": true, - "requires": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "dev": true - }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==", - "dev": true, - "optional": 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": "sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==", - "dev": true, - "optional": true - } - } - }, - "caniuse-lite": { - "version": "1.0.30001431", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz", - "integrity": "sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==" - }, - "capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "dev": true, - "requires": { - "rsvp": "^4.8.4" - } - }, - "case-sensitive-paths-webpack-plugin": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", - "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", - "dev": true - }, - "ccount": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", - "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.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==", - "dev": true - }, - "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==", - "dev": true - }, - "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==", - "dev": true - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true - }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "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": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^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": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "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": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "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 - } - } - }, - "clean-css": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz", - "integrity": "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==", - "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 - }, - "cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "dev": true - }, - "cli-table3": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", - "dev": true, - "requires": { - "@colors/colors": "1.5.0", - "string-width": "^4.2.0" - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "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" - } - }, - "clsx": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", - "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==" - }, - "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==", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.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 - }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true - }, - "colorette": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", - "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" - } - }, - "comma-separated-tokens": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", - "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", - "dev": true - }, - "commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "dev": true - }, - "common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, - "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "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" - }, - "dependencies": { - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "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": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", - "dev": true - }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "requires": { - "safe-buffer": "5.2.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } - } - }, - "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.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" - }, - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "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" - }, - "dependencies": { - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "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" - } - } - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", - "dev": true - }, - "core-js": { - "version": "3.26.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.26.1.tgz", - "integrity": "sha512-21491RRQVzUn0GGM9Z1Jrpr6PNPxPi+Za8OM9q4tksTSnlbXXGKK1nXNg/QvwFYettXvSX6zWKCtHHfjN4puyA==", - "dev": true - }, - "core-js-compat": { - "version": "3.26.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz", - "integrity": "sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==", - "dev": true, - "requires": { - "browserslist": "^4.21.4" - } - }, - "core-js-pure": { - "version": "3.26.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.26.1.tgz", - "integrity": "sha512-VVXcDpp/xJ21KdULRq/lXdLzQAtX7+37LzpyfFM973il0tWSsDEoyzG38G14AjTpK9VTfiNM9jnFauq/CpaWGQ==", - "dev": true - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "cp-file": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-7.0.0.tgz", - "integrity": "sha512-0Cbj7gyvFVApzpK/uhCtQ/9kE9UnYpxMzaq5nQQC/Dh4iaj5fxp7iEFIullrYwzj8nf0qnsI1Qsx34hAeAebvw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "nested-error-stacks": "^2.0.0", - "p-event": "^4.1.0" - }, - "dependencies": { - "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" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "cpy": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/cpy/-/cpy-8.1.2.tgz", - "integrity": "sha512-dmC4mUesv0OYH2kNFEidtf/skUwv4zePmGeepjyyJ0qTo5+8KhA1o99oIAwVVLzQMAeDJml74d6wPPKb6EZUTg==", - "dev": true, - "requires": { - "arrify": "^2.0.1", - "cp-file": "^7.0.0", - "globby": "^9.2.0", - "has-glob": "^1.0.0", - "junk": "^3.1.0", - "nested-error-stacks": "^2.1.0", - "p-all": "^2.1.0", - "p-filter": "^2.1.0", - "p-map": "^3.0.0" - }, - "dependencies": { - "@nodelib/fs.stat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", - "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", - "dev": true - }, - "@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", - "dev": true, - "requires": { - "array-uniq": "^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, - "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "dir-glob": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", - "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", - "dev": true, - "requires": { - "path-type": "^3.0.0" - } - }, - "fast-glob": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", - "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", - "dev": true, - "requires": { - "@mrmlnc/readdir-enhanced": "^2.2.1", - "@nodelib/fs.stat": "^1.1.2", - "glob-parent": "^3.1.0", - "is-glob": "^4.0.0", - "merge2": "^1.2.3", - "micromatch": "^3.1.10" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "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": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "globby": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz", - "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "array-union": "^1.0.2", - "dir-glob": "^2.2.2", - "fast-glob": "^2.2.6", - "glob": "^7.1.3", - "ignore": "^4.0.3", - "pify": "^4.0.1", - "slash": "^2.0.0" - } - }, - "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 - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "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" - } - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true - } - } - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "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" - } - }, - "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": "5.2.7", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", - "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", - "dev": true, - "requires": { - "icss-utils": "^5.1.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.15", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^3.0.0", - "semver": "^7.3.5" - } - }, - "css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - } - }, - "css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true - }, - "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": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" - }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", - "dev": true, - "optional": 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": "sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==", - "dev": true - }, - "damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, - "optional": true - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", - "dev": true - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "deep-equal": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.1.0.tgz", - "integrity": "sha512-2pxgvWu3Alv1PoWEyVg7HS8YhGlUFUV7N5oOvfL6d+7xAmLSemMwv/c8Zv/i9KFzxV5Kt5CAvQc70fLwVuf4UA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-get-iterator": "^1.1.2", - "get-intrinsic": "^1.1.3", - "is-arguments": "^1.1.1", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.8" - }, - "dependencies": { - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - } - } - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "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-browser-id": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-1.0.4.tgz", - "integrity": "sha512-qPy925qewwul9Hifs+3sx1ZYn14obHxpkX+mPD369w4Rzg+YkJBgi3SOvwUq81nWSjqGUegIgEPwD8u+HUnxlw==", - "dev": true, - "optional": true, - "requires": { - "bplist-parser": "^0.1.0", - "meow": "^3.1.0", - "untildify": "^2.0.0" - } - }, - "define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "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" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true - }, - "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.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true - }, - "detab": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", - "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", - "dev": true, - "requires": { - "repeat-string": "^1.5.4" - } - }, - "detect-package-manager": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/detect-package-manager/-/detect-package-manager-2.0.1.tgz", - "integrity": "sha512-j/lJHyoLlWi6G1LDdLgvUtz60Zo5GEj+sVYtTVXnYLDPuzgC3llMxonXym9zIwhhUII8vjdw0LXxavpLqTbl1A==", - "dev": true, - "requires": { - "execa": "^5.1.1" - } - }, - "detect-port": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", - "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", - "dev": true, - "requires": { - "address": "^1.0.1", - "debug": "4" - } - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "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" - } - }, - "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-accessibility-api": { - "version": "0.5.14", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.14.tgz", - "integrity": "sha512-NMt+m9zFMPZe0JcY9gN224Qvk6qLIdqex29clBvc/y75ZBX9YA9wNK3frsYvu2DI1xcCIwxwnX+TlsJ2DSOADg==", - "dev": true - }, - "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-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "dependencies": { - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" - } - } - }, - "dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", - "dev": true - }, - "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": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" - }, - "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "dotenv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", - "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", - "dev": true - }, - "dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", - "dev": true - }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", - "requires": { - "readable-stream": "^2.0.2" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "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" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", - "dev": true - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "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==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "endent": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/endent/-/endent-2.1.0.tgz", - "integrity": "sha512-r8VyPX7XL8U01Xgnb1CjZ3XV+z90cXIJ9JPE/R9SEC9vpw2P6CfsRPJmp20DppC5N7ZAMCmjYkJIa744Iyg96w==", - "dev": true, - "requires": { - "dedent": "^0.7.0", - "fast-json-parse": "^1.0.3", - "objectorarray": "^1.0.5" - } - }, - "enhanced-resolve": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", - "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "dependencies": { - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true - } - } - }, - "entities": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==" - }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "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==", - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "error-stack-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", - "dev": true, - "requires": { - "stackframe": "^1.3.4" - } - }, - "es-abstract": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", - "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - } - }, - "es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "dev": true - }, - "es-get-iterator": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", - "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.0", - "has-symbols": "^1.0.1", - "is-arguments": "^1.1.0", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.5", - "isarray": "^2.0.5" - }, - "dependencies": { - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - } - } - }, - "es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "dev": true - }, - "es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "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" - } - }, - "es5-shim": { - "version": "4.6.7", - "resolved": "https://registry.npmjs.org/es5-shim/-/es5-shim-4.6.7.tgz", - "integrity": "sha512-jg21/dmlrNQI7JyyA2w7n+yifSxBng0ZralnSfVZjoCawgNTCnS+yBCyVM9DL5itm7SUnDGgv7hcq2XCZX4iRQ==", - "dev": true - }, - "es6-shim": { - "version": "0.35.6", - "resolved": "https://registry.npmjs.org/es6-shim/-/es6-shim-0.35.6.tgz", - "integrity": "sha512-EmTr31wppcaIAgblChZiuN/l9Y7DPyw8Xtbg7fIVngn6zMW+IEBJDJngeKC3x6wr0V/vcA2wqeFnaw1bFJbDdA==", - "dev": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - }, - "escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true - }, - "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, - "optional": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - } - } - }, - "eslint": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.22.0.tgz", - "integrity": "sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.10.4", - "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.3", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "globby": "^11.1.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - } - }, - "eslint-config-next": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.0.3.tgz", - "integrity": "sha512-i2JoQP8gGv303GjXTonA27fm1ckRRkRoAP1WYEQgN0D2DDoFeBPqlJgHlMHnXKWjmNct/sW8jQEvy9am2juc8g==", - "dev": true, - "requires": { - "@next/eslint-plugin-next": "13.0.3", - "@rushstack/eslint-patch": "^1.1.3", - "@typescript-eslint/parser": "^5.42.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^2.7.1", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.31.7", - "eslint-plugin-react-hooks": "^4.5.0" - } - }, - "eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", - "dev": true - }, - "eslint-config-standard": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz", - "integrity": "sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==", - "dev": true - }, - "eslint-config-standard-with-typescript": { - "version": "23.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-23.0.0.tgz", - "integrity": "sha512-iaaWifImn37Z1OXbNW1es7KI+S7D408F9ys0bpaQf2temeBWlvb0Nc5qHkOgYaRb5QxTZT32GGeN1gtswASOXA==", - "dev": true, - "requires": { - "@typescript-eslint/parser": "^5.0.0", - "eslint-config-standard": "17.0.0" - } - }, - "eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", - "dev": true, - "requires": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-import-resolver-typescript": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz", - "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==", - "dev": true, - "requires": { - "debug": "^4.3.4", - "glob": "^7.2.0", - "is-glob": "^4.0.3", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" - }, - "dependencies": { - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "eslint-module-utils": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", - "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", - "dev": true, - "requires": { - "debug": "^3.2.7" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-plugin-es": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", - "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", - "dev": true, - "requires": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" - }, - "dependencies": { - "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 - } - } - }, - "eslint-plugin-import": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", - "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", - "dev": true, - "requires": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", - "has": "^1.0.3", - "is-core-module": "^2.8.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.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" - } - }, - "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" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "eslint-plugin-jsx-a11y": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz", - "integrity": "sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==", - "dev": true, - "requires": { - "@babel/runtime": "^7.18.9", - "aria-query": "^4.2.2", - "array-includes": "^3.1.5", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.4.3", - "axobject-query": "^2.2.0", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.2", - "language-tags": "^1.0.5", - "minimatch": "^3.1.2", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "eslint-plugin-n": { - "version": "15.5.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.5.1.tgz", - "integrity": "sha512-kAd+xhZm7brHoFLzKLB7/FGRFJNg/srmv67mqb7tto22rpr4wv/LV6RuXzAfv3jbab7+k1wi42PsIhGviywaaw==", - "dev": true, - "requires": { - "builtins": "^5.0.1", - "eslint-plugin-es": "^4.1.0", - "eslint-utils": "^3.0.0", - "ignore": "^5.1.1", - "is-core-module": "^2.11.0", - "minimatch": "^3.1.2", - "resolve": "^1.22.1", - "semver": "^7.3.8" - } - }, - "eslint-plugin-prettier": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", - "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-plugin-promise": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", - "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", - "dev": true - }, - "eslint-plugin-react": { - "version": "7.31.10", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.10.tgz", - "integrity": "sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA==", - "dev": true, - "requires": { - "array-includes": "^3.1.5", - "array.prototype.flatmap": "^1.3.0", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.5", - "object.fromentries": "^2.0.5", - "object.hasown": "^1.1.1", - "object.values": "^1.1.5", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.3", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.7" - }, - "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" - } - }, - "resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.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 - } - } - }, - "eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "dev": true - }, - "eslint-plugin-storybook": { - "version": "0.6.7", - "resolved": "https://registry.npmjs.org/eslint-plugin-storybook/-/eslint-plugin-storybook-0.6.7.tgz", - "integrity": "sha512-lcUsB+3PesKWXwwEHGSTCijKWDXuQ4ITVbnsSDMXRCR/cjGtHZIEcy2pp/Eh7nfWA/GZrDPpK97DsTWEzyN6Bw==", - "dev": true, - "requires": { - "@storybook/csf": "^0.0.1", - "@typescript-eslint/experimental-utils": "^5.3.0", - "requireindex": "^1.1.0", - "ts-dedent": "^2.2.0" - }, - "dependencies": { - "@storybook/csf": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.1.tgz", - "integrity": "sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw==", - "dev": true, - "requires": { - "lodash": "^4.17.15" - } - } - } - }, - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true - }, - "espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", - "dev": true, - "requires": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.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==", - "dev": true - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "estree-to-babel": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/estree-to-babel/-/estree-to-babel-3.2.1.tgz", - "integrity": "sha512-YNF+mZ/Wu2FU/gvmzuWtYc8rloubL7wfXCTgouFrnjGVXPA/EeYYA7pupXWrb3Iv1cTBeSSxxJIbK23l4MRNqg==", - "dev": true, - "requires": { - "@babel/traverse": "^7.1.6", - "@babel/types": "^7.2.0", - "c8": "^7.6.0" - } - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "exec-sh": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", - "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==", - "dev": true - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", - "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": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "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": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "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": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "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" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - }, - "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 - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dev": true, - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "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 - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "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": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - } - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "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.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "fast-json-parse": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fast-json-parse/-/fast-json-parse-1.0.3.tgz", - "integrity": "sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==", - "dev": true - }, - "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==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "requires": { - "bser": "2.1.1" - } - }, - "fetch-retry": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-5.0.3.tgz", - "integrity": "sha512-uJQyMrX5IJZkhoEUBQ3EjxkeiZkppBd5jS/fMTJmfZxLSiaQjv2zD0kTvuvkSH89uFvgSlB6ueGpjD3HWN7Bxw==", - "dev": true - }, - "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": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - } - }, - "file-system-cache": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/file-system-cache/-/file-system-cache-1.1.0.tgz", - "integrity": "sha512-IzF5MBq+5CR0jXx5RxPe4BICl/oEhBSXKaL9fLhAXrIfIUS77Hr4vzrYyqYMHN6uTt+BOqi3fDCTjjEBCjERKw==", - "dev": true, - "requires": { - "fs-extra": "^10.1.0", - "ramda": "^0.28.0" - }, - "dependencies": { - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "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" - } - }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "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==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^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==", - "dev": true, - "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==", - "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" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - } - } - }, - "find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "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" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "focus-lock": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/focus-lock/-/focus-lock-0.8.1.tgz", - "integrity": "sha512-/LFZOIo82WDsyyv7h7oc0MJF9ACOvDRdx9rWPZ2pgMfNWu/z8hQDBtOchuB/0BVLmuFOZjV02YwUVzNsWx/EzA==", - "dev": true, - "requires": { - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "requires": { - "is-callable": "^1.1.3" - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "dev": true - }, - "foreground-child": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" - } - }, - "fork-ts-checker-webpack-plugin": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", - "integrity": "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" - }, - "dependencies": { - "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" - } - }, - "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" - } - } - } - }, - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", - "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": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.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.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", - "dev": true - }, - "fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", - "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": "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==", - "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": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "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": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true - }, - "gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", - "dev": true, - "requires": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - } - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "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-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==", - "dev": true, - "optional": true - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", - "dev": true - }, - "github-slugger": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", - "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==", - "dev": true - }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "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": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "glob-promise": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-3.4.0.tgz", - "integrity": "sha512-q08RJ6O+eJn+dVanerAndJwIcumgbDdYiUT7zFQl3Wm1xD6fBKtah7H8ZJChj4wP+8C+QfeVy8xautR7rdmKEw==", - "dev": true, - "requires": { - "@types/glob": "*" - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "global": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", - "dev": true, - "requires": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.3" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, - "handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "dev": true, - "requires": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4", - "wordwrap": "^1.0.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 - } - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true - }, - "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 - }, - "has-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-glob/-/has-glob-1.0.0.tgz", - "integrity": "sha512-D+8A457fBShSEI3tFCj65PAbT++5sKiFtdCdOam0gnfBgw9D277OERk+HM9qYJXmdVLZ/znez10SqHN0BBQ50g==", - "dev": true, - "requires": { - "is-glob": "^3.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "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": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", - "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 - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - } - } - }, - "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" - } - }, - "hast-to-hyperscript": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", - "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", - "dev": true, - "requires": { - "@types/unist": "^2.0.3", - "comma-separated-tokens": "^1.0.0", - "property-information": "^5.3.0", - "space-separated-tokens": "^1.0.0", - "style-to-object": "^0.3.0", - "unist-util-is": "^4.0.0", - "web-namespaces": "^1.0.0" - } - }, - "hast-util-from-parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", - "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==", - "dev": true, - "requires": { - "@types/parse5": "^5.0.0", - "hastscript": "^6.0.0", - "property-information": "^5.0.0", - "vfile": "^4.0.0", - "vfile-location": "^3.2.0", - "web-namespaces": "^1.0.0" - } - }, - "hast-util-parse-selector": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", - "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", - "dev": true - }, - "hast-util-raw": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", - "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", - "dev": true, - "requires": { - "@types/hast": "^2.0.0", - "hast-util-from-parse5": "^6.0.0", - "hast-util-to-parse5": "^6.0.0", - "html-void-elements": "^1.0.0", - "parse5": "^6.0.0", - "unist-util-position": "^3.0.0", - "vfile": "^4.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" - }, - "dependencies": { - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - } - } - }, - "hast-util-to-parse5": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", - "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", - "dev": true, - "requires": { - "hast-to-hyperscript": "^9.0.0", - "property-information": "^5.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" - }, - "dependencies": { - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - } - } - }, - "hastscript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", - "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", - "dev": true, - "requires": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" - } - }, - "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 - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "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" - } - }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "html-dom-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/html-dom-parser/-/html-dom-parser-1.2.0.tgz", - "integrity": "sha512-2HIpFMvvffsXHFUFjso0M9LqM+1Lm22BF+Df2ba+7QHJXjk63pWChEnI6YG27eaWqUdfnh5/Vy+OXrNTtepRsg==", - "requires": { - "domhandler": "4.3.1", - "htmlparser2": "7.2.0" - } - }, - "html-entities": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", - "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", - "dev": true - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "dev": true, - "requires": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "dependencies": { - "commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true - } - } - }, - "html-react-parser": { - "version": "1.4.12", - "resolved": "https://registry.npmjs.org/html-react-parser/-/html-react-parser-1.4.12.tgz", - "integrity": "sha512-nqYQzr4uXh67G9ejAG7djupTHmQvSTgjY83zbXLRfKHJ0F06751jXx6WKSFARDdXxCngo2/7H4Rwtfeowql4gQ==", - "requires": { - "domhandler": "4.3.1", - "html-dom-parser": "1.2.0", - "react-property": "2.0.0", - "style-to-js": "1.1.0" - } - }, - "html-tags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", - "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==", - "dev": true - }, - "html-tokenize": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-tokenize/-/html-tokenize-2.0.1.tgz", - "integrity": "sha512-QY6S+hZ0f5m1WT8WffYN+Hg+xm/w5I8XeUcAq/ZYP5wVC8xbKi4Whhru3FtrAebD5EhBW8rmFzkDI6eCAuFe2w==", - "requires": { - "buffer-from": "~0.1.1", - "inherits": "~2.0.1", - "minimist": "~1.2.5", - "readable-stream": "~1.0.27-1", - "through2": "~0.4.1" - } - }, - "html-void-elements": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", - "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==", - "dev": true - }, - "html-webpack-plugin": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", - "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", - "dev": true, - "requires": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - }, - "dependencies": { - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true - } - } - }, - "htmlparser2": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", - "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.2", - "domutils": "^2.8.0", - "entities": "^3.0.1" - } - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", - "dev": true - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "husky": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.2.tgz", - "integrity": "sha512-Tkv80jtvbnkK3mYWxPZePGFpQ/tT3HNSs/sasF9P2YfkMezDl3ON37YN6jUUI4eTg5LcyVynlb6r4eyvOmspvg==", - "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": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==", - "dev": true - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "image-size": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz", - "integrity": "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==", - "dev": true, - "requires": { - "queue": "6.0.2" - } - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "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 - }, - "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": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "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==" - }, - "inline-style-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", - "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" - }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", - "dev": true - }, - "ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", - "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-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-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", - "dev": true - }, - "is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", - "dev": true, - "requires": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - } - }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "requires": { - "has-bigints": "^1.0.1" - } - }, - "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" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true - }, - "is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "requires": { - "has": "^1.0.3" - } - }, - "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-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", - "dev": true - }, - "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-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true - }, - "is-dom": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-dom/-/is-dom-1.1.0.tgz", - "integrity": "sha512-u82f6mvhYxRPKpw8V1N0W8ce1xXwOrQtgGcxl6UCL5zBmZu3is/18K0rR7uFCnMDuAsS/3W54mGL4vsaFUQlEQ==", - "dev": true, - "requires": { - "is-object": "^1.0.1", - "is-window": "^1.0.2" - } - }, - "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" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "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, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", - "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "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==", - "dev": true - }, - "is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true - }, - "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-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", - "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", - "dev": true - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "dev": true - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", - "dev": true, - "optional": true - }, - "is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "dev": true - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "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==", - "dev": true - }, - "is-window": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-window/-/is-window-1.0.2.tgz", - "integrity": "sha512-uj00kdXyZb9t9RcAUAwMZAnkBUwdYGhYlt7djMXhfyhUCzwNba50tIiBKR7q0l7tdoBtFVw/3JmLY6fI3rmZmg==", - "dev": true - }, - "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==", - "dev": true - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true - }, - "isomorphic-unfetch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz", - "integrity": "sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==", - "dev": true, - "requires": { - "node-fetch": "^2.6.1", - "unfetch": "^4.2.0" - } - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "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" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "iterate-iterator": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.2.tgz", - "integrity": "sha512-t91HubM4ZDQ70M9wqp+pcNpu8OyJ9UAtXntT/Bcsvp5tZMnz9vRa+IunKXeI8AnfZMTv0jNuVEmGeLSMjVvfPw==", - "dev": true - }, - "iterate-value": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz", - "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==", - "dev": true, - "requires": { - "es-get-iterator": "^1.0.2", - "iterate-iterator": "^1.0.1" - } - }, - "jest-haste-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.1.2", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7" - } - }, - "jest-mock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", - "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "jest-regex-util": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", - "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", - "dev": true - }, - "jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - } - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - } - }, - "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - } - }, - "js-string-escape": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", - "integrity": "sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==", - "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": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "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-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "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==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "jsx-ast-utils": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", - "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", - "dev": true, - "requires": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" - } - }, - "junk": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", - "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", - "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 - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "klona": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", - "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", - "dev": true - }, - "language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", - "dev": true - }, - "language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", - "dev": true, - "requires": { - "language-subtag-registry": "~0.3.2" - } - }, - "lazy-universal-dotenv": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lazy-universal-dotenv/-/lazy-universal-dotenv-3.0.1.tgz", - "integrity": "sha512-prXSYk799h3GY3iOWnC6ZigYzMPjxN2svgjJ9shk7oMadSNX3wXy0B6F32PMJv7qtMnrIbUxoEHzbutvxR2LBQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.5.0", - "app-root-dir": "^1.0.2", - "core-js": "^3.0.4", - "dotenv": "^8.0.0", - "dotenv-expand": "^5.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.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", - "dev": true, - "optional": 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" - }, - "dependencies": { - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", - "dev": true, - "optional": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "optional": true - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", - "dev": true, - "optional": true, - "requires": { - "is-utf8": "^0.2.0" - } - } - } - }, - "loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true - }, - "loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "dependencies": { - "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true - } - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "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": "sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==", - "dev": true, - "optional": true, - "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" - } - }, - "lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, - "requires": { - "tslib": "^2.0.3" - } - }, - "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" - } - }, - "lz-string": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", - "integrity": "sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "requires": { - "tmpl": "1.0.5" - } - }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "dev": true - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "dev": true, - "optional": true - }, - "map-or-similar": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/map-or-similar/-/map-or-similar-1.5.0.tgz", - "integrity": "sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", - "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==", - "dev": true - }, - "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-squeeze-paragraphs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", - "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", - "dev": true, - "requires": { - "unist-util-remove": "^2.0.0" - } - }, - "mdast-util-definitions": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", - "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", - "dev": true, - "requires": { - "unist-util-visit": "^2.0.0" - } - }, - "mdast-util-to-hast": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", - "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "mdast-util-definitions": "^4.0.0", - "mdurl": "^1.0.0", - "unist-builder": "^2.0.0", - "unist-util-generated": "^1.0.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" - } - }, - "mdast-util-to-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", - "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", - "dev": true - }, - "mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", - "dev": true - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "dev": true - }, - "mem": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz", - "integrity": "sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.3", - "mimic-fn": "^3.1.0" - }, - "dependencies": { - "mimic-fn": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", - "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", - "dev": true - } - } - }, - "memfs": { - "version": "3.4.11", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.11.tgz", - "integrity": "sha512-GvsCITGAyDCxxsJ+X6prJexFQEhOCJaIlUbsAvjzSI5o5O7j2dle3jWvz5Z5aOdpOxW6ol3vI1+0ut+641F1+w==", - "dev": true, - "requires": { - "fs-monkey": "^1.0.3" - } - }, - "memoizerific": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz", - "integrity": "sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==", - "dev": true, - "requires": { - "map-or-similar": "^1.5.0" - } - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==", - "dev": true, - "optional": 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" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", - "dev": true, - "optional": 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": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", - "dev": true, - "optional": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", - "dev": true, - "optional": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "optional": true - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", - "dev": true, - "optional": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.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": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", - "dev": true, - "optional": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - } - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "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": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true - }, - "microevent.ts": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz", - "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", - "dev": true, - "requires": { - "dom-walk": "^0.1.0" - } - }, - "min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true - }, - "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": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" - }, - "minipass": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", - "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "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.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - }, - "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" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "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" - } - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - } - } - }, - "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" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==", - "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" - }, - "dependencies": { - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "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" - } - } - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "multipipe": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-1.0.2.tgz", - "integrity": "sha512-6uiC9OvY71vzSGX8lZvSqscE7ft9nPupJ8fMjrCNRAUy2LREUW42UL+V/NTrogr6rFgRydUrCX4ZitfpSNkSCQ==", - "requires": { - "duplexer2": "^0.1.2", - "object-assign": "^4.1.0" - } - }, - "nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", - "dev": true, - "optional": true - }, - "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" - }, - "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" - } - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "nested-error-stacks": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.1.tgz", - "integrity": "sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==", - "dev": true - }, - "next": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/next/-/next-12.3.3.tgz", - "integrity": "sha512-Rx2Y6Wl5R8E77NOfBupp/B9OPCklqfqD0yN2+rDivhMjd6hjVFH5n0WTDI4PWwDmZsdNcYt6NV85kJ3PLR+eNQ==", - "requires": { - "@next/env": "12.3.3", - "@next/swc-android-arm-eabi": "12.3.3", - "@next/swc-android-arm64": "12.3.3", - "@next/swc-darwin-arm64": "12.3.3", - "@next/swc-darwin-x64": "12.3.3", - "@next/swc-freebsd-x64": "12.3.3", - "@next/swc-linux-arm-gnueabihf": "12.3.3", - "@next/swc-linux-arm64-gnu": "12.3.3", - "@next/swc-linux-arm64-musl": "12.3.3", - "@next/swc-linux-x64-gnu": "12.3.3", - "@next/swc-linux-x64-musl": "12.3.3", - "@next/swc-win32-arm64-msvc": "12.3.3", - "@next/swc-win32-ia32-msvc": "12.3.3", - "@next/swc-win32-x64-msvc": "12.3.3", - "@swc/helpers": "0.4.11", - "caniuse-lite": "^1.0.30001406", - "postcss": "8.4.14", - "styled-jsx": "5.0.7", - "use-sync-external-store": "1.2.0" - } - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dev": true, - "requires": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node-dir": { - "version": "0.1.17", - "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", - "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", - "dev": true, - "requires": { - "minimatch": "^3.0.2" - } - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dev": true, - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "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 - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } - } - } - } - }, - "node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", - "dev": true - }, - "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": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", - "dev": true, - "requires": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" - } - }, - "nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "requires": { - "boolbase": "^1.0.0" - } - }, - "num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", - "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": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^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": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "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": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "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 - } - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "dev": true - }, - "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - } - }, - "object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz", - "integrity": "sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==", - "dev": true, - "requires": { - "array.prototype.reduce": "^1.0.5", - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.hasown": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", - "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", - "dev": true, - "requires": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "objectorarray": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/objectorarray/-/objectorarray-1.0.5.tgz", - "integrity": "sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==", - "dev": true - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "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": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "dev": true, - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.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" - } - }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", - "dev": true - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", - "dev": true, - "optional": true - }, - "p-all": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-all/-/p-all-2.1.0.tgz", - "integrity": "sha512-HbZxz5FONzz/z2gJfk6bFca0BCiSRF8jU3yCsWOen/vR6lZjfPOu/e7L3uFzTW1i0H8TlC3vqQstEJPQL4/uLA==", - "dev": true, - "requires": { - "p-map": "^2.0.0" - }, - "dependencies": { - "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 - } - } - }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==", - "dev": true - }, - "p-event": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", - "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", - "dev": true, - "requires": { - "p-timeout": "^3.1.0" - } - }, - "p-filter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", - "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", - "dev": true, - "requires": { - "p-map": "^2.0.0" - }, - "dependencies": { - "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 - } - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "dev": true - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "dev": true, - "requires": { - "p-finally": "^1.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 - }, - "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" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dev": true, - "requires": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "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==", - "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": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", - "dev": true, - "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": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "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.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", - "dev": true - }, - "path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", - "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 - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "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 - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - }, - "pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dev": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "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 - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", - "dev": true, - "optional": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", - "dev": true, - "optional": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true - }, - "pkg-dir": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", - "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", - "dev": true, - "requires": { - "find-up": "^5.0.0" - } - }, - "pnp-webpack-plugin": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", - "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==", - "dev": true, - "requires": { - "ts-pnp": "^1.1.6" - } - }, - "polished": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/polished/-/polished-4.2.2.tgz", - "integrity": "sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.17.8" - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", - "dev": true - }, - "postcss": { - "version": "8.4.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", - "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", - "requires": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "postcss-flexbugs-fixes": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz", - "integrity": "sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ==", - "dev": true, - "requires": { - "postcss": "^7.0.26" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.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 - } - } - }, - "postcss-loader": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.3.0.tgz", - "integrity": "sha512-M/dSoIiNDOo8Rk0mUqoj4kpGq91gcxCfb9PoyZVdZ76/AuhxylHDYZblNE8o+EQ9AMSASeMFEKxZf5aU6wlx1Q==", - "dev": true, - "requires": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.4", - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "semver": "^7.3.4" - } - }, - "postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true - }, - "postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", - "dev": true, - "requires": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - } - }, - "postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.4" - } - }, - "postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "requires": { - "icss-utils": "^5.0.0" - } - }, - "postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "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.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", - "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": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "dev": true, - "requires": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - } - } - }, - "pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", - "dev": true - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true - }, - "promise.allsettled": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.6.tgz", - "integrity": "sha512-22wJUOD3zswWFqgwjNHa1965LvqTX87WPu/lreY2KSd7SVcERfuZ4GfUaOnJNnvtoIv2yXT/W00YIGMetXtFXg==", - "dev": true, - "requires": { - "array.prototype.map": "^1.0.5", - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "iterate-value": "^1.0.2" - } - }, - "promise.prototype.finally": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/promise.prototype.finally/-/promise.prototype.finally-3.1.4.tgz", - "integrity": "sha512-nNc3YbgMfLzqtqvO/q5DP6RR0SiHI9pUPGzyDf1q+usTwCN2kjvAnJkBb7bHe3o+fFSBPpsGMoYtaSi+LTNqng==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "property-information": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", - "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", - "dev": true, - "requires": { - "xtend": "^4.0.0" - }, - "dependencies": { - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - } - } - }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "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.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "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==", - "dev": true - }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", - "dev": true - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", - "dev": true - }, - "queue": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", - "dev": true, - "requires": { - "inherits": "~2.0.3" - } - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "ramda": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.28.0.tgz", - "integrity": "sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "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.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dev": true, - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true - } - } - }, - "raw-loader": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz", - "integrity": "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - } - }, - "react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "react-docgen": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/react-docgen/-/react-docgen-5.4.3.tgz", - "integrity": "sha512-xlLJyOlnfr8lLEEeaDZ+X2J/KJoe6Nr9AzxnkdQWush5hz2ZSu66w6iLMOScMmxoSHWpWMn+k3v5ZiyCfcWsOA==", - "dev": true, - "requires": { - "@babel/core": "^7.7.5", - "@babel/generator": "^7.12.11", - "@babel/runtime": "^7.7.6", - "ast-types": "^0.14.2", - "commander": "^2.19.0", - "doctrine": "^3.0.0", - "estree-to-babel": "^3.1.0", - "neo-async": "^2.6.1", - "node-dir": "^0.1.10", - "strip-indent": "^3.0.0" - }, - "dependencies": { - "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==", - "dev": true - } - } - }, - "react-docgen-typescript": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/react-docgen-typescript/-/react-docgen-typescript-2.2.2.tgz", - "integrity": "sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==", - "dev": true - }, - "react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - } - }, - "react-element-to-jsx-string": { - "version": "14.3.4", - "resolved": "https://registry.npmjs.org/react-element-to-jsx-string/-/react-element-to-jsx-string-14.3.4.tgz", - "integrity": "sha512-t4ZwvV6vwNxzujDQ+37bspnLwA4JlgUPWhLjBJWsNIDceAf6ZKUTCjdm08cN6WeZ5pTMKiCJkmAYnpmR4Bm+dg==", - "dev": true, - "requires": { - "@base2/pretty-print-object": "1.0.1", - "is-plain-object": "5.0.0", - "react-is": "17.0.2" - }, - "dependencies": { - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true - }, - "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - } - } - }, - "react-inspector": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/react-inspector/-/react-inspector-5.1.1.tgz", - "integrity": "sha512-GURDaYzoLbW8pMGXwYPDBIv6nqei4kK7LPRZ9q9HCZF54wqXz/dnylBp/kfE9XmekBhHvLDdcYeyIwSrvtOiWg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.0.0", - "is-dom": "^1.0.0", - "prop-types": "^15.0.0" - } - }, - "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-merge-refs": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/react-merge-refs/-/react-merge-refs-1.1.0.tgz", - "integrity": "sha512-alTKsjEL0dKH/ru1Iyn7vliS2QRcBp9zZPGoWxUOvRGWPUYgjo+V01is7p04It6KhgrzhJGnIj9GgX8W4bZoCQ==", - "dev": true - }, - "react-property": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/react-property/-/react-property-2.0.0.tgz", - "integrity": "sha512-kzmNjIgU32mO4mmH5+iUyrqlpFQhF8K2k7eZ4fdLSOPFrD1XgEuSBv9LDEgxRXTMBqMd8ppT0x6TIzqE5pdGdw==" - }, - "react-refresh": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", - "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", - "dev": true - }, - "react-textarea-autosize": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.3.4.tgz", - "integrity": "sha512-CdtmP8Dc19xL8/R6sWvtknD/eCXkQr30dtvC4VmGInhRsfF8X/ihXCq6+9l9qbxmKRiq407/7z5fxE7cVWQNgQ==", - "requires": { - "@babel/runtime": "^7.10.2", - "use-composed-ref": "^1.3.0", - "use-latest": "^1.2.1" - } - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "dependencies": { - "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" - } - }, - "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" - } - }, - "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 - } - } - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==", - "dev": true, - "optional": 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": "sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==", - "dev": true, - "optional": true, - "requires": { - "repeating": "^2.0.0" - } - }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==", - "dev": true, - "optional": true, - "requires": { - "get-stdin": "^4.0.1" - } - } - } - }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dev": true, - "requires": { - "regenerate": "^1.4.2" - } - }, - "regenerator-runtime": { - "version": "0.13.10", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz", - "integrity": "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==" - }, - "regenerator-transform": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", - "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", - "dev": true, - "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" - } - }, - "regex-parser": { - "version": "2.2.11", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", - "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", - "dev": true - }, - "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "regexpu-core": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz", - "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==", - "dev": true, - "requires": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsgen": "^0.7.1", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - } - }, - "regjsgen": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", - "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==", - "dev": true - }, - "regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true - } - } - }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "dev": true - }, - "remark-external-links": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/remark-external-links/-/remark-external-links-8.0.0.tgz", - "integrity": "sha512-5vPSX0kHoSsqtdftSHhIYofVINC8qmp0nctkeU9YoJwV3YfiBRiI6cbFRJ0oI/1F9xS+bopXG0m2KS8VFscuKA==", - "dev": true, - "requires": { - "extend": "^3.0.0", - "is-absolute-url": "^3.0.0", - "mdast-util-definitions": "^4.0.0", - "space-separated-tokens": "^1.0.0", - "unist-util-visit": "^2.0.0" - } - }, - "remark-footnotes": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", - "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==", - "dev": true - }, - "remark-mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", - "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", - "dev": true, - "requires": { - "@babel/core": "7.12.9", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-proposal-object-rest-spread": "7.12.1", - "@babel/plugin-syntax-jsx": "7.12.1", - "@mdx-js/util": "1.6.22", - "is-alphabetical": "1.0.4", - "remark-parse": "8.0.3", - "unified": "9.2.0" - }, - "dependencies": { - "@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - } - }, - "@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==", - "dev": true - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "remark-parse": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", - "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", - "dev": true, - "requires": { - "ccount": "^1.0.0", - "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": "^2.0.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": "^2.0.0", - "vfile-location": "^3.0.0", - "xtend": "^4.0.1" - }, - "dependencies": { - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - } - } - }, - "remark-slug": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/remark-slug/-/remark-slug-6.1.0.tgz", - "integrity": "sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ==", - "dev": true, - "requires": { - "github-slugger": "^1.0.0", - "mdast-util-to-string": "^1.0.0", - "unist-util-visit": "^2.0.0" - } - }, - "remark-squeeze-paragraphs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", - "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", - "dev": true, - "requires": { - "mdast-squeeze-paragraphs": "^4.0.0" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", - "dev": true - }, - "renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "dev": true, - "requires": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true - }, - "htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - } - } - }, - "repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==", - "dev": true, - "optional": true, - "requires": { - "is-finite": "^1.0.0" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "requireindex": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", - "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", - "dev": true - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^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==" - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", - "dev": true - }, - "resolve-url-loader": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", - "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", - "dev": true, - "requires": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.14", - "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 - } - } - }, - "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 - }, - "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": "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" - } - }, - "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" - } - }, - "rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "dev": true - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==", - "dev": true, - "requires": { - "aproba": "^1.1.1" - }, - "dependencies": { - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - } - } - }, - "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==" - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "dev": true, - "requires": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "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" - } - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "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" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.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==", - "dev": true - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "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" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "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": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "sass-loader": { - "version": "12.6.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz", - "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", - "dev": true, - "requires": { - "klona": "^2.0.4", - "neo-async": "^2.6.2" - } - }, - "scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.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" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } - } - }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "serve-favicon": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.5.0.tgz", - "integrity": "sha512-FMW2RvqNr03x+C0WxTyu6sOv21oOjkq5j8tjquWccwa6ScNyGFOGJVpuS1NmTVGBAHS07xnSKotgf2ehQmf9iA==", - "dev": true, - "requires": { - "etag": "~1.8.1", - "fresh": "0.5.2", - "ms": "2.1.1", - "parseurl": "~1.3.2", - "safe-buffer": "5.1.1" - }, - "dependencies": { - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "dev": true - } - } - }, - "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - } - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "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" - } - }, - "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 - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "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": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "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": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "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": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "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" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - }, - "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 - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "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": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, - "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" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "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": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" - }, - "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.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "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.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "dev": true - }, - "space-separated-tokens": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", - "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.12", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", - "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "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": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "dev": true, - "requires": { - "minipass": "^3.1.1" - } - }, - "stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "dev": true - }, - "stackframe": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", - "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", - "dev": true - }, - "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==", - "dev": true - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", - "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": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^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": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "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": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "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 - } - } - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true - }, - "store2": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/store2/-/store2-2.14.2.tgz", - "integrity": "sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==", - "dev": true - }, - "storybook-addon-mantine": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/storybook-addon-mantine/-/storybook-addon-mantine-1.2.0.tgz", - "integrity": "sha512-GuYmjZMNFNMa3lT1M/eH9nVLIxN4l54FLqn1uiJZ11dmbYfdHaO3IwTBrRrSFfwGtK2P8hiNPNIhXZ6+mBZMSQ==", - "dev": true, - "requires": { - "@babel/cli": "^7.18.6", - "@babel/core": "^7.18.6", - "@babel/preset-env": "^7.18.6", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "storybook-addon-mantine": "^1.0.0" - }, - "dependencies": { - "react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "dev": true, - "requires": { - "loose-envify": "^1.1.0" - } - }, - "react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "dev": true, - "requires": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - } - }, - "scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "dev": true, - "requires": { - "loose-envify": "^1.1.0" - } - } - } - }, - "storybook-addon-next": { - "version": "1.6.10", - "resolved": "https://registry.npmjs.org/storybook-addon-next/-/storybook-addon-next-1.6.10.tgz", - "integrity": "sha512-BYs2B5dHIfk5EXVKGC91LZJ5/z+fUjhG7mDfuZvSA0igCm7AZFbe2LJz8NxtIKJpQwiqsqSr62suAcggMRkBNg==", - "dev": true, - "requires": { - "@storybook/addons": "^6.4.10", - "image-size": "^1.0.0", - "loader-utils": "^3.2.0", - "postcss-loader": "^6.2.1", - "resolve-url-loader": "^5.0.0", - "sass-loader": "^12.4.0", - "semver": "^7.3.5", - "tsconfig-paths": "^4.0.0", - "tsconfig-paths-webpack-plugin": "^4.0.0" - }, - "dependencies": { - "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true - }, - "loader-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", - "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", - "dev": true - }, - "postcss-loader": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", - "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", - "dev": true, - "requires": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.5", - "semver": "^7.3.5" - } - }, - "tsconfig-paths": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.1.0.tgz", - "integrity": "sha512-AHx4Euop/dXFC+Vx589alFba8QItjF+8hf8LtmuiCwHyI4rHXQtOOENaM8kvYf5fR0dRChy3wzWIZ9WbB7FWow==", - "dev": true, - "requires": { - "json5": "^2.2.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - } - } - }, - "stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "stream-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" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - } - } - }, - "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 - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - } - } - }, - "string.prototype.matchall": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4" - } - }, - "string.prototype.padend": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.4.tgz", - "integrity": "sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "string.prototype.padstart": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/string.prototype.padstart/-/string.prototype.padstart-3.1.4.tgz", - "integrity": "sha512-XqOHj8horGsF+zwxraBvMTkBFM28sS/jHBJajh17JtJKA92qazidiQbLosV4UA18azvLOVKYo/E3g3T9Y5826w==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "requires": { - "min-indent": "^1.0.0" - } - }, - "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": "2.0.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", - "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - } - }, - "style-to-js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.0.tgz", - "integrity": "sha512-1OqefPDxGrlMwcbfpsTVRyzwdhr4W0uxYQzeA2F1CBc8WG04udg2+ybRnvh3XYL4TdHQrCahLtax2jc8xaE6rA==", - "requires": { - "style-to-object": "0.3.0" - } - }, - "style-to-object": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", - "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", - "requires": { - "inline-style-parser": "0.1.1" - } - }, - "styled-jsx": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.7.tgz", - "integrity": "sha512-b3sUzamS086YLRuvnaDigdAewz1/EFYlHpYBP5mZovKEdQQOIIYq8lApylub3HHZ6xFjV051kkGU7cudJmrXEA==" - }, - "stylis": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz", - "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" - }, - "symbol.prototype.description": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/symbol.prototype.description/-/symbol.prototype.description-1.0.5.tgz", - "integrity": "sha512-x738iXRYsrAt9WBhRCVG5BtIC3B7CUkFwbHW2zOvGtwM33s7JjrCDyq8V0zgMYVb5ymsL8+qkzzpANH63CPQaQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-symbol-description": "^1.0.0", - "has-symbols": "^1.0.2", - "object.getownpropertydescriptors": "^2.1.2" - } - }, - "synchronous-promise": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.16.tgz", - "integrity": "sha512-qImOD23aDfnIDNqlG1NOehdB9IYsn1V9oByPjKY1nakv2MQYCEMyX033/q+aEtYCpmYK1cv2+NTmlH+ra6GA5A==", - "dev": true - }, - "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.1.12", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.12.tgz", - "integrity": "sha512-jU4TdemS31uABHd+Lt5WEYJuzn+TJTCBLljvIAHZOz6M9Os5pJ4dD+vRFLxPa/n3T0iEFzpi+0x1UfuDZYbRMw==", - "dev": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - } - }, - "telejson": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/telejson/-/telejson-6.0.8.tgz", - "integrity": "sha512-nerNXi+j8NK1QEfBHtZUN/aLdDcyupA//9kAboYLrtzZlPLpUfqbVGWb9zz91f/mIjRbAYhbgtnJHY8I1b5MBg==", - "dev": true, - "requires": { - "@types/is-function": "^1.0.0", - "global": "^4.4.0", - "is-function": "^1.0.2", - "is-regex": "^1.1.2", - "is-symbol": "^1.0.3", - "isobject": "^4.0.0", - "lodash": "^4.17.21", - "memoizerific": "^1.11.3" - }, - "dependencies": { - "isobject": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz", - "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==", - "dev": true - } - } - }, - "terser": { - "version": "5.15.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", - "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==", - "dev": true, - "requires": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "dependencies": { - "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==", - "dev": true - } - } - }, - "terser-webpack-plugin": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", - "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.14", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "terser": "^5.14.1" - }, - "dependencies": { - "jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - } - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" - }, - "through2": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.4.2.tgz", - "integrity": "sha512-45Llu+EwHKtAZYTPPVn3XZHBgakWMN3rokhEv5hu596XP+cNgplMg+Gj+1nmAvj+L0K7+N49zBKx5rah5u0QIQ==", - "requires": { - "readable-stream": "~1.0.17", - "xtend": "~2.1.1" - } - }, - "timers-browserify": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", - "dev": true, - "requires": { - "setimmediate": "^1.0.4" - } - }, - "tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", - "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": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "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": "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" - } - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true - }, - "trim": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==", - "dev": true - }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw==", - "dev": true, - "optional": true - }, - "trim-trailing-lines": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", - "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==", - "dev": true - }, - "trough": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", - "dev": true - }, - "ts-dedent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", - "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", - "dev": true - }, - "ts-pnp": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", - "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==", - "dev": true - }, - "tsconfig-paths": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", - "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", - "dev": true, - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "tsconfig-paths-webpack-plugin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-4.0.0.tgz", - "integrity": "sha512-fw/7265mIWukrSHd0i+wSwx64kYUSAKPfxRDksjKIYTxSAp9W9/xcZVBF4Kl0eqQd5eBpAQ/oQrc5RyM/0c1GQ==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.7.0", - "tsconfig-paths": "^4.0.0" - }, - "dependencies": { - "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true - }, - "tsconfig-paths": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.1.0.tgz", - "integrity": "sha512-AHx4Euop/dXFC+Vx589alFba8QItjF+8hf8LtmuiCwHyI4rHXQtOOENaM8kvYf5fR0dRChy3wzWIZ9WbB7FWow==", - "dev": true, - "requires": { - "json5": "^2.2.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - } - } - }, - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==", - "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.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "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": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", - "dev": true - }, - "uglify-js": { - "version": "3.17.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", - "dev": true, - "optional": true - }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, - "unfetch": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", - "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "inherits": "^2.0.0", - "xtend": "^4.0.0" - }, - "dependencies": { - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - } - } - }, - "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true - }, - "unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", - "dev": true, - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.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" - }, - "dependencies": { - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "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-builder": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", - "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==", - "dev": true - }, - "unist-util-generated": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", - "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", - "dev": true - }, - "unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", - "dev": true - }, - "unist-util-position": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", - "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", - "dev": true - }, - "unist-util-remove": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz", - "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==", - "dev": true, - "requires": { - "unist-util-is": "^4.0.0" - } - }, - "unist-util-remove-position": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", - "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", - "dev": true, - "requires": { - "unist-util-visit": "^2.0.0" - } - }, - "unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "dev": true, - "requires": { - "@types/unist": "^2.0.2" - } - }, - "unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", - "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": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", - "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": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "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": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - } - } - }, - "untildify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-2.1.0.tgz", - "integrity": "sha512-sJjbDp2GodvkB0FZZcn7k6afVisqX5BZD7Yq3xp4nN2O15BBK0cLm3Vwn2vQaF7UDS0UUsrQMkkplmDI5fskig==", - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0" - } - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true, - "optional": true - }, - "update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", - "dev": true - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", - "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": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", - "dev": true - } - } - }, - "url-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", - "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "mime-types": "^2.1.27", - "schema-utils": "^3.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 - }, - "use-composed-ref": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", - "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==" - }, - "use-isomorphic-layout-effect": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", - "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==" - }, - "use-latest": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", - "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", - "requires": { - "use-isomorphic-layout-effect": "^1.1.1" - } - }, - "use-sync-external-store": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", - "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==" - }, - "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": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "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" - } - }, - "utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", - "dev": true - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "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 - }, - "uuid-browser": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid-browser/-/uuid-browser-3.1.0.tgz", - "integrity": "sha512-dsNgbLaTrd6l3MMxTtouOCFw4CBFc/3a+GgYA2YyrJvyQ1u6q4pcu3ktLoUZ/VN/Aw9WsauazbgsgdfVWgAKQg==", - "dev": true - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "v8-to-istanbul": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", - "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - } - }, - "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" - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true - }, - "vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - } - }, - "vfile-location": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", - "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", - "dev": true - }, - "vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - } - }, - "vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true - }, - "walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "requires": { - "makeerror": "1.0.12" - } - }, - "watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dev": true, - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "watchpack-chokidar2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", - "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", - "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": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "optional": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, - "optional": true - }, - "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "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": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "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": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "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": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dev": true, - "optional": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", - "dev": true, - "optional": 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==", - "dev": true, - "optional": true - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "optional": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "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" - } - }, - "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, - "optional": 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" - } - }, - "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, - "optional": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "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, - "optional": true, - "requires": { - "safe-buffer": "~5.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": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "optional": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "web-namespaces": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", - "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", - "dev": true - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true - }, - "webpack": { - "version": "5.75.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", - "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", - "dev": true, - "requires": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "dependencies": { - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true - } - } - }, - "webpack-dev-middleware": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-4.3.0.tgz", - "integrity": "sha512-PjwyVY95/bhBh6VUqt6z4THplYcsvQ8YNNBTBM873xLVmw8FLeALn0qurHbs9EmcfhzQis/eoqypSnZeuUz26w==", - "dev": true, - "requires": { - "colorette": "^1.2.2", - "mem": "^8.1.1", - "memfs": "^3.2.2", - "mime-types": "^2.1.30", - "range-parser": "^1.2.1", - "schema-utils": "^3.0.0" - } - }, - "webpack-filter-warnings-plugin": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/webpack-filter-warnings-plugin/-/webpack-filter-warnings-plugin-1.2.1.tgz", - "integrity": "sha512-Ez6ytc9IseDMLPo0qCuNNYzgtUl8NovOqjIq4uAU8LTD4uoa1w1KpZyyzFtLTEMZpkkOkLfL9eN+KGYdk1Qtwg==", - "dev": true - }, - "webpack-hot-middleware": { - "version": "2.25.3", - "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.3.tgz", - "integrity": "sha512-IK/0WAHs7MTu1tzLTjio73LjS3Ov+VvBKQmE8WPlJutgG5zT6Urgq/BbAdRrHTRpyzK0dvAvFh1Qg98akxgZpA==", - "dev": true, - "requires": { - "ansi-html-community": "0.0.8", - "html-entities": "^2.1.0", - "strip-ansi": "^6.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-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true - }, - "webpack-virtual-modules": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.4.6.tgz", - "integrity": "sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==", - "dev": true - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.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" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "dev": true, - "requires": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" - } - }, - "which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - } - }, - "wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dev": true, - "requires": { - "string-width": "^4.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 - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "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" - } - }, - "worker-rpc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz", - "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==", - "dev": true, - "requires": { - "microevent.ts": "~0.1.1" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" + "node_modules/@next/swc-linux-x64-musl": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.3.3.tgz", + "integrity": "sha512-bG5QODFy59XnSFTiPyIAt+rbPdphtvQMibtOVvyjwIwsBUw7swJ6k+6PSPVYEYpi6SHzi3qYBsro39ayGJKQJg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" } }, - "ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "dev": true - }, - "x-default-browser": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/x-default-browser/-/x-default-browser-0.4.0.tgz", - "integrity": "sha512-7LKo7RtWfoFN/rHx1UELv/2zHGMx8MkZKDq1xENmOCTkfIqZJ0zZ26NEJX8czhnPXVcqS0ARjjfJB+eJ0/5Cvw==", - "dev": true, - "requires": { - "default-browser-id": "^1.0.4" + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.3.3.tgz", + "integrity": "sha512-FbnT3reJ3MbTJ5W0hvlCCGGVDSpburzT5XGC9ljBJ4kr+85iNTLjv7+vrPeDdwHEqtGmdZgnabkLVCI4yFyCag==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" } }, - "xtend": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", - "integrity": "sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==", - "requires": { - "object-keys": "~0.4.0" - }, - "dependencies": { - "object-keys": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", - "integrity": "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==" - } + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.3.3.tgz", + "integrity": "sha512-M/fKZC2tMGWA6eTsIniNEBpx2prdR8lIxvSO3gv5P6ymZOGVWCvEMksnTkPAjHnU6d8r8eCiuGKm3UNo7zCTpQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" } }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "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 - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "node_modules/@next/swc-win32-x64-msvc": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.3.3.tgz", + "integrity": "sha512-Ku9mfGwmNtk44o4B/jEWUxBAT4tJ3S7QbBMLJdL1GmtRZ05LGL36OqWjLvBPr8dFiHOQQbYoAmYfQw7zeGypYA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - }, - "zwitch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", - "dev": true } } } diff --git a/frontend/package.json b/frontend/package.json index 44010639..1c70138a 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -18,6 +18,8 @@ "build-storybook": "build-storybook" }, "dependencies": { + "@tanstack/react-query": "^4.16.1", + "@tanstack/react-query-devtools": "^4.16.1", "@emotion/react": "^11.10.5", "@emotion/server": "^11.10.0", "@emotion/styled": "^11.10.5", @@ -43,6 +45,7 @@ "@types/node": "^18.11.9", "@types/react": "^18.0.25", "@types/react-dom": "^18.0.9", + "@types/react-query": "^1.2.9", "@typescript-eslint/eslint-plugin": "^5.43.0", "babel-loader": "^8.3.0", "eslint": "8.22.0", diff --git a/frontend/src/pages/_app.tsx b/frontend/src/pages/_app.tsx index 426e0c95..1661ad12 100644 --- a/frontend/src/pages/_app.tsx +++ b/frontend/src/pages/_app.tsx @@ -1,11 +1,15 @@ import { MantineProvider } from '@mantine/core'; import Head from 'next/head'; import { AppProps } from 'next/app'; +import { QueryClientProvider, QueryClient } from '@tanstack/react-query'; +import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; import RouterTransition from '@components/RouterTransition'; import theme from '@styles/theme'; import CustomFonts from '@styles/CustomFont'; +const queryClient = new QueryClient(); + export default function App({ Component, pageProps }: AppProps) { return ( <> @@ -13,11 +17,15 @@ export default function App({ Component, pageProps }: AppProps) { Page title - - - - - + + + + + + + + + ); } From 747bef24d9c00713d82476d27cc074b9b051a2d0 Mon Sep 17 00:00:00 2001 From: Gakko <90585081+pythonstrup@users.noreply.github.com> Date: Thu, 17 Nov 2022 17:44:09 +0900 Subject: [PATCH 005/142] =?UTF-8?q?[Feature]=20=EB=B0=B1=EC=97=94=EB=93=9C?= =?UTF-8?q?=20CI=20(#20)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ๐Ÿฅ… chore: docker compose setting * ๐Ÿฅ… chore: build & test CI * ๐Ÿฅ… chore: lint test CI * ๐Ÿฅ… chore: lint test * ๐Ÿฅ… chore: window eslint setting * ๐Ÿฅ… chore: ncp docker registry login * ๐Ÿฅ… chore: ci ์˜คํƒ€ ์ˆ˜์ • * ๐Ÿฅ… chore: docker git commit hash * ๐Ÿฅ… chore: docker image push * ๐Ÿฅ… chore: docker push ์ˆ˜์ • * :goal_net: chore: ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์šฉ ci docker ์ด๋ฏธ์ง€ํ™” ์ œ๊ฑฐ * :goal_net: chore: ๋ฐฑ์—”๋“œ ์ฝ”๋“œ ๋ณ€๊ฒฝ์‹œ์—๋งŒ ci์•ก์…˜ ๋™์ž‘ํ•˜๋„๋ก ์ˆ˜์ • * :goal_net: chore: .idea, *.iml gitignore ์ถ”๊ฐ€ * :goal_net: chore: ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์šฉ ci paths-ignore ์ œ๊ฑฐ Co-authored-by: myeongil --- .github/workflows/backend-dev-ci.yml | 52 ++++ .github/workflows/slack-notification.yml | 42 +++ .gitignore | 3 + backend/.dockerignore | 23 ++ backend/.eslintrc.js | 6 + backend/dockerfile | 7 + backend/src/main.ts | 1 + docker-compose.yml | 15 + frontend/package-lock.json | 360 +++++++++++------------ 9 files changed, 329 insertions(+), 180 deletions(-) create mode 100644 .github/workflows/backend-dev-ci.yml create mode 100644 .github/workflows/slack-notification.yml create mode 100644 backend/.dockerignore create mode 100644 backend/dockerfile create mode 100644 docker-compose.yml diff --git a/.github/workflows/backend-dev-ci.yml b/.github/workflows/backend-dev-ci.yml new file mode 100644 index 00000000..3b181f0b --- /dev/null +++ b/.github/workflows/backend-dev-ci.yml @@ -0,0 +1,52 @@ +name: Backend Dev CI +run-name: ${{ github.actor }}๊ฐ€ ์‹คํ–‰ํ•จ +on: + pull_request: + branches: + - develop + paths: + - 'backend/**' + - '.github/workflows/backend-dev-ci.yml' + - '.github/workflows/slack-notification.yml' +jobs: + CI: + runs-on: ubuntu-latest + defaults: + run: + working-directory: './backend' + outputs: + status: ${{ job.status }} + steps: + - name: checkout + uses: actions/checkout@v3 + + - name: nodeJS + uses: actions/setup-node@v3 + with: + node-version: 16.18.1 + + - name: dependency install + run: npm install + + - name: lint test + run: npm run lint + + - name: build + run: npm run build + + - name: test + run: npm run test + + - name: e2e test + run: npm run test:e2e + + slack-notifications: + needs: [CI] + if: ${{ always() }} + uses: ./.github/workflows/slack-notification.yml + with: + title: ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์šฉ CI + status: '${{ needs.CI.outputs.status }}' + commit_url: ${{ github.event.pull_request.html_url || github.event.head_commit.url }} + secrets: + webhook_url: ${{ secrets.SLACK_NOTIFICATION_WEBHOOK_URL }} diff --git a/.github/workflows/slack-notification.yml b/.github/workflows/slack-notification.yml new file mode 100644 index 00000000..ba431959 --- /dev/null +++ b/.github/workflows/slack-notification.yml @@ -0,0 +1,42 @@ +name: Slack Notification +run-name: ${{ github.actor }} notify slack ๐Ÿš€ + +on: + workflow_call: + inputs: + title: + required: true + type: string + status: + required: true + type: string + commit_url: + required: true + type: string + secrets: + webhook_url: + required: true + +jobs: + slack-notification: + runs-on: ubuntu-latest + steps: + - name: Slack Notifications + id: slack + uses: slackapi/slack-github-action@v1.23.0 + with: + payload: | + { + "text": "${{ inputs.title }}: ${{ inputs.status }}\n${{ inputs.commit_url }}", + "blocks": [ + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "${{ inputs.title }}: ${{ inputs.status }}\n${{ inputs.commit_url }}" + } + } + ] + } + env: + SLACK_WEBHOOK_URL: ${{ secrets.webhook_url }} diff --git a/.gitignore b/.gitignore index 485dee64..d13acb8a 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,4 @@ .idea + +*.iml + diff --git a/backend/.dockerignore b/backend/.dockerignore new file mode 100644 index 00000000..cbd3fdd9 --- /dev/null +++ b/backend/.dockerignore @@ -0,0 +1,23 @@ +**/.classpath +**/.dockerignore +**/.env +**/.git +**/.gitignore +**/.project +**/.settings +**/.toolstarget +**/.vs +**/.vscode +**/*.*proj.user +**/*.dbmdl +**/*.jfm +**/charts +**/docker-compose* +**/compose* +**/Dockerfile* +**/node_modules +**/npm-debug.log +**/obj +**/secrets.dev.yaml +**/values.dev.yaml +README.md diff --git a/backend/.eslintrc.js b/backend/.eslintrc.js index eb266cfb..db408600 100644 --- a/backend/.eslintrc.js +++ b/backend/.eslintrc.js @@ -22,5 +22,11 @@ module.exports = { '@typescript-eslint/explicit-module-boundary-types': 'off', '@typescript-eslint/no-explicit-any': 'off', 'no-console': 'warn', + 'prettier/prettier': [ + 'error', + { + endOfLine: 'auto', + }, + ], }, }; diff --git a/backend/dockerfile b/backend/dockerfile new file mode 100644 index 00000000..c0f0a5dd --- /dev/null +++ b/backend/dockerfile @@ -0,0 +1,7 @@ +FROM node:16.18.1-alpine As development +ARG GIT_COMMIT=unspecified +LABEL git_commit=$GIT_COMMIT +WORKDIR /usr/src/app +COPY package*.json ./ +RUN npm install +COPY . . diff --git a/backend/src/main.ts b/backend/src/main.ts index 13cad38c..ff409c4a 100644 --- a/backend/src/main.ts +++ b/backend/src/main.ts @@ -5,4 +5,5 @@ async function bootstrap() { const app = await NestFactory.create(AppModule); await app.listen(3000); } + bootstrap(); diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..1dbc05c3 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,15 @@ +version: '3.4' + +services: + backend: + container_name: moyeo-server + image: backend + build: + context: backend + dockerfile: ./Dockerfile + target: development + environment: + NODE_ENV: production + ports: + - 3000:3000 + command: npm run start:dev diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 4e31d4c6..6ad49024 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -3050,6 +3050,36 @@ "glob": "7.1.7" } }, + "node_modules/@next/swc-android-arm-eabi": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.3.3.tgz", + "integrity": "sha512-5O/ZIX6hlIRGMy1R2f/8WiCZ4Hp4WTC0FcTuz8ycQ28j/mzDnmzjVoayVVr+ZmfEKQayFrRu+vxHjFyY0JGQlQ==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-android-arm64": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.3.3.tgz", + "integrity": "sha512-2QWreRmlxYRDtnLYn+BI8oukHwcP7W0zGIY5R2mEXRjI4ARqCLdu8RmcT9Vemw7RfeAVKA/4cv/9PY0pCcQpNA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, "node_modules/@next/swc-darwin-arm64": { "version": "12.3.3", "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.3.3.tgz", @@ -3065,6 +3095,156 @@ "node": ">= 10" } }, + "node_modules/@next/swc-darwin-x64": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.3.3.tgz", + "integrity": "sha512-gRYvTKrRYynjFQUDJ+upHMcBiNz0ii0m7zGgmUTlTSmrBWqVSzx79EHYT7Nn4GWHM+a/W+2VXfu+lqHcJeQ9gQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-freebsd-x64": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.3.3.tgz", + "integrity": "sha512-r+GLATzCjjQI82bgrIPXWEYBwZonSO64OThk5wU6HduZlDYTEDxZsFNoNoesCDWCgRrgg+OXj7WLNy1WlvfX7w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm-gnueabihf": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.3.3.tgz", + "integrity": "sha512-juvRj1QX9jmQScL4nV0rROtYUFgWP76zfdn1fdfZ2BhvwUugIAq8x+jLVGlnXKUhDrP9+RrAufqXjjVkK+uBxA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.3.3.tgz", + "integrity": "sha512-hzinybStPB+SzS68hR5rzOngOH7Yd/jFuWGeg9qS5WifYXHpqwGH2BQeKpjVV0iJuyO9r309JKrRWMrbfhnuBA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.3.3.tgz", + "integrity": "sha512-oyfQYljCwf+9zUu1YkTZbRbyxmcHzvJPMGOxC3kJOReh3kCUoGcmvAxUPMtFD6FSYjJ+eaog4+2IFHtYuAw/bQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.3.3.tgz", + "integrity": "sha512-epv4FMazj/XG70KTTnrZ0H1VtL6DeWOvyHLHYy7f5PdgDpBXpDTFjVqhP8NFNH8HmaDDdeL1NvQD07AXhyvUKA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.3.3.tgz", + "integrity": "sha512-bG5QODFy59XnSFTiPyIAt+rbPdphtvQMibtOVvyjwIwsBUw7swJ6k+6PSPVYEYpi6SHzi3qYBsro39ayGJKQJg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.3.3.tgz", + "integrity": "sha512-FbnT3reJ3MbTJ5W0hvlCCGGVDSpburzT5XGC9ljBJ4kr+85iNTLjv7+vrPeDdwHEqtGmdZgnabkLVCI4yFyCag==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.3.3.tgz", + "integrity": "sha512-M/fKZC2tMGWA6eTsIniNEBpx2prdR8lIxvSO3gv5P6ymZOGVWCvEMksnTkPAjHnU6d8r8eCiuGKm3UNo7zCTpQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.3.3.tgz", + "integrity": "sha512-Ku9mfGwmNtk44o4B/jEWUxBAT4tJ3S7QbBMLJdL1GmtRZ05LGL36OqWjLvBPr8dFiHOQQbYoAmYfQw7zeGypYA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, "node_modules/@nicolo-ribaudo/chokidar-2": { "version": "2.1.8-no-fsevents.3", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", @@ -24882,186 +25062,6 @@ "type": "github", "url": "https://github.com/sponsors/wooorm" } - }, - "node_modules/@next/swc-android-arm-eabi": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.3.3.tgz", - "integrity": "sha512-5O/ZIX6hlIRGMy1R2f/8WiCZ4Hp4WTC0FcTuz8ycQ28j/mzDnmzjVoayVVr+ZmfEKQayFrRu+vxHjFyY0JGQlQ==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-android-arm64": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.3.3.tgz", - "integrity": "sha512-2QWreRmlxYRDtnLYn+BI8oukHwcP7W0zGIY5R2mEXRjI4ARqCLdu8RmcT9Vemw7RfeAVKA/4cv/9PY0pCcQpNA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-darwin-x64": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.3.3.tgz", - "integrity": "sha512-gRYvTKrRYynjFQUDJ+upHMcBiNz0ii0m7zGgmUTlTSmrBWqVSzx79EHYT7Nn4GWHM+a/W+2VXfu+lqHcJeQ9gQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-freebsd-x64": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.3.3.tgz", - "integrity": "sha512-r+GLATzCjjQI82bgrIPXWEYBwZonSO64OThk5wU6HduZlDYTEDxZsFNoNoesCDWCgRrgg+OXj7WLNy1WlvfX7w==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm-gnueabihf": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.3.3.tgz", - "integrity": "sha512-juvRj1QX9jmQScL4nV0rROtYUFgWP76zfdn1fdfZ2BhvwUugIAq8x+jLVGlnXKUhDrP9+RrAufqXjjVkK+uBxA==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.3.3.tgz", - "integrity": "sha512-hzinybStPB+SzS68hR5rzOngOH7Yd/jFuWGeg9qS5WifYXHpqwGH2BQeKpjVV0iJuyO9r309JKrRWMrbfhnuBA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.3.3.tgz", - "integrity": "sha512-oyfQYljCwf+9zUu1YkTZbRbyxmcHzvJPMGOxC3kJOReh3kCUoGcmvAxUPMtFD6FSYjJ+eaog4+2IFHtYuAw/bQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.3.3.tgz", - "integrity": "sha512-epv4FMazj/XG70KTTnrZ0H1VtL6DeWOvyHLHYy7f5PdgDpBXpDTFjVqhP8NFNH8HmaDDdeL1NvQD07AXhyvUKA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.3.3.tgz", - "integrity": "sha512-bG5QODFy59XnSFTiPyIAt+rbPdphtvQMibtOVvyjwIwsBUw7swJ6k+6PSPVYEYpi6SHzi3qYBsro39ayGJKQJg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.3.3.tgz", - "integrity": "sha512-FbnT3reJ3MbTJ5W0hvlCCGGVDSpburzT5XGC9ljBJ4kr+85iNTLjv7+vrPeDdwHEqtGmdZgnabkLVCI4yFyCag==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-ia32-msvc": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.3.3.tgz", - "integrity": "sha512-M/fKZC2tMGWA6eTsIniNEBpx2prdR8lIxvSO3gv5P6ymZOGVWCvEMksnTkPAjHnU6d8r8eCiuGKm3UNo7zCTpQ==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "12.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.3.3.tgz", - "integrity": "sha512-Ku9mfGwmNtk44o4B/jEWUxBAT4tJ3S7QbBMLJdL1GmtRZ05LGL36OqWjLvBPr8dFiHOQQbYoAmYfQw7zeGypYA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } } } } From c8ba7e9f5439bdeccdfc2606677b3ad49aad7b69 Mon Sep 17 00:00:00 2001 From: Kim Myeongil <67570061+username1103@users.noreply.github.com> Date: Fri, 18 Nov 2022 09:57:07 +0900 Subject: [PATCH 006/142] =?UTF-8?q?[Feature]=20=EB=B0=B1=EC=97=94=EB=93=9C?= =?UTF-8?q?=20=EA=B0=9C=EB=B0=9C=EC=9A=A9=20CD=20(#26)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :goal_net: chore: ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์šฉ CD ์ด๋ฏธ์ง€ NCP registry upload * :goal_net: chore: ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์šฉ CD ์˜คํƒ€ ์ˆ˜์ • * :goal_net: chore: ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์šฉ CD image tag ์ˆ˜์ • * :goal_net: chore: ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์šฉ CD SSH ์ ‘์† * :goal_net: chore: ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์šฉ CD CD job ์ดํ›„ slack ์•Œ๋ฆผ ์ „์†ก * :goal_net: chore: ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์šฉ CD deploy ์ถ”๊ฐ€ - deploy ์Šคํฌ๋ฆฝํŠธ ์ถ”๊ฐ€ - docker-compose registry iamge๋กœ ๋ณ€๊ฒฝ * :goal_net: chore: ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์šฉ CD github clone script์—์„œ ์ œ์™ธ * :goal_net: chore: ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์šฉ CD github clone ๋ณ€๊ฒฝ * :goal_net: chore: ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์šฉ CD github branch ๋ณ€๊ฒฝ * :goal_net: chore: ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์šฉ CD github branch ๋ณ€๊ฒฝ * :goal_net: chore: ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์šฉ CD github branch ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์šฉ CD ํŒŒ์ผ ๊ถŒํ•œ ์„ค์ • * ๐Ÿฅ… chore: ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์šฉ CD docker tag ์ˆ˜์ • * ๐Ÿฅ… chore: ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์šฉ CD script test * ๐Ÿฅ… chore: ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์šฉ CD directory ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์šฉ CD docker server image ์„ค์ • * ๐Ÿฅ… chore: ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์šฉ CD env ์„ค์ • ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์šฉ CD env ์„ค์ • ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์šฉ CD docker-compose ์žฌ์‹คํ–‰ * ๐Ÿฅ… chore: ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์šฉ CD gitignore .env ์ถ”๊ฐ€ * ๐Ÿฅ… chore: ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์šฉ CD event ๋ฐœ์ƒ์‹œ๊ธฐ ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์šฉ CD branch ์œ„์น˜ ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์šฉ CD event ๋ณ€๊ฒฝ Co-authored-by: Gakko --- .github/workflows/backend-dev-cd.yml | 90 +++++++++++++++++++ backend/.gitignore | 3 +- .../docker-compose.yml | 8 +- backend/scripts/dev-deploy.sh | 15 ++++ 4 files changed, 109 insertions(+), 7 deletions(-) create mode 100644 .github/workflows/backend-dev-cd.yml rename docker-compose.yml => backend/docker-compose.yml (51%) create mode 100644 backend/scripts/dev-deploy.sh diff --git a/.github/workflows/backend-dev-cd.yml b/.github/workflows/backend-dev-cd.yml new file mode 100644 index 00000000..8af24e43 --- /dev/null +++ b/.github/workflows/backend-dev-cd.yml @@ -0,0 +1,90 @@ +name: Backend Dev CD +run-name: ${{ github.actor }}๊ฐ€ ์‹คํ–‰ํ•จ +on: + push: + branches: + - develop + paths: + - 'backend/**' + - '.github/workflows/backend-dev-cd.yml' + - '.github/workflows/slack-notification.yml' + +jobs: + Register-Docker-Image: + runs-on: ubuntu-latest + defaults: + run: + working-directory: './backend' + outputs: + status: ${{ job.status }} + steps: + - name: checkout + uses: actions/checkout@v3 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: docker registry login + uses: docker/login-action@v2 + with: + registry: ${{ secrets.NCP_DOCKER_REGISTRY }} + username: ${{ secrets.NCP_ACCESS_KEY }} + password: ${{ secrets.NCP_SECRET_KEY }} + + - name: build and push + id: docker_build + uses: docker/build-push-action@v3 + with: + context: backend + file: backend/Dockerfile + tags: | + ${{ secrets.NCP_DOCKER_REGISTRY }}/moyeo-server:latest + ${{ secrets.NCP_DOCKER_REGISTRY }}/moyeo-server:${{ github.sha }} + push: true + + - name: Image digest + run: echo ${{ steps.docker_build.outputs.digest }} + + CD: + needs: [Register-Docker-Image] + runs-on: ubuntu-latest + defaults: + run: + working-directory: './backend' + outputs: + status: ${{ job.status }} + steps: + - name: deploy + uses: appleboy/ssh-action@master + with: + host: ${{secrets.BACKEND_DEV_REMOTE_IP}} + username: ${{secrets.BACKEND_DEV_REMOTE_SSH_ID}} + password: ${{secrets.BACKEND_DEV_REMOTE_ADMIN_KEY}} + port: ${{secrets.BACKEND_DEV_REMOTE_SSH_PORT}} + envs: DOCKER_SERVER_IMAGE + script: | + rm -rf web13-moyeomoyeo + + git clone git@github.com:boostcampwm-2022/web13-moyeomoyeo.git + + cd web13-moyeomoyeo + + git checkout -t origin/develop + + sudo chmod +x ./backend/scripts/dev-deploy.sh + + ./backend/scripts/dev-deploy.sh ${{ secrets.NCP_ACCESS_KEY }} ${{ secrets.NCP_SECRET_KEY }} ${{ secrets.NCP_DOCKER_REGISTRY }} ${{ secrets.DOCKER_SERVER_IMAGE }} + + slack-notifications: + needs: [Register-Docker-Image, CD] + if: ${{ always() }} + uses: ./.github/workflows/slack-notification.yml + with: + title: ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์šฉ CD + status: '${{ needs.CD.outputs.status }}' + commit_url: ${{ github.event.pull_request.html_url || github.event.head_commit.url }} + secrets: + webhook_url: ${{ secrets.SLACK_NOTIFICATION_WEBHOOK_URL }} diff --git a/backend/.gitignore b/backend/.gitignore index f44b766e..fea46634 100644 --- a/backend/.gitignore +++ b/backend/.gitignore @@ -1,4 +1,5 @@ node_modules .DS.Store -dist \ No newline at end of file +dist +.env \ No newline at end of file diff --git a/docker-compose.yml b/backend/docker-compose.yml similarity index 51% rename from docker-compose.yml rename to backend/docker-compose.yml index 1dbc05c3..5dd2b3d8 100644 --- a/docker-compose.yml +++ b/backend/docker-compose.yml @@ -3,13 +3,9 @@ version: '3.4' services: backend: container_name: moyeo-server - image: backend - build: - context: backend - dockerfile: ./Dockerfile - target: development + image: ${DOCKER_SERVER_IMAGE} environment: - NODE_ENV: production + NODE_ENV: development ports: - 3000:3000 command: npm run start:dev diff --git a/backend/scripts/dev-deploy.sh b/backend/scripts/dev-deploy.sh new file mode 100644 index 00000000..2487a73f --- /dev/null +++ b/backend/scripts/dev-deploy.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +echo $2 | docker login -u $1 $3 --password-stdin + +echo "docker logined" + +cd backend + +touch .env + +echo $4 > .env + +docker-compose down --rmi all + +docker-compose up -d \ No newline at end of file From 490fbb45abd6acae69d0871169fbc2ad2a95f209 Mon Sep 17 00:00:00 2001 From: yangseungchan Date: Fri, 18 Nov 2022 11:19:31 +0900 Subject: [PATCH 007/142] =?UTF-8?q?Feature/3=20frontend=20ci=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9=20(#25)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ๐Ÿฅ… chore: frontend ci ์„ธํŒ… Co-authored-by: MinGyeong Park Co-authored-by: Gakko * ๐Ÿฅ… chore: ์ฒ ์ž ์˜ค๋ฅ˜ ์ˆ˜์ • Co-authored-by: MinGyeong Park <37508296+kong430@users.noreply.github.com> Co-authored-by: Gakko <90585081+pythonstrup@users.noreply.github.com> * ๐Ÿฅ… chore: docker-compose ์„ค์ •, ๋ถˆํ•„์š”ํ•œ deps ์ œ๊ฑฐ Co-authored-by: Gakko <90585081+pythonstrup@users.noreply.github.com> Co-authored-by: MinGyeong Park <37508296+kong430@users.noreply.github.com> * ๐Ÿฅ… chore: checkout ์ถ”๊ฐ€ Co-authored-by: Gakko <90585081+pythonstrup@users.noreply.github.com> Co-authored-by: MinGyeong Park <37508296+kong430@users.noreply.github.com> * ๐Ÿฅ… chore: lighthouse ci ์ถ”๊ฐ€ ํ…Œ์ŠคํŠธ Co-authored-by: Gakko <90585081+pythonstrup@users.noreply.github.com> Co-authored-by: MinGyeong Park <37508296+kong430@users.noreply.github.com> * ๐Ÿฅ… chore: lighthouse ci ๋ถ„๋ฆฌ Co-authored-by: Gakko <90585081+pythonstrup@users.noreply.github.com> Co-authored-by: MinGyeong Park <37508296+kong430@users.noreply.github.com> * ๐Ÿฅ… chore: lighthouse ์ฝ”๋ฉ˜ํŠธ ์ž๋™ํ™” ์ถ”๊ฐ€ Co-authored-by: Gakko <90585081+pythonstrup@users.noreply.github.com> Co-authored-by: MinGyeong Park <37508296+kong430@users.noreply.github.com> * ๐Ÿฅ… chore: lighthouse ci ์˜คํƒ€ ์ˆ˜์ • Co-authored-by: Gakko <90585081+pythonstrup@users.noreply.github.com> Co-authored-by: MinGyeong Park <37508296+kong430@users.noreply.github.com> * ๐Ÿฅ… chore: lighthouse ์Šคํฌ๋ฆฝํŠธ ์ถ”๊ฐ€ Co-authored-by: Gakko <90585081+pythonstrup@users.noreply.github.com> Co-authored-by: MinGyeong Park <37508296+kong430@users.noreply.github.com> * ๐Ÿฅ… chore: lighthouse ci ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ • Co-authored-by: Gakko <90585081+pythonstrup@users.noreply.github.com> Co-authored-by: MinGyeong Park <37508296+kong430@users.noreply.github.com> * ๐Ÿฅ… chore: lighthouse ci ์˜คํƒ€ ์ˆ˜์ • Co-authored-by: Gakko <90585081+pythonstrup@users.noreply.github.com> Co-authored-by: MinGyeong Park <37508296+kong430@users.noreply.github.com> * ๐Ÿฅ… chore: script ์ˆ˜์ • Co-authored-by: Gakko <90585081+pythonstrup@users.noreply.github.com> Co-authored-by: MinGyeong Park <37508296+kong430@users.noreply.github.com> * ๐Ÿฅ… chore: script ๋งˆ์ง€๋ง‰ ์ˆ˜์ • Co-authored-by: Gakko <90585081+pythonstrup@users.noreply.github.com> Co-authored-by: MinGyeong Park <37508296+kong430@users.noreply.github.com> * โœจ feature: lint-staged ์ ์šฉ, hook ์ ์šฉ๋ฒ”์œ„ ํ”„๋ก ํŠธ๋กœ ์ œํ•œ * ๐Ÿฅ… chore: pre-commit, pre-push ์Šคํฌ๋ฆฝํŠธ ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: pre-push hook ์‚ญ์ œ, pre-commit ์ˆ˜์ • Co-authored-by: MinGyeong Park Co-authored-by: Gakko Co-authored-by: MinGyeong Park <37508296+kong430@users.noreply.github.com> Co-authored-by: Gakko <90585081+pythonstrup@users.noreply.github.com> --- .github/workflows/frontend-ci.yml | 186 + backend/docker-compose.yml | 2 +- frontend/.dockerignore | 24 + frontend/.eslintignore | 5 +- frontend/.gitignore | 2 + frontend/.husky/pre-commit | 27 +- frontend/.husky/pre-push | 15 - frontend/.lighthouserc.js | 17 + frontend/.prettierignore | 5 +- frontend/.storybook/main.ts | 1 - frontend/Dockerfile | 6 + frontend/docker-compose.yml | 15 + frontend/package-lock.json | 24196 ++++++++++++++++++++++++++-- frontend/package.json | 13 +- frontend/src/pages/index.tsx | 2 +- frontend/tsconfig.json | 2 +- 16 files changed, 22929 insertions(+), 1589 deletions(-) create mode 100644 .github/workflows/frontend-ci.yml create mode 100644 frontend/.dockerignore delete mode 100755 frontend/.husky/pre-push create mode 100644 frontend/.lighthouserc.js create mode 100644 frontend/Dockerfile create mode 100644 frontend/docker-compose.yml diff --git a/.github/workflows/frontend-ci.yml b/.github/workflows/frontend-ci.yml new file mode 100644 index 00000000..d27b6e75 --- /dev/null +++ b/.github/workflows/frontend-ci.yml @@ -0,0 +1,186 @@ +name: Frontend CI +run-name: ${{ github.actor }}๊ฐ€ ์‹คํ–‰ํ•จ +on: + pull_request: + branches: + - develop + paths: + - 'frontend/**' + - './github/workflows/frontend-ci.yml' + - './github/workflows/slack-notification.yml' + +jobs: + CI: + runs-on: ubuntu-latest + defaults: + run: + working-directory: './frontend' + outputs: + status: ${{ job.status }} + steps: + - name: checkout + uses: actions/checkout@v3 + + - name: nodeJS + uses: actions/setup-node@v3 + with: + node-version: 16.18.1 + + - name: dependency install + run: npm install + + - name: test + run: npm run test-all + + lhci: + runs-on: ubuntu-latest + defaults: + run: + working-directory: './frontend' + outputs: + status: ${{ job.status }} + steps: + - name: checkout + uses: actions/checkout@v3 + + - name: nodeJS + uses: actions/setup-node@v3 + with: + node-version: 16.18.1 + + - name: dependency install + run: | + npm install + + - name: Build + run: | + npm run build + + - name: lighthouse + run: | + npm install -g @lhci/cli + lhci autorun || echo "Fail to Run Lighthouse CI" + + - name: Format lighthouse score + id: format_lighthouse_score + uses: actions/github-script@v3 + with: + github-token: ${{secrets.GITHUB_TOKEN}} + script: | + const fs = require('fs'); + const results = JSON.parse(fs.readFileSync("./frontend/lhci_reports/manifest.json")); + let comments = ""; + + results.forEach((result, idx) => { + const { summary, jsonPath } = result; + const details = JSON.parse(fs.readFileSync(jsonPath)); + const { audits } = details; + const formatResult = (res) => Math.round(res * 100); + + Object.keys(summary).forEach( + (key) => (summary[key] = formatResult(summary[key])) + ); + + const score = (res) => (res >= 90 ? "๐ŸŸข" : res >= 50 ? "๐ŸŸ " : "๐Ÿ”ด"); + + const comment = [ + `โšก๏ธ Lighthouse report ${idx + 1}!`, + `| Category | Score |`, + `| --- | --- |`, + `| ${score(summary.performance)} Performance | ${summary.performance} |`, + `| ${score(summary.accessibility)} Accessbility | ${summary.accessibility} |`, + `| ${score(summary.seo)} SEO | ${summary.seo} |`, + `| ${score(summary.pwa)} PWA | ${summary.pwa} |`, + ].join("\n"); + + const detail = [ + `| Category | Score |`, + `| --- | --- |`, + `| ${score( + audits["largest-contentful-paint"].score * 100 + )} Largest Contentful Paint | ${ + audits["largest-contentful-paint"].displayValue + } |`, + `| ${score( + audits["first-contentful-paint"].score * 100 + )} First Contentful Paint | ${ + audits["first-contentful-paint"].displayValue + } |`, + `| ${score( + audits["speed-index"].score * 100 + )} Speed Index | ${ + audits["speed-index"].displayValue + } |`, + `| ${score( + audits["total-blocking-time"].score * 100 + )} Total Blocking Time | ${ + audits["total-blocking-time"].displayValue + } |`, + `| ${score( + audits["interactive"].score * 100 + )} Time To Interactive | ${ + audits["interactive"].displayValue + } |`, + `| ${score( + audits["cumulative-layout-shift"].score * 100 + )} Cumulative Layout Shift | ${ + audits["cumulative-layout-shift"].displayValue + } |`, + ].join("\n"); + comments += comment + "\n" + "\n" + detail + "\n" + "\n"; + }); + core.setOutput('comments', comments) + + - name: comment PR + uses: unsplash/comment-on-pr@v1.3.0 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + msg: ${{ steps.format_lighthouse_score.outputs.comments }} + docker: + needs: [CI] + runs-on: ubuntu-latest + defaults: + run: + working-directory: './frontend' + outputs: + status: ${{ job.status }} + steps: + - name: checkout + uses: actions/checkout@v3 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: docker registry login + uses: docker/login-action@v2 + with: + registry: ${{ secrets.NCP_DOCKER_REGISTRY }} + username: ${{ secrets.NCP_ACCESS_KEY }} + password: ${{ secrets.NCP_SECRET_KEY }} + + - name: build and push + id: docker_build + uses: docker/build-push-action@v3 + with: + context: frontend + file: frontend/Dockerfile + tags: ${{ secrets.NCP_DOCKER_REGISTRY }}/moyeo-client:latest + push: true + + - name: Image digest + run: echo ${{ steps.docker_build.outputs.digest }} + + slack-notifications: + needs: [CI, docker, lhci] + if: ${{ always() }} + uses: ./.github/workflows/slack-notification.yml + with: + title: ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์šฉ CI + status: 'CI : ${{ needs.CI.outputs.status }} && docker : ${{ needs.docker.outputs.status }} && lhci : ${{ needs.lhci.outputs.status }}' + commit_url: ${{ github.event.pull_request.html_url || github.event.head_commit.url }} + secrets: + webhook_url: ${{ secrets.SLACK_NOTIFICATION_WEBHOOK_URL }} \ No newline at end of file diff --git a/backend/docker-compose.yml b/backend/docker-compose.yml index 5dd2b3d8..b25c02e1 100644 --- a/backend/docker-compose.yml +++ b/backend/docker-compose.yml @@ -8,4 +8,4 @@ services: NODE_ENV: development ports: - 3000:3000 - command: npm run start:dev + command: npm run dev \ No newline at end of file diff --git a/frontend/.dockerignore b/frontend/.dockerignore new file mode 100644 index 00000000..15a1fb83 --- /dev/null +++ b/frontend/.dockerignore @@ -0,0 +1,24 @@ +**/.classpath +**/.dockerignore +**/.env +**/.git +**/.gitignore +**/.project +**/.settings +**/.toolstarget +**/.vs +**/.vscode +**/*.*proj.user +**/*.dbmdl +**/*.jfm +**/charts +**/docker-compose* +**/compose* +**/Dockerfile* +**/node_modules +**/npm-debug.log +**/obj +**/secrets.dev.yaml +**/values.dev.yaml +README.md +.next \ No newline at end of file diff --git a/frontend/.eslintignore b/frontend/.eslintignore index 6b23c880..bba6dfa5 100644 --- a/frontend/.eslintignore +++ b/frontend/.eslintignore @@ -9,4 +9,7 @@ README.md Dockerfile .nvmrc .vscode -.idea \ No newline at end of file +.idea +.lighthouserc.js +.lighthouseci +lhci_reports \ No newline at end of file diff --git a/frontend/.gitignore b/frontend/.gitignore index 4f360c89..2281848a 100644 --- a/frontend/.gitignore +++ b/frontend/.gitignore @@ -36,3 +36,5 @@ yarn-error.log* next-env.d.ts .vscode +.lighthouseci +/lhci_reports \ No newline at end of file diff --git a/frontend/.husky/pre-commit b/frontend/.husky/pre-commit index 90da8bac..a723b0bf 100755 --- a/frontend/.husky/pre-commit +++ b/frontend/.husky/pre-commit @@ -1,27 +1,15 @@ #!/bin/sh . "$(dirname "$0")/_/husky.sh" -echo '๐Ÿ—๏ธ๐Ÿ‘ท Before commit, Checking format, linting and typing your project.' +FRONTEND_GIT_DIFFS=$(git diff --cached --name-only | { grep "frontend" || true; }) -cd frontend +if [ -z $FRONTEND_GIT_DIFFS ]; then + exit 0 +fi -# Check Prettier standards -echo '๐Ÿ”Ž Check formatting...' -npm run check-format || -( - echo '๐Ÿคฃ๐Ÿคฃ๐Ÿคฃ๐Ÿคฃ Prettier Check Failed.๐Ÿคฃ๐Ÿคฃ๐Ÿคฃ๐Ÿคฃ - Run npm run format, add changes and try commit again.'; - false; -) +echo '๐Ÿ—๏ธ๐Ÿ‘ท Before commit, Checking format, linting and typing your project.' -# Check ESLint Standards -echo '๐Ÿ”Ž Check linting...' -npm run check-lint || -( - echo '๐Ÿ˜ค๐Ÿ€๐Ÿ‘‹๐Ÿ˜ค Get that weak s**t out of here! ๐Ÿ˜ค๐Ÿ€๐Ÿ‘‹๐Ÿ˜ค - ESLint Check Failed. Make the required changes listed above, add changes and try to commit again.' - false; -) +cd frontend # Check tsconfig standards echo '๐Ÿ”Ž Check typing...' @@ -32,5 +20,4 @@ npm run check-types || false; ) -# If everything passes... Now we can commit -echo 'โœ…โœ…โœ…โœ… You win this time... I am committing this now. โœ…โœ…โœ…โœ…' \ No newline at end of file +npx lint-staged diff --git a/frontend/.husky/pre-push b/frontend/.husky/pre-push deleted file mode 100755 index b8861b7d..00000000 --- a/frontend/.husky/pre-push +++ /dev/null @@ -1,15 +0,0 @@ -. "$(dirname -- "$0")/_/husky.sh" - -echo '๐Ÿ›๐Ÿ›๐Ÿ›๐Ÿ›... Before push, Trying to build now. ๐Ÿ›๐Ÿ›๐Ÿ›๐Ÿ›' - -cd frontend - -npm run build || -( - echo 'โŒ๐Ÿ‘ท๐Ÿ”จโŒ Better call Bob... Because your build failed โŒ๐Ÿ‘ท๐Ÿ”จโŒ - Next build failed: View the errors above to see why. - ' - false; -) - -echo 'โœ…โœ…โœ…โœ… You win this time... I am pushing this now. โœ…โœ…โœ…โœ…' \ No newline at end of file diff --git a/frontend/.lighthouserc.js b/frontend/.lighthouserc.js new file mode 100644 index 00000000..ac47808c --- /dev/null +++ b/frontend/.lighthouserc.js @@ -0,0 +1,17 @@ +module.exports = { + ci: { + collect: { + startServerCommand: 'npm run start', + url: ['http://localhost:3000'], + numberOfRuns: 5, + }, + upload: { + target: 'filesystem', + outputDir: './lhci_reports', + reportFilenamePattern: '%%PATHNAME%%-%%DATETIME%%-report.%%EXTENSION%%', + }, + }, + }; + + + diff --git a/frontend/.prettierignore b/frontend/.prettierignore index 6b23c880..bba6dfa5 100644 --- a/frontend/.prettierignore +++ b/frontend/.prettierignore @@ -9,4 +9,7 @@ README.md Dockerfile .nvmrc .vscode -.idea \ No newline at end of file +.idea +.lighthouserc.js +.lighthouseci +lhci_reports \ No newline at end of file diff --git a/frontend/.storybook/main.ts b/frontend/.storybook/main.ts index dbac2282..d06706f5 100644 --- a/frontend/.storybook/main.ts +++ b/frontend/.storybook/main.ts @@ -5,7 +5,6 @@ module.exports = { '@storybook/addon-essentials', '@storybook/addon-interactions', 'storybook-addon-next', - 'storybook-addon-mantine', ], framework: '@storybook/react', core: { diff --git a/frontend/Dockerfile b/frontend/Dockerfile new file mode 100644 index 00000000..9a0afcf7 --- /dev/null +++ b/frontend/Dockerfile @@ -0,0 +1,6 @@ +FROM node:16.18.1-alpine as development +WORKDIR /usr/src/app +COPY package.json ./ +COPY package-lock.json ./ +RUN npm install +COPY . . \ No newline at end of file diff --git a/frontend/docker-compose.yml b/frontend/docker-compose.yml new file mode 100644 index 00000000..2ad3aa3c --- /dev/null +++ b/frontend/docker-compose.yml @@ -0,0 +1,15 @@ +version: '3.4' + +services: + frontend: + container_name: moyeo-client + image: frontend + build: + context: frontend + dockerfile: ./Dockerfile + target: development + environment: + NODE_ENV: development + ports: + - 3000:3000 + command: npm run dev diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 6ad49024..92eafaae 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1,7 +1,7 @@ { "name": "frontend", "version": "0.1.0", - "lockfileVersion": 3, + "lockfileVersion": 2, "requires": true, "packages": { "": { @@ -35,7 +35,6 @@ "@types/node": "^18.11.9", "@types/react": "^18.0.25", "@types/react-dom": "^18.0.9", - "@types/react-query": "^1.2.9", "@typescript-eslint/eslint-plugin": "^5.43.0", "babel-loader": "^8.3.0", "eslint": "8.22.0", @@ -49,8 +48,8 @@ "eslint-plugin-react": "^7.31.10", "eslint-plugin-storybook": "^0.6.7", "husky": "^8.0.2", + "lint-staged": "^13.0.3", "prettier": "^2.7.1", - "storybook-addon-mantine": "^1.2.0", "storybook-addon-next": "^1.6.10", "typescript": "^4.8.4" } @@ -68,73 +67,6 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/cli": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.19.3.tgz", - "integrity": "sha512-643/TybmaCAe101m2tSVHi9UKpETXP9c/Ff4mD2tAwkdP6esKIfaauZFc67vGEM6r9fekbEGid+sZhbEnSe3dg==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.8", - "commander": "^4.0.1", - "convert-source-map": "^1.1.0", - "fs-readdir-recursive": "^1.1.0", - "glob": "^7.2.0", - "make-dir": "^2.1.0", - "slash": "^2.0.0" - }, - "bin": { - "babel": "bin/babel.js", - "babel-external-helpers": "bin/babel-external-helpers.js" - }, - "engines": { - "node": ">=6.9.0" - }, - "optionalDependencies": { - "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.3", - "chokidar": "^3.4.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/cli/node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@babel/cli/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@babel/cli/node_modules/slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/@babel/code-frame": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", @@ -185,27 +117,6 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/generator": { "version": "7.20.4", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz", @@ -277,15 +188,6 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/helper-create-class-features-plugin": { "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.2.tgz", @@ -340,15 +242,6 @@ "@babel/core": "^7.4.0-0" } }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/helper-environment-visitor": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", @@ -594,70 +487,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/highlight/node_modules/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==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/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==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/parser": { "version": "7.20.3", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", @@ -1337,15 +1166,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-classes/node_modules/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, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/plugin-transform-computed-properties": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", @@ -1954,15 +1774,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/preset-flow": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.18.6.tgz", @@ -2111,15 +1922,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/traverse/node_modules/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, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/types": { "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", @@ -2500,25 +2302,58 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", + "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/@floating-ui/core": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.0.1.tgz", - "integrity": "sha512-bO37brCPfteXQfFY0DyNDGB3+IMe4j150KFQcgJ5aBP295p9nBGeHEs/p0czrRbtlHq4Px/yoPXO/+dOCcF4uA==" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.0.2.tgz", + "integrity": "sha512-Skfy0YS3NJ5nV9us0uuPN0HDk1Q4edljaOhRBJGDWs9EBa7ZVMYBHRFlhLvvmwEoaIM9BlH6QJFn9/uZg0bACg==" }, "node_modules/@floating-ui/dom": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.0.4.tgz", - "integrity": "sha512-maYJRv+sAXTy4K9mzdv0JPyNW5YPVHrqtY90tEdI6XNpuLOP26Ci2pfwPsKBA/Wh4Z3FX5sUrtUFTdMYj9v+ug==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.0.6.tgz", + "integrity": "sha512-kt/tg1oip9OAH1xjCTcx1OpcUpu9rjDw3GKJ/rEhUqhO7QyJWfrHU0DpLTNsH67+JyFL5Kv9X1utsXwKFVtyEQ==", "dependencies": { - "@floating-ui/core": "^1.0.1" + "@floating-ui/core": "^1.0.2" } }, "node_modules/@floating-ui/react-dom": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-1.0.0.tgz", - "integrity": "sha512-uiOalFKPG937UCLm42RxjESTWUVpbbatvlphQAU6bsv+ence6IoVG8JOUZcy8eW81NkU+Idiwvx10WFLmR4MIg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-1.0.1.tgz", + "integrity": "sha512-UW0t1Gi8ikbDRr8cQPVcqIDMBwUEENe5V4wlHWdrJ5egFnRQFBV9JirauTBFI6S8sM1qFUC1i+qa3g87E6CLTw==", "dependencies": { - "@floating-ui/dom": "^1.0.0" + "@floating-ui/dom": "^1.0.5" }, "peerDependencies": { "react": ">=16.8.0", @@ -2590,15 +2425,6 @@ "node": ">=8" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -2612,19 +2438,6 @@ "node": ">=8" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -2664,15 +2477,6 @@ "node": ">=8" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", @@ -2708,29 +2512,169 @@ "node": ">= 10.14.2" } }, - "node_modules/@jest/transform/node_modules/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "node_modules/@jest/transform/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 10.14.2" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/transform/node_modules/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 + }, + "node_modules/@jest/transform/node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/transform/node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@jest/transform/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/types/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/types/node_modules/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 + }, + "node_modules/@jest/types/node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/@jridgewell/gen-mapping": { @@ -2805,37 +2749,37 @@ } }, "node_modules/@mantine/core": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/@mantine/core/-/core-5.7.2.tgz", - "integrity": "sha512-cDDvlYhDCzREfIZ33CRLQpXlv+UXRb4VBZWbfYxWXTRPV6gKNGXwlVmXcdDUJCcjRWLh9Wc4erWT8gdTAbvzsQ==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@mantine/core/-/core-5.8.0.tgz", + "integrity": "sha512-GGQJqVXI3cbY5OzFrg3S3bJUypPktJIFeb2hI65qskFJViL6F8dUynRuKZfi8B4GHteG86zqiZCUo0cUVRTiaQ==", "dependencies": { "@floating-ui/react-dom-interactions": "^0.10.1", - "@mantine/styles": "5.7.2", - "@mantine/utils": "5.7.2", + "@mantine/styles": "5.8.0", + "@mantine/utils": "5.8.0", "@radix-ui/react-scroll-area": "1.0.0", "react-textarea-autosize": "8.3.4" }, "peerDependencies": { - "@mantine/hooks": "5.7.2", + "@mantine/hooks": "5.8.0", "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "node_modules/@mantine/hooks": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-5.7.2.tgz", - "integrity": "sha512-g+fxcnQwEeVM/5h+SAX/rDNL2s1652DGbP4xxfNg6yFqqhQzmtxQN7xsmkZ+ffx8wKhbsP5z13x6WZoxuJQh9Q==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-5.8.0.tgz", + "integrity": "sha512-838TKK0jTvU9sy7OcbDYc2P9fXyyca4HQxKRP2kRJnsnL6ZAHWFlFosGIcN97FiWh+8uQA7jCoD8jyrUjrFDXg==", "peerDependencies": { "react": ">=16.8.0" } }, "node_modules/@mantine/next": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/@mantine/next/-/next-5.7.2.tgz", - "integrity": "sha512-rcGmr2u7SwG+/Zw/eZPmr/jloiHdeW+rW66q+MtUCoVdMD4ik9fXrOFRcIhDmeSFmE6aQ4hPFwXdSY3AdEYGQg==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@mantine/next/-/next-5.8.0.tgz", + "integrity": "sha512-hL+52JwxLaIua2oMzm3hPcUyJqf6BcE9Md5/S3IGoMvQ69neGFeJKKkQIzTD1ikjm4Rw7ryEjko/FA5axe7u5A==", "dependencies": { - "@mantine/ssr": "5.7.2", - "@mantine/styles": "5.7.2" + "@mantine/ssr": "5.8.0", + "@mantine/styles": "5.8.0" }, "peerDependencies": { "next": "*", @@ -2844,25 +2788,25 @@ } }, "node_modules/@mantine/nprogress": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/@mantine/nprogress/-/nprogress-5.7.2.tgz", - "integrity": "sha512-PdVB8PImiz3TawFyNRgIrD/7t2pMfxmB6d+JPfs5+UZcG0nbATF17wvop+YsjsQ92LmEMby5sYIgH7qEhze1Sw==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@mantine/nprogress/-/nprogress-5.8.0.tgz", + "integrity": "sha512-D3LUE4V94iGkgLN23xfYe2zFZ5jcDmugB0cVS82m1q/crJOrMVKfpXesOE+mu+zUBKeOBVTcni66hXvGYFgiZg==", "dependencies": { - "@mantine/utils": "5.7.2" + "@mantine/utils": "5.8.0" }, "peerDependencies": { - "@mantine/core": "5.7.2", - "@mantine/hooks": "5.7.2", + "@mantine/core": "5.8.0", + "@mantine/hooks": "5.8.0", "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "node_modules/@mantine/ssr": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/@mantine/ssr/-/ssr-5.7.2.tgz", - "integrity": "sha512-2DB5Df6eR4C9/V7lpmwQE8jVkSHSJBTqkZxjsYa1HsKeX4cNFM0SbRsNYk1bQHSq377DXh6PkVMqTzSDqGcFgw==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@mantine/ssr/-/ssr-5.8.0.tgz", + "integrity": "sha512-JKhLPQBCLu/dv5V89y3/nA5Awr/ADR4Ti0ajmfEbe+8aUfDCgHQ3l80jpUYzWGeiT4qNBMzRg1ovxGZ0Ra1e5A==", "dependencies": { - "@mantine/styles": "5.7.2", + "@mantine/styles": "5.8.0", "html-react-parser": "1.4.12" }, "peerDependencies": { @@ -2873,9 +2817,9 @@ } }, "node_modules/@mantine/styles": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/@mantine/styles/-/styles-5.7.2.tgz", - "integrity": "sha512-z5Mxf6Zp7lXzfIM77XkZ68Wp62lDSMJwEMoKm0Kz5tRGV4oMQwirbZf4ZJznZKK3HkaT7ct1ScxnCouEWzlKUg==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@mantine/styles/-/styles-5.8.0.tgz", + "integrity": "sha512-sCKPEJpiSF97ISrbJ6tr9GdYCLoX0vWA0aKWc5GGnpZLVTr5WlqMdqY7u0J00aAfjPHqeuN3hIrnEs7bn0qmVg==", "dependencies": { "clsx": "1.1.1", "csstype": "3.0.9" @@ -2892,9 +2836,9 @@ "integrity": "sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw==" }, "node_modules/@mantine/utils": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/@mantine/utils/-/utils-5.7.2.tgz", - "integrity": "sha512-LE/ckEX+d1f5GOP1ARNEldUYybOp3Tualx5IYgeV06oyBOaeJaXs9Tco2NTM6j+opZwUbNuYEUmtp4bkArhpOg==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@mantine/utils/-/utils-5.8.0.tgz", + "integrity": "sha512-gVE4U3apoE53MUWgKqst9H0iWgurzBccZNSSGRv3kD62vAFcI1JJhxxuW7X271bc9IMhKjgezEH14ApH1jlwCA==", "peerDependencies": { "react": ">=16.8.0" } @@ -2973,18 +2917,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@mdx-js/mdx/node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/@mdx-js/mdx/node_modules/semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -3050,6 +2982,26 @@ "glob": "7.1.7" } }, + "node_modules/@next/eslint-plugin-next/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@next/swc-android-arm-eabi": { "version": "12.3.3", "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.3.3.tgz", @@ -3245,13 +3197,6 @@ "node": ">= 10" } }, - "node_modules/@nicolo-ribaudo/chokidar-2": { - "version": "2.1.8-no-fsevents.3", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", - "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==", - "dev": true, - "optional": true - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -3297,6 +3242,21 @@ "semver": "^7.3.5" } }, + "node_modules/@npmcli/fs/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@npmcli/move-file": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", @@ -4261,18 +4221,6 @@ "node": ">=0.10.0" } }, - "node_modules/@storybook/builder-webpack4/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@storybook/builder-webpack4/node_modules/braces": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", @@ -4306,20 +4254,6 @@ "node": ">=0.10.0" } }, - "node_modules/@storybook/builder-webpack4/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@storybook/builder-webpack4/node_modules/chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", @@ -4338,21 +4272,6 @@ "node": ">= 4.0" } }, - "node_modules/@storybook/builder-webpack4/node_modules/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==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@storybook/builder-webpack4/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, "node_modules/@storybook/builder-webpack4/node_modules/commander": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", @@ -4461,24 +4380,6 @@ "node": ">=4.3.0 <5.0.0 || >=5.10" } }, - "node_modules/@storybook/builder-webpack4/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/@storybook/builder-webpack4/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/@storybook/builder-webpack4/node_modules/eslint-scope": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", @@ -4573,15 +4474,6 @@ "semver": "bin/semver" } }, - "node_modules/@storybook/builder-webpack4/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/@storybook/builder-webpack4/node_modules/html-minifier-terser": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", @@ -4748,14 +4640,26 @@ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true }, - "node_modules/@storybook/builder-webpack4/node_modules/loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "node_modules/@storybook/builder-webpack4/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/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, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } }, "node_modules/@storybook/builder-webpack4/node_modules/locate-path": { "version": "5.0.0", @@ -4868,12 +4772,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@storybook/builder-webpack4/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, "node_modules/@storybook/builder-webpack4/node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -4899,23 +4797,6 @@ "node": ">=8" } }, - "node_modules/@storybook/builder-webpack4/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, "node_modules/@storybook/builder-webpack4/node_modules/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", @@ -5016,15 +4897,6 @@ "rimraf": "bin.js" } }, - "node_modules/@storybook/builder-webpack4/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@storybook/builder-webpack4/node_modules/serialize-javascript": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", @@ -5111,18 +4983,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/@storybook/builder-webpack4/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@storybook/builder-webpack4/node_modules/terser-webpack-plugin": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz", @@ -5992,6 +5852,21 @@ "node": ">=0.4.0" } }, + "node_modules/@storybook/core-common/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/@storybook/core-common/node_modules/babel-plugin-polyfill-corejs3": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz", @@ -6061,12 +5936,46 @@ "y18n": "^4.0.0" } }, + "node_modules/@storybook/core-common/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/@storybook/core-common/node_modules/chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "dev": true }, + "node_modules/@storybook/core-common/node_modules/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@storybook/core-common/node_modules/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 + }, "node_modules/@storybook/core-common/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -6149,6 +6058,15 @@ "node": ">=0.10.0" } }, + "node_modules/@storybook/core-common/node_modules/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, + "engines": { + "node": ">=8" + } + }, "node_modules/@storybook/core-common/node_modules/is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", @@ -6203,18 +6121,6 @@ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true }, - "node_modules/@storybook/core-common/node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/@storybook/core-common/node_modules/loader-runner": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", @@ -6310,15 +6216,6 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/@storybook/core-common/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/@storybook/core-common/node_modules/rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -6345,15 +6242,6 @@ "node": ">= 4" } }, - "node_modules/@storybook/core-common/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@storybook/core-common/node_modules/serialize-javascript": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", @@ -6390,6 +6278,18 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/@storybook/core-common/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@storybook/core-common/node_modules/terser": { "version": "4.8.1", "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", @@ -6762,6 +6662,21 @@ "node": ">=0.4.0" } }, + "node_modules/@storybook/core-server/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/@storybook/core-server/node_modules/braces": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", @@ -6818,12 +6733,46 @@ "y18n": "^4.0.0" } }, + "node_modules/@storybook/core-server/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/@storybook/core-server/node_modules/chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "dev": true }, + "node_modules/@storybook/core-server/node_modules/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@storybook/core-server/node_modules/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 + }, "node_modules/@storybook/core-server/node_modules/enhanced-resolve": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", @@ -6900,6 +6849,15 @@ "node": ">=0.10.0" } }, + "node_modules/@storybook/core-server/node_modules/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, + "engines": { + "node": ">=8" + } + }, "node_modules/@storybook/core-server/node_modules/is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", @@ -6954,6 +6912,18 @@ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true }, + "node_modules/@storybook/core-server/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, "node_modules/@storybook/core-server/node_modules/loader-runner": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", @@ -7099,6 +7069,18 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/@storybook/core-server/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@storybook/core-server/node_modules/terser": { "version": "4.8.1", "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", @@ -7542,6 +7524,21 @@ "node": ">=0.10.0" } }, + "node_modules/@storybook/manager-webpack4/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/@storybook/manager-webpack4/node_modules/braces": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", @@ -7575,6 +7572,22 @@ "node": ">=0.10.0" } }, + "node_modules/@storybook/manager-webpack4/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/@storybook/manager-webpack4/node_modules/chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", @@ -7593,12 +7606,30 @@ "node": ">= 4.0" } }, - "node_modules/@storybook/manager-webpack4/node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, - "engines": { + "node_modules/@storybook/manager-webpack4/node_modules/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/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 + }, + "node_modules/@storybook/manager-webpack4/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { "node": ">= 6" } }, @@ -7701,15 +7732,6 @@ "node": ">=4.3.0 <5.0.0 || >=5.10" } }, - "node_modules/@storybook/manager-webpack4/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/@storybook/manager-webpack4/node_modules/eslint-scope": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", @@ -7776,6 +7798,15 @@ "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, + "node_modules/@storybook/manager-webpack4/node_modules/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, + "engines": { + "node": ">=8" + } + }, "node_modules/@storybook/manager-webpack4/node_modules/html-minifier-terser": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", @@ -7942,6 +7973,18 @@ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true }, + "node_modules/@storybook/manager-webpack4/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, "node_modules/@storybook/manager-webpack4/node_modules/loader-runner": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", @@ -8062,12 +8105,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@storybook/manager-webpack4/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, "node_modules/@storybook/manager-webpack4/node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -8093,23 +8130,6 @@ "node": ">=8" } }, - "node_modules/@storybook/manager-webpack4/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, "node_modules/@storybook/manager-webpack4/node_modules/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", @@ -8198,15 +8218,6 @@ "strip-ansi": "^3.0.1" } }, - "node_modules/@storybook/manager-webpack4/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/@storybook/manager-webpack4/node_modules/rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -8219,15 +8230,6 @@ "rimraf": "bin.js" } }, - "node_modules/@storybook/manager-webpack4/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@storybook/manager-webpack4/node_modules/serialize-javascript": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", @@ -8314,6 +8316,18 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/@storybook/manager-webpack4/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@storybook/manager-webpack4/node_modules/terser-webpack-plugin": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz", @@ -8741,11 +8755,72 @@ "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", "dev": true }, - "node_modules/@storybook/manager-webpack5/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "node_modules/@storybook/manager-webpack5/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@storybook/manager-webpack5/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@storybook/manager-webpack5/node_modules/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@storybook/manager-webpack5/node_modules/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 + }, + "node_modules/@storybook/manager-webpack5/node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/manager-webpack5/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { "node": ">=8" } @@ -8798,6 +8873,76 @@ "url": "https://opencollective.com/storybook" } }, + "node_modules/@storybook/node-logger/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@storybook/node-logger/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@storybook/node-logger/node_modules/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@storybook/node-logger/node_modules/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 + }, + "node_modules/@storybook/node-logger/node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/node-logger/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@storybook/postinstall": { "version": "6.5.13", "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-6.5.13.tgz", @@ -9039,33 +9184,12 @@ "node": ">=8" } }, - "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@storybook/react/node_modules/@types/node": { "version": "16.18.3", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", "dev": true }, - "node_modules/@storybook/react/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/@storybook/router": { "version": "6.5.13", "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.5.13.tgz", @@ -9248,19 +9372,89 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/testing-library": { - "version": "0.0.13", - "resolved": "https://registry.npmjs.org/@storybook/testing-library/-/testing-library-0.0.13.tgz", - "integrity": "sha512-vRMeIGer4EjJkTgI8sQyK9W431ekPWYCWL//OmSDJ64IT3h7FnW7Xg6p+eqM3oII98/O5pcya5049GxnjaPtxw==", + "node_modules/@storybook/telemetry/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "@storybook/client-logger": "^6.4.0", - "@storybook/instrumenter": "^6.4.0", - "@testing-library/dom": "^8.3.0", - "@testing-library/user-event": "^13.2.1", - "ts-dedent": "^2.2.0" - } - }, + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@storybook/telemetry/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@storybook/telemetry/node_modules/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@storybook/telemetry/node_modules/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 + }, + "node_modules/@storybook/telemetry/node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/telemetry/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/testing-library": { + "version": "0.0.13", + "resolved": "https://registry.npmjs.org/@storybook/testing-library/-/testing-library-0.0.13.tgz", + "integrity": "sha512-vRMeIGer4EjJkTgI8sQyK9W431ekPWYCWL//OmSDJ64IT3h7FnW7Xg6p+eqM3oII98/O5pcya5049GxnjaPtxw==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "^6.4.0", + "@storybook/instrumenter": "^6.4.0", + "@testing-library/dom": "^8.3.0", + "@testing-library/user-event": "^13.2.1", + "ts-dedent": "^2.2.0" + } + }, "node_modules/@storybook/theming": { "version": "6.5.13", "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.5.13.tgz", @@ -9311,15 +9505,6 @@ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/ui/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/@swc/helpers": { "version": "0.4.11", "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.11.tgz", @@ -9437,13 +9622,74 @@ "node": ">=12" } }, - "node_modules/@testing-library/dom/node_modules/aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "node_modules/@testing-library/dom/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "deep-equal": "^2.0.5" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/dom/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@testing-library/dom/node_modules/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@testing-library/dom/node_modules/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 + }, + "node_modules/@testing-library/dom/node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/dom/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/@testing-library/user-event": { @@ -9668,16 +9914,6 @@ "@types/react": "*" } }, - "node_modules/@types/react-query": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/@types/react-query/-/react-query-1.2.9.tgz", - "integrity": "sha512-xfVcv5zjC6fGf6axPyKxdXNm9RKK9OFzSIyZeCR3r9h4zDuqSpHc8ilTBtfQ1zU/uCx+tAsB+W6vzdCBMu1jtg==", - "deprecated": "This is a stub types definition. react-query provides its own type definitions, so you do not need this installed.", - "dev": true, - "dependencies": { - "react-query": "*" - } - }, "node_modules/@types/scheduler": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", @@ -9823,6 +10059,21 @@ } } }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@typescript-eslint/experimental-utils": { "version": "5.43.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.43.0.tgz", @@ -9953,6 +10204,21 @@ } } }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@typescript-eslint/utils": { "version": "5.43.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.43.0.tgz", @@ -9979,26 +10245,19 @@ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" + "node": ">=10" } }, "node_modules/@typescript-eslint/visitor-keys": { @@ -10302,9 +10561,9 @@ } }, "node_modules/acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -10452,6 +10711,33 @@ "node": ">=6" } }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ansi-html-community": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", @@ -10474,18 +10760,14 @@ } }, "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "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==", "dependencies": { - "color-convert": "^2.0.1" + "color-convert": "^1.9.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=4" } }, "node_modules/ansi-to-html": { @@ -10503,15 +10785,6 @@ "node": ">=8.0.0" } }, - "node_modules/ansi-to-html/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", @@ -10594,10 +10867,13 @@ } }, "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } }, "node_modules/aria-hidden": { "version": "1.2.2", @@ -10620,16 +10896,12 @@ } }, "node_modules/aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", "dev": true, "dependencies": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" - }, - "engines": { - "node": ">=6.0" + "deep-equal": "^2.0.5" } }, "node_modules/arr-diff": { @@ -10874,6 +11146,15 @@ "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", "dev": true }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/async-each": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", @@ -10930,38 +11211,6 @@ "url": "https://tidelift.com/funding/github/npm/autoprefixer" } }, - "node_modules/autoprefixer/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/autoprefixer/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/autoprefixer/node_modules/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, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/available-typed-arrays": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", @@ -11122,15 +11371,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/babel-loader/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/babel-plugin-add-react-displayname": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/babel-plugin-add-react-displayname/-/babel-plugin-add-react-displayname-0.0.5.tgz", @@ -11229,15 +11469,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/babel-plugin-polyfill-corejs3": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", @@ -11373,6 +11604,7 @@ "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", "dev": true, + "optional": true, "engines": { "node": ">=0.6" } @@ -11493,6 +11725,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/boxen/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/boxen/node_modules/camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", @@ -11505,6 +11752,61 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/boxen/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/boxen/node_modules/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/boxen/node_modules/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 + }, + "node_modules/boxen/node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/boxen/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/bplist-parser": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.1.1.tgz", @@ -11537,22 +11839,6 @@ "node": ">=8" } }, - "node_modules/broadcast-channel": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/broadcast-channel/-/broadcast-channel-3.7.0.tgz", - "integrity": "sha512-cIAKJXAxGJceNZGTZSBzMxzyOn72cVgPnKx4dc6LRjQgbaJUQqhy5rzL3zbMxkMWsGKkv2hSFkPRMEXfoMZ2Mg==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.7.2", - "detect-node": "^2.1.0", - "js-sha3": "0.8.0", - "microseconds": "0.2.0", - "nano-time": "1.0.0", - "oblivious-set": "1.0.0", - "rimraf": "3.0.2", - "unload": "2.2.0" - } - }, "node_modules/brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", @@ -11761,6 +12047,21 @@ "semver": "^7.0.0" } }, + "node_modules/builtins/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -11986,19 +12287,24 @@ } }, "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=4" + } + }, + "node_modules/chalk/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" } }, "node_modules/character-entities": { @@ -12250,6 +12556,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/cli-table3": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", @@ -12265,6 +12583,66 @@ "@colors/colors": "1.5.0" } }, + "node_modules/cli-truncate": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "dev": true, + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -12322,22 +12700,17 @@ } }, "node_modules/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, + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "color-name": "1.1.3" } }, "node_modules/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 + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "node_modules/color-support": { "version": "1.1.3", @@ -12736,15 +13109,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cp-file/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/cpy": { "version": "8.1.2", "resolved": "https://registry.npmjs.org/cpy/-/cpy-8.1.2.tgz", @@ -13151,14 +13515,59 @@ "webpack": "^4.27.0 || ^5.0.0" } }, - "node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "node_modules/css-loader/node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/css-loader/node_modules/postcss": { + "version": "8.4.19", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz", + "integrity": "sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==", "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/css-loader/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", "domhandler": "^4.3.1", "domutils": "^2.8.0", "nth-check": "^2.0.1" @@ -13289,12 +13698,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/deep-equal/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -13423,12 +13826,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true - }, "node_modules/detect-package-manager": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/detect-package-manager/-/detect-package-manager-2.0.1.tgz", @@ -13524,14 +13921,6 @@ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/dom-serializer/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/dom-walk": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", @@ -13688,6 +14077,12 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -13788,12 +14183,9 @@ } }, "node_modules/entities": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", - "engines": { - "node": ">=0.12" - }, + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } @@ -13890,12 +14282,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-get-iterator/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, "node_modules/es-module-lexer": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", @@ -13991,45 +14377,6 @@ "source-map": "~0.6.1" } }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/escodegen/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -14040,18 +14387,6 @@ "node": ">=0.10.0" } }, - "node_modules/escodegen/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/eslint": { "version": "8.22.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.22.0.tgz", @@ -14229,26 +14564,6 @@ "eslint-plugin-import": "*" } }, - "node_modules/eslint-import-resolver-typescript/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/eslint-module-utils": { "version": "2.7.4", "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", @@ -14399,13 +14714,17 @@ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "node_modules/eslint-plugin-jsx-a11y/node_modules/aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + }, + "engines": { + "node": ">=6.0" } }, "node_modules/eslint-plugin-n": { @@ -14433,6 +14752,21 @@ "eslint": ">=7.0.0" } }, + "node_modules/eslint-plugin-n/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/eslint-plugin-prettier": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", @@ -14535,15 +14869,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/eslint-plugin-storybook": { "version": "0.6.7", "resolved": "https://registry.npmjs.org/eslint-plugin-storybook/-/eslint-plugin-storybook-0.6.7.tgz", @@ -14572,16 +14897,25 @@ } }, "node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "estraverse": "^4.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=8.0.0" + } + }, + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" } }, "node_modules/eslint-utils": { @@ -14620,58 +14954,203 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" + "color-convert": "^2.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=8" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "node_modules/eslint/node_modules/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, "dependencies": { - "estraverse": "^5.1.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=0.10" + "node": ">=7.0.0" } }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "node_modules/eslint/node_modules/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 + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, "dependencies": { + "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { - "node": ">=4.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", + "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/espree": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" } }, "node_modules/estraverse": { @@ -15505,6 +15984,55 @@ } } }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/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 + }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", @@ -15521,6 +16049,15 @@ "node": ">=8" } }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/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, + "engines": { + "node": ">=8" + } + }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", @@ -15539,6 +16076,33 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/form-data": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", @@ -15656,12 +16220,6 @@ "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", "dev": true }, - "node_modules/fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", - "dev": true - }, "node_modules/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", @@ -15847,15 +16405,15 @@ "dev": true }, "node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, @@ -15910,18 +16468,12 @@ } }, "node_modules/globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "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, - "dependencies": { - "type-fest": "^0.20.2" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, "node_modules/globalthis": { @@ -16034,12 +16586,11 @@ } }, "node_modules/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, + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/has-glob": { @@ -16316,15 +16867,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/hast-util-raw/node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, "node_modules/hast-util-to-parse5": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", @@ -16342,15 +16884,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/hast-util-to-parse5/node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, "node_modules/hastscript": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", @@ -16554,14 +17087,25 @@ "entities": "^3.0.1" } }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", + "node_modules/htmlparser2/node_modules/entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", "setprototypeof": "1.2.0", "statuses": "2.0.1", "toidentifier": "1.0.1" @@ -16689,6 +17233,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/import-fresh/node_modules/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==", + "engines": { + "node": ">=4" + } + }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -17361,9 +17913,10 @@ } }, "node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true }, "node_modules/isexe": { "version": "2.0.0", @@ -17415,15 +17968,6 @@ "node": ">=8" } }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", @@ -17438,6 +17982,15 @@ "node": ">=8" } }, + "node_modules/istanbul-lib-report/node_modules/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, + "engines": { + "node": ">=8" + } + }, "node_modules/istanbul-lib-report/node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -17453,13 +18006,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/istanbul-lib-report/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/istanbul-reports": { @@ -17562,6 +18118,76 @@ "@types/yargs-parser": "*" } }, + "node_modules/jest-mock/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-mock/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-mock/node_modules/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-mock/node_modules/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 + }, + "node_modules/jest-mock/node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-mock/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/jest-regex-util": { "version": "26.0.0", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", @@ -17601,6 +18227,76 @@ "node": ">= 10.14.2" } }, + "node_modules/jest-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-util/node_modules/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 + }, + "node_modules/jest-util/node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/jest-worker": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", @@ -17615,11 +18311,26 @@ "node": ">= 10.13.0" } }, - "node_modules/js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", - "dev": true + "node_modules/jest-worker/node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, "node_modules/js-string-escape": { "version": "1.0.1", @@ -17636,12 +18347,13 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "dependencies": { - "argparse": "^2.0.1" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" @@ -17683,15 +18395,15 @@ "dev": true }, "node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, "bin": { "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" } }, "node_modules/jsonfile": { @@ -17801,29 +18513,313 @@ "node": ">= 0.8.0" } }, + "node_modules/lilconfig": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", + "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, - "node_modules/load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", + "node_modules/lint-staged": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.0.3.tgz", + "integrity": "sha512-9hmrwSCFroTSYLjflGI8Uk+GWAwMB4OlpU4bMJEAT5d/llQwtYKoim4bLOyLCuWFAhWEupE0vkIFqtw/WIsPug==", "dev": true, - "optional": true, "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" + "cli-truncate": "^3.1.0", + "colorette": "^2.0.17", + "commander": "^9.3.0", + "debug": "^4.3.4", + "execa": "^6.1.0", + "lilconfig": "2.0.5", + "listr2": "^4.0.5", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-inspect": "^1.12.2", + "pidtree": "^0.6.0", + "string-argv": "^0.3.1", + "yaml": "^2.1.1" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" }, "engines": { - "node": ">=0.10.0" + "node": "^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" } }, - "node_modules/load-json-file/node_modules/parse-json": { + "node_modules/lint-staged/node_modules/colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "dev": true + }, + "node_modules/lint-staged/node_modules/commander": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz", + "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==", + "dev": true, + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/lint-staged/node_modules/execa": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", + "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^3.0.1", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/lint-staged/node_modules/human-signals": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", + "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", + "dev": true, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/lint-staged/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/yaml": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.3.tgz", + "integrity": "sha512-AacA8nRULjKMX2DvWvOAdBZMOfQlypSFkjcOcu9FalllIDJ1kvlREzcdIZmidQUqqeMv7jorHjq2HlLv/+c2lg==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, + "node_modules/listr2": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz", + "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==", + "dev": true, + "dependencies": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.5", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, + "node_modules/listr2/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/listr2/node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/listr2/node_modules/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/listr2/node_modules/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 + }, + "node_modules/listr2/node_modules/colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "dev": true + }, + "node_modules/listr2/node_modules/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, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/listr2/node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", + "dev": true, + "optional": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/load-json-file/node_modules/parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", @@ -17882,18 +18878,6 @@ "node": ">=8.9.0" } }, - "node_modules/loader-utils/node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -17933,55 +18917,137 @@ "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", "dev": true }, - "node_modules/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==", + "node_modules/log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" }, - "bin": { - "loose-envify": "cli.js" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==", + "node_modules/log-update/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "optional": true, "dependencies": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "node_modules/log-update/node_modules/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, "dependencies": { - "tslib": "^2.0.3" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/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==", + "node_modules/log-update/node_modules/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 + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "dependencies": { - "yallist": "^4.0.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/lz-string": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==", + "dev": true, + "optional": true, + "dependencies": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/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, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lz-string": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", "integrity": "sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==", "dev": true, "bin": { @@ -18078,16 +19144,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/match-sorter": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/match-sorter/-/match-sorter-6.3.1.tgz", - "integrity": "sha512-mxybbo3pPNuA+ZuCUhm5bwNkXrJTbsk5VWbR5wiwz/GC6LIiegBGn2w3O08UG/jdbYLinw51fSQ5xNU1U3MgBw==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.12.5", - "remove-accents": "0.4.2" - } - }, "node_modules/md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -18408,12 +19464,6 @@ "node": ">=8.6" } }, - "node_modules/microseconds": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/microseconds/-/microseconds-0.2.0.tgz", - "integrity": "sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA==", - "dev": true - }, "node_modules/miller-rabin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", @@ -18647,15 +19697,6 @@ "xtend": "~4.0.1" } }, - "node_modules/mississippi/node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, "node_modules/mixin-deep": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", @@ -18747,15 +19788,6 @@ "dev": true, "optional": true }, - "node_modules/nano-time": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/nano-time/-/nano-time-1.0.0.tgz", - "integrity": "sha512-flnngywOoQ0lLQOTRNexn2gGSNuM9bKj9RZAWSzhQ+UJYaAFG9bac4DW9VHjUAzrOaIcajHybCTHe/bkvozQqA==", - "dev": true, - "dependencies": { - "big-integer": "^1.6.16" - } - }, "node_modules/nanoid": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", @@ -18874,6 +19906,34 @@ } } }, + "node_modules/next/node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/next/node_modules/postcss": { + "version": "8.4.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", + "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, "node_modules/nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -19377,12 +20437,6 @@ "integrity": "sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==", "dev": true }, - "node_modules/oblivious-set": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/oblivious-set/-/oblivious-set-1.0.0.tgz", - "integrity": "sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw==", - "dev": true - }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -19446,17 +20500,51 @@ } }, "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, "dependencies": { - "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" + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/optionator/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/optionator/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/optionator/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" }, "engines": { "node": ">= 0.8.0" @@ -19841,9 +20929,10 @@ } }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true }, "node_modules/picomatch": { "version": "2.3.1", @@ -19857,6 +20946,18 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true, + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", @@ -19944,44 +21045,6 @@ } }, "node_modules/postcss": { - "version": "8.4.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", - "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - } - ], - "dependencies": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-flexbugs-fixes": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz", - "integrity": "sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ==", - "dev": true, - "dependencies": { - "postcss": "^7.0.26" - } - }, - "node_modules/postcss-flexbugs-fixes/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-flexbugs-fixes/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", @@ -19998,13 +21061,13 @@ "url": "https://opencollective.com/postcss/" } }, - "node_modules/postcss-flexbugs-fixes/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/postcss-flexbugs-fixes": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz", + "integrity": "sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "postcss": "^7.0.26" } }, "node_modules/postcss-loader": { @@ -20031,6 +21094,21 @@ "webpack": "^4.0.0 || ^5.0.0" } }, + "node_modules/postcss-loader/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/postcss-modules-extract-imports": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", @@ -20109,6 +21187,15 @@ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, + "node_modules/postcss/node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -20290,15 +21377,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/property-information/node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -20651,36 +21729,10 @@ "resolved": "https://registry.npmjs.org/react-property/-/react-property-2.0.0.tgz", "integrity": "sha512-kzmNjIgU32mO4mmH5+iUyrqlpFQhF8K2k7eZ4fdLSOPFrD1XgEuSBv9LDEgxRXTMBqMd8ppT0x6TIzqE5pdGdw==" }, - "node_modules/react-query": { - "version": "3.39.2", - "resolved": "https://registry.npmjs.org/react-query/-/react-query-3.39.2.tgz", - "integrity": "sha512-F6hYDKyNgDQfQOuR1Rsp3VRzJnWHx6aRnnIZHMNGGgbL3SBgpZTDg8MQwmxOgpCAoqZJA+JSNCydF1xGJqKOCA==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.5.5", - "broadcast-channel": "^3.4.1", - "match-sorter": "^6.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "react-dom": { - "optional": true - }, - "react-native": { - "optional": true - } - } - }, - "node_modules/react-refresh": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", - "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", + "node_modules/react-refresh": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", + "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", "dev": true, "engines": { "node": ">=0.10.0" @@ -20815,6 +21867,11 @@ "string_decoder": "~0.10.x" } }, + "node_modules/readable-stream/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -21113,18 +22170,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/remark-mdx/node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/remark-mdx/node_modules/semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -21162,15 +22207,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-parse/node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, "node_modules/remark-slug": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/remark-slug/-/remark-slug-6.1.0.tgz", @@ -21223,15 +22259,6 @@ "strip-ansi": "^6.0.1" } }, - "node_modules/renderkid/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/renderkid/node_modules/htmlparser2": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", @@ -21317,11 +22344,12 @@ } }, "node_modules/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==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/resolve-url": { @@ -21347,6 +22375,36 @@ "node": ">=12" } }, + "node_modules/resolve-url-loader/node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/resolve-url-loader/node_modules/postcss": { + "version": "8.4.19", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz", + "integrity": "sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, "node_modules/resolve-url-loader/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -21356,6 +22414,19 @@ "node": ">=0.10.0" } }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", @@ -21375,6 +22446,12 @@ "node": ">=0.10.0" } }, + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -21447,6 +22524,15 @@ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true }, + "node_modules/rxjs": { + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz", + "integrity": "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -21847,18 +22933,12 @@ } }, "node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" } }, "node_modules/send": { @@ -22093,6 +23173,46 @@ "node": ">=8" } }, + "node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -22573,85 +23693,6 @@ "integrity": "sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==", "dev": true }, - "node_modules/storybook-addon-mantine": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/storybook-addon-mantine/-/storybook-addon-mantine-1.2.0.tgz", - "integrity": "sha512-GuYmjZMNFNMa3lT1M/eH9nVLIxN4l54FLqn1uiJZ11dmbYfdHaO3IwTBrRrSFfwGtK2P8hiNPNIhXZ6+mBZMSQ==", - "dev": true, - "dependencies": { - "@babel/cli": "^7.18.6", - "@babel/core": "^7.18.6", - "@babel/preset-env": "^7.18.6", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "storybook-addon-mantine": "^1.0.0" - }, - "peerDependencies": { - "@emotion/react": "^11.9.3", - "@mantine/carousel": "^1.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", - "@mantine/core": "^1.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", - "@mantine/dates": "^1.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", - "@mantine/dropzone": "^1.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", - "@mantine/form": "^1.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", - "@mantine/hooks": "^1.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", - "@mantine/modals": "^1.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", - "@mantine/next": "^1.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", - "@mantine/notifications": "^1.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", - "@mantine/nprogress": "^1.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", - "@mantine/prism": "^1.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", - "@mantine/rte": "^1.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", - "@mantine/spotlight": "^1.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", - "@storybook/addon-actions": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0", - "@storybook/addon-essentials": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0", - "@storybook/addon-interactions": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0", - "@storybook/addon-links": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0", - "@storybook/addons": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0", - "@storybook/builder-webpack4": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0", - "@storybook/manager-webpack4": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0", - "@storybook/react": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0", - "babel-loader": "^8.0.0", - "dayjs": "^1.0.0", - "embla-carousel-react": "^6.0.0 || ^7.0.0", - "prop-types": "^15.0.0", - "react": "^16.0.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0", - "webpack": "^2.0.0 || ^4.0.0 || ^5.0.0" - } - }, - "node_modules/storybook-addon-mantine/node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "dev": true, - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/storybook-addon-mantine/node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "dev": true, - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - }, - "peerDependencies": { - "react": "^18.2.0" - } - }, - "node_modules/storybook-addon-mantine/node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "dev": true, - "dependencies": { - "loose-envify": "^1.1.0" - } - }, "node_modules/storybook-addon-next": { "version": "1.6.10", "resolved": "https://registry.npmjs.org/storybook-addon-next/-/storybook-addon-next-1.6.10.tgz", @@ -22676,18 +23717,6 @@ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/storybook-addon-next/node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/storybook-addon-next/node_modules/loader-utils": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", @@ -22719,6 +23748,21 @@ "webpack": "^5.0.0" } }, + "node_modules/storybook-addon-next/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/storybook-addon-next/node_modules/tsconfig-paths": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.1.0.tgz", @@ -22826,15 +23870,6 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/stream-http/node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, "node_modules/stream-shift": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", @@ -22846,6 +23881,15 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" }, + "node_modules/string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "dev": true, + "engines": { + "node": ">=0.6.19" + } + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -23082,15 +24126,14 @@ } }, "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dependencies": { - "has-flag": "^4.0.0" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/supports-preserve-symlinks-flag": { @@ -23231,6 +24274,15 @@ } } }, + "node_modules/terser-webpack-plugin/node_modules/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, + "engines": { + "node": ">=8" + } + }, "node_modules/terser-webpack-plugin/node_modules/jest-worker": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", @@ -23260,6 +24312,18 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/terser/node_modules/acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -23300,6 +24364,22 @@ "xtend": "~2.1.1" } }, + "node_modules/through2/node_modules/object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==" + }, + "node_modules/through2/node_modules/xtend": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==", + "dependencies": { + "object-keys": "~0.4.0" + }, + "engines": { + "node": ">=0.4" + } + }, "node_modules/timers-browserify": { "version": "2.0.12", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", @@ -23489,16 +24569,74 @@ "node": ">=10.13.0" } }, - "node_modules/tsconfig-paths-webpack-plugin/node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true, - "bin": { - "json5": "lib/cli.js" + "node_modules/tsconfig-paths-webpack-plugin/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" }, "engines": { - "node": ">=6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/tsconfig-paths-webpack-plugin/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/tsconfig-paths-webpack-plugin/node_modules/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/tsconfig-paths-webpack-plugin/node_modules/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 + }, + "node_modules/tsconfig-paths-webpack-plugin/node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsconfig-paths-webpack-plugin/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/tsconfig-paths-webpack-plugin/node_modules/tsconfig-paths": { @@ -23515,6 +24653,18 @@ "node": ">=6" } }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, "node_modules/tslib": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", @@ -23600,9 +24750,9 @@ } }, "node_modules/typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz", + "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -23660,15 +24810,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/unherit/node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", @@ -23886,16 +25027,6 @@ "node": ">= 10.0.0" } }, - "node_modules/unload": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/unload/-/unload-2.2.0.tgz", - "integrity": "sha512-B60uB5TNBLtN6/LsgAf3udH9saB5p7gqJwcFfbOEZ8BcBHnGwCf6G/TGiEqkRAxX7zAFIUtzdrXQSdL3Q/wqNA==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.6.2", - "detect-node": "^2.0.4" - } - }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -24009,6 +25140,12 @@ "browserslist": ">= 4.21.0" } }, + "node_modules/update-browserslist-db/node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -24604,32 +25741,20111 @@ "is-number": "^3.0.0", "repeat-string": "^1.6.1" }, - "engines": { - "node": ">=0.10.0" + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/web-namespaces": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", + "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "node_modules/webpack": { + "version": "5.75.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", + "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-4.3.0.tgz", + "integrity": "sha512-PjwyVY95/bhBh6VUqt6z4THplYcsvQ8YNNBTBM873xLVmw8FLeALn0qurHbs9EmcfhzQis/eoqypSnZeuUz26w==", + "dev": true, + "dependencies": { + "colorette": "^1.2.2", + "mem": "^8.1.1", + "memfs": "^3.2.2", + "mime-types": "^2.1.30", + "range-parser": "^1.2.1", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= v10.23.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-filter-warnings-plugin": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/webpack-filter-warnings-plugin/-/webpack-filter-warnings-plugin-1.2.1.tgz", + "integrity": "sha512-Ez6ytc9IseDMLPo0qCuNNYzgtUl8NovOqjIq4uAU8LTD4uoa1w1KpZyyzFtLTEMZpkkOkLfL9eN+KGYdk1Qtwg==", + "dev": true, + "engines": { + "node": ">= 4.3 < 5.0.0 || >= 5.10" + }, + "peerDependencies": { + "webpack": "^2.0.0 || ^3.0.0 || ^4.0.0" + } + }, + "node_modules/webpack-hot-middleware": { + "version": "2.25.3", + "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.3.tgz", + "integrity": "sha512-IK/0WAHs7MTu1tzLTjio73LjS3Ov+VvBKQmE8WPlJutgG5zT6Urgq/BbAdRrHTRpyzK0dvAvFh1Qg98akxgZpA==", + "dev": true, + "dependencies": { + "ansi-html-community": "0.0.8", + "html-entities": "^2.1.0", + "strip-ansi": "^6.0.0" + } + }, + "node_modules/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, + "dependencies": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-virtual-modules": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.4.6.tgz", + "integrity": "sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==", + "dev": true + }, + "node_modules/webpack/node_modules/acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/webpack/node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true + }, + "node_modules/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, + "dependencies": { + "errno": "~0.1.7" + } + }, + "node_modules/worker-rpc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz", + "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==", + "dev": true, + "dependencies": { + "microevent.ts": "~0.1.1" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/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 + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/x-default-browser": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/x-default-browser/-/x-default-browser-0.4.0.tgz", + "integrity": "sha512-7LKo7RtWfoFN/rHx1UELv/2zHGMx8MkZKDq1xENmOCTkfIqZJ0zZ26NEJX8czhnPXVcqS0ARjjfJB+eJ0/5Cvw==", + "dev": true, + "bin": { + "x-default-browser": "bin/x-default-browser.js" + }, + "optionalDependencies": { + "default-browser-id": "^1.0.4" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zwitch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/compat-data": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", + "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==", + "dev": true + }, + "@babel/core": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.2.tgz", + "integrity": "sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.2", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-module-transforms": "^7.20.2", + "@babel/helpers": "^7.20.1", + "@babel/parser": "^7.20.2", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.2", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + } + }, + "@babel/generator": { + "version": "7.20.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz", + "integrity": "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==", + "dev": true, + "requires": { + "@babel/types": "^7.20.2", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", + "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", + "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.20.0", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "semver": "^6.3.0" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.2.tgz", + "integrity": "sha512-k22GoYRAHPYr9I+Gvy2ZQlAe5mGy8BqWst2wRt8cwIufWTxrsVshhIBvYNqC80N0GSFWTsqRVexOtfzlgOEDvA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.19.1", + "@babel/helper-split-export-declaration": "^7.18.6" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz", + "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.1.0" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", + "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-function-name": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "dev": true, + "requires": { + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", + "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", + "dev": true, + "requires": { + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-transforms": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", + "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.2" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==" + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", + "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-replace-supers": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", + "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/traverse": "^7.19.1", + "@babel/types": "^7.19.0" + } + }, + "@babel/helper-simple-access": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "dev": true, + "requires": { + "@babel/types": "^7.20.2" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", + "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", + "dev": true, + "requires": { + "@babel/types": "^7.20.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" + }, + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" + }, + "@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz", + "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" + } + }, + "@babel/helpers": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz", + "integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==", + "dev": true, + "requires": { + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.0" + } + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.20.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", + "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==", + "dev": true + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", + "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", + "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-proposal-optional-chaining": "^7.18.9" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.1.tgz", + "integrity": "sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", + "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-proposal-decorators": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.20.2.tgz", + "integrity": "sha512-nkBH96IBmgKnbHQ5gXFrcmez+Z9S2EIDKDQGp005ROqBigc88Tky4rzCnlP/lnlj245dCEQl4/YyV0V1kYh5dw==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.20.2", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-replace-supers": "^7.19.1", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/plugin-syntax-decorators": "^7.19.0" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", + "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-default-from": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.18.10.tgz", + "integrity": "sha512-5H2N3R2aQFxkV4PIBUR/i7PUSwgTZjouJKzI8eKswfIjT0PhvzkPn0t0wIS5zn6maQuvtT0t1oHtMUz61LOuow==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-default-from": "^7.18.6" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", + "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", + "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", + "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz", + "integrity": "sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.20.1", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.1" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", + "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", + "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@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==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-decorators": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.19.0.tgz", + "integrity": "sha512-xaBZUEDntt4faL1yN8oIFlhfXeQAWJW7CLKYsHTUqriCUbj8xOra8bfxxKGi/UwExPFBuPdH4XfHc9rGQhrVkQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.19.0" + } + }, + "@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==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-default-from": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.18.6.tgz", + "integrity": "sha512-Kr//z3ujSVNx6E9z9ih5xXXMqK07VVTuqPmqGe6Mss/zW5XPeLZeSDZoP9ab/hT4wPKqAgjl2PnhPrcpk8Seew==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-flow": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz", + "integrity": "sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", + "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.19.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==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", + "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.19.0" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", + "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", + "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.2.tgz", + "integrity": "sha512-y5V15+04ry69OV2wULmwhEA6jwSWXO1TwAtIwiPXcvHcoOQUqpyMVd2bDsQJMW8AurjulIyUV8kDqtjSwHy1uQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.20.2" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz", + "integrity": "sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-replace-supers": "^7.19.1", + "@babel/helper-split-export-declaration": "^7.18.6", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", + "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz", + "integrity": "sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.20.2" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", + "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", + "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-flow-strip-types": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.19.0.tgz", + "integrity": "sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-flow": "^7.18.6" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", + "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", + "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", + "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", + "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz", + "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", + "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-simple-access": "^7.19.4" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz", + "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-validator-identifier": "^7.19.1" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", + "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz", + "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.19.0", + "@babel/helper-plugin-utils": "^7.19.0" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", + "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.20.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.3.tgz", + "integrity": "sha512-oZg/Fpx0YDrj13KsLyO8I/CX3Zdw7z0O9qOd95SqcoIzuqy/WTGWvePeHAnZCN54SfdyjHcb1S30gc8zlzlHcA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.20.2" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", + "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", + "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/types": "^7.19.0" + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", + "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", + "dev": true, + "requires": { + "@babel/plugin-transform-react-jsx": "^7.18.6" + } + }, + "@babel/plugin-transform-react-pure-annotations": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", + "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", + "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "regenerator-transform": "^0.15.0" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", + "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", + "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", + "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", + "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.2.tgz", + "integrity": "sha512-jvS+ngBfrnTUBfOQq8NfGnSbF9BrqlR6hjJ2yVxMkmO5nL/cdifNbI30EfjRlN4g5wYWNnMPyj5Sa6R1pbLeag==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.20.2", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-typescript": "^7.20.0" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", + "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/preset-env": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", + "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.20.1", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-async-generator-functions": "^7.20.1", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.20.2", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.20.0", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.18.6", + "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.20.2", + "@babel/plugin-transform-classes": "^7.20.2", + "@babel/plugin-transform-computed-properties": "^7.18.9", + "@babel/plugin-transform-destructuring": "^7.20.2", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.18.8", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.19.6", + "@babel/plugin-transform-modules-commonjs": "^7.19.6", + "@babel/plugin-transform-modules-systemjs": "^7.19.6", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.20.1", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.19.0", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.18.10", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.20.2", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "core-js-compat": "^3.25.1", + "semver": "^6.3.0" + } + }, + "@babel/preset-flow": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.18.6.tgz", + "integrity": "sha512-E7BDhL64W6OUqpuyHnSroLnqyRTcG6ZdOBl1OKI/QK/HJfplqK/S3sq1Cckx7oTodJ5yOXyfw7rEADJ6UjoQDQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-flow-strip-types": "^7.18.6" + } + }, + "@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "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.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", + "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-react-display-name": "^7.18.6", + "@babel/plugin-transform-react-jsx": "^7.18.6", + "@babel/plugin-transform-react-jsx-development": "^7.18.6", + "@babel/plugin-transform-react-pure-annotations": "^7.18.6" + } + }, + "@babel/preset-typescript": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", + "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-typescript": "^7.18.6" + } + }, + "@babel/register": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.18.9.tgz", + "integrity": "sha512-ZlbnXDcNYHMR25ITwwNKT88JiaukkdVj/nG7r3wnuXkOTHc60Uy05PwMCPre0hSkY68E6zK3xz+vUJSP2jWmcw==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "find-cache-dir": "^2.0.0", + "make-dir": "^2.1.0", + "pirates": "^4.0.5", + "source-map-support": "^0.5.16" + } + }, + "@babel/runtime": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", + "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", + "requires": { + "regenerator-runtime": "^0.13.10" + } + }, + "@babel/runtime-corejs3": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.20.1.tgz", + "integrity": "sha512-CGulbEDcg/ND1Im7fUNRZdGXmX2MTWVVZacQi/6DiKE5HNwZ3aVTm5PV4lO8HHz0B2h8WQyvKKjbX5XgTtydsg==", + "dev": true, + "requires": { + "core-js-pure": "^3.25.1", + "regenerator-runtime": "^0.13.10" + } + }, + "@babel/template": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + } + }, + "@babel/traverse": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", + "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.1", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.20.1", + "@babel/types": "^7.20.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", + "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + }, + "@base2/pretty-print-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@base2/pretty-print-object/-/pretty-print-object-1.0.1.tgz", + "integrity": "sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==", + "dev": true + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "@cnakazawa/watch": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", + "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", + "dev": true, + "requires": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + } + }, + "@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "optional": true + }, + "@design-systems/utils": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@design-systems/utils/-/utils-2.12.0.tgz", + "integrity": "sha512-Y/d2Zzr+JJfN6u1gbuBUb1ufBuLMJJRZQk+dRmw8GaTpqKx5uf7cGUYGTwN02dIb3I+Tf+cW8jcGBTRiFxdYFg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.11.2", + "clsx": "^1.0.4", + "focus-lock": "^0.8.0", + "react-merge-refs": "^1.0.0" + } + }, + "@devtools-ds/object-inspector": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@devtools-ds/object-inspector/-/object-inspector-1.2.0.tgz", + "integrity": "sha512-VztcwqVwScSvYdvJVZBJYsVO/2Pew3JPpFV3T9fuCHQLlHcLYOV3aU/kBS2ScuE2O1JN0ZbobLqFLa3vQF54Fw==", + "dev": true, + "requires": { + "@babel/runtime": "7.7.2", + "@devtools-ds/object-parser": "^1.2.0", + "@devtools-ds/themes": "^1.2.0", + "@devtools-ds/tree": "^1.2.0", + "clsx": "1.1.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.7.2.tgz", + "integrity": "sha512-JONRbXbTXc9WQE2mAZd1p0Z3DZ/6vaQIkgYMSTP3KjRCyd7rCZCcfhCyX+YjwcKxcZ82UrxbRD358bpExNgrjw==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.2" + } + }, + "clsx": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.0.tgz", + "integrity": "sha512-3avwM37fSK5oP6M5rQ9CNe99lwxhXDOeSWVPAOYF6OazUTgZCMb0yWlJpmdD74REy1gkEaFiub2ULv4fq9GUhA==", + "dev": true + } + } + }, + "@devtools-ds/object-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@devtools-ds/object-parser/-/object-parser-1.2.0.tgz", + "integrity": "sha512-SjGGyiFFY8dtUpiWXAvRSzRT+hE11EAAysrq2PsC/GVLf2ZLyT2nHlQO5kDStywyTz+fjw7S7pyDRj1HG9YTTA==", + "dev": true, + "requires": { + "@babel/runtime": "~7.5.4" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", + "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.2" + } + } + } + }, + "@devtools-ds/themes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@devtools-ds/themes/-/themes-1.2.0.tgz", + "integrity": "sha512-LimEITorE6yWZWWuMc6OiBfLQgPrQqWbyMEmfRUDPa3PHXoAY4SpDxczfg31fgyRDUNWnZhjaJH5bBbu8VEbIw==", + "dev": true, + "requires": { + "@babel/runtime": "~7.5.4", + "@design-systems/utils": "2.12.0", + "clsx": "1.1.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", + "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.2" + } + }, + "clsx": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.0.tgz", + "integrity": "sha512-3avwM37fSK5oP6M5rQ9CNe99lwxhXDOeSWVPAOYF6OazUTgZCMb0yWlJpmdD74REy1gkEaFiub2ULv4fq9GUhA==", + "dev": true + } + } + }, + "@devtools-ds/tree": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@devtools-ds/tree/-/tree-1.2.0.tgz", + "integrity": "sha512-hC4g4ocuo2eg7jsnzKdauxH0sDQiPW3KSM2+uK3kRgcmr9PzpBD5Kob+Y/WFSVKswFleftOGKL4BQLuRv0sPxA==", + "dev": true, + "requires": { + "@babel/runtime": "7.7.2", + "@devtools-ds/themes": "^1.2.0", + "clsx": "1.1.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.7.2.tgz", + "integrity": "sha512-JONRbXbTXc9WQE2mAZd1p0Z3DZ/6vaQIkgYMSTP3KjRCyd7rCZCcfhCyX+YjwcKxcZ82UrxbRD358bpExNgrjw==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.2" + } + }, + "clsx": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.0.tgz", + "integrity": "sha512-3avwM37fSK5oP6M5rQ9CNe99lwxhXDOeSWVPAOYF6OazUTgZCMb0yWlJpmdD74REy1gkEaFiub2ULv4fq9GUhA==", + "dev": true + } + } + }, + "@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true + }, + "@emotion/babel-plugin": { + "version": "11.10.5", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.5.tgz", + "integrity": "sha512-xE7/hyLHJac7D2Ve9dKroBBZqBT7WuPQmWcq7HSGb84sUuP4mlOWoB8dvVfD9yk5DHkU1m6RW7xSoDtnQHNQeA==", + "requires": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/plugin-syntax-jsx": "^7.17.12", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.0", + "@emotion/memoize": "^0.8.0", + "@emotion/serialize": "^1.1.1", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.1.3" + } + }, + "@emotion/cache": { + "version": "11.10.5", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.5.tgz", + "integrity": "sha512-dGYHWyzTdmK+f2+EnIGBpkz1lKc4Zbj2KHd4cX3Wi8/OWr5pKslNjc3yABKH4adRGCvSX4VDC0i04mrrq0aiRA==", + "requires": { + "@emotion/memoize": "^0.8.0", + "@emotion/sheet": "^1.2.1", + "@emotion/utils": "^1.2.0", + "@emotion/weak-memoize": "^0.3.0", + "stylis": "4.1.3" + } + }, + "@emotion/hash": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.0.tgz", + "integrity": "sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==" + }, + "@emotion/is-prop-valid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz", + "integrity": "sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==", + "requires": { + "@emotion/memoize": "^0.8.0" + } + }, + "@emotion/memoize": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.0.tgz", + "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==" + }, + "@emotion/react": { + "version": "11.10.5", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.5.tgz", + "integrity": "sha512-TZs6235tCJ/7iF6/rvTaOH4oxQg2gMAcdHemjwLKIjKz4rRuYe1HJ2TQJKnAcRAfOUDdU8XoDadCe1rl72iv8A==", + "requires": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.10.5", + "@emotion/cache": "^11.10.5", + "@emotion/serialize": "^1.1.1", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@emotion/utils": "^1.2.0", + "@emotion/weak-memoize": "^0.3.0", + "hoist-non-react-statics": "^3.3.1" + } + }, + "@emotion/serialize": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.1.tgz", + "integrity": "sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA==", + "requires": { + "@emotion/hash": "^0.9.0", + "@emotion/memoize": "^0.8.0", + "@emotion/unitless": "^0.8.0", + "@emotion/utils": "^1.2.0", + "csstype": "^3.0.2" + } + }, + "@emotion/server": { + "version": "11.10.0", + "resolved": "https://registry.npmjs.org/@emotion/server/-/server-11.10.0.tgz", + "integrity": "sha512-MTvJ21JPo9aS02GdjFW4nhdwOi2tNNpMmAM/YED0pkxzjDNi5WbiTwXqaCnvLc2Lr8NFtjhT0az1vTJyLIHYcw==", + "requires": { + "@emotion/utils": "^1.2.0", + "html-tokenize": "^2.0.0", + "multipipe": "^1.0.2", + "through": "^2.3.8" + } + }, + "@emotion/sheet": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.1.tgz", + "integrity": "sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA==" + }, + "@emotion/styled": { + "version": "11.10.5", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.10.5.tgz", + "integrity": "sha512-8EP6dD7dMkdku2foLoruPCNkRevzdcBaY6q0l0OsbyJK+x8D9HWjX27ARiSIKNF634hY9Zdoedh8bJCiva8yZw==", + "requires": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.10.5", + "@emotion/is-prop-valid": "^1.2.0", + "@emotion/serialize": "^1.1.1", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@emotion/utils": "^1.2.0" + } + }, + "@emotion/unitless": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", + "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" + }, + "@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz", + "integrity": "sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==" + }, + "@emotion/utils": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz", + "integrity": "sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==" + }, + "@emotion/weak-memoize": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz", + "integrity": "sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==" + }, + "@eslint/eslintrc": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "globals": { + "version": "13.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", + "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + } + } + }, + "@floating-ui/core": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.0.2.tgz", + "integrity": "sha512-Skfy0YS3NJ5nV9us0uuPN0HDk1Q4edljaOhRBJGDWs9EBa7ZVMYBHRFlhLvvmwEoaIM9BlH6QJFn9/uZg0bACg==" + }, + "@floating-ui/dom": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.0.6.tgz", + "integrity": "sha512-kt/tg1oip9OAH1xjCTcx1OpcUpu9rjDw3GKJ/rEhUqhO7QyJWfrHU0DpLTNsH67+JyFL5Kv9X1utsXwKFVtyEQ==", + "requires": { + "@floating-ui/core": "^1.0.2" + } + }, + "@floating-ui/react-dom": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-1.0.1.tgz", + "integrity": "sha512-UW0t1Gi8ikbDRr8cQPVcqIDMBwUEENe5V4wlHWdrJ5egFnRQFBV9JirauTBFI6S8sM1qFUC1i+qa3g87E6CLTw==", + "requires": { + "@floating-ui/dom": "^1.0.5" + } + }, + "@floating-ui/react-dom-interactions": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom-interactions/-/react-dom-interactions-0.10.3.tgz", + "integrity": "sha512-UEHqdnzyoiWNU5az/tAljr9iXFzN18DcvpMqW+/cXz4FEhDEB1ogLtWldOWCujLerPBnSRocADALafelOReMpw==", + "requires": { + "@floating-ui/react-dom": "^1.0.0", + "aria-hidden": "^1.1.3" + } + }, + "@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "dev": true + }, + "@humanwhocodes/config-array": { + "version": "0.10.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz", + "integrity": "sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/gitignore-to-minimatch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", + "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "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" + } + }, + "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" + } + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, + "@jest/transform": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", + "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^26.6.2", + "babel-plugin-istanbul": "^6.0.0", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-util": "^26.6.2", + "micromatch": "^4.0.2", + "pirates": "^4.0.1", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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 + }, + "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 + }, + "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": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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 + }, + "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.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "@mantine/core": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@mantine/core/-/core-5.8.0.tgz", + "integrity": "sha512-GGQJqVXI3cbY5OzFrg3S3bJUypPktJIFeb2hI65qskFJViL6F8dUynRuKZfi8B4GHteG86zqiZCUo0cUVRTiaQ==", + "requires": { + "@floating-ui/react-dom-interactions": "^0.10.1", + "@mantine/styles": "5.8.0", + "@mantine/utils": "5.8.0", + "@radix-ui/react-scroll-area": "1.0.0", + "react-textarea-autosize": "8.3.4" + } + }, + "@mantine/hooks": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-5.8.0.tgz", + "integrity": "sha512-838TKK0jTvU9sy7OcbDYc2P9fXyyca4HQxKRP2kRJnsnL6ZAHWFlFosGIcN97FiWh+8uQA7jCoD8jyrUjrFDXg==" + }, + "@mantine/next": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@mantine/next/-/next-5.8.0.tgz", + "integrity": "sha512-hL+52JwxLaIua2oMzm3hPcUyJqf6BcE9Md5/S3IGoMvQ69neGFeJKKkQIzTD1ikjm4Rw7ryEjko/FA5axe7u5A==", + "requires": { + "@mantine/ssr": "5.8.0", + "@mantine/styles": "5.8.0" + } + }, + "@mantine/nprogress": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@mantine/nprogress/-/nprogress-5.8.0.tgz", + "integrity": "sha512-D3LUE4V94iGkgLN23xfYe2zFZ5jcDmugB0cVS82m1q/crJOrMVKfpXesOE+mu+zUBKeOBVTcni66hXvGYFgiZg==", + "requires": { + "@mantine/utils": "5.8.0" + } + }, + "@mantine/ssr": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@mantine/ssr/-/ssr-5.8.0.tgz", + "integrity": "sha512-JKhLPQBCLu/dv5V89y3/nA5Awr/ADR4Ti0ajmfEbe+8aUfDCgHQ3l80jpUYzWGeiT4qNBMzRg1ovxGZ0Ra1e5A==", + "requires": { + "@mantine/styles": "5.8.0", + "html-react-parser": "1.4.12" + } + }, + "@mantine/styles": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@mantine/styles/-/styles-5.8.0.tgz", + "integrity": "sha512-sCKPEJpiSF97ISrbJ6tr9GdYCLoX0vWA0aKWc5GGnpZLVTr5WlqMdqY7u0J00aAfjPHqeuN3hIrnEs7bn0qmVg==", + "requires": { + "clsx": "1.1.1", + "csstype": "3.0.9" + }, + "dependencies": { + "csstype": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.9.tgz", + "integrity": "sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw==" + } + } + }, + "@mantine/utils": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@mantine/utils/-/utils-5.8.0.tgz", + "integrity": "sha512-gVE4U3apoE53MUWgKqst9H0iWgurzBccZNSSGRv3kD62vAFcI1JJhxxuW7X271bc9IMhKjgezEH14ApH1jlwCA==" + }, + "@mdx-js/mdx": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", + "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", + "dev": true, + "requires": { + "@babel/core": "7.12.9", + "@babel/plugin-syntax-jsx": "7.12.1", + "@babel/plugin-syntax-object-rest-spread": "7.8.3", + "@mdx-js/util": "1.6.22", + "babel-plugin-apply-mdx-type-prop": "1.6.22", + "babel-plugin-extract-import-names": "1.6.22", + "camelcase-css": "2.0.1", + "detab": "2.0.4", + "hast-util-raw": "6.0.1", + "lodash.uniq": "4.5.0", + "mdast-util-to-hast": "10.0.1", + "remark-footnotes": "2.0.0", + "remark-mdx": "1.6.22", + "remark-parse": "8.0.3", + "remark-squeeze-paragraphs": "4.0.0", + "style-to-object": "0.3.0", + "unified": "9.2.0", + "unist-builder": "2.0.3", + "unist-util-visit": "2.0.3" + }, + "dependencies": { + "@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "@mdx-js/react": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", + "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", + "dev": true + }, + "@mdx-js/util": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", + "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==", + "dev": true + }, + "@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", + "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "dev": true, + "requires": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + }, + "dependencies": { + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==", + "dev": true + } + } + }, + "@next/env": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/env/-/env-12.3.3.tgz", + "integrity": "sha512-H2pKuOasV9RgvVaWosB2rGSNeQShQpiDaF4EEjLyagIc3HwqdOw2/VAG/8Lq+adOwPv2P73O1hulTNad3k5MDw==" + }, + "@next/eslint-plugin-next": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.0.3.tgz", + "integrity": "sha512-slmTAHNKDyc7jhx4VF8lFbmOPWJ3PShtUUWpb6x9+ga59CyOxgP6AdcDhxfapnWYACKe/TwYiaveufu7LqXgZg==", + "dev": true, + "requires": { + "glob": "7.1.7" + }, + "dependencies": { + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "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" + } + } + } + }, + "@next/swc-android-arm-eabi": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.3.3.tgz", + "integrity": "sha512-5O/ZIX6hlIRGMy1R2f/8WiCZ4Hp4WTC0FcTuz8ycQ28j/mzDnmzjVoayVVr+ZmfEKQayFrRu+vxHjFyY0JGQlQ==", + "optional": true + }, + "@next/swc-android-arm64": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.3.3.tgz", + "integrity": "sha512-2QWreRmlxYRDtnLYn+BI8oukHwcP7W0zGIY5R2mEXRjI4ARqCLdu8RmcT9Vemw7RfeAVKA/4cv/9PY0pCcQpNA==", + "optional": true + }, + "@next/swc-darwin-arm64": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.3.3.tgz", + "integrity": "sha512-GtZdDLerM+VToCMFp+W+WhnT6sxHePQH4xZZiYD/Y8KFiwHbDRcJr2FPG0bAJnGNiSvv/QQnBq74wjZ9+7vhcQ==", + "optional": true + }, + "@next/swc-darwin-x64": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.3.3.tgz", + "integrity": "sha512-gRYvTKrRYynjFQUDJ+upHMcBiNz0ii0m7zGgmUTlTSmrBWqVSzx79EHYT7Nn4GWHM+a/W+2VXfu+lqHcJeQ9gQ==", + "optional": true + }, + "@next/swc-freebsd-x64": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.3.3.tgz", + "integrity": "sha512-r+GLATzCjjQI82bgrIPXWEYBwZonSO64OThk5wU6HduZlDYTEDxZsFNoNoesCDWCgRrgg+OXj7WLNy1WlvfX7w==", + "optional": true + }, + "@next/swc-linux-arm-gnueabihf": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.3.3.tgz", + "integrity": "sha512-juvRj1QX9jmQScL4nV0rROtYUFgWP76zfdn1fdfZ2BhvwUugIAq8x+jLVGlnXKUhDrP9+RrAufqXjjVkK+uBxA==", + "optional": true + }, + "@next/swc-linux-arm64-gnu": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.3.3.tgz", + "integrity": "sha512-hzinybStPB+SzS68hR5rzOngOH7Yd/jFuWGeg9qS5WifYXHpqwGH2BQeKpjVV0iJuyO9r309JKrRWMrbfhnuBA==", + "optional": true + }, + "@next/swc-linux-arm64-musl": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.3.3.tgz", + "integrity": "sha512-oyfQYljCwf+9zUu1YkTZbRbyxmcHzvJPMGOxC3kJOReh3kCUoGcmvAxUPMtFD6FSYjJ+eaog4+2IFHtYuAw/bQ==", + "optional": true + }, + "@next/swc-linux-x64-gnu": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.3.3.tgz", + "integrity": "sha512-epv4FMazj/XG70KTTnrZ0H1VtL6DeWOvyHLHYy7f5PdgDpBXpDTFjVqhP8NFNH8HmaDDdeL1NvQD07AXhyvUKA==", + "optional": true + }, + "@next/swc-linux-x64-musl": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.3.3.tgz", + "integrity": "sha512-bG5QODFy59XnSFTiPyIAt+rbPdphtvQMibtOVvyjwIwsBUw7swJ6k+6PSPVYEYpi6SHzi3qYBsro39ayGJKQJg==", + "optional": true + }, + "@next/swc-win32-arm64-msvc": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.3.3.tgz", + "integrity": "sha512-FbnT3reJ3MbTJ5W0hvlCCGGVDSpburzT5XGC9ljBJ4kr+85iNTLjv7+vrPeDdwHEqtGmdZgnabkLVCI4yFyCag==", + "optional": true + }, + "@next/swc-win32-ia32-msvc": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.3.3.tgz", + "integrity": "sha512-M/fKZC2tMGWA6eTsIniNEBpx2prdR8lIxvSO3gv5P6ymZOGVWCvEMksnTkPAjHnU6d8r8eCiuGKm3UNo7zCTpQ==", + "optional": true + }, + "@next/swc-win32-x64-msvc": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.3.3.tgz", + "integrity": "sha512-Ku9mfGwmNtk44o4B/jEWUxBAT4tJ3S7QbBMLJdL1GmtRZ05LGL36OqWjLvBPr8dFiHOQQbYoAmYfQw7zeGypYA==", + "optional": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "dev": true, + "requires": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + }, + "dependencies": { + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, + "@pmmmwh/react-refresh-webpack-plugin": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.9.tgz", + "integrity": "sha512-7QV4cqUwhkDIHpMAZ9mestSJ2DMIotVTbOUwbiudhjCRTAWWKIaBecELiEM2LT3AHFeOAaHIcFu4dbXjX+9GBA==", + "dev": true, + "requires": { + "ansi-html-community": "^0.0.8", + "common-path-prefix": "^3.0.0", + "core-js-pure": "^3.23.3", + "error-stack-parser": "^2.0.6", + "find-up": "^5.0.0", + "html-entities": "^2.1.0", + "loader-utils": "^2.0.3", + "schema-utils": "^3.0.0", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true + } + } + }, + "@radix-ui/number": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.0.0.tgz", + "integrity": "sha512-Ofwh/1HX69ZfJRiRBMTy7rgjAzHmwe4kW9C9Y99HTRUcYLUuVT0KESFj15rPjRgKJs20GPq8Bm5aEDJ8DuA3vA==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.0.tgz", + "integrity": "sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-compose-refs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.0.tgz", + "integrity": "sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-context": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.0.tgz", + "integrity": "sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-direction": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.0.tgz", + "integrity": "sha512-2HV05lGUgYcA6xgLQ4BKPDmtL+QbIZYH5fCOTAOOcJ5O0QbWS3i9lKaurLzliYUDhORI2Qr3pyjhJh44lKA3rQ==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-presence": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.0.tgz", + "integrity": "sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-use-layout-effect": "1.0.0" + } + }, + "@radix-ui/react-primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.0.tgz", + "integrity": "sha512-EyXe6mnRlHZ8b6f4ilTDrXmkLShICIuOTTj0GX4w1rp+wSxf3+TD05u1UOITC8VsJ2a9nwHvdXtOXEOl0Cw/zQ==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.0" + } + }, + "@radix-ui/react-scroll-area": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.0.0.tgz", + "integrity": "sha512-3SNFukAjS5remgtpAVR9m3Zgo23ZojBZ8V3TCyR3A+56x2mtVqKlPV4+e8rScZUFMuvtbjIdQCmsJBFBazKZig==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/number": "1.0.0", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-direction": "1.0.0", + "@radix-ui/react-presence": "1.0.0", + "@radix-ui/react-primitive": "1.0.0", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-layout-effect": "1.0.0" + } + }, + "@radix-ui/react-slot": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.0.tgz", + "integrity": "sha512-3mrKauI/tWXo1Ll+gN5dHcxDPdm/Df1ufcDLCecn+pnCIVcdWE7CujXo8QaXOWRJyZyQWWbpB8eFwHzWXlv5mQ==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0" + } + }, + "@radix-ui/react-use-callback-ref": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.0.tgz", + "integrity": "sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-use-layout-effect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.0.tgz", + "integrity": "sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@rushstack/eslint-patch": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", + "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==", + "dev": true + }, + "@storybook/addon-actions": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-6.5.13.tgz", + "integrity": "sha512-3Tji0gIy95havhTpSc6CsFl5lNxGn4O5Y1U9fyji+GRkKqDFOrvVLYAHPtLOpYdEI5tF0bDo+akiqfDouY8+eA==", + "dev": true, + "requires": { + "@storybook/addons": "6.5.13", + "@storybook/api": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/components": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/theming": "6.5.13", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "polished": "^4.2.2", + "prop-types": "^15.7.2", + "react-inspector": "^5.1.0", + "regenerator-runtime": "^0.13.7", + "telejson": "^6.0.8", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "uuid-browser": "^3.1.0" + } + }, + "@storybook/addon-backgrounds": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-6.5.13.tgz", + "integrity": "sha512-b4JX7JMY7e50y1l6g71D+2XWV3GO0TO2z1ta8J6W4OQt8f44V7sSkRQaJUzXdLjQMrA+Anojuy1ZwPjVeLC6vg==", + "dev": true, + "requires": { + "@storybook/addons": "6.5.13", + "@storybook/api": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/components": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/theming": "6.5.13", + "core-js": "^3.8.2", + "global": "^4.4.0", + "memoizerific": "^1.11.3", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/addon-controls": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-6.5.13.tgz", + "integrity": "sha512-lYq3uf2mlVevm0bi6ueL3H6TpUMRYW9s/pTNTVJT225l27kLdFR9wEKxAkCBrlKaTgDLJmzzDRsJE3NLZlR/5Q==", + "dev": true, + "requires": { + "@storybook/addons": "6.5.13", + "@storybook/api": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/components": "6.5.13", + "@storybook/core-common": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/node-logger": "6.5.13", + "@storybook/store": "6.5.13", + "@storybook/theming": "6.5.13", + "core-js": "^3.8.2", + "lodash": "^4.17.21", + "ts-dedent": "^2.0.0" + } + }, + "@storybook/addon-docs": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-6.5.13.tgz", + "integrity": "sha512-RG/NjsheD9FixZ789RJlNyNccaR2Cuy7CtAwph4oUNi3aDFjtOI8Oe9L+FOT7qtVnZLw/YMjF+pZxoDqJNKLPw==", + "dev": true, + "requires": { + "@babel/plugin-transform-react-jsx": "^7.12.12", + "@babel/preset-env": "^7.12.11", + "@jest/transform": "^26.6.2", + "@mdx-js/react": "^1.6.22", + "@storybook/addons": "6.5.13", + "@storybook/api": "6.5.13", + "@storybook/components": "6.5.13", + "@storybook/core-common": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/docs-tools": "6.5.13", + "@storybook/mdx1-csf": "^0.0.1", + "@storybook/node-logger": "6.5.13", + "@storybook/postinstall": "6.5.13", + "@storybook/preview-web": "6.5.13", + "@storybook/source-loader": "6.5.13", + "@storybook/store": "6.5.13", + "@storybook/theming": "6.5.13", + "babel-loader": "^8.0.0", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "regenerator-runtime": "^0.13.7", + "remark-external-links": "^8.0.0", + "remark-slug": "^6.0.0", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/addon-essentials": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-6.5.13.tgz", + "integrity": "sha512-G9FVAWV7ixjVLWeLgIX+VT90tcAk6yQxfZQegfg5ucRilGysJCDaNnoab4xuuvm1R40TfFhba3iAGZtQYsddmw==", + "dev": true, + "requires": { + "@storybook/addon-actions": "6.5.13", + "@storybook/addon-backgrounds": "6.5.13", + "@storybook/addon-controls": "6.5.13", + "@storybook/addon-docs": "6.5.13", + "@storybook/addon-measure": "6.5.13", + "@storybook/addon-outline": "6.5.13", + "@storybook/addon-toolbars": "6.5.13", + "@storybook/addon-viewport": "6.5.13", + "@storybook/addons": "6.5.13", + "@storybook/api": "6.5.13", + "@storybook/core-common": "6.5.13", + "@storybook/node-logger": "6.5.13", + "core-js": "^3.8.2", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0" + } + }, + "@storybook/addon-interactions": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-6.5.13.tgz", + "integrity": "sha512-FPOeS7AT/Odxl6z7E0qYI4F0Sh06jFRttRvSgpKC5P2lYUWUstLP5TC8N+F5ijBeLfIdIsf5zBK7l5Y/cluueg==", + "dev": true, + "requires": { + "@devtools-ds/object-inspector": "^1.1.2", + "@storybook/addons": "6.5.13", + "@storybook/api": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/components": "6.5.13", + "@storybook/core-common": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/instrumenter": "6.5.13", + "@storybook/theming": "6.5.13", + "core-js": "^3.8.2", + "global": "^4.4.0", + "jest-mock": "^27.0.6", + "polished": "^4.2.2", + "ts-dedent": "^2.2.0" + } + }, + "@storybook/addon-links": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-6.5.13.tgz", + "integrity": "sha512-K/LYYu9R/Xoah5h9MNh4mSHOic3q5csqjderLqr2YW/KPYiuNubgvzEbAAbzI5xq5JrtAZqnINrZUv2A4CyYbQ==", + "dev": true, + "requires": { + "@storybook/addons": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/router": "6.5.13", + "@types/qs": "^6.9.5", + "core-js": "^3.8.2", + "global": "^4.4.0", + "prop-types": "^15.7.2", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0" + } + }, + "@storybook/addon-measure": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-6.5.13.tgz", + "integrity": "sha512-pi5RFB9YTnESRFtYHAVRUrgEI5to0TFc4KndtwcCKt1fMJ8OFjXQeznEfdj95PFeUvW5TNUwjL38vK4LhicB+g==", + "dev": true, + "requires": { + "@storybook/addons": "6.5.13", + "@storybook/api": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/components": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "core-js": "^3.8.2", + "global": "^4.4.0" + } + }, + "@storybook/addon-outline": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-6.5.13.tgz", + "integrity": "sha512-8d8taPheO/tryflzXbj2QRuxHOIS8CtzRzcaglCcioqHEMhOIDOx9BdXKdheq54gdk/UN94HdGJUoVxYyXwZ4Q==", + "dev": true, + "requires": { + "@storybook/addons": "6.5.13", + "@storybook/api": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/components": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "core-js": "^3.8.2", + "global": "^4.4.0", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0" + } + }, + "@storybook/addon-toolbars": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-6.5.13.tgz", + "integrity": "sha512-Qgr4wKRSP+gY1VaN7PYT4TM1um7KY341X3GHTglXLFHd8nDsCweawfV2shaX3WxCfZmVro8g4G+Oest30kLLCw==", + "dev": true, + "requires": { + "@storybook/addons": "6.5.13", + "@storybook/api": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/components": "6.5.13", + "@storybook/theming": "6.5.13", + "core-js": "^3.8.2", + "regenerator-runtime": "^0.13.7" + } + }, + "@storybook/addon-viewport": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-6.5.13.tgz", + "integrity": "sha512-KSfeuCSIjncwWGnUu6cZBx8WNqYvm5gHyFvkSPKEu0+MJtgncbUy7pl53lrEEr6QmIq0GRXvS3A0XzV8RCnrSA==", + "dev": true, + "requires": { + "@storybook/addons": "6.5.13", + "@storybook/api": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/components": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/theming": "6.5.13", + "core-js": "^3.8.2", + "global": "^4.4.0", + "memoizerific": "^1.11.3", + "prop-types": "^15.7.2", + "regenerator-runtime": "^0.13.7" + } + }, + "@storybook/addons": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-6.5.13.tgz", + "integrity": "sha512-18CqzNnrGMfeZtiKz+R/3rHtSNnfNwz6y6prIQIbWseK16jY8ELTfIFGviwO5V2OqpbHDQi5+xQQ63QAIb89YA==", + "dev": true, + "requires": { + "@storybook/api": "6.5.13", + "@storybook/channels": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/router": "6.5.13", + "@storybook/theming": "6.5.13", + "@types/webpack-env": "^1.16.0", + "core-js": "^3.8.2", + "global": "^4.4.0", + "regenerator-runtime": "^0.13.7" + } + }, + "@storybook/api": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/api/-/api-6.5.13.tgz", + "integrity": "sha512-xVSmB7/IuFd6G7eiJjbI2MuS7SZunoUM6d+YCWpjiehfMeX47MXt1gZtOwFrgJC1ShZlefXFahq/dvxwtmWs+w==", + "dev": true, + "requires": { + "@storybook/channels": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/router": "6.5.13", + "@storybook/semver": "^7.3.2", + "@storybook/theming": "6.5.13", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "regenerator-runtime": "^0.13.7", + "store2": "^2.12.0", + "telejson": "^6.0.8", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/builder-webpack4": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/builder-webpack4/-/builder-webpack4-6.5.13.tgz", + "integrity": "sha512-Agqy3IKPv3Nl8QqdS7PjtqLp+c0BD8+/3A2ki/YfKqVz+F+J34EpbZlh3uU053avm1EoNQHSmhZok3ZlWH6O7A==", + "dev": true, + "requires": { + "@babel/core": "^7.12.10", + "@storybook/addons": "6.5.13", + "@storybook/api": "6.5.13", + "@storybook/channel-postmessage": "6.5.13", + "@storybook/channels": "6.5.13", + "@storybook/client-api": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/components": "6.5.13", + "@storybook/core-common": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/node-logger": "6.5.13", + "@storybook/preview-web": "6.5.13", + "@storybook/router": "6.5.13", + "@storybook/semver": "^7.3.2", + "@storybook/store": "6.5.13", + "@storybook/theming": "6.5.13", + "@storybook/ui": "6.5.13", + "@types/node": "^14.0.10 || ^16.0.0", + "@types/webpack": "^4.41.26", + "autoprefixer": "^9.8.6", + "babel-loader": "^8.0.0", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "core-js": "^3.8.2", + "css-loader": "^3.6.0", + "file-loader": "^6.2.0", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^4.1.6", + "glob": "^7.1.6", + "glob-promise": "^3.4.0", + "global": "^4.4.0", + "html-webpack-plugin": "^4.0.0", + "pnp-webpack-plugin": "1.6.4", + "postcss": "^7.0.36", + "postcss-flexbugs-fixes": "^4.2.1", + "postcss-loader": "^4.2.0", + "raw-loader": "^4.0.2", + "stable": "^0.1.8", + "style-loader": "^1.3.0", + "terser-webpack-plugin": "^4.2.3", + "ts-dedent": "^2.0.0", + "url-loader": "^4.1.1", + "util-deprecate": "^1.0.2", + "webpack": "4", + "webpack-dev-middleware": "^3.7.3", + "webpack-filter-warnings-plugin": "^1.2.1", + "webpack-hot-middleware": "^2.25.1", + "webpack-virtual-modules": "^0.2.2" + }, + "dependencies": { + "@types/html-minifier-terser": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", + "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==", + "dev": true + }, + "@types/node": { + "version": "16.18.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", + "dev": true + }, + "@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/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-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-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" + } + }, + "acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "clean-css": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", + "dev": true, + "requires": { + "source-map": "~0.6.0" + } + }, + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true + }, + "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": { + "loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "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" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "fork-ts-checker-webpack-plugin": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz", + "integrity": "sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.5.5", + "chalk": "^2.4.1", + "micromatch": "^3.1.10", + "minimatch": "^3.0.4", + "semver": "^5.6.0", + "tapable": "^1.0.0", + "worker-rpc": "^0.1.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "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": { + "terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "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==", + "dev": true + } + } + } + } + }, + "html-webpack-plugin": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz", + "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==", + "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.20", + "pretty-error": "^2.1.1", + "tapable": "^1.1.3", + "util.promisify": "1.0.0" + }, + "dependencies": { + "loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } + } + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "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" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "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 + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "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" + } + } + } + }, + "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" + }, + "dependencies": { + "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" + } + } + } + }, + "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.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", + "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", + "dev": true, + "requires": { + "icss-utils": "^4.1.1", + "postcss": "^7.0.32", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.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" + } + }, + "pretty-error": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", + "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", + "dev": true, + "requires": { + "lodash": "^4.17.20", + "renderkid": "^2.0.4" + } + }, + "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" + } + }, + "renderkid": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", + "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", + "dev": true, + "requires": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^3.0.1" + } + }, + "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" + } + }, + "serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "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 + }, + "ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "style-loader": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.3.0.tgz", + "integrity": "sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^2.7.0" + }, + "dependencies": { + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "terser-webpack-plugin": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz", + "integrity": "sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==", + "dev": true, + "requires": { + "cacache": "^15.0.5", + "find-cache-dir": "^3.3.1", + "jest-worker": "^26.5.0", + "p-limit": "^3.0.2", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", + "source-map": "^0.6.1", + "terser": "^5.3.4", + "webpack-sources": "^1.4.3" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "dev": true, + "requires": { + "chokidar": "^3.4.1", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.1" + } + }, + "webpack": { + "version": "4.46.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", + "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "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.5.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": { + "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" + } + }, + "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==", + "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==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "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" + } + }, + "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==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.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" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "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 + }, + "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" + } + }, + "terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + } + }, + "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" + } + } + } + }, + "webpack-dev-middleware": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", + "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", + "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-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" + } + }, + "webpack-virtual-modules": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.2.2.tgz", + "integrity": "sha512-kDUmfm3BZrei0y+1NTHJInejzxfhtU8eDj2M7OKb2IWrPFAeO1SOH2KuQ68MSZu9IGEHcxbkKKR1v18FrUSOmA==", + "dev": true, + "requires": { + "debug": "^3.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "@storybook/builder-webpack5": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-6.5.13.tgz", + "integrity": "sha512-juNH31ZljWbaoBD6Yx2/iQ4G66UBkwq+cFUqLzgVROKMXmYaT0AJYbfyY8CgGqcXkc+sqNA63yWaLWd8/K9vTg==", + "dev": true, + "requires": { + "@babel/core": "^7.12.10", + "@storybook/addons": "6.5.13", + "@storybook/api": "6.5.13", + "@storybook/channel-postmessage": "6.5.13", + "@storybook/channels": "6.5.13", + "@storybook/client-api": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/components": "6.5.13", + "@storybook/core-common": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/node-logger": "6.5.13", + "@storybook/preview-web": "6.5.13", + "@storybook/router": "6.5.13", + "@storybook/semver": "^7.3.2", + "@storybook/store": "6.5.13", + "@storybook/theming": "6.5.13", + "@types/node": "^14.0.10 || ^16.0.0", + "babel-loader": "^8.0.0", + "babel-plugin-named-exports-order": "^0.0.2", + "browser-assert": "^1.2.1", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "core-js": "^3.8.2", + "css-loader": "^5.0.1", + "fork-ts-checker-webpack-plugin": "^6.0.4", + "glob": "^7.1.6", + "glob-promise": "^3.4.0", + "html-webpack-plugin": "^5.0.0", + "path-browserify": "^1.0.1", + "process": "^0.11.10", + "stable": "^0.1.8", + "style-loader": "^2.0.0", + "terser-webpack-plugin": "^5.0.3", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "webpack": "^5.9.0", + "webpack-dev-middleware": "^4.1.0", + "webpack-hot-middleware": "^2.25.1", + "webpack-virtual-modules": "^0.4.1" + }, + "dependencies": { + "@types/node": { + "version": "16.18.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", + "dev": true + } + } + }, + "@storybook/channel-postmessage": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-6.5.13.tgz", + "integrity": "sha512-R79MBs0mQ7TV8M/a6x/SiTRyvZBidDfMEEthG7Cyo9p35JYiKOhj2535zhW4qlVMESBu95pwKYBibTjASoStPw==", + "dev": true, + "requires": { + "@storybook/channels": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/core-events": "6.5.13", + "core-js": "^3.8.2", + "global": "^4.4.0", + "qs": "^6.10.0", + "telejson": "^6.0.8" + } + }, + "@storybook/channel-websocket": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/channel-websocket/-/channel-websocket-6.5.13.tgz", + "integrity": "sha512-kwh667H+tzCiNvs92GNwYOwVXdj9uHZyieRAN5rJtTBJ7XgLzGkpTEU50mWlbc0nDKhgE0qYvzyr5H393Iy5ug==", + "dev": true, + "requires": { + "@storybook/channels": "6.5.13", + "@storybook/client-logger": "6.5.13", + "core-js": "^3.8.2", + "global": "^4.4.0", + "telejson": "^6.0.8" + } + }, + "@storybook/channels": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.5.13.tgz", + "integrity": "sha512-sGYSilE30bz0jG+HdHnkv0B4XkAv2hP+KRZr4xmnv+MOOQpRnZpJ5Z3HVU16s17cj/83NWihKj6BuKcEVzyilg==", + "dev": true, + "requires": { + "core-js": "^3.8.2", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/client-api": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-6.5.13.tgz", + "integrity": "sha512-uH1mAWbidPiuuTdMUVEiuaNOfrYXm+9QLSP1MMYTKULqEOZI5MSOGkEDqRfVWxbYv/iWBOPTQ+OM9TQ6ecYacg==", + "dev": true, + "requires": { + "@storybook/addons": "6.5.13", + "@storybook/channel-postmessage": "6.5.13", + "@storybook/channels": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/store": "6.5.13", + "@types/qs": "^6.9.5", + "@types/webpack-env": "^1.16.0", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "store2": "^2.12.0", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/client-logger": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.5.13.tgz", + "integrity": "sha512-F2SMW3LWFGXLm2ENTwTitrLWJgmMXRf3CWQXdN2EbkNCIBHy5Zcbt+91K4OX8e2e5h9gjGfrdYbyYDYOoUCEfA==", + "dev": true, + "requires": { + "core-js": "^3.8.2", + "global": "^4.4.0" + } + }, + "@storybook/components": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-6.5.13.tgz", + "integrity": "sha512-6Hhx70JK5pGfKCkqMU4yq/BBH+vRTmzj7tZKfPwba+f8VmTMoOr/2ysTQFRtXryiHB6Z15xBYgfq5x2pIwQzLQ==", + "dev": true, + "requires": { + "@storybook/client-logger": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/theming": "6.5.13", + "core-js": "^3.8.2", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/core": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/core/-/core-6.5.13.tgz", + "integrity": "sha512-kw1lCgbsxzUimGww6t5rmuWJmFPe9kGGyzIqvj4RC4BBcEsP40LEu9XhSfvnb8vTOLIULFZeZpdRFfJs4TYbUw==", + "dev": true, + "requires": { + "@storybook/core-client": "6.5.13", + "@storybook/core-server": "6.5.13" + } + }, + "@storybook/core-client": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-6.5.13.tgz", + "integrity": "sha512-YuELbRokTBdqjbx/R4/7O4rou9kvbBIOJjlUkor9hdLLuJ3P0yGianERGNkZFfvcfMBAxU0p52o7QvDldSR3kA==", + "dev": true, + "requires": { + "@storybook/addons": "6.5.13", + "@storybook/channel-postmessage": "6.5.13", + "@storybook/channel-websocket": "6.5.13", + "@storybook/client-api": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/preview-web": "6.5.13", + "@storybook/store": "6.5.13", + "@storybook/ui": "6.5.13", + "airbnb-js-shims": "^2.2.1", + "ansi-to-html": "^0.6.11", + "core-js": "^3.8.2", + "global": "^4.4.0", + "lodash": "^4.17.21", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0", + "unfetch": "^4.2.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/core-common": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-6.5.13.tgz", + "integrity": "sha512-+DVZrRsteE9pw0X5MNffkdBgejQnbnL+UOG3qXkE9xxUamQALnuqS/w1BzpHE9WmOHuf7RWMKflyQEW3OLKAJg==", + "dev": true, + "requires": { + "@babel/core": "^7.12.10", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-decorators": "^7.12.12", + "@babel/plugin-proposal-export-default-from": "^7.12.1", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.7", + "@babel/plugin-proposal-private-methods": "^7.12.1", + "@babel/plugin-proposal-private-property-in-object": "^7.12.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-arrow-functions": "^7.12.1", + "@babel/plugin-transform-block-scoping": "^7.12.12", + "@babel/plugin-transform-classes": "^7.12.1", + "@babel/plugin-transform-destructuring": "^7.12.1", + "@babel/plugin-transform-for-of": "^7.12.1", + "@babel/plugin-transform-parameters": "^7.12.1", + "@babel/plugin-transform-shorthand-properties": "^7.12.1", + "@babel/plugin-transform-spread": "^7.12.1", + "@babel/preset-env": "^7.12.11", + "@babel/preset-react": "^7.12.10", + "@babel/preset-typescript": "^7.12.7", + "@babel/register": "^7.12.1", + "@storybook/node-logger": "6.5.13", + "@storybook/semver": "^7.3.2", + "@types/node": "^14.0.10 || ^16.0.0", + "@types/pretty-hrtime": "^1.0.0", + "babel-loader": "^8.0.0", + "babel-plugin-macros": "^3.0.1", + "babel-plugin-polyfill-corejs3": "^0.1.0", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "express": "^4.17.1", + "file-system-cache": "^1.0.5", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^6.0.4", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "handlebars": "^4.7.7", + "interpret": "^2.2.0", + "json5": "^2.1.3", + "lazy-universal-dotenv": "^3.0.1", + "picomatch": "^2.3.0", + "pkg-dir": "^5.0.0", + "pretty-hrtime": "^1.0.3", + "resolve-from": "^5.0.0", + "slash": "^3.0.0", + "telejson": "^6.0.8", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "webpack": "4" + }, + "dependencies": { + "@babel/helper-define-polyfill-provider": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz", + "integrity": "sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + } + }, + "@types/node": { + "version": "16.18.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", + "dev": true + }, + "@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/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-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-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" + } + }, + "acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz", + "integrity": "sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.1.5", + "core-js-compat": "^3.8.1" + } + }, + "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "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" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "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 + }, + "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==", + "dev": true + }, + "enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "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" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "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.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } + } + }, + "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" + } + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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 + }, + "ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + } + }, + "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" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "dev": true, + "requires": { + "chokidar": "^3.4.1", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.1" + } + }, + "webpack": { + "version": "4.46.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", + "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "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.5.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" + } + }, + "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" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "@storybook/core-events": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.5.13.tgz", + "integrity": "sha512-kL745tPpRKejzHToA3/CoBNbI+NPRVk186vGxXBmk95OEg0TlwgQExP8BnqEtLlRZMbW08e4+6kilc1M1M4N5w==", + "dev": true, + "requires": { + "core-js": "^3.8.2" + } + }, + "@storybook/core-server": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-6.5.13.tgz", + "integrity": "sha512-vs7tu3kAnFwuINio1p87WyqDNlFyZESmeh9s7vvrZVbe/xS/ElqDscr9DT5seW+jbtxufAaHsx+JUTver1dheQ==", + "dev": true, + "requires": { + "@discoveryjs/json-ext": "^0.5.3", + "@storybook/builder-webpack4": "6.5.13", + "@storybook/core-client": "6.5.13", + "@storybook/core-common": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/csf-tools": "6.5.13", + "@storybook/manager-webpack4": "6.5.13", + "@storybook/node-logger": "6.5.13", + "@storybook/semver": "^7.3.2", + "@storybook/store": "6.5.13", + "@storybook/telemetry": "6.5.13", + "@types/node": "^14.0.10 || ^16.0.0", + "@types/node-fetch": "^2.5.7", + "@types/pretty-hrtime": "^1.0.0", + "@types/webpack": "^4.41.26", + "better-opn": "^2.1.1", + "boxen": "^5.1.2", + "chalk": "^4.1.0", + "cli-table3": "^0.6.1", + "commander": "^6.2.1", + "compression": "^1.7.4", + "core-js": "^3.8.2", + "cpy": "^8.1.2", + "detect-port": "^1.3.0", + "express": "^4.17.1", + "fs-extra": "^9.0.1", + "global": "^4.4.0", + "globby": "^11.0.2", + "ip": "^2.0.0", + "lodash": "^4.17.21", + "node-fetch": "^2.6.7", + "open": "^8.4.0", + "pretty-hrtime": "^1.0.3", + "prompts": "^2.4.0", + "regenerator-runtime": "^0.13.7", + "serve-favicon": "^2.5.0", + "slash": "^3.0.0", + "telejson": "^6.0.8", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "watchpack": "^2.2.0", + "webpack": "4", + "ws": "^8.2.3", + "x-default-browser": "^0.4.0" + }, + "dependencies": { + "@types/node": { + "version": "16.18.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", + "dev": true + }, + "@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/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-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-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" + } + }, + "acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "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" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "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 + }, + "enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "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" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "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.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "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" + } + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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 + }, + "ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "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==", + "dev": true + } + } + }, + "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" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "webpack": { + "version": "4.46.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", + "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "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.5.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": { + "watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "dev": true, + "requires": { + "chokidar": "^3.4.1", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.1" + } + } + } + }, + "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" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "@storybook/csf": { + "version": "0.0.2--canary.4566f4d.1", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.2--canary.4566f4d.1.tgz", + "integrity": "sha512-9OVvMVh3t9znYZwb0Svf/YQoxX2gVOeQTGe2bses2yj+a3+OJnCrUF3/hGv6Em7KujtOdL2LL+JnG49oMVGFgQ==", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + }, + "@storybook/csf-tools": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-6.5.13.tgz", + "integrity": "sha512-63Ev+VmBqzwSwfUzbuXOLKBD5dMTK2zBYLQ9anTVw70FuTikwTsGIbPgb098K0vsxRCgxl7KM7NpivHqtZtdjw==", + "dev": true, + "requires": { + "@babel/core": "^7.12.10", + "@babel/generator": "^7.12.11", + "@babel/parser": "^7.12.11", + "@babel/plugin-transform-react-jsx": "^7.12.12", + "@babel/preset-env": "^7.12.11", + "@babel/traverse": "^7.12.11", + "@babel/types": "^7.12.11", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/mdx1-csf": "^0.0.1", + "core-js": "^3.8.2", + "fs-extra": "^9.0.1", + "global": "^4.4.0", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0" + } + }, + "@storybook/docs-tools": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-6.5.13.tgz", + "integrity": "sha512-hB+hk+895ny4SW84j3X5iV55DHs3bCfTOp7cDdcZJdQrlm0wuDb4A6d4ffNC7ZLh9VkUjU6ST4VEV5Bb0Cptow==", + "dev": true, + "requires": { + "@babel/core": "^7.12.10", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/store": "6.5.13", + "core-js": "^3.8.2", + "doctrine": "^3.0.0", + "lodash": "^4.17.21", + "regenerator-runtime": "^0.13.7" + } + }, + "@storybook/instrumenter": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-6.5.13.tgz", + "integrity": "sha512-izRF64BU+gGCP7qE1N3kOVLSv5Xk4M0OWcRmFIXoIS46qNDzmd8hmbkkx3M9wrvw0kcQ97kIyADF+UInbcr/dQ==", + "dev": true, + "requires": { + "@storybook/addons": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/core-events": "6.5.13", + "core-js": "^3.8.2", + "global": "^4.4.0" + } + }, + "@storybook/manager-webpack4": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/manager-webpack4/-/manager-webpack4-6.5.13.tgz", + "integrity": "sha512-pURzS5W3XM0F7bCBWzpl7TRsuy+OXFwLXiWLaexuvo0POZe31Ueo2A1R4rx3MT5Iee8O9mYvG2XTmvK9MlLefQ==", + "dev": true, + "requires": { + "@babel/core": "^7.12.10", + "@babel/plugin-transform-template-literals": "^7.12.1", + "@babel/preset-react": "^7.12.10", + "@storybook/addons": "6.5.13", + "@storybook/core-client": "6.5.13", + "@storybook/core-common": "6.5.13", + "@storybook/node-logger": "6.5.13", + "@storybook/theming": "6.5.13", + "@storybook/ui": "6.5.13", + "@types/node": "^14.0.10 || ^16.0.0", + "@types/webpack": "^4.41.26", + "babel-loader": "^8.0.0", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "css-loader": "^3.6.0", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "find-up": "^5.0.0", + "fs-extra": "^9.0.1", + "html-webpack-plugin": "^4.0.0", + "node-fetch": "^2.6.7", + "pnp-webpack-plugin": "1.6.4", + "read-pkg-up": "^7.0.1", + "regenerator-runtime": "^0.13.7", + "resolve-from": "^5.0.0", + "style-loader": "^1.3.0", + "telejson": "^6.0.8", + "terser-webpack-plugin": "^4.2.3", + "ts-dedent": "^2.0.0", + "url-loader": "^4.1.1", + "util-deprecate": "^1.0.2", + "webpack": "4", + "webpack-dev-middleware": "^3.7.3", + "webpack-virtual-modules": "^0.2.2" + }, + "dependencies": { + "@types/html-minifier-terser": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", + "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==", + "dev": true + }, + "@types/node": { + "version": "16.18.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", + "dev": true + }, + "@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/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-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-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" + } + }, + "acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "clean-css": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", + "dev": true, + "requires": { + "source-map": "~0.6.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 + }, + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true + }, + "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": { + "loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "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" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "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": { + "terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "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==", + "dev": true + } + } + } + } + }, + "html-webpack-plugin": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz", + "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==", + "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.20", + "pretty-error": "^2.1.1", + "tapable": "^1.1.3", + "util.promisify": "1.0.0" + }, + "dependencies": { + "loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } + } + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "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" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "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 + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "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" + } + } + } + }, + "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" + }, + "dependencies": { + "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" + } + } + } + }, + "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.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", + "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", + "dev": true, + "requires": { + "icss-utils": "^4.1.1", + "postcss": "^7.0.32", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.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" + } + }, + "pretty-error": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", + "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", + "dev": true, + "requires": { + "lodash": "^4.17.20", + "renderkid": "^2.0.4" + } + }, + "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" + } + }, + "renderkid": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", + "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", + "dev": true, + "requires": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^3.0.1" + } + }, + "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" + } + }, + "serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "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 + }, + "ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "style-loader": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.3.0.tgz", + "integrity": "sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^2.7.0" + }, + "dependencies": { + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "terser-webpack-plugin": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz", + "integrity": "sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==", + "dev": true, + "requires": { + "cacache": "^15.0.5", + "find-cache-dir": "^3.3.1", + "jest-worker": "^26.5.0", + "p-limit": "^3.0.2", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", + "source-map": "^0.6.1", + "terser": "^5.3.4", + "webpack-sources": "^1.4.3" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "dev": true, + "requires": { + "chokidar": "^3.4.1", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.1" + } + }, + "webpack": { + "version": "4.46.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", + "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "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.5.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": { + "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" + } + }, + "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==", + "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==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "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" + } + }, + "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==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.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" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "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 + }, + "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" + } + }, + "terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + } + }, + "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" + } + } + } + }, + "webpack-dev-middleware": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", + "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", + "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-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" + } + }, + "webpack-virtual-modules": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.2.2.tgz", + "integrity": "sha512-kDUmfm3BZrei0y+1NTHJInejzxfhtU8eDj2M7OKb2IWrPFAeO1SOH2KuQ68MSZu9IGEHcxbkKKR1v18FrUSOmA==", + "dev": true, + "requires": { + "debug": "^3.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "@storybook/manager-webpack5": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/manager-webpack5/-/manager-webpack5-6.5.13.tgz", + "integrity": "sha512-lQEZacSfeRsbqfJE7TVk35Hm1vkr0I2i1pyYqM+4862gRbMh1nJQXbJ5GqZ+Fo/bf0ZfyFZ32jGDIJAFdlpkuQ==", + "dev": true, + "requires": { + "@babel/core": "^7.12.10", + "@babel/plugin-transform-template-literals": "^7.12.1", + "@babel/preset-react": "^7.12.10", + "@storybook/addons": "6.5.13", + "@storybook/core-client": "6.5.13", + "@storybook/core-common": "6.5.13", + "@storybook/node-logger": "6.5.13", + "@storybook/theming": "6.5.13", + "@storybook/ui": "6.5.13", + "@types/node": "^14.0.10 || ^16.0.0", + "babel-loader": "^8.0.0", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "css-loader": "^5.0.1", + "express": "^4.17.1", + "find-up": "^5.0.0", + "fs-extra": "^9.0.1", + "html-webpack-plugin": "^5.0.0", + "node-fetch": "^2.6.7", + "process": "^0.11.10", + "read-pkg-up": "^7.0.1", + "regenerator-runtime": "^0.13.7", + "resolve-from": "^5.0.0", + "style-loader": "^2.0.0", + "telejson": "^6.0.8", + "terser-webpack-plugin": "^5.0.3", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "webpack": "^5.9.0", + "webpack-dev-middleware": "^4.1.0", + "webpack-virtual-modules": "^0.4.1" + }, + "dependencies": { + "@types/node": { + "version": "16.18.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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 + }, + "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.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@storybook/mdx1-csf": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@storybook/mdx1-csf/-/mdx1-csf-0.0.1.tgz", + "integrity": "sha512-4biZIWWzoWlCarMZmTpqcJNgo/RBesYZwGFbQeXiGYsswuvfWARZnW9RE9aUEMZ4XPn7B1N3EKkWcdcWe/K2tg==", + "dev": true, + "requires": { + "@babel/generator": "^7.12.11", + "@babel/parser": "^7.12.11", + "@babel/preset-env": "^7.12.11", + "@babel/types": "^7.12.11", + "@mdx-js/mdx": "^1.6.22", + "@types/lodash": "^4.14.167", + "js-string-escape": "^1.0.1", + "loader-utils": "^2.0.0", + "lodash": "^4.17.21", + "prettier": ">=2.2.1 <=2.3.0", + "ts-dedent": "^2.0.0" + }, + "dependencies": { + "prettier": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.0.tgz", + "integrity": "sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w==", + "dev": true + } + } + }, + "@storybook/node-logger": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-6.5.13.tgz", + "integrity": "sha512-/r5aVZAqZRoy5FyNk/G4pj7yKJd3lJfPbAaOHVROv2IF7PJP/vtRaDkcfh0g2U6zwuDxGIqSn80j+qoEli9m5A==", + "dev": true, + "requires": { + "@types/npmlog": "^4.1.2", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "npmlog": "^5.0.1", + "pretty-hrtime": "^1.0.3" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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 + }, + "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.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@storybook/postinstall": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-6.5.13.tgz", + "integrity": "sha512-qmqP39FGIP5NdhXC5IpAs9cFoYx9fg1psoQKwb9snYb98eVQU31uHc1W2MBUh3lG4AjAm7pQaXJci7ti4jOh3g==", + "dev": true, + "requires": { + "core-js": "^3.8.2" + } + }, + "@storybook/preview-web": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/preview-web/-/preview-web-6.5.13.tgz", + "integrity": "sha512-GNNYVzw4SmRua3dOc52Ye6Us4iQbq5GKQ56U3iwnzZM3TBdJB+Rft94Fn1/pypHujEHS8hl5Xgp9td6C1lLCow==", + "dev": true, + "requires": { + "@storybook/addons": "6.5.13", + "@storybook/channel-postmessage": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/store": "6.5.13", + "ansi-to-html": "^0.6.11", + "core-js": "^3.8.2", + "global": "^4.4.0", + "lodash": "^4.17.21", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "unfetch": "^4.2.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/react": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/react/-/react-6.5.13.tgz", + "integrity": "sha512-4gO8qihEkVZ8RNm9iQd7G2iZz4rRAHizJ6T5m58Sn21fxfyg9zAMzhgd0JzXuPXR8lTTj4AvRyPv1Qx7b43smg==", + "dev": true, + "requires": { + "@babel/preset-flow": "^7.12.1", + "@babel/preset-react": "^7.12.10", + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", + "@storybook/addons": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/core": "6.5.13", + "@storybook/core-common": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/docs-tools": "6.5.13", + "@storybook/node-logger": "6.5.13", + "@storybook/react-docgen-typescript-plugin": "1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0", + "@storybook/semver": "^7.3.2", + "@storybook/store": "6.5.13", + "@types/estree": "^0.0.51", + "@types/node": "^14.14.20 || ^16.0.0", + "@types/webpack-env": "^1.16.0", + "acorn": "^7.4.1", + "acorn-jsx": "^5.3.1", + "acorn-walk": "^7.2.0", + "babel-plugin-add-react-displayname": "^0.0.5", + "babel-plugin-react-docgen": "^4.2.1", + "core-js": "^3.8.2", + "escodegen": "^2.0.0", + "fs-extra": "^9.0.1", + "global": "^4.4.0", + "html-tags": "^3.1.0", + "lodash": "^4.17.21", + "prop-types": "^15.7.2", + "react-element-to-jsx-string": "^14.3.4", + "react-refresh": "^0.11.0", + "read-pkg-up": "^7.0.1", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "webpack": ">=4.43.0 <6.0.0" + }, + "dependencies": { + "@types/node": { + "version": "16.18.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", + "dev": true + } + } + }, + "@storybook/react-docgen-typescript-plugin": { + "version": "1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0", + "resolved": "https://registry.npmjs.org/@storybook/react-docgen-typescript-plugin/-/react-docgen-typescript-plugin-1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0.tgz", + "integrity": "sha512-eVg3BxlOm2P+chijHBTByr90IZVUtgRW56qEOLX7xlww2NBuKrcavBlcmn+HH7GIUktquWkMPtvy6e0W0NgA5w==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "endent": "^2.0.1", + "find-cache-dir": "^3.3.1", + "flat-cache": "^3.0.4", + "micromatch": "^4.0.2", + "react-docgen-typescript": "^2.1.1", + "tslib": "^2.0.0" + }, + "dependencies": { + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "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" + } + }, + "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" + } + } + } + }, + "@storybook/router": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.5.13.tgz", + "integrity": "sha512-sf5aogfirH5ucD0d0hc2mKf2iyWsZsvXhr5kjxUQmgkcoflkGUWhc34sbSQVRQ1i8K5lkLIDH/q2s1Zr2SbzhQ==", + "dev": true, + "requires": { + "@storybook/client-logger": "6.5.13", + "core-js": "^3.8.2", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7" + } + }, + "@storybook/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==", + "dev": true, + "requires": { + "core-js": "^3.6.5", + "find-up": "^4.1.0" + }, + "dependencies": { + "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" + } + }, + "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" + } + } + } + }, + "@storybook/source-loader": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/source-loader/-/source-loader-6.5.13.tgz", + "integrity": "sha512-tHuM8PfeB/0m+JigbaFp+Ld0euFH+fgOObH2W9rjEXy5vnwmaeex/JAdCprv4oL+LcDQEERqNULUUNIvbcTPAg==", + "dev": true, + "requires": { + "@storybook/addons": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "core-js": "^3.8.2", + "estraverse": "^5.2.0", + "global": "^4.4.0", + "loader-utils": "^2.0.0", + "lodash": "^4.17.21", + "prettier": ">=2.2.1 <=2.3.0", + "regenerator-runtime": "^0.13.7" + }, + "dependencies": { + "prettier": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.0.tgz", + "integrity": "sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w==", + "dev": true + } + } + }, + "@storybook/store": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/store/-/store-6.5.13.tgz", + "integrity": "sha512-GG6lm+8fBX1tNUnX7x3raBOjYhhf14bPWLtYiPlxDTFEMs3sJte7zWKZq6NQ79MoBLL6jjzTeolBfDCBw6fiWQ==", + "dev": true, + "requires": { + "@storybook/addons": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "regenerator-runtime": "^0.13.7", + "slash": "^3.0.0", + "stable": "^0.1.8", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/telemetry": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-6.5.13.tgz", + "integrity": "sha512-PFJEfGbunmfFWabD3rdCF8EHH+45578OHOkMPpXJjqXl94vPQxUH2XTVKQgEQJbYrgX0Vx9Z4tSkdMHuzYDbWQ==", + "dev": true, + "requires": { + "@storybook/client-logger": "6.5.13", + "@storybook/core-common": "6.5.13", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "detect-package-manager": "^2.0.1", + "fetch-retry": "^5.0.2", + "fs-extra": "^9.0.1", + "global": "^4.4.0", + "isomorphic-unfetch": "^3.1.0", + "nanoid": "^3.3.1", + "read-pkg-up": "^7.0.1", + "regenerator-runtime": "^0.13.7" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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 + }, + "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.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@storybook/testing-library": { + "version": "0.0.13", + "resolved": "https://registry.npmjs.org/@storybook/testing-library/-/testing-library-0.0.13.tgz", + "integrity": "sha512-vRMeIGer4EjJkTgI8sQyK9W431ekPWYCWL//OmSDJ64IT3h7FnW7Xg6p+eqM3oII98/O5pcya5049GxnjaPtxw==", + "dev": true, + "requires": { + "@storybook/client-logger": "^6.4.0", + "@storybook/instrumenter": "^6.4.0", + "@testing-library/dom": "^8.3.0", + "@testing-library/user-event": "^13.2.1", + "ts-dedent": "^2.2.0" + } + }, + "@storybook/theming": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.5.13.tgz", + "integrity": "sha512-oif5NGFAUQhizo50r+ctw2hZNLWV4dPHai+L/gFvbaSeRBeHSNkIcMoZ2FlrO566HdGZTDutYXcR+xus8rI28g==", + "dev": true, + "requires": { + "@storybook/client-logger": "6.5.13", + "core-js": "^3.8.2", + "memoizerific": "^1.11.3", + "regenerator-runtime": "^0.13.7" + } + }, + "@storybook/ui": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/ui/-/ui-6.5.13.tgz", + "integrity": "sha512-MklJuSg4Bc+MWjwhZVmZhJaucaeEBUMMa2V9oRWbIgZOdRHqdW72S2vCbaarDAYfBQdnfaoq1GkSQiw+EnWOzA==", + "dev": true, + "requires": { + "@storybook/addons": "6.5.13", + "@storybook/api": "6.5.13", + "@storybook/channels": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/components": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/router": "6.5.13", + "@storybook/semver": "^7.3.2", + "@storybook/theming": "6.5.13", + "core-js": "^3.8.2", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "resolve-from": "^5.0.0" + } + }, + "@swc/helpers": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.11.tgz", + "integrity": "sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==", + "requires": { + "tslib": "^2.4.0" + } + }, + "@tabler/icons": { + "version": "1.111.0", + "resolved": "https://registry.npmjs.org/@tabler/icons/-/icons-1.111.0.tgz", + "integrity": "sha512-TZWYiMT5ccqfHxRE0Qtgvl+sGsMbNkrv7cJMt/tm8TN9l/CDXx/o7d8uAwUN+3PAlSFfF5e/rD1bi1WJs2xNIA==" + }, + "@tanstack/match-sorter-utils": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@tanstack/match-sorter-utils/-/match-sorter-utils-8.1.1.tgz", + "integrity": "sha512-IdmEekEYxQsoLOR0XQyw3jD1GujBpRRYaGJYQUw1eOT1eUugWxdc7jomh1VQ1EKHcdwDLpLaCz/8y4KraU4T9A==", + "requires": { + "remove-accents": "0.4.2" + } + }, + "@tanstack/query-core": { + "version": "4.15.1", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.15.1.tgz", + "integrity": "sha512-+UfqJsNbPIVo0a9ANW0ZxtjiMfGLaaoIaL9vZeVycvmBuWywJGtSi7fgPVMCPdZQFOzMsaXaOsDtSKQD5xLRVQ==" + }, + "@tanstack/react-query": { + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.16.1.tgz", + "integrity": "sha512-PDE9u49wSDykPazlCoLFevUpceLjQ0Mm8i6038HgtTEKb/aoVnUZdlUP7C392ds3Cd75+EGlHU7qpEX06R7d9Q==", + "requires": { + "@tanstack/query-core": "4.15.1", + "use-sync-external-store": "^1.2.0" + } + }, + "@tanstack/react-query-devtools": { + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-4.16.1.tgz", + "integrity": "sha512-VrDYLmG+OOcvGSZL5avG4R8jhqeMFP7pzW2sh2BWEV9UfI+aocG+CW8y8ygacxuKy48m8Tyo/xfe8H1z9BGb+g==", + "requires": { + "@tanstack/match-sorter-utils": "8.1.1", + "superjson": "^1.10.0", + "use-sync-external-store": "^1.2.0" + } + }, + "@testing-library/dom": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.19.0.tgz", + "integrity": "sha512-6YWYPPpxG3e/xOo6HIWwB/58HukkwIVTOaZ0VwdMVjhRUX/01E4FtQbck9GazOOj7MXHc5RBzMrU86iBJHbI+A==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^4.2.0", + "aria-query": "^5.0.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.4.4", + "pretty-format": "^27.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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 + }, + "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.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@testing-library/user-event": { + "version": "13.5.0", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-13.5.0.tgz", + "integrity": "sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.12.5" + } + }, + "@types/aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==", + "dev": true + }, + "@types/eslint": { + "version": "8.4.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", + "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true + }, + "@types/glob": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.0.0.tgz", + "integrity": "sha512-l6NQsDDyQUVeoTynNpC9uRvCUint/gSUXQA2euwmTuWGvPY5LSDUu6tkCtJB2SvGQlJQzLaKqcGZP4//7EDveA==", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/hast": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz", + "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "dev": true + }, + "@types/is-function": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/is-function/-/is-function-1.0.1.tgz", + "integrity": "sha512-A79HEEiwXTFtfY+Bcbo58M2GRYzCr9itHWzbzHVFNEYCcoU/MMGwYYf721gBrnhpj1s6RGVVha/IgNFnR0Iw/Q==", + "dev": true + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "@types/lodash": { + "version": "4.14.189", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.189.tgz", + "integrity": "sha512-kb9/98N6X8gyME9Cf7YaqIMvYGnBSWqEci6tiettE6iJWH1XdJz/PO8LB0GtLCG7x8dU3KWhZT+lA1a35127tA==", + "dev": true + }, + "@types/mdast": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", + "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "dev": true + }, + "@types/node": { + "version": "18.11.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", + "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", + "dev": true + }, + "@types/node-fetch": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz", + "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==", + "dev": true, + "requires": { + "@types/node": "*", + "form-data": "^3.0.0" + } + }, + "@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "@types/npmlog": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@types/npmlog/-/npmlog-4.1.4.tgz", + "integrity": "sha512-WKG4gTr8przEZBiJ5r3s8ZIAoMXNbOgQ+j/d5O4X3x6kZJRLNvyUJuUK/KoG3+8BaOHPhp2m7WC6JKKeovDSzQ==", + "dev": true + }, + "@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==" + }, + "@types/parse5": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", + "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==", + "dev": true + }, + "@types/pretty-hrtime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/pretty-hrtime/-/pretty-hrtime-1.0.1.tgz", + "integrity": "sha512-VjID5MJb1eGKthz2qUerWT8+R4b9N+CHvGCzg9fn4kWZgaF9AhdYikQio3R7wV8YY1NsQKPaCwKz1Yff+aHNUQ==", + "dev": true + }, + "@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", + "dev": true + }, + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "@types/react": { + "version": "18.0.25", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.25.tgz", + "integrity": "sha512-xD6c0KDT4m7n9uD4ZHi02lzskaiqcBxf4zi+tXZY98a04wvc0hi/TcCPC2FOESZi51Nd7tlUeOJY8RofL799/g==", + "dev": true, + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-dom": { + "version": "18.0.9", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.9.tgz", + "integrity": "sha512-qnVvHxASt/H7i+XG1U1xMiY5t+IHcPGUK7TDMDzom08xa7e86eCeKOiLZezwCKVxJn6NEiiy2ekgX8aQssjIKg==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, + "@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", + "dev": true + }, + "@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, + "@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.8", + "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.8.tgz", + "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==", + "dev": true + }, + "@types/uglify-js": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.17.1.tgz", + "integrity": "sha512-GkewRA4i5oXacU/n4MA9+bLgt5/L3F1mKrYvFGm7r2ouLXhRKjuWwo9XHNnbx6WF3vlGW21S3fCvgqxvxXXc5g==", + "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/unist": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", + "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==", + "dev": true + }, + "@types/webpack": { + "version": "4.41.33", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.33.tgz", + "integrity": "sha512-PPajH64Ft2vWevkerISMtnZ8rTs4YmRbs+23c402J0INmxDKCrhZNvwZYtzx96gY2wAtXdrK1BS2fiC8MlLr3g==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/tapable": "^1", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "anymatch": "^3.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 + } + } + }, + "@types/webpack-env": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.18.0.tgz", + "integrity": "sha512-56/MAlX5WMsPVbOg7tAxnYvNYMMWr/QJiIp6BxVSW3JJXUVzzOn64qW8TzQyMSqSUFM2+PVI4aUHcHOzIz/1tg==", + "dev": true + }, + "@types/webpack-sources": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.0.tgz", + "integrity": "sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true + } + } + }, + "@types/yargs": { + "version": "15.0.14", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", + "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.43.0.tgz", + "integrity": "sha512-wNPzG+eDR6+hhW4yobEmpR36jrqqQv1vxBq5LJO3fBAktjkvekfr4BRl+3Fn1CM/A+s8/EiGUbOMDoYqWdbtXA==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/type-utils": "5.43.0", + "@typescript-eslint/utils": "5.43.0", + "debug": "^4.3.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/experimental-utils": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.43.0.tgz", + "integrity": "sha512-WkT637CumTJbm/hRbFfnHBMgfUYTKr08LitVsD7gQId7bi6rnkx3pu3jac67lmp5ObW4MpJ9SNFZAIOUB/Qbsw==", + "dev": true, + "requires": { + "@typescript-eslint/utils": "5.43.0" + } + }, + "@typescript-eslint/parser": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.43.0.tgz", + "integrity": "sha512-2iHUK2Lh7PwNUlhFxxLI2haSDNyXvebBO9izhjhMoDC+S3XI9qt2DGFUsiJ89m2k7gGYch2aEpYqV5F/+nwZug==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/typescript-estree": "5.43.0", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.43.0.tgz", + "integrity": "sha512-XNWnGaqAtTJsUiZaoiGIrdJYHsUOd3BZ3Qj5zKp9w6km6HsrjPk/TGZv0qMTWyWj0+1QOqpHQ2gZOLXaGA9Ekw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/visitor-keys": "5.43.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.43.0.tgz", + "integrity": "sha512-K21f+KY2/VvYggLf5Pk4tgBOPs2otTaIHy2zjclo7UZGLyFH86VfUOm5iq+OtDtxq/Zwu2I3ujDBykVW4Xtmtg==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "5.43.0", + "@typescript-eslint/utils": "5.43.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/types": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.43.0.tgz", + "integrity": "sha512-jpsbcD0x6AUvV7tyOlyvon0aUsQpF8W+7TpJntfCUWU1qaIKu2K34pMwQKSzQH8ORgUrGYY6pVIh1Pi8TNeteg==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.43.0.tgz", + "integrity": "sha512-BZ1WVe+QQ+igWal2tDbNg1j2HWUkAa+CVqdU79L4HP9izQY6CNhXfkNwd1SS4+sSZAP/EthI1uiCSY/+H0pROg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/visitor-keys": "5.43.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/utils": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.43.0.tgz", + "integrity": "sha512-8nVpA6yX0sCjf7v/NDfeaOlyaIIqL7OaIGOWSPFqUKK59Gnumd3Wa+2l8oAaYO2lk0sO+SbWFWRSvhu8gLGv4A==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/typescript-estree": "5.43.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" + }, + "dependencies": { + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.43.0.tgz", + "integrity": "sha512-icl1jNH/d18OVHLfcwdL3bWUKsBeIiKYTGxMJCoGe7xFht+E4QgzOqoWYrU8XSLJWhVw8nTacbm03v23J/hFTg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.43.0", + "eslint-visitor-keys": "^3.3.0" + } + }, + "@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "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" + }, + "dependencies": { + "@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/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/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" + } + } + } + }, + "@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" + }, + "dependencies": { + "@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/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-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@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" + }, + "dependencies": { + "@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-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/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@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 + }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true + }, + "address": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.1.tgz", + "integrity": "sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA==", + "dev": true + }, + "adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "airbnb-js-shims": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/airbnb-js-shims/-/airbnb-js-shims-2.2.1.tgz", + "integrity": "sha512-wJNXPH66U2xjgo1Zwyjf9EydvJ2Si94+vSdk6EERcBfB2VZkeltpqIats0cqIZMLCXP3zcyaUKGYQeIBT6XjsQ==", + "dev": true, + "requires": { + "array-includes": "^3.0.3", + "array.prototype.flat": "^1.2.1", + "array.prototype.flatmap": "^1.2.1", + "es5-shim": "^4.5.13", + "es6-shim": "^0.35.5", + "function.prototype.name": "^1.1.0", + "globalthis": "^1.0.0", + "object.entries": "^1.1.0", + "object.fromentries": "^2.0.0 || ^1.0.0", + "object.getownpropertydescriptors": "^2.0.3", + "object.values": "^1.1.0", + "promise.allsettled": "^1.0.0", + "promise.prototype.finally": "^3.1.0", + "string.prototype.matchall": "^4.0.0 || ^3.0.1", + "string.prototype.padend": "^3.0.0", + "string.prototype.padstart": "^3.0.0", + "symbol.prototype.description": "^1.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "dev": true + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, + "ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "requires": { + "string-width": "^4.1.0" + } + }, + "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-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + } + } + }, + "ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "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" + } + }, + "ansi-to-html": { + "version": "0.6.15", + "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.6.15.tgz", + "integrity": "sha512-28ijx2aHJGdzbs+O5SNQF65r6rrKYnkuwTYm8lZlChuoJ9P1vVzIpWO20sQTqTPDXYp6NFwk326vApTtLVFXpQ==", + "dev": true, + "requires": { + "entities": "^2.0.0" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "app-root-dir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/app-root-dir/-/app-root-dir-1.0.2.tgz", + "integrity": "sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==", + "dev": true + }, + "aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + }, + "are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.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 + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + } + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "aria-hidden": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.2.tgz", + "integrity": "sha512-6y/ogyDTk/7YAe91T3E2PR1ALVKyM2QbTio5HwM+N1Q6CMlCKhvClyIjkckBswa0f2xJhjsfzIGa1yVSe1UMVA==", + "requires": { + "tslib": "^2.0.0" + } + }, + "aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dev": true, + "requires": { + "deep-equal": "^2.0.5" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "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": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "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": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", + "dev": true, + "optional": true + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "array-includes": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "is-string": "^1.0.7" + } + }, + "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 + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "dev": true + }, + "array.prototype.flat": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + } + }, + "array.prototype.flatmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + } + }, + "array.prototype.map": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.5.tgz", + "integrity": "sha512-gfaKntvwqYIuC7mLLyv2wzZIJqrRhn5PZ9EfFejSx6a78sV7iDsGpG9P+3oUPtm1Rerqm6nrKS4FYuTIvWfo3g==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" + } + }, + "array.prototype.reduce": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz", + "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" + } + }, + "arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true + }, + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "dev": true + }, + "ast-types": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", + "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", + "dev": true, + "requires": { + "tslib": "^2.0.1" + } + }, + "ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", + "dev": true + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "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, + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "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==", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "autoprefixer": { + "version": "9.8.8", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", + "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", + "dev": true, + "requires": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "picocolors": "^0.2.1", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + } + }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true + }, + "axe-core": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.5.2.tgz", + "integrity": "sha512-u2MVsXfew5HBvjsczCv+xlwdNnB1oQR9HlAcsejZttNjKKSkeDNVwB1vMThIUIFI9GoT57Vtk8iQLwqOfAkboA==", + "dev": true + }, + "axobject-query": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", + "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", + "dev": true + }, + "babel-loader": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", + "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", + "dev": true, + "requires": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "dependencies": { + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "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" + } + }, + "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.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "babel-plugin-add-react-displayname": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/babel-plugin-add-react-displayname/-/babel-plugin-add-react-displayname-0.0.5.tgz", + "integrity": "sha512-LY3+Y0XVDYcShHHorshrDbt4KFWL4bSeniCtl4SYZbask+Syngk1uMPCeN9+nSiZo6zX5s0RTq/J9Pnaaf/KHw==", + "dev": true + }, + "babel-plugin-apply-mdx-type-prop": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", + "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@mdx-js/util": "1.6.22" + }, + "dependencies": { + "@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==", + "dev": true + } + } + }, + "babel-plugin-extract-import-names": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz", + "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + }, + "dependencies": { + "@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==", + "dev": true + } + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + } + }, + "babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "requires": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + } + }, + "babel-plugin-named-exports-order": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-named-exports-order/-/babel-plugin-named-exports-order-0.0.2.tgz", + "integrity": "sha512-OgOYHOLoRK+/mvXU9imKHlG6GkPLYrUCvFXG/CM93R/aNNO8pOOF4aS+S8CCHMDQoNSeiOYEZb/G6RwL95Jktw==", + "dev": true + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.3", + "semver": "^6.1.1" + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", + "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.3", + "core-js-compat": "^3.25.1" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.3" + } + }, + "babel-plugin-react-docgen": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/babel-plugin-react-docgen/-/babel-plugin-react-docgen-4.2.1.tgz", + "integrity": "sha512-UQ0NmGHj/HAqi5Bew8WvNfCk8wSsmdgNd8ZdMjBCICtyCJCq9LiqgqvjCYe570/Wg7AQArSq1VQ60Dd/CHN7mQ==", + "dev": true, + "requires": { + "ast-types": "^0.14.2", + "lodash": "^4.17.15", + "react-docgen": "^5.0.0" + } + }, + "bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "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": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + } + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "better-opn": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-2.1.1.tgz", + "integrity": "sha512-kIPXZS5qwyKiX/HcRvDYfmBQUa8XP17I0mYZZ0y4UhpYOSvtsLHDYqmomS+Mj20aDvD3knEiQ0ecQy2nhio3yA==", + "dev": true, + "requires": { + "open": "^7.0.3" + }, + "dependencies": { + "open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dev": true, + "requires": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + } + } + } + }, + "big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "dev": true, + "optional": true + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "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" + } + }, + "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.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + }, + "body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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 + }, + "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.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "bplist-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.1.1.tgz", + "integrity": "sha512-2AEM0FXy8ZxVLBuqX0hqt1gDwcnz2zygEkQ6zaD5Wko/sB9paUNwlpawrFtKeHUAQUOzjVy9AO4oeonqIHKA9Q==", + "dev": true, + "optional": true, + "requires": { + "big-integer": "^1.6.7" + } + }, + "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": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "dev": true + }, + "browser-assert": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/browser-assert/-/browser-assert-1.2.1.tgz", + "integrity": "sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==", + "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.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dev": true, + "requires": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "dev": true, + "requires": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "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 + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + } + } + }, + "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.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" + } + }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + } + } + }, + "buffer-from": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.2.tgz", + "integrity": "sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg==" + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "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": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", + "dev": true + }, + "builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "requires": { + "semver": "^7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true + }, + "c8": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/c8/-/c8-7.12.0.tgz", + "integrity": "sha512-CtgQrHOkyxr5koX1wEUmN/5cfDa2ckbHRA4Gy5LAL0zaCFtVWJS5++n+w4/sr2GWGerBxgTjpKeDclk/Qk6W/A==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@istanbuljs/schema": "^0.1.3", + "find-up": "^5.0.0", + "foreground-child": "^2.0.0", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-reports": "^3.1.4", + "rimraf": "^3.0.2", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^9.0.0", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9" + } + }, + "cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "dev": true, + "requires": { + "@npmcli/fs": "^1.0.0", + "@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.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "dependencies": { + "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" + } + } + } + }, + "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" + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "call-me-maybe": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", + "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==", + "dev": true + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, + "camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "requires": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==", + "dev": true, + "optional": 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": "sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==", + "dev": true, + "optional": true + } + } + }, + "caniuse-lite": { + "version": "1.0.30001431", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz", + "integrity": "sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==" + }, + "capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "dev": true, + "requires": { + "rsvp": "^4.8.4" + } + }, + "case-sensitive-paths-webpack-plugin": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", + "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", + "dev": true + }, + "ccount": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", + "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", + "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" + }, + "dependencies": { + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + } + } + }, + "character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "dev": true + }, + "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==", + "dev": true + }, + "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==", + "dev": true + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "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": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "requires": { + "is-descriptor": "^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": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "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": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "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 + } + } + }, + "clean-css": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz", + "integrity": "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==", + "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 + }, + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "dev": true, + "requires": { + "@colors/colors": "1.5.0", + "string-width": "^4.2.0" + } + }, + "cli-truncate": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "dev": true, + "requires": { + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "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" + } + }, + "clsx": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", + "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==" + }, + "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==", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", + "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true + }, + "colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "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" + } + }, + "comma-separated-tokens": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", + "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", + "dev": true + }, + "commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true + }, + "common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "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" + }, + "dependencies": { + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "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": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", + "dev": true + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "requires": { + "safe-buffer": "5.2.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "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.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "copy-anything": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.2.tgz", + "integrity": "sha512-CzATjGXzUQ0EvuvgOCI6A4BGOo2bcVx8B+eC2nF862iv9fopnPQwlrbACakNCHRIJbCSBj+J/9JeDf60k64MkA==", + "requires": { + "is-what": "^4.1.6" + } + }, + "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" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "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" + } + } + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", + "dev": true + }, + "core-js": { + "version": "3.26.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.26.1.tgz", + "integrity": "sha512-21491RRQVzUn0GGM9Z1Jrpr6PNPxPi+Za8OM9q4tksTSnlbXXGKK1nXNg/QvwFYettXvSX6zWKCtHHfjN4puyA==", + "dev": true + }, + "core-js-compat": { + "version": "3.26.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz", + "integrity": "sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==", + "dev": true, + "requires": { + "browserslist": "^4.21.4" + } + }, + "core-js-pure": { + "version": "3.26.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.26.1.tgz", + "integrity": "sha512-VVXcDpp/xJ21KdULRq/lXdLzQAtX7+37LzpyfFM973il0tWSsDEoyzG38G14AjTpK9VTfiNM9jnFauq/CpaWGQ==", + "dev": true + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "cp-file": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-7.0.0.tgz", + "integrity": "sha512-0Cbj7gyvFVApzpK/uhCtQ/9kE9UnYpxMzaq5nQQC/Dh4iaj5fxp7iEFIullrYwzj8nf0qnsI1Qsx34hAeAebvw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "nested-error-stacks": "^2.0.0", + "p-event": "^4.1.0" + }, + "dependencies": { + "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" + } + } + } + }, + "cpy": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/cpy/-/cpy-8.1.2.tgz", + "integrity": "sha512-dmC4mUesv0OYH2kNFEidtf/skUwv4zePmGeepjyyJ0qTo5+8KhA1o99oIAwVVLzQMAeDJml74d6wPPKb6EZUTg==", + "dev": true, + "requires": { + "arrify": "^2.0.1", + "cp-file": "^7.0.0", + "globby": "^9.2.0", + "has-glob": "^1.0.0", + "junk": "^3.1.0", + "nested-error-stacks": "^2.1.0", + "p-all": "^2.1.0", + "p-filter": "^2.1.0", + "p-map": "^3.0.0" + }, + "dependencies": { + "@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", + "dev": true + }, + "@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "dev": true, + "requires": { + "array-uniq": "^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, + "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "dir-glob": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", + "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", + "dev": true, + "requires": { + "path-type": "^3.0.0" + } + }, + "fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "dev": true, + "requires": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "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": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "globby": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz", + "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^1.0.2", + "dir-glob": "^2.2.2", + "fast-glob": "^2.2.6", + "glob": "^7.1.3", + "ignore": "^4.0.3", + "pify": "^4.0.1", + "slash": "^2.0.0" + } + }, + "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 + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "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" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true + } + } + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "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" + } + }, + "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": "5.2.7", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", + "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", + "dev": true, + "requires": { + "icss-utils": "^5.1.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.15", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.5" + }, + "dependencies": { + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "postcss": { + "version": "8.4.19", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz", + "integrity": "sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==", + "dev": true, + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true + }, + "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": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", + "dev": true, + "optional": 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": "sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==", + "dev": true + }, + "damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "optional": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", + "dev": true + }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true + }, + "deep-equal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.1.0.tgz", + "integrity": "sha512-2pxgvWu3Alv1PoWEyVg7HS8YhGlUFUV7N5oOvfL6d+7xAmLSemMwv/c8Zv/i9KFzxV5Kt5CAvQc70fLwVuf4UA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.2", + "get-intrinsic": "^1.1.3", + "is-arguments": "^1.1.1", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.8" + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "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-browser-id": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-1.0.4.tgz", + "integrity": "sha512-qPy925qewwul9Hifs+3sx1ZYn14obHxpkX+mPD369w4Rzg+YkJBgi3SOvwUq81nWSjqGUegIgEPwD8u+HUnxlw==", + "dev": true, + "optional": true, + "requires": { + "bplist-parser": "^0.1.0", + "meow": "^3.1.0", + "untildify": "^2.0.0" + } + }, + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true + }, + "define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "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" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "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.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true + }, + "detab": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", + "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", + "dev": true, + "requires": { + "repeat-string": "^1.5.4" + } + }, + "detect-package-manager": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-package-manager/-/detect-package-manager-2.0.1.tgz", + "integrity": "sha512-j/lJHyoLlWi6G1LDdLgvUtz60Zo5GEj+sVYtTVXnYLDPuzgC3llMxonXym9zIwhhUII8vjdw0LXxavpLqTbl1A==", + "dev": true, + "requires": { + "execa": "^5.1.1" + } + }, + "detect-port": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", + "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", + "dev": true, + "requires": { + "address": "^1.0.1", + "debug": "4" + } + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "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" + } + }, + "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-accessibility-api": { + "version": "0.5.14", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.14.tgz", + "integrity": "sha512-NMt+m9zFMPZe0JcY9gN224Qvk6qLIdqex29clBvc/y75ZBX9YA9wNK3frsYvu2DI1xcCIwxwnX+TlsJ2DSOADg==", + "dev": true + }, + "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-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", + "dev": true + }, + "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": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" + }, + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "dev": true + }, + "dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "requires": { + "readable-stream": "^2.0.2" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "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" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", + "dev": true + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "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==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "endent": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/endent/-/endent-2.1.0.tgz", + "integrity": "sha512-r8VyPX7XL8U01Xgnb1CjZ3XV+z90cXIJ9JPE/R9SEC9vpw2P6CfsRPJmp20DppC5N7ZAMCmjYkJIa744Iyg96w==", + "dev": true, + "requires": { + "dedent": "^0.7.0", + "fast-json-parse": "^1.0.3", + "objectorarray": "^1.0.5" + } + }, + "enhanced-resolve": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", + "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "dependencies": { + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + } + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + }, + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "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==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "dev": true, + "requires": { + "stackframe": "^1.3.4" + } + }, + "es-abstract": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", + "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + } + }, + "es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "dev": true + }, + "es-get-iterator": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", + "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.0", + "has-symbols": "^1.0.1", + "is-arguments": "^1.1.0", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.5", + "isarray": "^2.0.5" + } + }, + "es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true + }, + "es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "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" + } + }, + "es5-shim": { + "version": "4.6.7", + "resolved": "https://registry.npmjs.org/es5-shim/-/es5-shim-4.6.7.tgz", + "integrity": "sha512-jg21/dmlrNQI7JyyA2w7n+yifSxBng0ZralnSfVZjoCawgNTCnS+yBCyVM9DL5itm7SUnDGgv7hcq2XCZX4iRQ==", + "dev": true + }, + "es6-shim": { + "version": "0.35.6", + "resolved": "https://registry.npmjs.org/es6-shim/-/es6-shim-0.35.6.tgz", + "integrity": "sha512-EmTr31wppcaIAgblChZiuN/l9Y7DPyw8Xtbg7fIVngn6zMW+IEBJDJngeKC3x6wr0V/vcA2wqeFnaw1bFJbDdA==", + "dev": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + }, + "escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } + } + }, + "eslint": { + "version": "8.22.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.22.0.tgz", + "integrity": "sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.10.4", + "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.3", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "globby": "^11.1.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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 + }, + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "globals": { + "version": "13.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", + "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "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 + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "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" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "eslint-config-next": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.0.3.tgz", + "integrity": "sha512-i2JoQP8gGv303GjXTonA27fm1ckRRkRoAP1WYEQgN0D2DDoFeBPqlJgHlMHnXKWjmNct/sW8jQEvy9am2juc8g==", + "dev": true, + "requires": { + "@next/eslint-plugin-next": "13.0.3", + "@rushstack/eslint-patch": "^1.1.3", + "@typescript-eslint/parser": "^5.42.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^2.7.1", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.31.7", + "eslint-plugin-react-hooks": "^4.5.0" + } + }, + "eslint-config-prettier": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "dev": true + }, + "eslint-config-standard": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz", + "integrity": "sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==", + "dev": true + }, + "eslint-config-standard-with-typescript": { + "version": "23.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-23.0.0.tgz", + "integrity": "sha512-iaaWifImn37Z1OXbNW1es7KI+S7D408F9ys0bpaQf2temeBWlvb0Nc5qHkOgYaRb5QxTZT32GGeN1gtswASOXA==", + "dev": true, + "requires": { + "@typescript-eslint/parser": "^5.0.0", + "eslint-config-standard": "17.0.0" + } + }, + "eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-import-resolver-typescript": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz", + "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==", + "dev": true, + "requires": { + "debug": "^4.3.4", + "glob": "^7.2.0", + "is-glob": "^4.0.3", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + } + }, + "eslint-module-utils": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", + "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", + "dev": true, + "requires": { + "debug": "^3.2.7" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-plugin-es": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", + "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", + "dev": true, + "requires": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "dependencies": { + "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 + } + } + }, + "eslint-plugin-import": { + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", + "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "dev": true, + "requires": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", + "has": "^1.0.3", + "is-core-module": "^2.8.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.5", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.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" + } + }, + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "eslint-plugin-jsx-a11y": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz", + "integrity": "sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==", + "dev": true, + "requires": { + "@babel/runtime": "^7.18.9", + "aria-query": "^4.2.2", + "array-includes": "^3.1.5", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.4.3", + "axobject-query": "^2.2.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.3.2", + "language-tags": "^1.0.5", + "minimatch": "^3.1.2", + "semver": "^6.3.0" + }, + "dependencies": { + "aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + } + } + } + }, + "eslint-plugin-n": { + "version": "15.5.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.5.1.tgz", + "integrity": "sha512-kAd+xhZm7brHoFLzKLB7/FGRFJNg/srmv67mqb7tto22rpr4wv/LV6RuXzAfv3jbab7+k1wi42PsIhGviywaaw==", + "dev": true, + "requires": { + "builtins": "^5.0.1", + "eslint-plugin-es": "^4.1.0", + "eslint-utils": "^3.0.0", + "ignore": "^5.1.1", + "is-core-module": "^2.11.0", + "minimatch": "^3.1.2", + "resolve": "^1.22.1", + "semver": "^7.3.8" + }, + "dependencies": { + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "eslint-plugin-prettier": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, + "eslint-plugin-promise": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", + "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", + "dev": true + }, + "eslint-plugin-react": { + "version": "7.31.10", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.10.tgz", + "integrity": "sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA==", + "dev": true, + "requires": { + "array-includes": "^3.1.5", + "array.prototype.flatmap": "^1.3.0", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.5", + "object.fromentries": "^2.0.5", + "object.hasown": "^1.1.1", + "object.values": "^1.1.5", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.3", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.7" + }, + "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" + } + }, + "resolve": { + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + } + } + }, + "eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true + }, + "eslint-plugin-storybook": { + "version": "0.6.7", + "resolved": "https://registry.npmjs.org/eslint-plugin-storybook/-/eslint-plugin-storybook-0.6.7.tgz", + "integrity": "sha512-lcUsB+3PesKWXwwEHGSTCijKWDXuQ4ITVbnsSDMXRCR/cjGtHZIEcy2pp/Eh7nfWA/GZrDPpK97DsTWEzyN6Bw==", + "dev": true, + "requires": { + "@storybook/csf": "^0.0.1", + "@typescript-eslint/experimental-utils": "^5.3.0", + "requireindex": "^1.1.0", + "ts-dedent": "^2.2.0" + }, + "dependencies": { + "@storybook/csf": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.1.tgz", + "integrity": "sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw==", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + } + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "dependencies": { + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + } + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + }, + "espree": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "dev": true, + "requires": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "dependencies": { + "acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "dev": true + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "estree-to-babel": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/estree-to-babel/-/estree-to-babel-3.2.1.tgz", + "integrity": "sha512-YNF+mZ/Wu2FU/gvmzuWtYc8rloubL7wfXCTgouFrnjGVXPA/EeYYA7pupXWrb3Iv1cTBeSSxxJIbK23l4MRNqg==", + "dev": true, + "requires": { + "@babel/traverse": "^7.1.6", + "@babel/types": "^7.2.0", + "c8": "^7.6.0" + } + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "exec-sh": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", + "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==", + "dev": true + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "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": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "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": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "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": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "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" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true + }, + "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 + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dev": true, + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "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 + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "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": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true + } + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "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.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "fast-json-parse": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fast-json-parse/-/fast-json-parse-1.0.3.tgz", + "integrity": "sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==", + "dev": true + }, + "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==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "requires": { + "bser": "2.1.1" + } + }, + "fetch-retry": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-5.0.3.tgz", + "integrity": "sha512-uJQyMrX5IJZkhoEUBQ3EjxkeiZkppBd5jS/fMTJmfZxLSiaQjv2zD0kTvuvkSH89uFvgSlB6ueGpjD3HWN7Bxw==", + "dev": true + }, + "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": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + } + }, + "file-system-cache": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/file-system-cache/-/file-system-cache-1.1.0.tgz", + "integrity": "sha512-IzF5MBq+5CR0jXx5RxPe4BICl/oEhBSXKaL9fLhAXrIfIUS77Hr4vzrYyqYMHN6uTt+BOqi3fDCTjjEBCjERKw==", + "dev": true, + "requires": { + "fs-extra": "^10.1.0", + "ramda": "^0.28.0" + }, + "dependencies": { + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + } + } + }, + "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" + } + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "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==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^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==", + "dev": true, + "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==", + "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" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + } + } + }, + "find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "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" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "focus-lock": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/focus-lock/-/focus-lock-0.8.1.tgz", + "integrity": "sha512-/LFZOIo82WDsyyv7h7oc0MJF9ACOvDRdx9rWPZ2pgMfNWu/z8hQDBtOchuB/0BVLmuFOZjV02YwUVzNsWx/EzA==", + "dev": true, + "requires": { + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "dev": true + }, + "foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + } + }, + "fork-ts-checker-webpack-plugin": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", + "integrity": "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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 + }, + "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" + } + }, + "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 + }, + "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.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", + "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": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.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.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", + "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": "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==", + "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": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "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": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true + }, + "gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "dev": true, + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + } + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "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-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==", + "dev": true, + "optional": true + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "dev": true + }, + "github-slugger": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", + "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==", + "dev": true + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "glob-promise": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-3.4.0.tgz", + "integrity": "sha512-q08RJ6O+eJn+dVanerAndJwIcumgbDdYiUT7zFQl3Wm1xD6fBKtah7H8ZJChj4wP+8C+QfeVy8xautR7rdmKEw==", + "dev": true, + "requires": { + "@types/glob": "*" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dev": true, + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.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 + } + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + }, + "has-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-glob/-/has-glob-1.0.0.tgz", + "integrity": "sha512-D+8A457fBShSEI3tFCj65PAbT++5sKiFtdCdOam0gnfBgw9D277OERk+HM9qYJXmdVLZ/znez10SqHN0BBQ50g==", + "dev": true, + "requires": { + "is-glob": "^3.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "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": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "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 + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + } + } + }, + "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" + } + }, + "hast-to-hyperscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", + "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", + "dev": true, + "requires": { + "@types/unist": "^2.0.3", + "comma-separated-tokens": "^1.0.0", + "property-information": "^5.3.0", + "space-separated-tokens": "^1.0.0", + "style-to-object": "^0.3.0", + "unist-util-is": "^4.0.0", + "web-namespaces": "^1.0.0" + } + }, + "hast-util-from-parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", + "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==", + "dev": true, + "requires": { + "@types/parse5": "^5.0.0", + "hastscript": "^6.0.0", + "property-information": "^5.0.0", + "vfile": "^4.0.0", + "vfile-location": "^3.2.0", + "web-namespaces": "^1.0.0" + } + }, + "hast-util-parse-selector": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", + "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", + "dev": true + }, + "hast-util-raw": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", + "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", + "dev": true, + "requires": { + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^6.0.0", + "hast-util-to-parse5": "^6.0.0", + "html-void-elements": "^1.0.0", + "parse5": "^6.0.0", + "unist-util-position": "^3.0.0", + "vfile": "^4.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + } + }, + "hast-util-to-parse5": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", + "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", + "dev": true, + "requires": { + "hast-to-hyperscript": "^9.0.0", + "property-information": "^5.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + } + }, + "hastscript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", + "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", + "dev": true, + "requires": { + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" + } + }, + "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 + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "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" + } + }, + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "html-dom-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/html-dom-parser/-/html-dom-parser-1.2.0.tgz", + "integrity": "sha512-2HIpFMvvffsXHFUFjso0M9LqM+1Lm22BF+Df2ba+7QHJXjk63pWChEnI6YG27eaWqUdfnh5/Vy+OXrNTtepRsg==", + "requires": { + "domhandler": "4.3.1", + "htmlparser2": "7.2.0" + } + }, + "html-entities": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", + "dev": true + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dev": true, + "requires": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "dependencies": { + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true + } + } + }, + "html-react-parser": { + "version": "1.4.12", + "resolved": "https://registry.npmjs.org/html-react-parser/-/html-react-parser-1.4.12.tgz", + "integrity": "sha512-nqYQzr4uXh67G9ejAG7djupTHmQvSTgjY83zbXLRfKHJ0F06751jXx6WKSFARDdXxCngo2/7H4Rwtfeowql4gQ==", + "requires": { + "domhandler": "4.3.1", + "html-dom-parser": "1.2.0", + "react-property": "2.0.0", + "style-to-js": "1.1.0" + } + }, + "html-tags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", + "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==", + "dev": true + }, + "html-tokenize": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-tokenize/-/html-tokenize-2.0.1.tgz", + "integrity": "sha512-QY6S+hZ0f5m1WT8WffYN+Hg+xm/w5I8XeUcAq/ZYP5wVC8xbKi4Whhru3FtrAebD5EhBW8rmFzkDI6eCAuFe2w==", + "requires": { + "buffer-from": "~0.1.1", + "inherits": "~2.0.1", + "minimist": "~1.2.5", + "readable-stream": "~1.0.27-1", + "through2": "~0.4.1" + } + }, + "html-void-elements": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", + "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==", + "dev": true + }, + "html-webpack-plugin": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", + "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", + "dev": true, + "requires": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "dependencies": { + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + } + } + }, + "htmlparser2": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", + "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.2", + "domutils": "^2.8.0", + "entities": "^3.0.1" + }, + "dependencies": { + "entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==" + } + } + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", + "dev": true + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "husky": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.2.tgz", + "integrity": "sha512-Tkv80jtvbnkK3mYWxPZePGFpQ/tT3HNSs/sasF9P2YfkMezDl3ON37YN6jUUI4eTg5LcyVynlb6r4eyvOmspvg==", + "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": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==", + "dev": true + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "image-size": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz", + "integrity": "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==", + "dev": true, + "requires": { + "queue": "6.0.2" + } + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "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==" + } + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "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 + }, + "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": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "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==" + }, + "inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true + }, + "ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "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-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-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "dev": true + }, + "is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "dev": true, + "requires": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + } + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "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" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true + }, + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "requires": { + "has": "^1.0.3" + } + }, + "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-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "dev": true + }, + "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-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true + }, + "is-dom": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-dom/-/is-dom-1.1.0.tgz", + "integrity": "sha512-u82f6mvhYxRPKpw8V1N0W8ce1xXwOrQtgGcxl6UCL5zBmZu3is/18K0rR7uFCnMDuAsS/3W54mGL4vsaFUQlEQ==", + "dev": true, + "requires": { + "is-object": "^1.0.1", + "is-window": "^1.0.2" + } + }, + "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" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "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, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "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==", + "dev": true + }, + "is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true + }, + "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-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", + "dev": true + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", + "dev": true, + "optional": true + }, + "is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "is-what": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.7.tgz", + "integrity": "sha512-DBVOQNiPKnGMxRMLIYSwERAS5MVY1B7xYiGnpgctsOFvVDz9f9PFXXxMcTOHuoqYp4NK9qFYQaIC1NRRxLMpBQ==" + }, + "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==", + "dev": true + }, + "is-window": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-window/-/is-window-1.0.2.tgz", + "integrity": "sha512-uj00kdXyZb9t9RcAUAwMZAnkBUwdYGhYlt7djMXhfyhUCzwNba50tIiBKR7q0l7tdoBtFVw/3JmLY6fI3rmZmg==", + "dev": true + }, + "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==", + "dev": true + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + }, + "isomorphic-unfetch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz", + "integrity": "sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==", + "dev": true, + "requires": { + "node-fetch": "^2.6.1", + "unfetch": "^4.2.0" + } + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "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" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "iterate-iterator": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.2.tgz", + "integrity": "sha512-t91HubM4ZDQ70M9wqp+pcNpu8OyJ9UAtXntT/Bcsvp5tZMnz9vRa+IunKXeI8AnfZMTv0jNuVEmGeLSMjVvfPw==", + "dev": true + }, + "iterate-value": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz", + "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==", + "dev": true, + "requires": { + "es-get-iterator": "^1.0.2", + "iterate-iterator": "^1.0.1" + } + }, + "jest-haste-map": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", + "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.1.2", + "graceful-fs": "^4.2.4", + "jest-regex-util": "^26.0.0", + "jest-serializer": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "micromatch": "^4.0.2", + "sane": "^4.0.3", + "walker": "^1.0.7" + } + }, + "jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*" + }, + "dependencies": { + "@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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 + }, + "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.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-regex-util": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", + "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", + "dev": true + }, + "jest-serializer": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", + "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", + "dev": true, + "requires": { + "@types/node": "*", + "graceful-fs": "^4.2.4" + } + }, + "jest-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^2.0.0", + "micromatch": "^4.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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 + }, + "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.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "requires": { + "@types/node": "*", + "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.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-string-escape": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", + "integrity": "sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==", + "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.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "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-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "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==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "jsx-ast-utils": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", + "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", + "dev": true, + "requires": { + "array-includes": "^3.1.5", + "object.assign": "^4.1.3" + } + }, + "junk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", + "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", + "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 + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true + }, + "klona": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", + "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", + "dev": true + }, + "language-subtag-registry": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", + "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", + "dev": true + }, + "language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "dev": true, + "requires": { + "language-subtag-registry": "~0.3.2" + } + }, + "lazy-universal-dotenv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lazy-universal-dotenv/-/lazy-universal-dotenv-3.0.1.tgz", + "integrity": "sha512-prXSYk799h3GY3iOWnC6ZigYzMPjxN2svgjJ9shk7oMadSNX3wXy0B6F32PMJv7qtMnrIbUxoEHzbutvxR2LBQ==", + "dev": true, + "requires": { + "@babel/runtime": "^7.5.0", + "app-root-dir": "^1.0.2", + "core-js": "^3.0.4", + "dotenv": "^8.0.0", + "dotenv-expand": "^5.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" + } + }, + "lilconfig": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", + "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", + "dev": true + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "lint-staged": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.0.3.tgz", + "integrity": "sha512-9hmrwSCFroTSYLjflGI8Uk+GWAwMB4OlpU4bMJEAT5d/llQwtYKoim4bLOyLCuWFAhWEupE0vkIFqtw/WIsPug==", + "dev": true, + "requires": { + "cli-truncate": "^3.1.0", + "colorette": "^2.0.17", + "commander": "^9.3.0", + "debug": "^4.3.4", + "execa": "^6.1.0", + "lilconfig": "2.0.5", + "listr2": "^4.0.5", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-inspect": "^1.12.2", + "pidtree": "^0.6.0", + "string-argv": "^0.3.1", + "yaml": "^2.1.1" + }, + "dependencies": { + "colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "dev": true + }, + "commander": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz", + "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==", + "dev": true + }, + "execa": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", + "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^3.0.1", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + } + }, + "human-signals": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", + "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", + "dev": true + }, + "is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true + }, + "mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true + }, + "npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "requires": { + "path-key": "^4.0.0" + } + }, + "onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "requires": { + "mimic-fn": "^4.0.0" + } + }, + "path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true + }, + "strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true + }, + "yaml": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.3.tgz", + "integrity": "sha512-AacA8nRULjKMX2DvWvOAdBZMOfQlypSFkjcOcu9FalllIDJ1kvlREzcdIZmidQUqqeMv7jorHjq2HlLv/+c2lg==", + "dev": true + } + } + }, + "listr2": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz", + "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==", + "dev": true, + "requires": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.5", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "requires": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.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 + }, + "colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "dev": true + }, + "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" + } + }, + "slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + } + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", + "dev": true, + "optional": 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" + }, + "dependencies": { + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", + "dev": true, + "optional": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "optional": true + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", + "dev": true, + "optional": true, + "requires": { + "is-utf8": "^0.2.0" + } + } + } + }, + "loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true + }, + "loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true + }, + "log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "requires": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "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 + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "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": "sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==", + "dev": true, + "optional": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "requires": { + "tslib": "^2.0.3" + } + }, + "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" + } + }, + "lz-string": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", + "integrity": "sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "requires": { + "tmpl": "1.0.5" + } + }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dev": true, + "requires": { + "p-defer": "^1.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "dev": true + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true, + "optional": true + }, + "map-or-similar": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/map-or-similar/-/map-or-similar-1.5.0.tgz", + "integrity": "sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", + "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==", + "dev": true + }, + "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-squeeze-paragraphs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", + "dev": true, + "requires": { + "unist-util-remove": "^2.0.0" + } + }, + "mdast-util-definitions": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", + "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", + "dev": true, + "requires": { + "unist-util-visit": "^2.0.0" + } + }, + "mdast-util-to-hast": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", + "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", + "dev": true, + "requires": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "mdast-util-definitions": "^4.0.0", + "mdurl": "^1.0.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" + } + }, + "mdast-util-to-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", + "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", + "dev": true + }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true + }, + "mem": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz", + "integrity": "sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==", + "dev": true, + "requires": { + "map-age-cleaner": "^0.1.3", + "mimic-fn": "^3.1.0" + }, + "dependencies": { + "mimic-fn": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", + "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", + "dev": true + } + } + }, + "memfs": { + "version": "3.4.11", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.11.tgz", + "integrity": "sha512-GvsCITGAyDCxxsJ+X6prJexFQEhOCJaIlUbsAvjzSI5o5O7j2dle3jWvz5Z5aOdpOxW6ol3vI1+0ut+641F1+w==", + "dev": true, + "requires": { + "fs-monkey": "^1.0.3" + } + }, + "memoizerific": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz", + "integrity": "sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==", + "dev": true, + "requires": { + "map-or-similar": "^1.5.0" + } + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==", + "dev": true, + "optional": 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" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", + "dev": true, + "optional": 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": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", + "dev": true, + "optional": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", + "dev": true, + "optional": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "optional": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", + "dev": true, + "optional": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.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": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", + "dev": true, + "optional": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + } + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "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": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true + }, + "microevent.ts": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz", + "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", + "dev": true, + "requires": { + "dom-walk": "^0.1.0" + } + }, + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true + }, + "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": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" + }, + "minipass": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", + "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "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.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, + "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" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "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" + } + } + } + }, + "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" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==", + "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" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "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" + } + } + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "multipipe": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-1.0.2.tgz", + "integrity": "sha512-6uiC9OvY71vzSGX8lZvSqscE7ft9nPupJ8fMjrCNRAUy2LREUW42UL+V/NTrogr6rFgRydUrCX4ZitfpSNkSCQ==", + "requires": { + "duplexer2": "^0.1.2", + "object-assign": "^4.1.0" + } + }, + "nan": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", + "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", + "dev": true, + "optional": true + }, + "nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" + }, + "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" + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "nested-error-stacks": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.1.tgz", + "integrity": "sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==", + "dev": true + }, + "next": { + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/next/-/next-12.3.3.tgz", + "integrity": "sha512-Rx2Y6Wl5R8E77NOfBupp/B9OPCklqfqD0yN2+rDivhMjd6hjVFH5n0WTDI4PWwDmZsdNcYt6NV85kJ3PLR+eNQ==", + "requires": { + "@next/env": "12.3.3", + "@next/swc-android-arm-eabi": "12.3.3", + "@next/swc-android-arm64": "12.3.3", + "@next/swc-darwin-arm64": "12.3.3", + "@next/swc-darwin-x64": "12.3.3", + "@next/swc-freebsd-x64": "12.3.3", + "@next/swc-linux-arm-gnueabihf": "12.3.3", + "@next/swc-linux-arm64-gnu": "12.3.3", + "@next/swc-linux-arm64-musl": "12.3.3", + "@next/swc-linux-x64-gnu": "12.3.3", + "@next/swc-linux-x64-musl": "12.3.3", + "@next/swc-win32-arm64-msvc": "12.3.3", + "@next/swc-win32-ia32-msvc": "12.3.3", + "@next/swc-win32-x64-msvc": "12.3.3", + "@swc/helpers": "0.4.11", + "caniuse-lite": "^1.0.30001406", + "postcss": "8.4.14", + "styled-jsx": "5.0.7", + "use-sync-external-store": "1.2.0" + }, + "dependencies": { + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "postcss": { + "version": "8.4.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", + "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + } + } + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node-dir": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", + "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", + "dev": true, + "requires": { + "minimatch": "^3.0.2" + } + }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "dev": true, + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "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 + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + } + } + }, + "node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "dev": true + }, + "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": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "dev": true, + "requires": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", + "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": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "requires": { + "is-descriptor": "^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": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "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": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "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 + } + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "dev": true + }, + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "object.entries": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", + "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "object.fromentries": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", + "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz", + "integrity": "sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==", + "dev": true, + "requires": { + "array.prototype.reduce": "^1.0.5", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "object.hasown": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", + "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", + "dev": true, + "requires": { + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "object.values": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "objectorarray": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/objectorarray/-/objectorarray-1.0.5.tgz", + "integrity": "sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==", + "dev": true + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "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": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "dependencies": { + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + } + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", + "dev": true, + "optional": true + }, + "p-all": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-all/-/p-all-2.1.0.tgz", + "integrity": "sha512-HbZxz5FONzz/z2gJfk6bFca0BCiSRF8jU3yCsWOen/vR6lZjfPOu/e7L3uFzTW1i0H8TlC3vqQstEJPQL4/uLA==", + "dev": true, + "requires": { + "p-map": "^2.0.0" + }, + "dependencies": { + "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 + } + } + }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==", + "dev": true + }, + "p-event": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", + "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", + "dev": true, + "requires": { + "p-timeout": "^3.1.0" + } + }, + "p-filter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", + "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", + "dev": true, + "requires": { + "p-map": "^2.0.0" + }, + "dependencies": { + "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 + } + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dev": true, + "requires": { + "p-finally": "^1.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 + }, + "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" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "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==", + "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": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "dev": true, + "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": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "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.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", + "dev": true + }, + "path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", + "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 + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "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 + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, + "pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dev": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "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 + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "dev": true, + "optional": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dev": true, + "optional": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "dev": true + }, + "pkg-dir": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", + "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", + "dev": true, + "requires": { + "find-up": "^5.0.0" + } + }, + "pnp-webpack-plugin": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", + "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==", + "dev": true, + "requires": { + "ts-pnp": "^1.1.6" + } + }, + "polished": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/polished/-/polished-4.2.2.tgz", + "integrity": "sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ==", + "dev": true, + "requires": { + "@babel/runtime": "^7.17.8" + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-flexbugs-fixes": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz", + "integrity": "sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ==", + "dev": true, + "requires": { + "postcss": "^7.0.26" + } + }, + "postcss-loader": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.3.0.tgz", + "integrity": "sha512-M/dSoIiNDOo8Rk0mUqoj4kpGq91gcxCfb9PoyZVdZ76/AuhxylHDYZblNE8o+EQ9AMSASeMFEKxZf5aU6wlx1Q==", + "dev": true, + "requires": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.4" + }, + "dependencies": { + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true + }, + "postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0" + } + }, + "postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "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.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "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": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dev": true, + "requires": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + } + } + }, + "pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, + "promise.allsettled": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.6.tgz", + "integrity": "sha512-22wJUOD3zswWFqgwjNHa1965LvqTX87WPu/lreY2KSd7SVcERfuZ4GfUaOnJNnvtoIv2yXT/W00YIGMetXtFXg==", + "dev": true, + "requires": { + "array.prototype.map": "^1.0.5", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "iterate-value": "^1.0.2" + } + }, + "promise.prototype.finally": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/promise.prototype.finally/-/promise.prototype.finally-3.1.4.tgz", + "integrity": "sha512-nNc3YbgMfLzqtqvO/q5DP6RR0SiHI9pUPGzyDf1q+usTwCN2kjvAnJkBb7bHe3o+fFSBPpsGMoYtaSi+LTNqng==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } + }, + "prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "property-information": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", + "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", + "dev": true, + "requires": { + "xtend": "^4.0.0" + } + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "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.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "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==", + "dev": true + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", + "dev": true + }, + "queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "dev": true, + "requires": { + "inherits": "~2.0.3" + } + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "ramda": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.28.0.tgz", + "integrity": "sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "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.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + } + } + }, + "raw-loader": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz", + "integrity": "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + } + }, + "react": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "react-docgen": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/react-docgen/-/react-docgen-5.4.3.tgz", + "integrity": "sha512-xlLJyOlnfr8lLEEeaDZ+X2J/KJoe6Nr9AzxnkdQWush5hz2ZSu66w6iLMOScMmxoSHWpWMn+k3v5ZiyCfcWsOA==", + "dev": true, + "requires": { + "@babel/core": "^7.7.5", + "@babel/generator": "^7.12.11", + "@babel/runtime": "^7.7.6", + "ast-types": "^0.14.2", + "commander": "^2.19.0", + "doctrine": "^3.0.0", + "estree-to-babel": "^3.1.0", + "neo-async": "^2.6.1", + "node-dir": "^0.1.10", + "strip-indent": "^3.0.0" + }, + "dependencies": { + "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==", + "dev": true + } + } + }, + "react-docgen-typescript": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/react-docgen-typescript/-/react-docgen-typescript-2.2.2.tgz", + "integrity": "sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==", + "dev": true + }, + "react-dom": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + } + }, + "react-element-to-jsx-string": { + "version": "14.3.4", + "resolved": "https://registry.npmjs.org/react-element-to-jsx-string/-/react-element-to-jsx-string-14.3.4.tgz", + "integrity": "sha512-t4ZwvV6vwNxzujDQ+37bspnLwA4JlgUPWhLjBJWsNIDceAf6ZKUTCjdm08cN6WeZ5pTMKiCJkmAYnpmR4Bm+dg==", + "dev": true, + "requires": { + "@base2/pretty-print-object": "1.0.1", + "is-plain-object": "5.0.0", + "react-is": "17.0.2" + }, + "dependencies": { + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + } + } + }, + "react-inspector": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/react-inspector/-/react-inspector-5.1.1.tgz", + "integrity": "sha512-GURDaYzoLbW8pMGXwYPDBIv6nqei4kK7LPRZ9q9HCZF54wqXz/dnylBp/kfE9XmekBhHvLDdcYeyIwSrvtOiWg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.0.0", + "is-dom": "^1.0.0", + "prop-types": "^15.0.0" + } + }, + "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-merge-refs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/react-merge-refs/-/react-merge-refs-1.1.0.tgz", + "integrity": "sha512-alTKsjEL0dKH/ru1Iyn7vliS2QRcBp9zZPGoWxUOvRGWPUYgjo+V01is7p04It6KhgrzhJGnIj9GgX8W4bZoCQ==", + "dev": true + }, + "react-property": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/react-property/-/react-property-2.0.0.tgz", + "integrity": "sha512-kzmNjIgU32mO4mmH5+iUyrqlpFQhF8K2k7eZ4fdLSOPFrD1XgEuSBv9LDEgxRXTMBqMd8ppT0x6TIzqE5pdGdw==" + }, + "react-refresh": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", + "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", + "dev": true + }, + "react-textarea-autosize": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.3.4.tgz", + "integrity": "sha512-CdtmP8Dc19xL8/R6sWvtknD/eCXkQr30dtvC4VmGInhRsfF8X/ihXCq6+9l9qbxmKRiq407/7z5fxE7cVWQNgQ==", + "requires": { + "@babel/runtime": "^7.10.2", + "use-composed-ref": "^1.3.0", + "use-latest": "^1.2.1" + } + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "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" + } + }, + "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" + } + }, + "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 + } + } + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + } + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==", + "dev": true, + "optional": 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": "sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==", + "dev": true, + "optional": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==", + "dev": true, + "optional": true, + "requires": { + "get-stdin": "^4.0.1" + } + } + } + }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.13.10", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz", + "integrity": "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==" + }, + "regenerator-transform": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", + "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", + "dev": true, + "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" + } + }, + "regex-parser": { + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", + "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", + "dev": true + }, + "regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "regexpu-core": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz", + "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==", + "dev": true, + "requires": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsgen": "^0.7.1", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + } + }, + "regjsgen": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", + "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==", + "dev": true + }, + "regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true + }, + "remark-external-links": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/remark-external-links/-/remark-external-links-8.0.0.tgz", + "integrity": "sha512-5vPSX0kHoSsqtdftSHhIYofVINC8qmp0nctkeU9YoJwV3YfiBRiI6cbFRJ0oI/1F9xS+bopXG0m2KS8VFscuKA==", + "dev": true, + "requires": { + "extend": "^3.0.0", + "is-absolute-url": "^3.0.0", + "mdast-util-definitions": "^4.0.0", + "space-separated-tokens": "^1.0.0", + "unist-util-visit": "^2.0.0" + } + }, + "remark-footnotes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", + "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==", + "dev": true + }, + "remark-mdx": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", + "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", + "dev": true, + "requires": { + "@babel/core": "7.12.9", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-proposal-object-rest-spread": "7.12.1", + "@babel/plugin-syntax-jsx": "7.12.1", + "@mdx-js/util": "1.6.22", + "is-alphabetical": "1.0.4", + "remark-parse": "8.0.3", + "unified": "9.2.0" + }, + "dependencies": { + "@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + } + }, + "@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==", + "dev": true + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.12.1" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "remark-parse": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", + "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", + "dev": true, + "requires": { + "ccount": "^1.0.0", + "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": "^2.0.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": "^2.0.0", + "vfile-location": "^3.0.0", + "xtend": "^4.0.1" + } + }, + "remark-slug": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/remark-slug/-/remark-slug-6.1.0.tgz", + "integrity": "sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ==", + "dev": true, + "requires": { + "github-slugger": "^1.0.0", + "mdast-util-to-string": "^1.0.0", + "unist-util-visit": "^2.0.0" + } + }, + "remark-squeeze-paragraphs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", + "dev": true, + "requires": { + "mdast-squeeze-paragraphs": "^4.0.0" + } + }, + "remove-accents": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.2.tgz", + "integrity": "sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA==" + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "dev": true + }, + "renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dev": true, + "requires": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + } + } + }, + "repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==", + "dev": true, + "optional": true, + "requires": { + "is-finite": "^1.0.0" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, + "requireindex": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", + "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", + "dev": true + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", + "dev": true + }, + "resolve-url-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", + "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", + "dev": true, + "requires": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" + }, + "dependencies": { + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "postcss": { + "version": "8.4.19", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz", + "integrity": "sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==", + "dev": true, + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "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 + }, + "rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "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" + } + }, + "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" + } + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==", + "dev": true, + "requires": { + "aproba": "^1.1.1" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + } + } + }, + "rxjs": { + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz", + "integrity": "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==", + "dev": true, + "requires": { + "tslib": "^2.1.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "dev": true, + "requires": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "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" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "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" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.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==", + "dev": true + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "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" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "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": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "sass-loader": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz", + "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", + "dev": true, + "requires": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + } + }, + "scheduler": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "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.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.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" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-favicon": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.5.0.tgz", + "integrity": "sha512-FMW2RvqNr03x+C0WxTyu6sOv21oOjkq5j8tjquWccwa6ScNyGFOGJVpuS1NmTVGBAHS07xnSKotgf2ehQmf9iA==", + "dev": true, + "requires": { + "etag": "~1.8.1", + "fresh": "0.5.2", + "ms": "2.1.1", + "parseurl": "~1.3.2", + "safe-buffer": "5.1.1" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "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" + } + }, + "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 + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "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": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true + } + } + }, + "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": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "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": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "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": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "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" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true + }, + "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 + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "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": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + } + } + }, + "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" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "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": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + }, + "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.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "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.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "dev": true + }, + "space-separated-tokens": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", + "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.12", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", + "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "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": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "dev": true + }, + "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==", + "dev": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", + "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": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "requires": { + "is-descriptor": "^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": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "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": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "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 + } + } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + }, + "store2": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/store2/-/store2-2.14.2.tgz", + "integrity": "sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==", + "dev": true + }, + "storybook-addon-next": { + "version": "1.6.10", + "resolved": "https://registry.npmjs.org/storybook-addon-next/-/storybook-addon-next-1.6.10.tgz", + "integrity": "sha512-BYs2B5dHIfk5EXVKGC91LZJ5/z+fUjhG7mDfuZvSA0igCm7AZFbe2LJz8NxtIKJpQwiqsqSr62suAcggMRkBNg==", + "dev": true, + "requires": { + "@storybook/addons": "^6.4.10", + "image-size": "^1.0.0", + "loader-utils": "^3.2.0", + "postcss-loader": "^6.2.1", + "resolve-url-loader": "^5.0.0", + "sass-loader": "^12.4.0", + "semver": "^7.3.5", + "tsconfig-paths": "^4.0.0", + "tsconfig-paths-webpack-plugin": "^4.0.0" + }, + "dependencies": { + "loader-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", + "dev": true + }, + "postcss-loader": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", + "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", + "dev": true, + "requires": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.5" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "tsconfig-paths": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.1.0.tgz", + "integrity": "sha512-AHx4Euop/dXFC+Vx589alFba8QItjF+8hf8LtmuiCwHyI4rHXQtOOENaM8kvYf5fR0dRChy3wzWIZ9WbB7FWow==", + "dev": true, + "requires": { + "json5": "^2.2.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + } + } + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "stream-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" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "stream-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 + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + }, + "string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + } + } + }, + "string.prototype.matchall": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", + "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4" + } + }, + "string.prototype.padend": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.4.tgz", + "integrity": "sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "string.prototype.padstart": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/string.prototype.padstart/-/string.prototype.padstart-3.1.4.tgz", + "integrity": "sha512-XqOHj8horGsF+zwxraBvMTkBFM28sS/jHBJajh17JtJKA92qazidiQbLosV4UA18azvLOVKYo/E3g3T9Y5826w==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "requires": { + "min-indent": "^1.0.0" + } + }, + "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": "2.0.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", + "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + } + }, + "style-to-js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.0.tgz", + "integrity": "sha512-1OqefPDxGrlMwcbfpsTVRyzwdhr4W0uxYQzeA2F1CBc8WG04udg2+ybRnvh3XYL4TdHQrCahLtax2jc8xaE6rA==", + "requires": { + "style-to-object": "0.3.0" + } + }, + "style-to-object": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", + "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", + "requires": { + "inline-style-parser": "0.1.1" + } + }, + "styled-jsx": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.7.tgz", + "integrity": "sha512-b3sUzamS086YLRuvnaDigdAewz1/EFYlHpYBP5mZovKEdQQOIIYq8lApylub3HHZ6xFjV051kkGU7cudJmrXEA==" + }, + "stylis": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz", + "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==" + }, + "superjson": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-1.11.0.tgz", + "integrity": "sha512-6PfAg1FKhqkwWvPb2uXhH4MkMttdc17eJ91+Aoz4s1XUEDZFmLfFx/xVA3wgkPxAGy5dpozgGdK6V/n20Wj9yg==", + "requires": { + "copy-anything": "^3.0.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" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, + "symbol.prototype.description": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/symbol.prototype.description/-/symbol.prototype.description-1.0.5.tgz", + "integrity": "sha512-x738iXRYsrAt9WBhRCVG5BtIC3B7CUkFwbHW2zOvGtwM33s7JjrCDyq8V0zgMYVb5ymsL8+qkzzpANH63CPQaQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-symbol-description": "^1.0.0", + "has-symbols": "^1.0.2", + "object.getownpropertydescriptors": "^2.1.2" + } + }, + "synchronous-promise": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.16.tgz", + "integrity": "sha512-qImOD23aDfnIDNqlG1NOehdB9IYsn1V9oByPjKY1nakv2MQYCEMyX033/q+aEtYCpmYK1cv2+NTmlH+ra6GA5A==", + "dev": true + }, + "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.1.12", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.12.tgz", + "integrity": "sha512-jU4TdemS31uABHd+Lt5WEYJuzn+TJTCBLljvIAHZOz6M9Os5pJ4dD+vRFLxPa/n3T0iEFzpi+0x1UfuDZYbRMw==", + "dev": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + } + }, + "telejson": { + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/telejson/-/telejson-6.0.8.tgz", + "integrity": "sha512-nerNXi+j8NK1QEfBHtZUN/aLdDcyupA//9kAboYLrtzZlPLpUfqbVGWb9zz91f/mIjRbAYhbgtnJHY8I1b5MBg==", + "dev": true, + "requires": { + "@types/is-function": "^1.0.0", + "global": "^4.4.0", + "is-function": "^1.0.2", + "is-regex": "^1.1.2", + "is-symbol": "^1.0.3", + "isobject": "^4.0.0", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3" + }, + "dependencies": { + "isobject": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz", + "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==", + "dev": true + } + } + }, + "terser": { + "version": "5.15.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", + "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "dev": true + }, + "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==", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", + "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.14", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.14.1" + }, + "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 + }, + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "through2": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.4.2.tgz", + "integrity": "sha512-45Llu+EwHKtAZYTPPVn3XZHBgakWMN3rokhEv5hu596XP+cNgplMg+Gj+1nmAvj+L0K7+N49zBKx5rah5u0QIQ==", + "requires": { + "readable-stream": "~1.0.17", + "xtend": "~2.1.1" + }, + "dependencies": { + "object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==" + }, + "xtend": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==", + "requires": { + "object-keys": "~0.4.0" + } + } + } + }, + "timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "dev": true, + "requires": { + "setimmediate": "^1.0.4" + } + }, + "tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", + "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": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "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": "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" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==", + "dev": true + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw==", + "dev": true, + "optional": true + }, + "trim-trailing-lines": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", + "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==", + "dev": true + }, + "trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "dev": true + }, + "ts-dedent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", + "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", + "dev": true + }, + "ts-pnp": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", + "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==", + "dev": true + }, + "tsconfig-paths": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } + } + }, + "tsconfig-paths-webpack-plugin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-4.0.0.tgz", + "integrity": "sha512-fw/7265mIWukrSHd0i+wSwx64kYUSAKPfxRDksjKIYTxSAp9W9/xcZVBF4Kl0eqQd5eBpAQ/oQrc5RyM/0c1GQ==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.7.0", + "tsconfig-paths": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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 + }, + "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.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "tsconfig-paths": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.1.0.tgz", + "integrity": "sha512-AHx4Euop/dXFC+Vx589alFba8QItjF+8hf8LtmuiCwHyI4rHXQtOOENaM8kvYf5fR0dRChy3wzWIZ9WbB7FWow==", + "dev": true, + "requires": { + "json5": "^2.2.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + } + } + }, + "tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==", + "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.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "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": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typescript": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz", + "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==", + "dev": true + }, + "uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "dev": true, + "optional": true + }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "unfetch": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", + "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "inherits": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true + }, + "unified": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "dev": true, + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.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" + }, + "dependencies": { + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "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-builder": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", + "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==", + "dev": true + }, + "unist-util-generated": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", + "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", + "dev": true + }, + "unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "dev": true + }, + "unist-util-position": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", + "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", + "dev": true + }, + "unist-util-remove": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz", + "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==", + "dev": true, + "requires": { + "unist-util-is": "^4.0.0" + } + }, + "unist-util-remove-position": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", + "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", + "dev": true, + "requires": { + "unist-util-visit": "^2.0.0" + } + }, + "unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "dev": true, + "requires": { + "@types/unist": "^2.0.2" + } + }, + "unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", + "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": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", + "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": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "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": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + } + } + }, + "untildify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-2.1.0.tgz", + "integrity": "sha512-sJjbDp2GodvkB0FZZcn7k6afVisqX5BZD7Yq3xp4nN2O15BBK0cLm3Vwn2vQaF7UDS0UUsrQMkkplmDI5fskig==", + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0" + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "optional": true + }, + "update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "dependencies": { + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + } + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", + "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": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", + "dev": true + } + } + }, + "url-loader": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", + "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "mime-types": "^2.1.27", + "schema-utils": "^3.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 + }, + "use-composed-ref": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", + "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==" + }, + "use-isomorphic-layout-effect": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", + "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==" + }, + "use-latest": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", + "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", + "requires": { + "use-isomorphic-layout-effect": "^1.1.1" + } + }, + "use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==" + }, + "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": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "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" + } + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "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 + }, + "uuid-browser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/uuid-browser/-/uuid-browser-3.1.0.tgz", + "integrity": "sha512-dsNgbLaTrd6l3MMxTtouOCFw4CBFc/3a+GgYA2YyrJvyQ1u6q4pcu3ktLoUZ/VN/Aw9WsauazbgsgdfVWgAKQg==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "v8-to-istanbul": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", + "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + } + }, + "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" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true + }, + "vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + } + }, + "vfile-location": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", + "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", + "dev": true + }, + "vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } + }, + "vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, + "walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "requires": { + "makeerror": "1.0.12" + } + }, + "watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "watchpack-chokidar2": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", + "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", + "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": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "optional": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "optional": true + }, + "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "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": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "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": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "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": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "dev": true, + "optional": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", + "dev": true, + "optional": 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==", + "dev": true, + "optional": true + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "optional": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "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" + } + }, + "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, + "optional": 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" + } + }, + "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, + "optional": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "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, + "optional": true, + "requires": { + "safe-buffer": "~5.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": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "optional": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } } }, - "node_modules/web-namespaces": { + "web-namespaces": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } + "dev": true }, - "node_modules/webidl-conversions": { + "webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "dev": true }, - "node_modules/webpack": { + "webpack": { "version": "5.75.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", "dev": true, - "dependencies": { + "requires": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^0.0.51", "@webassemblyjs/ast": "1.11.1", @@ -24655,371 +45871,279 @@ "watchpack": "^2.4.0", "webpack-sources": "^3.2.3" }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true + "dependencies": { + "acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "dev": true + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true } } }, - "node_modules/webpack-dev-middleware": { + "webpack-dev-middleware": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-4.3.0.tgz", "integrity": "sha512-PjwyVY95/bhBh6VUqt6z4THplYcsvQ8YNNBTBM873xLVmw8FLeALn0qurHbs9EmcfhzQis/eoqypSnZeuUz26w==", "dev": true, - "dependencies": { + "requires": { "colorette": "^1.2.2", "mem": "^8.1.1", "memfs": "^3.2.2", "mime-types": "^2.1.30", "range-parser": "^1.2.1", "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= v10.23.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/webpack-filter-warnings-plugin": { + "webpack-filter-warnings-plugin": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/webpack-filter-warnings-plugin/-/webpack-filter-warnings-plugin-1.2.1.tgz", "integrity": "sha512-Ez6ytc9IseDMLPo0qCuNNYzgtUl8NovOqjIq4uAU8LTD4uoa1w1KpZyyzFtLTEMZpkkOkLfL9eN+KGYdk1Qtwg==", - "dev": true, - "engines": { - "node": ">= 4.3 < 5.0.0 || >= 5.10" - }, - "peerDependencies": { - "webpack": "^2.0.0 || ^3.0.0 || ^4.0.0" - } + "dev": true }, - "node_modules/webpack-hot-middleware": { + "webpack-hot-middleware": { "version": "2.25.3", "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.3.tgz", "integrity": "sha512-IK/0WAHs7MTu1tzLTjio73LjS3Ov+VvBKQmE8WPlJutgG5zT6Urgq/BbAdRrHTRpyzK0dvAvFh1Qg98akxgZpA==", "dev": true, - "dependencies": { + "requires": { "ansi-html-community": "0.0.8", "html-entities": "^2.1.0", "strip-ansi": "^6.0.0" } }, - "node_modules/webpack-log": { + "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, - "dependencies": { + "requires": { "ansi-colors": "^3.0.0", "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" } }, - "node_modules/webpack-sources": { + "webpack-sources": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } + "dev": true }, - "node_modules/webpack-virtual-modules": { + "webpack-virtual-modules": { "version": "0.4.6", "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.4.6.tgz", "integrity": "sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==", "dev": true }, - "node_modules/webpack/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/webpack/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/webpack/node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/whatwg-url": { + "whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, - "dependencies": { + "requires": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, - "node_modules/which": { + "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "dependencies": { + "requires": { "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" } }, - "node_modules/which-boxed-primitive": { + "which-boxed-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, - "dependencies": { + "requires": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", "is-number-object": "^1.0.4", "is-string": "^1.0.5", "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/which-collection": { + "which-collection": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", "dev": true, - "dependencies": { + "requires": { "is-map": "^2.0.1", "is-set": "^2.0.1", "is-weakmap": "^2.0.1", "is-weakset": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/which-typed-array": { + "which-typed-array": { "version": "1.1.9", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", "dev": true, - "dependencies": { + "requires": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-tostringtag": "^1.0.0", "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/wide-align": { + "wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "dev": true, - "dependencies": { + "requires": { "string-width": "^1.0.2 || 2 || 3 || 4" } }, - "node_modules/widest-line": { + "widest-line": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", "dev": true, - "dependencies": { + "requires": { "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" } }, - "node_modules/word-wrap": { + "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, - "engines": { - "node": ">=0.10.0" - } + "dev": true }, - "node_modules/wordwrap": { + "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", "dev": true }, - "node_modules/worker-farm": { + "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, - "dependencies": { + "requires": { "errno": "~0.1.7" } }, - "node_modules/worker-rpc": { + "worker-rpc": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz", "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==", "dev": true, - "dependencies": { + "requires": { "microevent.ts": "~0.1.1" } }, - "node_modules/wrap-ansi": { + "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, - "dependencies": { + "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "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 + } } }, - "node_modules/wrappy": { + "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, - "node_modules/write-file-atomic": { + "write-file-atomic": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, - "dependencies": { + "requires": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", "signal-exit": "^3.0.2", "typedarray-to-buffer": "^3.1.5" } }, - "node_modules/ws": { + "ws": { "version": "8.11.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } + "dev": true }, - "node_modules/x-default-browser": { + "x-default-browser": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/x-default-browser/-/x-default-browser-0.4.0.tgz", "integrity": "sha512-7LKo7RtWfoFN/rHx1UELv/2zHGMx8MkZKDq1xENmOCTkfIqZJ0zZ26NEJX8czhnPXVcqS0ARjjfJB+eJ0/5Cvw==", "dev": true, - "bin": { - "x-default-browser": "bin/x-default-browser.js" - }, - "optionalDependencies": { + "requires": { "default-browser-id": "^1.0.4" } }, - "node_modules/xtend": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", - "integrity": "sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==", - "dependencies": { - "object-keys": "~0.4.0" - }, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/xtend/node_modules/object-keys": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", - "integrity": "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==" + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true }, - "node_modules/y18n": { + "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } + "dev": true }, - "node_modules/yallist": { + "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "node_modules/yaml": { + "yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "engines": { - "node": ">= 6" - } + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" }, - "node_modules/yargs": { + "yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, - "dependencies": { + "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", @@ -25027,41 +46151,25 @@ "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" } }, - "node_modules/yargs-parser": { + "yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } + "dev": true }, - "node_modules/yocto-queue": { + "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "dev": true }, - "node_modules/zwitch": { + "zwitch": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } + "dev": true } } } diff --git a/frontend/package.json b/frontend/package.json index 1c70138a..affc6a57 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -17,9 +17,13 @@ "storybook": "start-storybook -p 6006", "build-storybook": "build-storybook" }, + "lint-staged": { + "./src/**/*.{js,jsx,ts,tsx}": [ + "npm run format", + "npm run check-lint" + ] + }, "dependencies": { - "@tanstack/react-query": "^4.16.1", - "@tanstack/react-query-devtools": "^4.16.1", "@emotion/react": "^11.10.5", "@emotion/server": "^11.10.0", "@emotion/styled": "^11.10.5", @@ -28,6 +32,8 @@ "@mantine/next": "^5.7.2", "@mantine/nprogress": "^5.7.2", "@tabler/icons": "^1.111.0", + "@tanstack/react-query": "^4.16.1", + "@tanstack/react-query-devtools": "^4.16.1", "next": "^12.3.3", "react": "^17.0.2", "react-dom": "^17.0.2" @@ -45,7 +51,6 @@ "@types/node": "^18.11.9", "@types/react": "^18.0.25", "@types/react-dom": "^18.0.9", - "@types/react-query": "^1.2.9", "@typescript-eslint/eslint-plugin": "^5.43.0", "babel-loader": "^8.3.0", "eslint": "8.22.0", @@ -59,8 +64,8 @@ "eslint-plugin-react": "^7.31.10", "eslint-plugin-storybook": "^0.6.7", "husky": "^8.0.2", + "lint-staged": "^13.0.3", "prettier": "^2.7.1", - "storybook-addon-mantine": "^1.2.0", "storybook-addon-next": "^1.6.10", "typescript": "^4.8.4" } diff --git a/frontend/src/pages/index.tsx b/frontend/src/pages/index.tsx index f5a355c8..d9d391d8 100644 --- a/frontend/src/pages/index.tsx +++ b/frontend/src/pages/index.tsx @@ -29,7 +29,7 @@ export default function Home() { const router = useRouter(); const handleClick = () => { - void router.push('/hello'); + void router.push('/'); }; return ( diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json index dae93b32..76b83145 100644 --- a/frontend/tsconfig.json +++ b/frontend/tsconfig.json @@ -28,5 +28,5 @@ } }, "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".storybook/**/*.tsx"], - "exclude": ["node_modules"] + "exclude": ["node_modules/*"] } From ee864575a5f15d7fb45594793a6cefc1befdf850 Mon Sep 17 00:00:00 2001 From: yangseungchan Date: Sat, 19 Nov 2022 15:50:23 +0900 Subject: [PATCH 008/142] =?UTF-8?q?[Feature]=20=ED=94=84=EB=A1=A0=ED=8A=B8?= =?UTF-8?q?=EC=97=94=EB=93=9C=20CD=20=EC=A0=81=EC=9A=A9=20(#28)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ๐Ÿฅ… chore: frontend CD ์„ค์ • * ๐Ÿฅ… chore: needs ๋ณ€๊ฒฝ * :goal_net: chore: docker image ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ • * :goal_net: chore: cd ํ…Œ์ŠคํŠธ * ๐Ÿฅ… chore: cd test 2์ฐจ * ๐Ÿฅ… chore: front cd ์ˆ˜์ • 3 * ๐Ÿฅ… chore: dockercompose ์ˆ˜์ • * ๐Ÿฅ… chore: slack ์•Œ๋ฆผ ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ • * ๐Ÿฅ… chore: cd ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ • --- .github/workflows/frontend-cd.yml | 89 +++++++++++++++++++++++++++++++ .github/workflows/frontend-ci.yml | 42 ++------------- frontend/docker-compose.yml | 6 +-- frontend/scripts/dev-deploy.sh | 15 ++++++ 4 files changed, 108 insertions(+), 44 deletions(-) create mode 100644 .github/workflows/frontend-cd.yml create mode 100644 frontend/scripts/dev-deploy.sh diff --git a/.github/workflows/frontend-cd.yml b/.github/workflows/frontend-cd.yml new file mode 100644 index 00000000..159a9d29 --- /dev/null +++ b/.github/workflows/frontend-cd.yml @@ -0,0 +1,89 @@ +name: Frontend Dev CD +run-name: ${{ github.actor }}๊ฐ€ ์‹คํ–‰ํ•จ +on: + push: + branches: + - develop + paths: + - 'frontend/**' + - '.github/workflows/frontend-cd.yml' + - '.github/workflows/slack-notification.yml' + +jobs: + Register-Docker-Image: + runs-on: ubuntu-latest + defaults: + run: + working-directory: './frontend' + outputs: + status: ${{ job.status }} + steps: + - name: checkout + uses: actions/checkout@v3 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: docker registry login + uses: docker/login-action@v2 + with: + registry: ${{ secrets.NCP_DOCKER_REGISTRY }} + username: ${{ secrets.NCP_ACCESS_KEY }} + password: ${{ secrets.NCP_SECRET_KEY }} + + - name: build and push + id: docker_build + uses: docker/build-push-action@v3 + with: + context: frontend + file: frontend/Dockerfile + tags: | + ${{ secrets.NCP_DOCKER_REGISTRY }}/moyeo-client:latest + ${{ secrets.NCP_DOCKER_REGISTRY }}/moyeo-client:${{ github.sha }} + push: true + + - name: Image digest + run: echo ${{ steps.docker_build.outputs.digest }} + + CD: + needs: [Register-Docker-Image] + runs-on: ubuntu-latest + defaults: + run: + working-directory: './frontend' + outputs: + status: ${{ job.status }} + steps: + - name: deploy + uses: appleboy/ssh-action@master + with: + host: ${{secrets.FRONTEND_DEV_REMOTE_IP}} + username: ${{secrets.FRONTEND_DEV_REMOTE_SSH_ID}} + password: ${{secrets.FRONTEND_DEV_REMOTE_ADMIN_KEY}} + port: ${{secrets.FRONTEND_DEV_REMOTE_SSH_PORT}} + script: | + rm -rf web13-moyeomoyeo + + git clone git@github.com:boostcampwm-2022/web13-moyeomoyeo.git + + cd web13-moyeomoyeo + + git checkout -t origin/develop + + sudo chmod +x ./frontend/scripts/dev-deploy.sh + + ./frontend/scripts/dev-deploy.sh ${{ secrets.NCP_ACCESS_KEY }} ${{ secrets.NCP_SECRET_KEY }} ${{ secrets.NCP_DOCKER_REGISTRY }} ${{ secrets.DOCKER_CLIENT_IMAGE }} + + slack-notifications: + needs: [Register-Docker-Image, CD] + if: ${{ always() }} + uses: ./.github/workflows/slack-notification.yml + with: + title: ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์šฉ CD + status: '${{ needs.CD.outputs.status }}' + commit_url: ${{ github.event.pull_request.html_url || github.event.head_commit.url }} + secrets: + webhook_url: ${{ secrets.SLACK_NOTIFICATION_WEBHOOK_URL }} diff --git a/.github/workflows/frontend-ci.yml b/.github/workflows/frontend-ci.yml index d27b6e75..b998514c 100644 --- a/.github/workflows/frontend-ci.yml +++ b/.github/workflows/frontend-ci.yml @@ -20,7 +20,7 @@ jobs: steps: - name: checkout uses: actions/checkout@v3 - + - name: nodeJS uses: actions/setup-node@v3 with: @@ -137,50 +137,14 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: msg: ${{ steps.format_lighthouse_score.outputs.comments }} - docker: - needs: [CI] - runs-on: ubuntu-latest - defaults: - run: - working-directory: './frontend' - outputs: - status: ${{ job.status }} - steps: - - name: checkout - uses: actions/checkout@v3 - - - name: Set up QEMU - uses: docker/setup-qemu-action@v2 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - - - name: docker registry login - uses: docker/login-action@v2 - with: - registry: ${{ secrets.NCP_DOCKER_REGISTRY }} - username: ${{ secrets.NCP_ACCESS_KEY }} - password: ${{ secrets.NCP_SECRET_KEY }} - - - name: build and push - id: docker_build - uses: docker/build-push-action@v3 - with: - context: frontend - file: frontend/Dockerfile - tags: ${{ secrets.NCP_DOCKER_REGISTRY }}/moyeo-client:latest - push: true - - - name: Image digest - run: echo ${{ steps.docker_build.outputs.digest }} slack-notifications: - needs: [CI, docker, lhci] + needs: [CI, lhci] if: ${{ always() }} uses: ./.github/workflows/slack-notification.yml with: title: ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์šฉ CI - status: 'CI : ${{ needs.CI.outputs.status }} && docker : ${{ needs.docker.outputs.status }} && lhci : ${{ needs.lhci.outputs.status }}' + status: 'CI : ${{ needs.CI.outputs.status }} && lhci : ${{ needs.lhci.outputs.status }}' commit_url: ${{ github.event.pull_request.html_url || github.event.head_commit.url }} secrets: webhook_url: ${{ secrets.SLACK_NOTIFICATION_WEBHOOK_URL }} \ No newline at end of file diff --git a/frontend/docker-compose.yml b/frontend/docker-compose.yml index 2ad3aa3c..2289694f 100644 --- a/frontend/docker-compose.yml +++ b/frontend/docker-compose.yml @@ -3,11 +3,7 @@ version: '3.4' services: frontend: container_name: moyeo-client - image: frontend - build: - context: frontend - dockerfile: ./Dockerfile - target: development + image: ${DOCKER_CLIENT_IMAGE} environment: NODE_ENV: development ports: diff --git a/frontend/scripts/dev-deploy.sh b/frontend/scripts/dev-deploy.sh new file mode 100644 index 00000000..f7008b57 --- /dev/null +++ b/frontend/scripts/dev-deploy.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +echo $2 | docker login -u $1 $3 --password-stdin + +echo "docker has been logged in" + +cd frontend + +touch .env + +echo $4 > .env + +docker compose down --rmi all + +docker compose up -d \ No newline at end of file From 81a2f35737f3a1504a93bf6a54b63c5134d134e4 Mon Sep 17 00:00:00 2001 From: Gakko <90585081+pythonstrup@users.noreply.github.com> Date: Sun, 20 Nov 2022 20:02:54 +0900 Subject: [PATCH 009/142] =?UTF-8?q?[Feature]=20=EB=B0=B1=EC=97=94=EB=93=9C?= =?UTF-8?q?=20NGINX,=20MySQL,=20Network=20Docker=20=ED=99=98=EA=B2=BD=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95=20(#30)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ๐Ÿฅ… chore: mysql docker setting * ๐Ÿฅ… chore: ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์šฉ CD shell script ์ˆ˜์ • * ๐Ÿฅ… chore: Dockerfile ์ •๋ฆฌ * ๐Ÿฅ… chore: nginx dockerfile ์ž‘์„ฑ * ๐Ÿฅ… chore: nginx config ์ž‘์„ฑ * ๐Ÿฅ… chore: docker compose nginx & networks ์„ค์ • * ๐Ÿฅ… chore: nginx dockerfile expose ์ถ”๊ฐ€ * ๐Ÿฅ… chore: ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์šฉ CD ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • * ๐Ÿฅ… chore: docker compose MySQL port ์„ค์ • ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: local ์ „์šฉ docker compose ์ž‘์„ฑ * ๐Ÿฅ… chore: ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์šฉ CD ํ™˜๊ฒฝ๋ณ€์ˆ˜ secrets ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: nginx config proxy http version ์„ค์ • --- .github/workflows/backend-dev-cd.yml | 2 +- backend/Dockerfile | 11 ++++++ backend/docker-compose.local.yml | 55 ++++++++++++++++++++++++++++ backend/docker-compose.yml | 43 +++++++++++++++++++++- backend/dockerfile | 7 ---- backend/nginx.Dockerfile | 5 +++ backend/nginx.conf | 14 +++++++ backend/scripts/dev-deploy.sh | 2 - 8 files changed, 127 insertions(+), 12 deletions(-) create mode 100644 backend/Dockerfile create mode 100644 backend/docker-compose.local.yml delete mode 100644 backend/dockerfile create mode 100644 backend/nginx.Dockerfile create mode 100644 backend/nginx.conf diff --git a/.github/workflows/backend-dev-cd.yml b/.github/workflows/backend-dev-cd.yml index 8af24e43..1c260068 100644 --- a/.github/workflows/backend-dev-cd.yml +++ b/.github/workflows/backend-dev-cd.yml @@ -76,7 +76,7 @@ jobs: sudo chmod +x ./backend/scripts/dev-deploy.sh - ./backend/scripts/dev-deploy.sh ${{ secrets.NCP_ACCESS_KEY }} ${{ secrets.NCP_SECRET_KEY }} ${{ secrets.NCP_DOCKER_REGISTRY }} ${{ secrets.DOCKER_SERVER_IMAGE }} + ./backend/scripts/dev-deploy.sh ${{ secrets.NCP_ACCESS_KEY }} ${{ secrets.NCP_SECRET_KEY }} ${{ secrets.NCP_DOCKER_REGISTRY }} ${{ secrets.BACKEND_DEVELOPMENT_ENVIRONMENT }} slack-notifications: needs: [Register-Docker-Image, CD] diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 00000000..26fb64a5 --- /dev/null +++ b/backend/Dockerfile @@ -0,0 +1,11 @@ +FROM node:16.18.1-alpine + +WORKDIR /usr/src/app + +COPY package*.json ./ + +RUN npm install + +COPY . . + +EXPOSE 3000 diff --git a/backend/docker-compose.local.yml b/backend/docker-compose.local.yml new file mode 100644 index 00000000..1f3ec3ba --- /dev/null +++ b/backend/docker-compose.local.yml @@ -0,0 +1,55 @@ +version: '3.4' + +services: + nginx: + container_name: moyeo-nginx + build: + context: . + dockerfile: nginx.Dockerfile + restart: always + ports: + - 80:80 + depends_on: + - nest-server + networks: + - backbone + + nest-server: + container_name: moyeo-server + build: + context: . + dockerfile: Dockerfile + environment: + NODE_ENV: development + ports: + - 3000:3000 + command: npm run start:dev + networks: + - backbone + volumes: + - .:/usr/src/app + - /usr/src/app/node_modules + + db: + container_name: moyeo-db + image: mysql:8.0 + restart: always + ports: + - ${MYSQL_PORT}:3306 + environment: + MYSQL_ROOT_PASSWORD: test + MYSQL_DATABASE: test + MYSQL_USER: test + MYSQL_PASSWORD: test + volumes: + - ~/db:/var/lib/mysql + command: + - --character-set-server=utf8mb4 + - --collation-server=utf8mb4_unicode_ci + networks: + - backbone + +networks: + backbone: + name: backbone + driver: bridge \ No newline at end of file diff --git a/backend/docker-compose.yml b/backend/docker-compose.yml index b25c02e1..d10ff686 100644 --- a/backend/docker-compose.yml +++ b/backend/docker-compose.yml @@ -1,11 +1,50 @@ version: '3.4' services: - backend: + nginx: + container_name: moyeo-nginx + build: + context: . + dockerfile: nginx.Dockerfile + restart: always + ports: + - 80:80 + depends_on: + - nest-server + networks: + - backbone + + nest-server: container_name: moyeo-server image: ${DOCKER_SERVER_IMAGE} environment: NODE_ENV: development ports: - 3000:3000 - command: npm run dev \ No newline at end of file + command: npm run start:dev + networks: + - backbone + + db: + container_name: moyeo-db + image: mysql:8.0 + restart: always + ports: + - ${MYSQL_PORT}:3306 + environment: + MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} + MYSQL_DATABASE: ${MYSQL_DATABASE} + MYSQL_USER: ${MYSQL_USER} + MYSQL_PASSWORD: ${MYSQL_PASSWORD} + volumes: + - ~/db:/var/lib/mysql + command: + - --character-set-server=utf8mb4 + - --collation-server=utf8mb4_unicode_ci + networks: + - backbone + +networks: + backbone: + name: backbone + driver: bridge \ No newline at end of file diff --git a/backend/dockerfile b/backend/dockerfile deleted file mode 100644 index c0f0a5dd..00000000 --- a/backend/dockerfile +++ /dev/null @@ -1,7 +0,0 @@ -FROM node:16.18.1-alpine As development -ARG GIT_COMMIT=unspecified -LABEL git_commit=$GIT_COMMIT -WORKDIR /usr/src/app -COPY package*.json ./ -RUN npm install -COPY . . diff --git a/backend/nginx.Dockerfile b/backend/nginx.Dockerfile new file mode 100644 index 00000000..ca1d03e6 --- /dev/null +++ b/backend/nginx.Dockerfile @@ -0,0 +1,5 @@ +FROM nginx + +COPY nginx.conf /etc/nginx/conf.d + +EXPOSE 80 diff --git a/backend/nginx.conf b/backend/nginx.conf new file mode 100644 index 00000000..6d7f6f05 --- /dev/null +++ b/backend/nginx.conf @@ -0,0 +1,14 @@ + +upstream backend-server { + server moyeo-server:3000; +} + +server { + listen 80 default_server; + server_name _; + + location / { + proxy_pass http://backend-server; + proxy_http_version 1.1; + } +} diff --git a/backend/scripts/dev-deploy.sh b/backend/scripts/dev-deploy.sh index 2487a73f..bae00e81 100644 --- a/backend/scripts/dev-deploy.sh +++ b/backend/scripts/dev-deploy.sh @@ -10,6 +10,4 @@ touch .env echo $4 > .env -docker-compose down --rmi all - docker-compose up -d \ No newline at end of file From ea00fda73ddf24f944be19523b1454ca92910896 Mon Sep 17 00:00:00 2001 From: MinGyeong Park <37508296+kong430@users.noreply.github.com> Date: Mon, 21 Nov 2022 13:32:54 +0900 Subject: [PATCH 010/142] =?UTF-8?q?[Feature]=20Footer=20=EA=B3=B5=ED=86=B5?= =?UTF-8?q?=20=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20(#32)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :goal_net: chore: tsconfig declaration ์ œ๊ฑฐ * :sparkles: feature: globalStyle(fontSize, boxSizing) ์ ์šฉ * :sparkles: feature: Footer ์ปดํฌ๋„ŒํŠธ ๋ฐ ์Šคํ† ๋ฆฌ ์ƒ์„ฑ * :sparkles: feature: footer tab ํด๋ฆญ ์‹œ ํŽ˜์ด์ง€ ์ด๋™ * :recycle: refactor: ์Šคํƒ€์ผ ํŒŒ์ผ ๋ถ„๋ฆฌ * :bug: fix: style.tsx์—์„œ style.ts๋กœ ๋ณ€๊ฒฝ * :sparkles: feature: PageLayout ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ ๋ฐ page content ์Šคํฌ๋กค์ถ”๊ฐ€ --- frontend/.storybook/preview.tsx | 4 ++ .../src/components/Footer/Footer.stories.tsx | 11 ++++ frontend/src/components/Footer/index.tsx | 54 +++++++++++++++++++ frontend/src/components/StatCounter/index.tsx | 2 +- frontend/src/components/common/PageLayout.tsx | 31 +++++++++++ frontend/src/pages/My.tsx | 7 +++ frontend/src/pages/Notification.tsx | 7 +++ frontend/src/pages/_app.tsx | 4 +- frontend/src/pages/index.tsx | 54 ++----------------- frontend/src/styles/GlobalStyles.tsx | 7 +++ frontend/tsconfig.json | 1 - 11 files changed, 129 insertions(+), 53 deletions(-) create mode 100644 frontend/src/components/Footer/Footer.stories.tsx create mode 100644 frontend/src/components/Footer/index.tsx create mode 100644 frontend/src/components/common/PageLayout.tsx create mode 100644 frontend/src/pages/My.tsx create mode 100644 frontend/src/pages/Notification.tsx create mode 100644 frontend/src/styles/GlobalStyles.tsx diff --git a/frontend/.storybook/preview.tsx b/frontend/.storybook/preview.tsx index 04469395..c4b4a10a 100644 --- a/frontend/.storybook/preview.tsx +++ b/frontend/.storybook/preview.tsx @@ -1,11 +1,15 @@ import { ReactNode } from 'react'; import { MantineProvider } from '@mantine/core'; import theme from '../src/styles/theme'; +import GlobalStyles from '@styles/GlobalStyles'; +import CustomFonts from '@styles/CustomFont'; const ThemeWrapper = (props: { children: ReactNode }) => { return ( {props.children} + + ); }; diff --git a/frontend/src/components/Footer/Footer.stories.tsx b/frontend/src/components/Footer/Footer.stories.tsx new file mode 100644 index 00000000..8671a37a --- /dev/null +++ b/frontend/src/components/Footer/Footer.stories.tsx @@ -0,0 +1,11 @@ +import { ComponentMeta, ComponentStory } from '@storybook/react'; +import Footer from '.'; + +export default { + title: 'Component/Footer', + component: Footer, +} as ComponentMeta; + +const Template: ComponentStory = (args) =>
    ; + +export const _Footer = Template.bind({}); diff --git a/frontend/src/components/Footer/index.tsx b/frontend/src/components/Footer/index.tsx new file mode 100644 index 00000000..b681e3d6 --- /dev/null +++ b/frontend/src/components/Footer/index.tsx @@ -0,0 +1,54 @@ +import styled from '@emotion/styled'; +import { IconBell, IconHome2, IconUser } from '@tabler/icons'; +import { useTheme } from '@emotion/react'; +import Link from 'next/link'; +import { useRouter } from 'next/router'; + +const Footer = () => { + const { + colors: { indigo, gray }, + } = useTheme(); + const { pathname } = useRouter(); + + return ( + + + + + + + + + + + + + + + + + + ); +}; + +const FooterWrapper = styled.div` + display: flex; + width: 100%; + height: 5.6rem; + justify-content: space-between; + background-color: #ffffff; + box-shadow: 0px -4px 4px rgba(0, 0, 0, 0.1); +`; + +const TabDiv = styled.div` + display: flex; + width: 100%; + height: 100%; + align-items: center; + justify-content: center; + &:hover { + cursor: pointer; + } +`; + +export default Footer; diff --git a/frontend/src/components/StatCounter/index.tsx b/frontend/src/components/StatCounter/index.tsx index 130b5252..458bb39f 100644 --- a/frontend/src/components/StatCounter/index.tsx +++ b/frontend/src/components/StatCounter/index.tsx @@ -3,7 +3,7 @@ import { useTheme } from '@emotion/react'; import { IconHeart, IconBookmark, IconMessageCircle2 } from '@tabler/icons'; import { Text } from '@mantine/core'; -export interface Props { +interface Props { /** * Stat์˜ ์ข…๋ฅ˜๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. * ๊ฐ๊ฐ ์ข‹์•„์š”, ๋Œ“๊ธ€, ์Šคํฌ๋žฉ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. diff --git a/frontend/src/components/common/PageLayout.tsx b/frontend/src/components/common/PageLayout.tsx new file mode 100644 index 00000000..cb32ef54 --- /dev/null +++ b/frontend/src/components/common/PageLayout.tsx @@ -0,0 +1,31 @@ +import Footer from '@components/Footer'; +import { PropsWithChildren } from 'react'; +import styled from '@emotion/styled'; + +interface Props extends PropsWithChildren {} + +const PageLayout = ({ children }: Props) => { + return ( + +
    header
    + {children} +
    + + ); +}; + +const PageWrapper = styled.div` + display: flex; + flex-direction: column; + height: 100vh; + align-items: center; + gap: 0.5rem; +`; + +const ContentWrapper = styled.div` + width: 100%; + height: 100%; + overflow: auto; +`; + +export default PageLayout; diff --git a/frontend/src/pages/My.tsx b/frontend/src/pages/My.tsx new file mode 100644 index 00000000..1a175660 --- /dev/null +++ b/frontend/src/pages/My.tsx @@ -0,0 +1,7 @@ +import PageLayout from '@components/common/PageLayout'; + +const My = () => { + return my page; +}; + +export default My; diff --git a/frontend/src/pages/Notification.tsx b/frontend/src/pages/Notification.tsx new file mode 100644 index 00000000..08c93d4d --- /dev/null +++ b/frontend/src/pages/Notification.tsx @@ -0,0 +1,7 @@ +import PageLayout from '@components/common/PageLayout'; + +const Notification = () => { + return notification page; +}; + +export default Notification; diff --git a/frontend/src/pages/_app.tsx b/frontend/src/pages/_app.tsx index 1661ad12..1198c6a9 100644 --- a/frontend/src/pages/_app.tsx +++ b/frontend/src/pages/_app.tsx @@ -3,10 +3,10 @@ import Head from 'next/head'; import { AppProps } from 'next/app'; import { QueryClientProvider, QueryClient } from '@tanstack/react-query'; import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; - import RouterTransition from '@components/RouterTransition'; import theme from '@styles/theme'; import CustomFonts from '@styles/CustomFont'; +import GlobalStyles from '@styles/GlobalStyles'; const queryClient = new QueryClient(); @@ -19,9 +19,9 @@ export default function App({ Component, pageProps }: AppProps) { - + diff --git a/frontend/src/pages/index.tsx b/frontend/src/pages/index.tsx index d9d391d8..1b6baf43 100644 --- a/frontend/src/pages/index.tsx +++ b/frontend/src/pages/index.tsx @@ -1,51 +1,7 @@ -import Head from 'next/head'; -import { Button, Slider, createPolymorphicComponent, ButtonProps } from '@mantine/core'; -import { IconDatabase } from '@tabler/icons'; -import styled from '@emotion/styled'; -import { useRouter } from 'next/router'; +import PageLayout from '@components/common/PageLayout'; -const _StyledButton = styled(Button)` - box-shadow: rgba(0, 0, 0, 0.24) 0px 3px 8px; - font-weight: ${({ theme }) => theme.headings.fontWeight}; - color: ${({ theme }) => theme.colors.indigo[8]}; -`; +const Main = () => { + return my page; +}; -const StyledButton = createPolymorphicComponent<'button', ButtonProps>(_StyledButton); - -const StyledSlider = styled(Slider)` - & .mantine-Slider-bar { - background-color: pink; - } - - & .mantine-Slider-thumb { - border-color: pink; - background-color: white; - width: 24px; - height: 24px; - } -`; - -export default function Home() { - const router = useRouter(); - - const handleClick = () => { - void router.push('/'); - }; - - return ( -
    - - Create next appp - - - -
    - Connect to database -
    - -
    - -
    -
    - ); -} +export default Main; diff --git a/frontend/src/styles/GlobalStyles.tsx b/frontend/src/styles/GlobalStyles.tsx new file mode 100644 index 00000000..b91f8013 --- /dev/null +++ b/frontend/src/styles/GlobalStyles.tsx @@ -0,0 +1,7 @@ +import { Global } from '@mantine/core'; + +const GlobalStyles = () => { + return ; +}; + +export default GlobalStyles; diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json index 76b83145..d606b357 100644 --- a/frontend/tsconfig.json +++ b/frontend/tsconfig.json @@ -3,7 +3,6 @@ "allowJs": true, "allowUnreachableCode": false, "allowUnusedLabels": false, - "declaration": true, "esModuleInterop": true, "forceConsistentCasingInFileNames": true, "isolatedModules": true, From 500f92a0c10be0ef904fd50b025c379602076eed Mon Sep 17 00:00:00 2001 From: Gakko <90585081+pythonstrup@users.noreply.github.com> Date: Mon, 21 Nov 2022 15:47:25 +0900 Subject: [PATCH 011/142] =?UTF-8?q?[BUGFIX]=20=EB=B0=B1=EC=97=94=EB=93=9C?= =?UTF-8?q?=20CD=20=ED=99=98=EA=B2=BD=EB=B3=80=EC=88=98=20=EB=94=94?= =?UTF-8?q?=EB=B2=84=EA=B7=B8=20(#36)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ๐Ÿฅ… chore: ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์šฉ CD ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์šฉ CD docker image environment ์„ค์ • * ๐Ÿฅ… chore: docker compose ์„ค์ • ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: docker compose ๋ช…๋ น์–ด ๋ณ€๊ฒฝ * ๐Ÿ› fix: ๋ฐฑ์—”๋“œ CD ๋””๋ฒ„๊ทธ ์™„๋ฃŒ --- .github/workflows/backend-dev-cd.yml | 5 +++++ backend/docker-compose.local.yml | 16 ++++++++-------- backend/docker-compose.yml | 15 +++++++-------- backend/scripts/dev-deploy.sh | 10 ++++++++-- 4 files changed, 28 insertions(+), 18 deletions(-) diff --git a/.github/workflows/backend-dev-cd.yml b/.github/workflows/backend-dev-cd.yml index 1c260068..34a5ccca 100644 --- a/.github/workflows/backend-dev-cd.yml +++ b/.github/workflows/backend-dev-cd.yml @@ -21,6 +21,11 @@ jobs: - name: checkout uses: actions/checkout@v3 + - name: backend environment setting + run: | + touch .env + echo -e ${{ secrets.BACKEND_DEVELOPMENT_ENVIRONMENT }} > .env + - name: Set up QEMU uses: docker/setup-qemu-action@v2 diff --git a/backend/docker-compose.local.yml b/backend/docker-compose.local.yml index 1f3ec3ba..a104d71b 100644 --- a/backend/docker-compose.local.yml +++ b/backend/docker-compose.local.yml @@ -1,7 +1,7 @@ -version: '3.4' +version: '3.9' services: - nginx: + moyeo-nginx: container_name: moyeo-nginx build: context: . @@ -10,13 +10,13 @@ services: ports: - 80:80 depends_on: - - nest-server + - moyeo-server networks: - backbone - nest-server: + moyeo-server: container_name: moyeo-server - build: + build: context: . dockerfile: Dockerfile environment: @@ -30,7 +30,7 @@ services: - .:/usr/src/app - /usr/src/app/node_modules - db: + moyeo-db: container_name: moyeo-db image: mysql:8.0 restart: always @@ -46,10 +46,10 @@ services: command: - --character-set-server=utf8mb4 - --collation-server=utf8mb4_unicode_ci - networks: + networks: - backbone networks: backbone: name: backbone - driver: bridge \ No newline at end of file + driver: bridge diff --git a/backend/docker-compose.yml b/backend/docker-compose.yml index d10ff686..b1219f0b 100644 --- a/backend/docker-compose.yml +++ b/backend/docker-compose.yml @@ -1,7 +1,7 @@ -version: '3.4' +version: '3.9' services: - nginx: + moyeo-nginx: container_name: moyeo-nginx build: context: . @@ -10,11 +10,11 @@ services: ports: - 80:80 depends_on: - - nest-server + - moyeo-server networks: - backbone - nest-server: + moyeo-server: container_name: moyeo-server image: ${DOCKER_SERVER_IMAGE} environment: @@ -25,7 +25,7 @@ services: networks: - backbone - db: + moyeo-db: container_name: moyeo-db image: mysql:8.0 restart: always @@ -41,10 +41,9 @@ services: command: - --character-set-server=utf8mb4 - --collation-server=utf8mb4_unicode_ci - networks: + networks: - backbone networks: backbone: - name: backbone - driver: bridge \ No newline at end of file + driver: bridge diff --git a/backend/scripts/dev-deploy.sh b/backend/scripts/dev-deploy.sh index bae00e81..d492e329 100644 --- a/backend/scripts/dev-deploy.sh +++ b/backend/scripts/dev-deploy.sh @@ -8,6 +8,12 @@ cd backend touch .env -echo $4 > .env +echo -e $4 > .env -docker-compose up -d \ No newline at end of file +# ๋„์ปค ์ปจํ…Œ์ด๋„ˆ ์ „์ฒด ์‚ญ์ œ +docker rm `docker ps -a -q` + +# ๋„์ปค ์ด๋ฏธ์ง€ ์ „์ฒด ์‚ญ์ œ +docker compose down --rmi all + +docker compose up -d --build \ No newline at end of file From 822040e22c1577ad44dd4a2214c9f81b7e08e9c8 Mon Sep 17 00:00:00 2001 From: MinGyeong Park <37508296+kong430@users.noreply.github.com> Date: Mon, 21 Nov 2022 15:59:35 +0900 Subject: [PATCH 012/142] =?UTF-8?q?[Feature]=20=EA=B9=83=ED=97=99=20?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=ED=8E=98=EC=9D=B4=EC=A7=80=20?= =?UTF-8?q?=EB=A7=88=ED=81=AC=EC=97=85=20(#38)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :goal_net: chore: svgr ์ ์šฉ * :sparkles: feature: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋งˆํฌ์—… * :goal_net: chore: path alias ์ˆ˜์ • * :sparkles: feature: GitLoginButton ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ * :sparkles: feature: ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ hover css ์ถ”๊ฐ€ * :goal_net: chore: svgr ์ ์šฉ * :goal_net: chore: path alias ์ˆ˜์ • * :sparkles: feature: develop ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋ฐ˜์˜ * :sparkles: feature: GitLoginButton ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ * :sparkles: feature: ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ hover css ์ถ”๊ฐ€ * :bug: fix: path alias ๋ฐ”๋€ ๋ถ€๋ถ„ ์ ์šฉ * :sparkles: feature: PageLayout footer optional ์ ์šฉ * :sparkles: feature: GitLoginButton story ์ถ”๊ฐ€ * :recycle: refactor: GitLoginButton ์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ ๋ช… index.tsx๋กœ ์ˆ˜์ • * :recycle: refactor: #ffffff ์ƒ‰์ƒ theme์—์„œ ๊ฐ€์ ธ์™€์„œ ์‚ฌ์šฉํ•˜๋„๋ก ๋ณ€๊ฒฝ * :recycle: refactor: GitLoginButton ์ปดํฌ๋„ŒํŠธ๋ช… Index๋กœ ๋˜์–ด ์žˆ๋˜ ๊ฒƒ GitLoginButton์œผ๋กœ ๋ณ€๊ฒฝ * :goal_net: chore: add custom type - svg * :goal_net: chore: tsconfig ํŒŒ์ผ prettier ์ ์šฉ --- frontend/next.config.js | 7 + frontend/package-lock.json | 613 ++++++++++++++++++ frontend/package.json | 1 + frontend/public/icons/logo.svg | 11 + frontend/src/components/Footer/index.tsx | 2 +- frontend/src/components/common/PageLayout.tsx | 8 +- .../gitLoginButton/GitLoginButton.stories.tsx | 11 + .../src/components/gitLoginButton/index.tsx | 38 ++ frontend/src/pages/Login.tsx | 55 ++ frontend/src/pages/My.tsx | 2 +- frontend/src/pages/Notification.tsx | 2 +- frontend/src/pages/index.tsx | 2 +- frontend/src/typings/custom.d.ts | 5 + frontend/tsconfig.json | 10 +- 14 files changed, 757 insertions(+), 10 deletions(-) create mode 100644 frontend/public/icons/logo.svg create mode 100644 frontend/src/components/gitLoginButton/GitLoginButton.stories.tsx create mode 100644 frontend/src/components/gitLoginButton/index.tsx create mode 100644 frontend/src/pages/Login.tsx create mode 100644 frontend/src/typings/custom.d.ts diff --git a/frontend/next.config.js b/frontend/next.config.js index ae887958..6ce4fbe4 100644 --- a/frontend/next.config.js +++ b/frontend/next.config.js @@ -2,6 +2,13 @@ const nextConfig = { reactStrictMode: true, swcMinify: true, + webpack(config) { + config.module.rules.push({ + test: /\.svg$/i, + use: ["@svgr/webpack"] + }); + return config; + } } module.exports = nextConfig diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 92eafaae..a565aacd 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -32,6 +32,7 @@ "@storybook/manager-webpack5": "^6.5.13", "@storybook/react": "^6.5.13", "@storybook/testing-library": "^0.0.13", + "@svgr/webpack": "^6.5.1", "@types/node": "^18.11.9", "@types/react": "^18.0.25", "@types/react-dom": "^18.0.9", @@ -1465,6 +1466,21 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-react-constant-elements": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.20.2.tgz", + "integrity": "sha512-KS/G8YI8uwMGKErLFOHS/ekhqdHhpEloxs43NecQHVgo2QuQSyJhGIY1fL8UGl9wy5ItVwwoUL4YxVqsplGq2g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-transform-react-display-name": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", @@ -9505,6 +9521,287 @@ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, + "node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz", + "integrity": "sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.5.0.tgz", + "integrity": "sha512-8zYdkym7qNyfXpWvu4yq46k41pyNM9SOstoWhKlm+IfdCE1DdnRKeMUPsWIEO/DEkaWxJ8T9esNdG3QwQ93jBA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.5.0.tgz", + "integrity": "sha512-NFdxMq3xA42Kb1UbzCVxplUc0iqSyM9X8kopImvFnB+uSDdzIHOdbs1op8ofAvVRtbg4oZiyRl3fTYeKcOe9Iw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz", + "integrity": "sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz", + "integrity": "sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz", + "integrity": "sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz", + "integrity": "sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz", + "integrity": "sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-preset": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.1.tgz", + "integrity": "sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==", + "dev": true, + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "^6.5.1", + "@svgr/babel-plugin-remove-jsx-attribute": "*", + "@svgr/babel-plugin-remove-jsx-empty-expression": "*", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.1", + "@svgr/babel-plugin-svg-dynamic-title": "^6.5.1", + "@svgr/babel-plugin-svg-em-dimensions": "^6.5.1", + "@svgr/babel-plugin-transform-react-native-svg": "^6.5.1", + "@svgr/babel-plugin-transform-svg-component": "^6.5.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/core": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.5.1.tgz", + "integrity": "sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.19.6", + "@svgr/babel-preset": "^6.5.1", + "@svgr/plugin-jsx": "^6.5.1", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/core/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@svgr/hast-util-to-babel-ast": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz", + "integrity": "sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.0", + "entities": "^4.4.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/hast-util-to-babel-ast/node_modules/entities": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", + "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/@svgr/plugin-jsx": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz", + "integrity": "sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.19.6", + "@svgr/babel-preset": "^6.5.1", + "@svgr/hast-util-to-babel-ast": "^6.5.1", + "svg-parser": "^2.0.4" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "^6.0.0" + } + }, + "node_modules/@svgr/plugin-svgo": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz", + "integrity": "sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==", + "dev": true, + "dependencies": { + "cosmiconfig": "^7.0.1", + "deepmerge": "^4.2.2", + "svgo": "^2.8.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "*" + } + }, + "node_modules/@svgr/webpack": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.5.1.tgz", + "integrity": "sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.19.6", + "@babel/plugin-transform-react-constant-elements": "^7.18.12", + "@babel/preset-env": "^7.19.4", + "@babel/preset-react": "^7.18.6", + "@babel/preset-typescript": "^7.18.6", + "@svgr/core": "^6.5.1", + "@svgr/plugin-jsx": "^6.5.1", + "@svgr/plugin-svgo": "^6.5.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, "node_modules/@swc/helpers": { "version": "0.4.11", "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.11.tgz", @@ -9708,6 +10005,15 @@ "@testing-library/dom": ">=7.21.4" } }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/@types/aria-query": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz", @@ -13576,6 +13882,28 @@ "url": "https://github.com/sponsors/fb55" } }, + "node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-tree/node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/css-what": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", @@ -13600,6 +13928,18 @@ "node": ">=4" } }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/csstype": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", @@ -19211,6 +19551,12 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, "node_modules/mdurl": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", @@ -24147,6 +24493,48 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", + "dev": true + }, + "node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/svgo/node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, "node_modules/symbol.prototype.description": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/symbol.prototype.description/-/symbol.prototype.description-1.0.5.tgz", @@ -27168,6 +27556,15 @@ "@babel/helper-plugin-utils": "^7.18.6" } }, + "@babel/plugin-transform-react-constant-elements": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.20.2.tgz", + "integrity": "sha512-KS/G8YI8uwMGKErLFOHS/ekhqdHhpEloxs43NecQHVgo2QuQSyJhGIY1fL8UGl9wy5ItVwwoUL4YxVqsplGq2g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.20.2" + } + }, "@babel/plugin-transform-react-display-name": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", @@ -33280,6 +33677,148 @@ "resolve-from": "^5.0.0" } }, + "@svgr/babel-plugin-add-jsx-attribute": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz", + "integrity": "sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==", + "dev": true + }, + "@svgr/babel-plugin-remove-jsx-attribute": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.5.0.tgz", + "integrity": "sha512-8zYdkym7qNyfXpWvu4yq46k41pyNM9SOstoWhKlm+IfdCE1DdnRKeMUPsWIEO/DEkaWxJ8T9esNdG3QwQ93jBA==", + "dev": true + }, + "@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.5.0.tgz", + "integrity": "sha512-NFdxMq3xA42Kb1UbzCVxplUc0iqSyM9X8kopImvFnB+uSDdzIHOdbs1op8ofAvVRtbg4oZiyRl3fTYeKcOe9Iw==", + "dev": true + }, + "@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz", + "integrity": "sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==", + "dev": true + }, + "@svgr/babel-plugin-svg-dynamic-title": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz", + "integrity": "sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==", + "dev": true + }, + "@svgr/babel-plugin-svg-em-dimensions": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz", + "integrity": "sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==", + "dev": true + }, + "@svgr/babel-plugin-transform-react-native-svg": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz", + "integrity": "sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==", + "dev": true + }, + "@svgr/babel-plugin-transform-svg-component": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz", + "integrity": "sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==", + "dev": true + }, + "@svgr/babel-preset": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.1.tgz", + "integrity": "sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==", + "dev": true, + "requires": { + "@svgr/babel-plugin-add-jsx-attribute": "^6.5.1", + "@svgr/babel-plugin-remove-jsx-attribute": "*", + "@svgr/babel-plugin-remove-jsx-empty-expression": "*", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.1", + "@svgr/babel-plugin-svg-dynamic-title": "^6.5.1", + "@svgr/babel-plugin-svg-em-dimensions": "^6.5.1", + "@svgr/babel-plugin-transform-react-native-svg": "^6.5.1", + "@svgr/babel-plugin-transform-svg-component": "^6.5.1" + } + }, + "@svgr/core": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.5.1.tgz", + "integrity": "sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==", + "dev": true, + "requires": { + "@babel/core": "^7.19.6", + "@svgr/babel-preset": "^6.5.1", + "@svgr/plugin-jsx": "^6.5.1", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.1" + }, + "dependencies": { + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + } + } + }, + "@svgr/hast-util-to-babel-ast": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz", + "integrity": "sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==", + "dev": true, + "requires": { + "@babel/types": "^7.20.0", + "entities": "^4.4.0" + }, + "dependencies": { + "entities": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", + "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", + "dev": true + } + } + }, + "@svgr/plugin-jsx": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz", + "integrity": "sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==", + "dev": true, + "requires": { + "@babel/core": "^7.19.6", + "@svgr/babel-preset": "^6.5.1", + "@svgr/hast-util-to-babel-ast": "^6.5.1", + "svg-parser": "^2.0.4" + } + }, + "@svgr/plugin-svgo": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz", + "integrity": "sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==", + "dev": true, + "requires": { + "cosmiconfig": "^7.0.1", + "deepmerge": "^4.2.2", + "svgo": "^2.8.0" + } + }, + "@svgr/webpack": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.5.1.tgz", + "integrity": "sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA==", + "dev": true, + "requires": { + "@babel/core": "^7.19.6", + "@babel/plugin-transform-react-constant-elements": "^7.18.12", + "@babel/preset-env": "^7.19.4", + "@babel/preset-react": "^7.18.6", + "@babel/preset-typescript": "^7.18.6", + "@svgr/core": "^6.5.1", + "@svgr/plugin-jsx": "^6.5.1", + "@svgr/plugin-svgo": "^6.5.1" + } + }, "@swc/helpers": { "version": "0.4.11", "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.11.tgz", @@ -33401,6 +33940,12 @@ "@babel/runtime": "^7.12.5" } }, + "@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true + }, "@types/aria-query": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz", @@ -36477,6 +37022,24 @@ "nth-check": "^2.0.1" } }, + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "requires": { + "mdn-data": "2.0.14", + "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 + } + } + }, "css-what": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", @@ -36489,6 +37052,15 @@ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true }, + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "requires": { + "css-tree": "^1.1.2" + } + }, "csstype": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", @@ -40727,6 +41299,12 @@ "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", "dev": true }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, "mdurl": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", @@ -44589,6 +45167,41 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, + "svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", + "dev": true + }, + "svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "requires": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + } + } + }, "symbol.prototype.description": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/symbol.prototype.description/-/symbol.prototype.description-1.0.5.tgz", diff --git a/frontend/package.json b/frontend/package.json index affc6a57..98060a06 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -48,6 +48,7 @@ "@storybook/manager-webpack5": "^6.5.13", "@storybook/react": "^6.5.13", "@storybook/testing-library": "^0.0.13", + "@svgr/webpack": "^6.5.1", "@types/node": "^18.11.9", "@types/react": "^18.0.25", "@types/react-dom": "^18.0.9", diff --git a/frontend/public/icons/logo.svg b/frontend/public/icons/logo.svg new file mode 100644 index 00000000..0b6fa0ac --- /dev/null +++ b/frontend/public/icons/logo.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/frontend/src/components/Footer/index.tsx b/frontend/src/components/Footer/index.tsx index b681e3d6..869846f6 100644 --- a/frontend/src/components/Footer/index.tsx +++ b/frontend/src/components/Footer/index.tsx @@ -36,7 +36,7 @@ const FooterWrapper = styled.div` width: 100%; height: 5.6rem; justify-content: space-between; - background-color: #ffffff; + background-color: ${({ theme }) => theme.white}; box-shadow: 0px -4px 4px rgba(0, 0, 0, 0.1); `; diff --git a/frontend/src/components/common/PageLayout.tsx b/frontend/src/components/common/PageLayout.tsx index cb32ef54..621cacc4 100644 --- a/frontend/src/components/common/PageLayout.tsx +++ b/frontend/src/components/common/PageLayout.tsx @@ -2,14 +2,16 @@ import Footer from '@components/Footer'; import { PropsWithChildren } from 'react'; import styled from '@emotion/styled'; -interface Props extends PropsWithChildren {} +interface Props extends PropsWithChildren { + footer?: boolean; +} -const PageLayout = ({ children }: Props) => { +const PageLayout = ({ footer, children }: Props) => { return (
    header
    {children} -
    + {footer &&
    } ); }; diff --git a/frontend/src/components/gitLoginButton/GitLoginButton.stories.tsx b/frontend/src/components/gitLoginButton/GitLoginButton.stories.tsx new file mode 100644 index 00000000..a6fb3b54 --- /dev/null +++ b/frontend/src/components/gitLoginButton/GitLoginButton.stories.tsx @@ -0,0 +1,11 @@ +import { ComponentMeta, ComponentStory } from '@storybook/react'; +import GitLoginButton from '.'; + +export default { + title: 'Component/GitLoginButton', + component: GitLoginButton, +} as ComponentMeta; + +const Template: ComponentStory = () => ; + +export const _GitLoginButton = Template.bind({}); diff --git a/frontend/src/components/gitLoginButton/index.tsx b/frontend/src/components/gitLoginButton/index.tsx new file mode 100644 index 00000000..4f004617 --- /dev/null +++ b/frontend/src/components/gitLoginButton/index.tsx @@ -0,0 +1,38 @@ +import { IconBrandGithub } from '@tabler/icons'; +import styled from '@emotion/styled'; +import { useTheme } from '@emotion/react'; + +const GitLoginButton = () => { + const { white } = useTheme(); + + return ( + + + Github๋กœ ๋กœ๊ทธ์ธ + + ); +}; + +const LoginButton = styled.button` + display: flex; + gap: 0.8rem; + width: 34.2rem; + height: 5.6rem; + justify-content: center; + align-items: center; + background-color: ${({ theme }) => theme.colors.dark[9]}; + border: none; + border-radius: 8px; + &:hover { + cursor: pointer; + background-color: ${({ theme }) => theme.colors.dark[4]}; + } +`; + +const GithubLoginText = styled.span` + color: ${({ theme }) => theme.white}; + font-size: 1.6rem; + font-weight: 800; +`; + +export default GitLoginButton; diff --git a/frontend/src/pages/Login.tsx b/frontend/src/pages/Login.tsx new file mode 100644 index 00000000..870beda3 --- /dev/null +++ b/frontend/src/pages/Login.tsx @@ -0,0 +1,55 @@ +import styled from '@emotion/styled'; +import LogoIcon from '@public/icons/logo.svg'; +import PageLayout from '@components/common/PageLayout'; +import GitLoginButton from '@components/gitLoginButton'; + +const Login = () => { + return ( + + + + + + ๋ชจ์—ฌ๋ชจ์—ฌ + ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ๋ชจ์ž„ ํ™œ์„ฑํ™” ์ปค๋ฎค๋‹ˆํ‹ฐ + + + + + + ); +}; + +const PageWrapper = styled.div` + display: flex; + flex-direction: column; + gap: 3.6rem; + height: 100%; + justify-content: center; + align-items: center; +`; + +const InfoWrapper = styled.div` + display: flex; + gap: 1.5rem; + align-items: center; +`; + +const TextWrapper = styled.div` + display: flex; + flex-direction: column; + gap: 0.8rem; +`; + +const Title = styled.span` + font-size: 3.2rem; + font-weight: 900; +`; + +const SubTitle = styled.span` + font-size: 1.2rem; + font-weight: 400; + color: ${({ theme }) => theme.colors.indigo[7]}; +`; + +export default Login; diff --git a/frontend/src/pages/My.tsx b/frontend/src/pages/My.tsx index 1a175660..98725e40 100644 --- a/frontend/src/pages/My.tsx +++ b/frontend/src/pages/My.tsx @@ -1,7 +1,7 @@ import PageLayout from '@components/common/PageLayout'; const My = () => { - return my page; + return my page; }; export default My; diff --git a/frontend/src/pages/Notification.tsx b/frontend/src/pages/Notification.tsx index 08c93d4d..3ab5c79e 100644 --- a/frontend/src/pages/Notification.tsx +++ b/frontend/src/pages/Notification.tsx @@ -1,7 +1,7 @@ import PageLayout from '@components/common/PageLayout'; const Notification = () => { - return notification page; + return notification page; }; export default Notification; diff --git a/frontend/src/pages/index.tsx b/frontend/src/pages/index.tsx index 1b6baf43..1f131fc9 100644 --- a/frontend/src/pages/index.tsx +++ b/frontend/src/pages/index.tsx @@ -1,7 +1,7 @@ import PageLayout from '@components/common/PageLayout'; const Main = () => { - return my page; + return my page; }; export default Main; diff --git a/frontend/src/typings/custom.d.ts b/frontend/src/typings/custom.d.ts new file mode 100644 index 00000000..6ecb272b --- /dev/null +++ b/frontend/src/typings/custom.d.ts @@ -0,0 +1,5 @@ +declare module '*.svg' { + import React from 'react'; + const svg: React.FC>; + export default svg; +} diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json index d606b357..52209eb7 100644 --- a/frontend/tsconfig.json +++ b/frontend/tsconfig.json @@ -21,11 +21,15 @@ "strictNullChecks": false, "target": "es2018", "incremental": true, - "baseUrl": "src", + "baseUrl": ".", "paths": { - "@*": ["*"] + "@components/*": ["src/components/*"], + "@pages/*": ["src/pages/*"], + "@styles/*": ["src/styles/*"], + "@typings/*": ["src/typings/*"], + "@public/*": ["public/*"] } }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".storybook/**/*.tsx"], + "include": ["custom.d.ts", "next-env.d.ts", "**/*.ts", "**/*.tsx", ".storybook/**/*.tsx"], "exclude": ["node_modules/*"] } From f7579887f8718a3b8b0d6b39fe96b99dbac199f6 Mon Sep 17 00:00:00 2001 From: yangseungchan Date: Mon, 21 Nov 2022 19:01:31 +0900 Subject: [PATCH 013/142] =?UTF-8?q?[Feature]=20Header=20=EC=BB=B4=ED=8F=AC?= =?UTF-8?q?=EB=84=8C=ED=8A=B8=20=EC=83=9D=EC=84=B1,=20=EC=8A=A4=ED=86=A0?= =?UTF-8?q?=EB=A6=AC=EB=B6=81=20=EA=B4=80=EB=A0=A8=20=EC=9D=B4=EC=8A=88?= =?UTF-8?q?=EB=93=A4=20=ED=95=B4=EA=B2=B0=20(#43)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ๐Ÿฅ… feature: ๊ณตํ†ต ์Šคํƒ€์ผ๋ง ์ปดํฌ๋„ŒํŠธ ์ถ”์ƒํ™” + fontsize ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: tsconfig ์„ค์ • ๋ณ€๊ฒฝ, storybook ์„ค์ • ๋ณ€๊ฒฝ * ๐Ÿ› fix: storybook ๋กœ์ปฌ ํฐํŠธ ๋กœ๋”ฉ ์•ˆ๋˜๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ * ๐Ÿฅ… chore: storybook ๊ธฐ๋ณธ ํŒจ๋”ฉ ์ œ๊ฑฐ * โœจ feature: Logo ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * ๐Ÿฅ… chore: stroybook์˜ next/router, next ์—๋“œ์˜จ ์„ค์ • * โœจ feature: ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * ๐Ÿฅ… chore: StatCounter ๊ฐ„๊ฒฉ ์กฐ์ ˆ * ๐Ÿฅ… chore: header์— lineHeight ์ ์šฉ * โœจ feature: RootTitle ์ปดํฌ๋„ŒํŠธ, ์Šคํ† ๋ฆฌ ์ƒ์„ฑ * โœจ feature: DetailTitle ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ * โœจ feature: Header ์ปดํฌ๋„ŒํŠธ๋ž‘ ๊ด€๋ จ ์Šคํ† ๋ฆฌ ์ž‘์„ฑ์ค‘ * โœจ feature: frontend docker ๊ฐœ๋ฐœํ™˜๊ฒฝ ์„ธํŒ… * โœจ feautre: Header UtilButton ์™„๋ฃŒ * ๐Ÿฅ… chore: Header์˜ rightNode๋ฅผ ์„ ํƒ์ ์œผ๋กœ ๋ฐ›๊ฒŒ ์ˆ˜์ • * ๐Ÿฅ… chore: svg ํƒ€์ดํ•‘ ์„ ์–ธ ์„ค์ • * ๐Ÿฅ… chore: header shadow ์ ์šฉ * ๐Ÿ”€ merge: 'feature/6-header-component' of https://github.com/boostcampwm-2022/web13-moyeomoyeo into feature/6-header-component * ๐Ÿฅ… chore: GlobalStyles๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: login page ์ด๋ฆ„ ์ˆ˜์ • * ๐Ÿฅ… chore: next cofig ์„ค์ • ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: storybook svg ๋ถˆ๋Ÿฌ์˜ฌ๋•Œ ์ƒ๊ธฐ๋Š” ์ด์Šˆ ํ•ด๊ฒฐ * ๐Ÿฅ… chore: ๋กœ๊ทธ์ธํŽ˜์ด์ง€ ์˜คํƒ€ ์ˆ˜์ • * ๐Ÿฅ… chore: storybook CLI ์ˆ˜์ • --- frontend/.gitignore | 3 +- frontend/.storybook/main.ts | 23 +- frontend/.storybook/preview-head.html | 27 + frontend/.storybook/preview.tsx | 21 +- frontend/.storybook/webpack.config.js | 27 + frontend/docker-compose.local.yml | 30 + frontend/next.config.js | 6 +- frontend/package-lock.json | 1924 ++++++++++++++--- frontend/package.json | 7 +- .../public/icons/{logo.svg => logo-lg.svg} | 0 frontend/public/icons/logo-md.svg | 11 + .../DetailTitle/DetailTitle.stories.tsx | 15 + .../components/Header/DetailTitle/index.tsx | 29 + .../components/Header/DetailTitle/styles.tsx | 15 + .../src/components/Header/Header.stories.tsx | 103 + .../LoginButton/LoginButton.stories.tsx | 12 + .../components/Header/LoginButton/index.tsx | 14 + .../Header/RootTitle/RootTitle.stories.tsx | 14 + .../src/components/Header/RootTitle/index.tsx | 20 + .../components/Header/RootTitle/styles.tsx | 9 + .../Header/UtilButton/UtilButton.stories.tsx | 24 + .../components/Header/UtilButton/index.tsx | 28 + frontend/src/components/Header/index.tsx | 23 + frontend/src/components/Header/styles.tsx | 13 + ...ex.stories.tsx => StatCounter.stories.tsx} | 2 +- frontend/src/components/StatCounter/index.tsx | 2 +- frontend/src/components/Title.tsx | 5 - frontend/src/pages/_app.tsx | 11 +- frontend/src/pages/{Login.tsx => login.tsx} | 2 +- frontend/src/styles/CommonStyles.tsx | 19 + frontend/src/styles/GlobalStyles.tsx | 17 +- frontend/src/styles/theme.ts | 12 +- frontend/src/typings/custom.d.ts | 7 +- 33 files changed, 2181 insertions(+), 294 deletions(-) create mode 100644 frontend/.storybook/preview-head.html create mode 100644 frontend/.storybook/webpack.config.js create mode 100644 frontend/docker-compose.local.yml rename frontend/public/icons/{logo.svg => logo-lg.svg} (100%) create mode 100644 frontend/public/icons/logo-md.svg create mode 100644 frontend/src/components/Header/DetailTitle/DetailTitle.stories.tsx create mode 100644 frontend/src/components/Header/DetailTitle/index.tsx create mode 100644 frontend/src/components/Header/DetailTitle/styles.tsx create mode 100644 frontend/src/components/Header/Header.stories.tsx create mode 100644 frontend/src/components/Header/LoginButton/LoginButton.stories.tsx create mode 100644 frontend/src/components/Header/LoginButton/index.tsx create mode 100644 frontend/src/components/Header/RootTitle/RootTitle.stories.tsx create mode 100644 frontend/src/components/Header/RootTitle/index.tsx create mode 100644 frontend/src/components/Header/RootTitle/styles.tsx create mode 100644 frontend/src/components/Header/UtilButton/UtilButton.stories.tsx create mode 100644 frontend/src/components/Header/UtilButton/index.tsx create mode 100644 frontend/src/components/Header/index.tsx create mode 100644 frontend/src/components/Header/styles.tsx rename frontend/src/components/StatCounter/{index.stories.tsx => StatCounter.stories.tsx} (100%) delete mode 100644 frontend/src/components/Title.tsx rename frontend/src/pages/{Login.tsx => login.tsx} (95%) create mode 100644 frontend/src/styles/CommonStyles.tsx diff --git a/frontend/.gitignore b/frontend/.gitignore index 2281848a..dccd4e53 100644 --- a/frontend/.gitignore +++ b/frontend/.gitignore @@ -37,4 +37,5 @@ next-env.d.ts .vscode .lighthouseci -/lhci_reports \ No newline at end of file +/lhci_reports +.storybook-static \ No newline at end of file diff --git a/frontend/.storybook/main.ts b/frontend/.storybook/main.ts index d06706f5..b56270aa 100644 --- a/frontend/.storybook/main.ts +++ b/frontend/.storybook/main.ts @@ -1,13 +1,32 @@ +const path = require('path'); + module.exports = { stories: ['../src/**/*.stories.mdx', '../src/**/*.stories.@(js|jsx|ts|tsx)'], addons: [ '@storybook/addon-links', '@storybook/addon-essentials', '@storybook/addon-interactions', - 'storybook-addon-next', + 'storybook-addon-next-router', + { + name: 'storybook-addon-next', + options: { + nextConfigPath: path.resolve(__dirname, '../next.config.js'), + }, + }, ], framework: '@storybook/react', core: { - builder: '@storybook/builder-webpack5', + builder: 'webpack5', + }, + features: { + interactionDebugger: true, + }, + staticDirs: ['../public'], + webpackFinal: async (config) => { + const rules = config.module.rules; + const fileLoaderRule = rules.find((rule) => rule.test.test('.svg')); + fileLoaderRule.exclude = /\.svg$/; + rules.push({ test: /\.svg$/, use: ['@svgr/webpack'] }); + return config; }, }; diff --git a/frontend/.storybook/preview-head.html b/frontend/.storybook/preview-head.html new file mode 100644 index 00000000..2c5cea53 --- /dev/null +++ b/frontend/.storybook/preview-head.html @@ -0,0 +1,27 @@ + diff --git a/frontend/.storybook/preview.tsx b/frontend/.storybook/preview.tsx index c4b4a10a..c1e7f90f 100644 --- a/frontend/.storybook/preview.tsx +++ b/frontend/.storybook/preview.tsx @@ -1,17 +1,16 @@ import { ReactNode } from 'react'; -import { MantineProvider } from '@mantine/core'; -import theme from '../src/styles/theme'; -import GlobalStyles from '@styles/GlobalStyles'; -import CustomFonts from '@styles/CustomFont'; +import { RouterContext } from 'next/dist/shared/lib/router-context'; +import CommonStyles from '@styles/CommonStyles'; const ThemeWrapper = (props: { children: ReactNode }) => { - return ( - - {props.children} - - - - ); + return {props.children}; +}; + +export const parameters = { + layout: 'fullscreen', + nextRouter: { + Provider: RouterContext.Provider, + }, }; export const decorators = [(renderStory: Function) => {renderStory()}]; diff --git a/frontend/.storybook/webpack.config.js b/frontend/.storybook/webpack.config.js new file mode 100644 index 00000000..7a703b47 --- /dev/null +++ b/frontend/.storybook/webpack.config.js @@ -0,0 +1,27 @@ +const path = require('path'); + +module.exports = async ({ config }) => { + config.resolve.alias = { + ...config.resolve.alias, + '@public': path.resolve(__dirname, '../public'), + '@styles': path.resolve(__dirname, '../src/styles'), + }; + config.module.rules.push({ + test: /\.(sass|scss)$/, + use: ['resolve-url-loader'], + include: path.resolve(__dirname, '../'), + }); + config.module.rules.push({ + test: /\.(png|woff|woff2|eot|ttf|svg)$/, + use: [ + { + loader: 'file-loader', + options: { + name: '[name].[ext]', + }, + }, + ], + include: path.resolve(__dirname + '../'), + }); + return config; +}; diff --git a/frontend/docker-compose.local.yml b/frontend/docker-compose.local.yml new file mode 100644 index 00000000..c4e2dfff --- /dev/null +++ b/frontend/docker-compose.local.yml @@ -0,0 +1,30 @@ +version: '3.4' + +services: + frontend: + container_name: moyeo-client + build: + context: . + dockerfile: Dockerfile + environment: + NODE_ENV: development + ports: + - 3000:3000 + command: npm run dev + volumes: + - .:/usr/src/app + - /usr/src/app/node_modules + storybook: + container_name: moyeo-storybook + image: frontend_frontend + environment: + NODE_ENV: development + ports: + - 6006:6006 + command: > + sh -c " + npm run storybook + " + volumes: + - .:/usr/src/app + - /usr/src/app/node_modules diff --git a/frontend/next.config.js b/frontend/next.config.js index 6ce4fbe4..c6a36b11 100644 --- a/frontend/next.config.js +++ b/frontend/next.config.js @@ -7,8 +7,12 @@ const nextConfig = { test: /\.svg$/i, use: ["@svgr/webpack"] }); + config.watchOptions = { + poll: 500, + aggregateTimeout: 300, + } return config; - } + }, } module.exports = nextConfig diff --git a/frontend/package-lock.json b/frontend/package-lock.json index a565aacd..f5c74a5e 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -29,6 +29,7 @@ "@storybook/addon-interactions": "^6.5.13", "@storybook/addon-links": "^6.5.13", "@storybook/builder-webpack5": "^6.5.13", + "@storybook/jest": "^0.0.10", "@storybook/manager-webpack5": "^6.5.13", "@storybook/react": "^6.5.13", "@storybook/testing-library": "^0.0.13", @@ -52,9 +53,17 @@ "lint-staged": "^13.0.3", "prettier": "^2.7.1", "storybook-addon-next": "^1.6.10", - "typescript": "^4.8.4" + "storybook-addon-next-router": "^3.1.1", + "typescript": "^4.8.4", + "webpack": "^5.75.0" } }, + "node_modules/@adobe/css-tools": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.0.1.tgz", + "integrity": "sha512-+u76oB43nOHrF4DDWRLWDCtci7f3QJoEBigemIdIeTi1ODqjx6Tad9NCVnPRwewWlKkVab5PlK8DCtPTyX7S8g==", + "dev": true + }, "node_modules/@ampproject/remapping": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", @@ -2502,6 +2511,30 @@ "node": ">=8" } }, + "node_modules/@jest/expect-utils": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.3.1.tgz", + "integrity": "sha512-wlrznINZI5sMjwvUoLVk617ll/UYfGIZNxmbU+Pa7wmkL4vYzhV9R2pwVqUh4NWWuLQWkI8+8mOkxs//prKQ3g==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.2.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/schemas": { + "version": "29.0.0", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz", + "integrity": "sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/@jest/transform": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", @@ -3483,6 +3516,12 @@ "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==", "dev": true }, + "node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==", + "dev": true + }, "node_modules/@storybook/addon-actions": { "version": "6.5.13", "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-6.5.13.tgz", @@ -7303,6 +7342,15 @@ "url": "https://opencollective.com/storybook" } }, + "node_modules/@storybook/expect": { + "version": "27.5.2-0", + "resolved": "https://registry.npmjs.org/@storybook/expect/-/expect-27.5.2-0.tgz", + "integrity": "sha512-cP99mhWN/JeCp7VSIiymvj5tmuMY050iFohvp8Zq+kewKsBSZ6/qpTJAGCCZk6pneTcp4S0Fm5BSqyxzbyJ3gw==", + "dev": true, + "dependencies": { + "@types/jest": ">=26.0.0" + } + }, "node_modules/@storybook/instrumenter": { "version": "6.5.13", "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-6.5.13.tgz", @@ -7320,6 +7368,18 @@ "url": "https://opencollective.com/storybook" } }, + "node_modules/@storybook/jest": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/@storybook/jest/-/jest-0.0.10.tgz", + "integrity": "sha512-qeYLIplpcOUQXboJde5pRCjTvkGmF80jEszRUoNYCNcEPfC2sMK68Wq6Ct8EQj3CoEdJqsK54O2YYh+7D9S+ag==", + "dev": true, + "dependencies": { + "@storybook/expect": "storybook-jest", + "@storybook/instrumenter": "^6.4.0", + "@testing-library/jest-dom": "^5.16.2", + "jest-mock": "^27.3.0" + } + }, "node_modules/@storybook/manager-webpack4": { "version": "6.5.13", "resolved": "https://registry.npmjs.org/@storybook/manager-webpack4/-/manager-webpack4-6.5.13.tgz", @@ -9989,6 +10049,108 @@ "node": ">=8" } }, + "node_modules/@testing-library/jest-dom": { + "version": "5.16.5", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.16.5.tgz", + "integrity": "sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA==", + "dev": true, + "dependencies": { + "@adobe/css-tools": "^4.0.1", + "@babel/runtime": "^7.9.2", + "@types/testing-library__jest-dom": "^5.9.1", + "aria-query": "^5.0.0", + "chalk": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.5.6", + "lodash": "^4.17.15", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=8", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/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 + }, + "node_modules/@testing-library/jest-dom/node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@testing-library/user-event": { "version": "13.5.0", "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-13.5.0.tgz", @@ -10110,6 +10272,48 @@ "@types/istanbul-lib-report": "*" } }, + "node_modules/@types/jest": { + "version": "29.2.3", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.2.3.tgz", + "integrity": "sha512-6XwoEbmatfyoCjWRX7z0fKMmgYKe9+/HrviJ5k0X/tjJWHGAezZOfYaxqQKuzG/TvQyr+ktjm4jgbk0s4/oF2w==", + "dev": true, + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/jest/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@types/jest/node_modules/pretty-format": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.3.1.tgz", + "integrity": "sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.0.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, "node_modules/@types/json-schema": { "version": "7.0.11", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", @@ -10238,12 +10442,27 @@ "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", "dev": true }, + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, "node_modules/@types/tapable": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.8.tgz", "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==", "dev": true }, + "node_modules/@types/testing-library__jest-dom": { + "version": "5.14.5", + "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz", + "integrity": "sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ==", + "dev": true, + "dependencies": { + "@types/jest": "*" + } + }, "node_modules/@types/uglify-js": { "version": "3.17.1", "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.17.1.tgz", @@ -13916,6 +14135,12 @@ "url": "https://github.com/sponsors/fb55" } }, + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "dev": true + }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -14192,6 +14417,15 @@ "detect-port": "bin/detect-port.js" } }, + "node_modules/diff-sequences": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.3.1.tgz", + "integrity": "sha512-hlM3QR272NXCi4pq+N4Kok4kOp6EsgOM3ZSpJI7Da3UAs+Ttsi8MRmB6trM/lhyzUxGfOgnpkHtgqm5Q/CTcfQ==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/diffie-hellman": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", @@ -15725,6 +15959,144 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, + "node_modules/expect": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.3.1.tgz", + "integrity": "sha512-gGb1yTgU30Q0O/tQq+z30KBWv24ApkMgFUpvKBkyLUBL68Wv8dHdJxTBZFl/iT8K/bqDHvUYRH6IIN3rToopPA==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^29.3.1", + "jest-get-type": "^29.2.0", + "jest-matcher-utils": "^29.3.1", + "jest-message-util": "^29.3.1", + "jest-util": "^29.3.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/expect/node_modules/@jest/types": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.3.1.tgz", + "integrity": "sha512-d0S0jmmTpjnhCmNpApgX3jrUZgZ22ivKJRvL2lli5hpCRoNnp1f85r2/wpKfXuYu8E7Jjh1hGfhPyup1NM5AmA==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.0.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/expect/node_modules/@types/yargs": { + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/expect/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/expect/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/expect/node_modules/ci-info": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.6.1.tgz", + "integrity": "sha512-up5ggbaDqOqJ4UqLKZ2naVkyqSJQgJi5lwD6b6mM748ysrghDBX0bx/qJTUHzw7zu6Mq4gycviSF5hJnwceD8w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/expect/node_modules/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/expect/node_modules/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 + }, + "node_modules/expect/node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/expect/node_modules/jest-util": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.3.1.tgz", + "integrity": "sha512-7YOVZaiX7RJLv76ZfHt4nbNEzzTRiMW/IiOG7ZOKmTXmoGBxUDefgMAxQubu6WPVqP5zSzAdZG0FfLcC7HOIFQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.3.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/expect/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/express": { "version": "4.18.2", "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", @@ -18393,6 +18765,132 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/jest-diff": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.3.1.tgz", + "integrity": "sha512-vU8vyiO7568tmin2lA3r2DP8oRvzhvRcD4DjpXc6uGveQodyk7CKLhQlCSiwgx3g0pFaE88/KLZ0yaTWMc4Uiw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.3.1", + "jest-get-type": "^29.2.0", + "pretty-format": "^29.3.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-diff/node_modules/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 + }, + "node_modules/jest-diff/node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff/node_modules/pretty-format": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.3.1.tgz", + "integrity": "sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.0.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-diff/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/jest-diff/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-get-type": { + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.2.0.tgz", + "integrity": "sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/jest-haste-map": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", @@ -18420,6 +18918,271 @@ "fsevents": "^2.1.2" } }, + "node_modules/jest-matcher-utils": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.3.1.tgz", + "integrity": "sha512-fkRMZUAScup3txIKfMe3AIZZmPEjWEdsPJFK3AIy5qRohWqQFg1qrmKfYXR9qEkNc7OdAu2N4KPHibEmy4HPeQ==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.3.1", + "jest-get-type": "^29.2.0", + "pretty-format": "^29.3.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/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 + }, + "node_modules/jest-matcher-utils/node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-matcher-utils/node_modules/pretty-format": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.3.1.tgz", + "integrity": "sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.0.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/jest-matcher-utils/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.3.1.tgz", + "integrity": "sha512-lMJTbgNcDm5z+6KDxWtqOFWlGQxD6XaYwBqHR8kmpkP+WWWG90I35kdtQHY67Ay5CSuydkTBbJG+tH9JShFCyA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.3.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.3.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util/node_modules/@jest/types": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.3.1.tgz", + "integrity": "sha512-d0S0jmmTpjnhCmNpApgX3jrUZgZ22ivKJRvL2lli5hpCRoNnp1f85r2/wpKfXuYu8E7Jjh1hGfhPyup1NM5AmA==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.0.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util/node_modules/@types/yargs": { + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-message-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-message-util/node_modules/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 + }, + "node_modules/jest-message-util/node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util/node_modules/pretty-format": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.3.1.tgz", + "integrity": "sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.0.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/jest-message-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/jest-mock": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", @@ -23906,6 +24669,27 @@ "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", "dev": true }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/stackframe": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", @@ -24063,6 +24847,26 @@ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, + "node_modules/storybook-addon-next-router": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/storybook-addon-next-router/-/storybook-addon-next-router-3.1.1.tgz", + "integrity": "sha512-Z14dED37vNXkN7+VY80HhF9itGReWoBAlKREHEk2By/dW7zSSqcSyXYV4bDMXIMAFYHMaA1svcBC1idVG8FhAw==", + "dev": true, + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@storybook/addon-actions": "^6.0.0", + "@storybook/addons": "^6.0.0", + "@storybook/client-api": "^6.0.0", + "next": "^9.0.0 || ^10.0.0 || ^11.0.0 || ^12.0.0", + "react": "^16.8.0 || ^17.0.0", + "react-dom": "^16.8.0 || ^17.0.0" + } + }, "node_modules/storybook-addon-next/node_modules/loader-utils": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", @@ -26606,6 +27410,12 @@ } }, "dependencies": { + "@adobe/css-tools": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.0.1.tgz", + "integrity": "sha512-+u76oB43nOHrF4DDWRLWDCtci7f3QJoEBigemIdIeTi1ODqjx6Tad9NCVnPRwewWlKkVab5PlK8DCtPTyX7S8g==", + "dev": true + }, "@ampproject/remapping": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", @@ -28341,6 +29151,24 @@ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true }, + "@jest/expect-utils": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.3.1.tgz", + "integrity": "sha512-wlrznINZI5sMjwvUoLVk617ll/UYfGIZNxmbU+Pa7wmkL4vYzhV9R2pwVqUh4NWWuLQWkI8+8mOkxs//prKQ3g==", + "dev": true, + "requires": { + "jest-get-type": "^29.2.0" + } + }, + "@jest/schemas": { + "version": "29.0.0", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz", + "integrity": "sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==", + "dev": true, + "requires": { + "@sinclair/typebox": "^0.24.1" + } + }, "@jest/transform": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", @@ -29005,6 +29833,12 @@ "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==", "dev": true }, + "@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==", + "dev": true + }, "@storybook/addon-actions": { "version": "6.5.13", "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-6.5.13.tgz", @@ -31968,6 +32802,15 @@ "regenerator-runtime": "^0.13.7" } }, + "@storybook/expect": { + "version": "27.5.2-0", + "resolved": "https://registry.npmjs.org/@storybook/expect/-/expect-27.5.2-0.tgz", + "integrity": "sha512-cP99mhWN/JeCp7VSIiymvj5tmuMY050iFohvp8Zq+kewKsBSZ6/qpTJAGCCZk6pneTcp4S0Fm5BSqyxzbyJ3gw==", + "dev": true, + "requires": { + "@types/jest": ">=26.0.0" + } + }, "@storybook/instrumenter": { "version": "6.5.13", "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-6.5.13.tgz", @@ -31981,6 +32824,18 @@ "global": "^4.4.0" } }, + "@storybook/jest": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/@storybook/jest/-/jest-0.0.10.tgz", + "integrity": "sha512-qeYLIplpcOUQXboJde5pRCjTvkGmF80jEszRUoNYCNcEPfC2sMK68Wq6Ct8EQj3CoEdJqsK54O2YYh+7D9S+ag==", + "dev": true, + "requires": { + "@storybook/expect": "storybook-jest", + "@storybook/instrumenter": "^6.4.0", + "@testing-library/jest-dom": "^5.16.2", + "jest-mock": "^27.3.0" + } + }, "@storybook/manager-webpack4": { "version": "6.5.13", "resolved": "https://registry.npmjs.org/@storybook/manager-webpack4/-/manager-webpack4-6.5.13.tgz", @@ -33630,254 +34485,322 @@ } } }, - "@storybook/testing-library": { - "version": "0.0.13", - "resolved": "https://registry.npmjs.org/@storybook/testing-library/-/testing-library-0.0.13.tgz", - "integrity": "sha512-vRMeIGer4EjJkTgI8sQyK9W431ekPWYCWL//OmSDJ64IT3h7FnW7Xg6p+eqM3oII98/O5pcya5049GxnjaPtxw==", - "dev": true, - "requires": { - "@storybook/client-logger": "^6.4.0", - "@storybook/instrumenter": "^6.4.0", - "@testing-library/dom": "^8.3.0", - "@testing-library/user-event": "^13.2.1", - "ts-dedent": "^2.2.0" - } - }, - "@storybook/theming": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.5.13.tgz", - "integrity": "sha512-oif5NGFAUQhizo50r+ctw2hZNLWV4dPHai+L/gFvbaSeRBeHSNkIcMoZ2FlrO566HdGZTDutYXcR+xus8rI28g==", - "dev": true, - "requires": { - "@storybook/client-logger": "6.5.13", - "core-js": "^3.8.2", - "memoizerific": "^1.11.3", - "regenerator-runtime": "^0.13.7" - } - }, - "@storybook/ui": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/@storybook/ui/-/ui-6.5.13.tgz", - "integrity": "sha512-MklJuSg4Bc+MWjwhZVmZhJaucaeEBUMMa2V9oRWbIgZOdRHqdW72S2vCbaarDAYfBQdnfaoq1GkSQiw+EnWOzA==", - "dev": true, - "requires": { - "@storybook/addons": "6.5.13", - "@storybook/api": "6.5.13", - "@storybook/channels": "6.5.13", - "@storybook/client-logger": "6.5.13", - "@storybook/components": "6.5.13", - "@storybook/core-events": "6.5.13", - "@storybook/router": "6.5.13", - "@storybook/semver": "^7.3.2", - "@storybook/theming": "6.5.13", - "core-js": "^3.8.2", - "memoizerific": "^1.11.3", - "qs": "^6.10.0", - "regenerator-runtime": "^0.13.7", - "resolve-from": "^5.0.0" - } - }, - "@svgr/babel-plugin-add-jsx-attribute": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz", - "integrity": "sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==", - "dev": true - }, - "@svgr/babel-plugin-remove-jsx-attribute": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.5.0.tgz", - "integrity": "sha512-8zYdkym7qNyfXpWvu4yq46k41pyNM9SOstoWhKlm+IfdCE1DdnRKeMUPsWIEO/DEkaWxJ8T9esNdG3QwQ93jBA==", - "dev": true - }, - "@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.5.0.tgz", - "integrity": "sha512-NFdxMq3xA42Kb1UbzCVxplUc0iqSyM9X8kopImvFnB+uSDdzIHOdbs1op8ofAvVRtbg4oZiyRl3fTYeKcOe9Iw==", - "dev": true - }, - "@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz", - "integrity": "sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==", - "dev": true - }, - "@svgr/babel-plugin-svg-dynamic-title": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz", - "integrity": "sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==", - "dev": true - }, - "@svgr/babel-plugin-svg-em-dimensions": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz", - "integrity": "sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==", - "dev": true - }, - "@svgr/babel-plugin-transform-react-native-svg": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz", - "integrity": "sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==", - "dev": true - }, - "@svgr/babel-plugin-transform-svg-component": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz", - "integrity": "sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==", - "dev": true - }, - "@svgr/babel-preset": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.1.tgz", - "integrity": "sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==", - "dev": true, - "requires": { - "@svgr/babel-plugin-add-jsx-attribute": "^6.5.1", - "@svgr/babel-plugin-remove-jsx-attribute": "*", - "@svgr/babel-plugin-remove-jsx-empty-expression": "*", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.1", - "@svgr/babel-plugin-svg-dynamic-title": "^6.5.1", - "@svgr/babel-plugin-svg-em-dimensions": "^6.5.1", - "@svgr/babel-plugin-transform-react-native-svg": "^6.5.1", - "@svgr/babel-plugin-transform-svg-component": "^6.5.1" - } - }, - "@svgr/core": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.5.1.tgz", - "integrity": "sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==", - "dev": true, - "requires": { - "@babel/core": "^7.19.6", - "@svgr/babel-preset": "^6.5.1", - "@svgr/plugin-jsx": "^6.5.1", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.1" - }, - "dependencies": { - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - } - } - }, - "@svgr/hast-util-to-babel-ast": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz", - "integrity": "sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==", - "dev": true, - "requires": { - "@babel/types": "^7.20.0", - "entities": "^4.4.0" - }, - "dependencies": { - "entities": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", - "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", - "dev": true - } - } - }, - "@svgr/plugin-jsx": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz", - "integrity": "sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==", - "dev": true, - "requires": { - "@babel/core": "^7.19.6", - "@svgr/babel-preset": "^6.5.1", - "@svgr/hast-util-to-babel-ast": "^6.5.1", - "svg-parser": "^2.0.4" - } - }, - "@svgr/plugin-svgo": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz", - "integrity": "sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==", - "dev": true, - "requires": { - "cosmiconfig": "^7.0.1", - "deepmerge": "^4.2.2", - "svgo": "^2.8.0" - } - }, - "@svgr/webpack": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.5.1.tgz", - "integrity": "sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA==", + "@storybook/testing-library": { + "version": "0.0.13", + "resolved": "https://registry.npmjs.org/@storybook/testing-library/-/testing-library-0.0.13.tgz", + "integrity": "sha512-vRMeIGer4EjJkTgI8sQyK9W431ekPWYCWL//OmSDJ64IT3h7FnW7Xg6p+eqM3oII98/O5pcya5049GxnjaPtxw==", + "dev": true, + "requires": { + "@storybook/client-logger": "^6.4.0", + "@storybook/instrumenter": "^6.4.0", + "@testing-library/dom": "^8.3.0", + "@testing-library/user-event": "^13.2.1", + "ts-dedent": "^2.2.0" + } + }, + "@storybook/theming": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.5.13.tgz", + "integrity": "sha512-oif5NGFAUQhizo50r+ctw2hZNLWV4dPHai+L/gFvbaSeRBeHSNkIcMoZ2FlrO566HdGZTDutYXcR+xus8rI28g==", + "dev": true, + "requires": { + "@storybook/client-logger": "6.5.13", + "core-js": "^3.8.2", + "memoizerific": "^1.11.3", + "regenerator-runtime": "^0.13.7" + } + }, + "@storybook/ui": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/@storybook/ui/-/ui-6.5.13.tgz", + "integrity": "sha512-MklJuSg4Bc+MWjwhZVmZhJaucaeEBUMMa2V9oRWbIgZOdRHqdW72S2vCbaarDAYfBQdnfaoq1GkSQiw+EnWOzA==", + "dev": true, + "requires": { + "@storybook/addons": "6.5.13", + "@storybook/api": "6.5.13", + "@storybook/channels": "6.5.13", + "@storybook/client-logger": "6.5.13", + "@storybook/components": "6.5.13", + "@storybook/core-events": "6.5.13", + "@storybook/router": "6.5.13", + "@storybook/semver": "^7.3.2", + "@storybook/theming": "6.5.13", + "core-js": "^3.8.2", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "resolve-from": "^5.0.0" + } + }, + "@svgr/babel-plugin-add-jsx-attribute": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz", + "integrity": "sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==", + "dev": true + }, + "@svgr/babel-plugin-remove-jsx-attribute": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.5.0.tgz", + "integrity": "sha512-8zYdkym7qNyfXpWvu4yq46k41pyNM9SOstoWhKlm+IfdCE1DdnRKeMUPsWIEO/DEkaWxJ8T9esNdG3QwQ93jBA==", + "dev": true + }, + "@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.5.0.tgz", + "integrity": "sha512-NFdxMq3xA42Kb1UbzCVxplUc0iqSyM9X8kopImvFnB+uSDdzIHOdbs1op8ofAvVRtbg4oZiyRl3fTYeKcOe9Iw==", + "dev": true + }, + "@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz", + "integrity": "sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==", + "dev": true + }, + "@svgr/babel-plugin-svg-dynamic-title": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz", + "integrity": "sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==", + "dev": true + }, + "@svgr/babel-plugin-svg-em-dimensions": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz", + "integrity": "sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==", + "dev": true + }, + "@svgr/babel-plugin-transform-react-native-svg": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz", + "integrity": "sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==", + "dev": true + }, + "@svgr/babel-plugin-transform-svg-component": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz", + "integrity": "sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==", + "dev": true + }, + "@svgr/babel-preset": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.1.tgz", + "integrity": "sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==", + "dev": true, + "requires": { + "@svgr/babel-plugin-add-jsx-attribute": "^6.5.1", + "@svgr/babel-plugin-remove-jsx-attribute": "*", + "@svgr/babel-plugin-remove-jsx-empty-expression": "*", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.1", + "@svgr/babel-plugin-svg-dynamic-title": "^6.5.1", + "@svgr/babel-plugin-svg-em-dimensions": "^6.5.1", + "@svgr/babel-plugin-transform-react-native-svg": "^6.5.1", + "@svgr/babel-plugin-transform-svg-component": "^6.5.1" + } + }, + "@svgr/core": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.5.1.tgz", + "integrity": "sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==", + "dev": true, + "requires": { + "@babel/core": "^7.19.6", + "@svgr/babel-preset": "^6.5.1", + "@svgr/plugin-jsx": "^6.5.1", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.1" + }, + "dependencies": { + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + } + } + }, + "@svgr/hast-util-to-babel-ast": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz", + "integrity": "sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==", + "dev": true, + "requires": { + "@babel/types": "^7.20.0", + "entities": "^4.4.0" + }, + "dependencies": { + "entities": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", + "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", + "dev": true + } + } + }, + "@svgr/plugin-jsx": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz", + "integrity": "sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==", + "dev": true, + "requires": { + "@babel/core": "^7.19.6", + "@svgr/babel-preset": "^6.5.1", + "@svgr/hast-util-to-babel-ast": "^6.5.1", + "svg-parser": "^2.0.4" + } + }, + "@svgr/plugin-svgo": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz", + "integrity": "sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==", + "dev": true, + "requires": { + "cosmiconfig": "^7.0.1", + "deepmerge": "^4.2.2", + "svgo": "^2.8.0" + } + }, + "@svgr/webpack": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.5.1.tgz", + "integrity": "sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA==", + "dev": true, + "requires": { + "@babel/core": "^7.19.6", + "@babel/plugin-transform-react-constant-elements": "^7.18.12", + "@babel/preset-env": "^7.19.4", + "@babel/preset-react": "^7.18.6", + "@babel/preset-typescript": "^7.18.6", + "@svgr/core": "^6.5.1", + "@svgr/plugin-jsx": "^6.5.1", + "@svgr/plugin-svgo": "^6.5.1" + } + }, + "@swc/helpers": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.11.tgz", + "integrity": "sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==", + "requires": { + "tslib": "^2.4.0" + } + }, + "@tabler/icons": { + "version": "1.111.0", + "resolved": "https://registry.npmjs.org/@tabler/icons/-/icons-1.111.0.tgz", + "integrity": "sha512-TZWYiMT5ccqfHxRE0Qtgvl+sGsMbNkrv7cJMt/tm8TN9l/CDXx/o7d8uAwUN+3PAlSFfF5e/rD1bi1WJs2xNIA==" + }, + "@tanstack/match-sorter-utils": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@tanstack/match-sorter-utils/-/match-sorter-utils-8.1.1.tgz", + "integrity": "sha512-IdmEekEYxQsoLOR0XQyw3jD1GujBpRRYaGJYQUw1eOT1eUugWxdc7jomh1VQ1EKHcdwDLpLaCz/8y4KraU4T9A==", + "requires": { + "remove-accents": "0.4.2" + } + }, + "@tanstack/query-core": { + "version": "4.15.1", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.15.1.tgz", + "integrity": "sha512-+UfqJsNbPIVo0a9ANW0ZxtjiMfGLaaoIaL9vZeVycvmBuWywJGtSi7fgPVMCPdZQFOzMsaXaOsDtSKQD5xLRVQ==" + }, + "@tanstack/react-query": { + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.16.1.tgz", + "integrity": "sha512-PDE9u49wSDykPazlCoLFevUpceLjQ0Mm8i6038HgtTEKb/aoVnUZdlUP7C392ds3Cd75+EGlHU7qpEX06R7d9Q==", + "requires": { + "@tanstack/query-core": "4.15.1", + "use-sync-external-store": "^1.2.0" + } + }, + "@tanstack/react-query-devtools": { + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-4.16.1.tgz", + "integrity": "sha512-VrDYLmG+OOcvGSZL5avG4R8jhqeMFP7pzW2sh2BWEV9UfI+aocG+CW8y8ygacxuKy48m8Tyo/xfe8H1z9BGb+g==", + "requires": { + "@tanstack/match-sorter-utils": "8.1.1", + "superjson": "^1.10.0", + "use-sync-external-store": "^1.2.0" + } + }, + "@testing-library/dom": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.19.0.tgz", + "integrity": "sha512-6YWYPPpxG3e/xOo6HIWwB/58HukkwIVTOaZ0VwdMVjhRUX/01E4FtQbck9GazOOj7MXHc5RBzMrU86iBJHbI+A==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^4.2.0", + "aria-query": "^5.0.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.4.4", + "pretty-format": "^27.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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 + }, + "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.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@testing-library/jest-dom": { + "version": "5.16.5", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.16.5.tgz", + "integrity": "sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA==", "dev": true, "requires": { - "@babel/core": "^7.19.6", - "@babel/plugin-transform-react-constant-elements": "^7.18.12", - "@babel/preset-env": "^7.19.4", - "@babel/preset-react": "^7.18.6", - "@babel/preset-typescript": "^7.18.6", - "@svgr/core": "^6.5.1", - "@svgr/plugin-jsx": "^6.5.1", - "@svgr/plugin-svgo": "^6.5.1" - } - }, - "@swc/helpers": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.11.tgz", - "integrity": "sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==", - "requires": { - "tslib": "^2.4.0" - } - }, - "@tabler/icons": { - "version": "1.111.0", - "resolved": "https://registry.npmjs.org/@tabler/icons/-/icons-1.111.0.tgz", - "integrity": "sha512-TZWYiMT5ccqfHxRE0Qtgvl+sGsMbNkrv7cJMt/tm8TN9l/CDXx/o7d8uAwUN+3PAlSFfF5e/rD1bi1WJs2xNIA==" - }, - "@tanstack/match-sorter-utils": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@tanstack/match-sorter-utils/-/match-sorter-utils-8.1.1.tgz", - "integrity": "sha512-IdmEekEYxQsoLOR0XQyw3jD1GujBpRRYaGJYQUw1eOT1eUugWxdc7jomh1VQ1EKHcdwDLpLaCz/8y4KraU4T9A==", - "requires": { - "remove-accents": "0.4.2" - } - }, - "@tanstack/query-core": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.15.1.tgz", - "integrity": "sha512-+UfqJsNbPIVo0a9ANW0ZxtjiMfGLaaoIaL9vZeVycvmBuWywJGtSi7fgPVMCPdZQFOzMsaXaOsDtSKQD5xLRVQ==" - }, - "@tanstack/react-query": { - "version": "4.16.1", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.16.1.tgz", - "integrity": "sha512-PDE9u49wSDykPazlCoLFevUpceLjQ0Mm8i6038HgtTEKb/aoVnUZdlUP7C392ds3Cd75+EGlHU7qpEX06R7d9Q==", - "requires": { - "@tanstack/query-core": "4.15.1", - "use-sync-external-store": "^1.2.0" - } - }, - "@tanstack/react-query-devtools": { - "version": "4.16.1", - "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-4.16.1.tgz", - "integrity": "sha512-VrDYLmG+OOcvGSZL5avG4R8jhqeMFP7pzW2sh2BWEV9UfI+aocG+CW8y8ygacxuKy48m8Tyo/xfe8H1z9BGb+g==", - "requires": { - "@tanstack/match-sorter-utils": "8.1.1", - "superjson": "^1.10.0", - "use-sync-external-store": "^1.2.0" - } - }, - "@testing-library/dom": { - "version": "8.19.0", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.19.0.tgz", - "integrity": "sha512-6YWYPPpxG3e/xOo6HIWwB/58HukkwIVTOaZ0VwdMVjhRUX/01E4FtQbck9GazOOj7MXHc5RBzMrU86iBJHbI+A==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^4.2.0", + "@adobe/css-tools": "^4.0.1", + "@babel/runtime": "^7.9.2", + "@types/testing-library__jest-dom": "^5.9.1", "aria-query": "^5.0.0", - "chalk": "^4.1.0", - "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.4.4", - "pretty-format": "^27.0.2" + "chalk": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.5.6", + "lodash": "^4.17.15", + "redent": "^3.0.0" }, "dependencies": { "ansi-styles": { @@ -33890,9 +34813,9 @@ } }, "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -33920,6 +34843,16 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -34042,6 +34975,41 @@ "@types/istanbul-lib-report": "*" } }, + "@types/jest": { + "version": "29.2.3", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.2.3.tgz", + "integrity": "sha512-6XwoEbmatfyoCjWRX7z0fKMmgYKe9+/HrviJ5k0X/tjJWHGAezZOfYaxqQKuzG/TvQyr+ktjm4jgbk0s4/oF2w==", + "dev": true, + "requires": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, + "pretty-format": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.3.1.tgz", + "integrity": "sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==", + "dev": true, + "requires": { + "@jest/schemas": "^29.0.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + } + } + }, "@types/json-schema": { "version": "7.0.11", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", @@ -34170,12 +35138,27 @@ "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", "dev": true }, + "@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, "@types/tapable": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.8.tgz", "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==", "dev": true }, + "@types/testing-library__jest-dom": { + "version": "5.14.5", + "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz", + "integrity": "sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ==", + "dev": true, + "requires": { + "@types/jest": "*" + } + }, "@types/uglify-js": { "version": "3.17.1", "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.17.1.tgz", @@ -37046,6 +38029,12 @@ "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "dev": true }, + "css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "dev": true + }, "cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -37251,6 +38240,12 @@ "debug": "4" } }, + "diff-sequences": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.3.1.tgz", + "integrity": "sha512-hlM3QR272NXCi4pq+N4Kok4kOp6EsgOM3ZSpJI7Da3UAs+Ttsi8MRmB6trM/lhyzUxGfOgnpkHtgqm5Q/CTcfQ==", + "dev": true + }, "diffie-hellman": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", @@ -38442,6 +39437,113 @@ } } }, + "expect": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.3.1.tgz", + "integrity": "sha512-gGb1yTgU30Q0O/tQq+z30KBWv24ApkMgFUpvKBkyLUBL68Wv8dHdJxTBZFl/iT8K/bqDHvUYRH6IIN3rToopPA==", + "dev": true, + "requires": { + "@jest/expect-utils": "^29.3.1", + "jest-get-type": "^29.2.0", + "jest-matcher-utils": "^29.3.1", + "jest-message-util": "^29.3.1", + "jest-util": "^29.3.1" + }, + "dependencies": { + "@jest/types": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.3.1.tgz", + "integrity": "sha512-d0S0jmmTpjnhCmNpApgX3jrUZgZ22ivKJRvL2lli5hpCRoNnp1f85r2/wpKfXuYu8E7Jjh1hGfhPyup1NM5AmA==", + "dev": true, + "requires": { + "@jest/schemas": "^29.0.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "ci-info": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.6.1.tgz", + "integrity": "sha512-up5ggbaDqOqJ4UqLKZ2naVkyqSJQgJi5lwD6b6mM748ysrghDBX0bx/qJTUHzw7zu6Mq4gycviSF5hJnwceD8w==", + "dev": true + }, + "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 + }, + "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 + }, + "jest-util": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.3.1.tgz", + "integrity": "sha512-7YOVZaiX7RJLv76ZfHt4nbNEzzTRiMW/IiOG7ZOKmTXmoGBxUDefgMAxQubu6WPVqP5zSzAdZG0FfLcC7HOIFQ==", + "dev": true, + "requires": { + "@jest/types": "^29.3.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "express": { "version": "4.18.2", "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", @@ -40435,6 +41537,100 @@ "iterate-iterator": "^1.0.1" } }, + "jest-diff": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.3.1.tgz", + "integrity": "sha512-vU8vyiO7568tmin2lA3r2DP8oRvzhvRcD4DjpXc6uGveQodyk7CKLhQlCSiwgx3g0pFaE88/KLZ0yaTWMc4Uiw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^29.3.1", + "jest-get-type": "^29.2.0", + "pretty-format": "^29.3.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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 + }, + "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 + }, + "pretty-format": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.3.1.tgz", + "integrity": "sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==", + "dev": true, + "requires": { + "@jest/schemas": "^29.0.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-get-type": { + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.2.0.tgz", + "integrity": "sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA==", + "dev": true + }, "jest-haste-map": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", @@ -40457,6 +41653,210 @@ "walker": "^1.0.7" } }, + "jest-matcher-utils": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.3.1.tgz", + "integrity": "sha512-fkRMZUAScup3txIKfMe3AIZZmPEjWEdsPJFK3AIy5qRohWqQFg1qrmKfYXR9qEkNc7OdAu2N4KPHibEmy4HPeQ==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^29.3.1", + "jest-get-type": "^29.2.0", + "pretty-format": "^29.3.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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 + }, + "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 + }, + "pretty-format": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.3.1.tgz", + "integrity": "sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==", + "dev": true, + "requires": { + "@jest/schemas": "^29.0.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-message-util": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.3.1.tgz", + "integrity": "sha512-lMJTbgNcDm5z+6KDxWtqOFWlGQxD6XaYwBqHR8kmpkP+WWWG90I35kdtQHY67Ay5CSuydkTBbJG+tH9JShFCyA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.3.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.3.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "dependencies": { + "@jest/types": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.3.1.tgz", + "integrity": "sha512-d0S0jmmTpjnhCmNpApgX3jrUZgZ22ivKJRvL2lli5hpCRoNnp1f85r2/wpKfXuYu8E7Jjh1hGfhPyup1NM5AmA==", + "dev": true, + "requires": { + "@jest/schemas": "^29.0.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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 + }, + "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 + }, + "pretty-format": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.3.1.tgz", + "integrity": "sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==", + "dev": true, + "requires": { + "@jest/schemas": "^29.0.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "jest-mock": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", @@ -44711,6 +46111,23 @@ "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", "dev": true }, + "stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + } + } + }, "stackframe": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", @@ -44875,6 +46292,15 @@ } } }, + "storybook-addon-next-router": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/storybook-addon-next-router/-/storybook-addon-next-router-3.1.1.tgz", + "integrity": "sha512-Z14dED37vNXkN7+VY80HhF9itGReWoBAlKREHEk2By/dW7zSSqcSyXYV4bDMXIMAFYHMaA1svcBC1idVG8FhAw==", + "dev": true, + "requires": { + "tslib": "^2.3.0" + } + }, "stream-browserify": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", diff --git a/frontend/package.json b/frontend/package.json index 98060a06..878e1683 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -14,7 +14,7 @@ "check-lint": "eslint . --ext ts --ext tsx --ext js", "format": "prettier --write .", "test-all": "npm run check-format && npm run check-lint && npm run check-types && npm run build", - "storybook": "start-storybook -p 6006", + "storybook": "start-storybook -p 6006 -c .storybook", "build-storybook": "build-storybook" }, "lint-staged": { @@ -45,6 +45,7 @@ "@storybook/addon-interactions": "^6.5.13", "@storybook/addon-links": "^6.5.13", "@storybook/builder-webpack5": "^6.5.13", + "@storybook/jest": "^0.0.10", "@storybook/manager-webpack5": "^6.5.13", "@storybook/react": "^6.5.13", "@storybook/testing-library": "^0.0.13", @@ -68,6 +69,8 @@ "lint-staged": "^13.0.3", "prettier": "^2.7.1", "storybook-addon-next": "^1.6.10", - "typescript": "^4.8.4" + "storybook-addon-next-router": "^3.1.1", + "typescript": "^4.8.4", + "webpack": "^5.75.0" } } diff --git a/frontend/public/icons/logo.svg b/frontend/public/icons/logo-lg.svg similarity index 100% rename from frontend/public/icons/logo.svg rename to frontend/public/icons/logo-lg.svg diff --git a/frontend/public/icons/logo-md.svg b/frontend/public/icons/logo-md.svg new file mode 100644 index 00000000..bc27ab14 --- /dev/null +++ b/frontend/public/icons/logo-md.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/frontend/src/components/Header/DetailTitle/DetailTitle.stories.tsx b/frontend/src/components/Header/DetailTitle/DetailTitle.stories.tsx new file mode 100644 index 00000000..57ec3187 --- /dev/null +++ b/frontend/src/components/Header/DetailTitle/DetailTitle.stories.tsx @@ -0,0 +1,15 @@ +import DetailTitle from '.'; +import { ComponentMeta, ComponentStory } from '@storybook/react'; + +export default { + title: 'Component/Header/HeaderItems/DetailTitle', + component: DetailTitle, +} as ComponentMeta; + +const Template: ComponentStory = (args) => ; + +export const _DetailTitle = Template.bind({}); +_DetailTitle.args = { + title: '๋ชจ์ž„๊ฒŒ์‹œํŒ', + subTitle: '๋‹ค์–‘ํ•œ ์†Œ๋ชจ์ž„์„ ์œ„ํ•œ ๊ฒŒ์‹œํŒ', +}; diff --git a/frontend/src/components/Header/DetailTitle/index.tsx b/frontend/src/components/Header/DetailTitle/index.tsx new file mode 100644 index 00000000..e8e6cdb1 --- /dev/null +++ b/frontend/src/components/Header/DetailTitle/index.tsx @@ -0,0 +1,29 @@ +import { IconChevronLeft } from '@tabler/icons'; +import { ActionIcon, Title, Text } from '@mantine/core'; + +import { DetailTitleWrapper, DetailTitleTextWrapper } from './styles'; +import { useRouter } from 'next/router'; + +interface Props { + title: string; + subTitle: string; +} + +const DetailTitle = ({ title, subTitle }: Props) => { + const router = useRouter(); + return ( + + router.back()}> + + + + {title} + + {subTitle} + + + + ); +}; + +export default DetailTitle; diff --git a/frontend/src/components/Header/DetailTitle/styles.tsx b/frontend/src/components/Header/DetailTitle/styles.tsx new file mode 100644 index 00000000..63a9c90e --- /dev/null +++ b/frontend/src/components/Header/DetailTitle/styles.tsx @@ -0,0 +1,15 @@ +import styled from '@emotion/styled'; + +const DetailTitleWrapper = styled.div` + display: flex; + align-items: center; + gap: 1.2rem; +`; + +const DetailTitleTextWrapper = styled.div` + display: flex; + flex-direction: column; + gap: 0.4rem; +`; + +export { DetailTitleWrapper, DetailTitleTextWrapper }; diff --git a/frontend/src/components/Header/Header.stories.tsx b/frontend/src/components/Header/Header.stories.tsx new file mode 100644 index 00000000..2fd367a3 --- /dev/null +++ b/frontend/src/components/Header/Header.stories.tsx @@ -0,0 +1,103 @@ +import { Avatar, Menu, Text } from '@mantine/core'; +import { ComponentMeta, ComponentStory } from '@storybook/react'; +import { within, userEvent } from '@storybook/testing-library'; + +import Header from '.'; +import Logo from '@public/icons/logo-md.svg'; +import LoginButton from '@components/Header/LoginButton'; +import RootTitle from '@components/Header/RootTitle'; +import DetailTitle from '@components/Header/DetailTitle'; +import UtilButton from '@components/Header/UtilButton'; + +export default { + title: 'Component/Header', + component: Header, +} as ComponentMeta; + +const Template: ComponentStory = (args) =>
    ; + +export const HomeRootNotLogin = Template.bind({}); +HomeRootNotLogin.args = { + leftNode: , + rightNode: , +}; + +export const HomeRootLogin = Template.bind({}); +HomeRootLogin.args = { + leftNode: , + rightNode: ( + + ), +}; + +export const OtherRootLogin = Template.bind({}); +OtherRootLogin.args = { + leftNode: , + rightNode: ( + + ), +}; + +export const OtherRootNotLogin = Template.bind({}); +OtherRootNotLogin.args = { + leftNode: , + rightNode: , +}; + +export const DetailPlain = Template.bind({}); +DetailPlain.args = { + leftNode: , +}; + +export const DetailFull = Template.bind({}); +DetailFull.args = { + leftNode: , + rightNode: ( + + + + ๋กœ๊ทธ์•„์›ƒ + + + + + ์ด๋ฆ„์ด ์—„์ฒญ ๊ธด๊ฑฐ + + + + ), +}; + +export const DetailFullClicked = Template.bind({}); +DetailFullClicked.args = { + leftNode: , + rightNode: ( + + + + ๋กœ๊ทธ์•„์›ƒ + + + + + ํด๋ฆญ์ด ์ž˜ ๋˜๋‚˜์šฉ? + + + + ), +}; +DetailFullClicked.play = async ({ canvasElement }) => { + const canvas = within(canvasElement); + const clickedUtilButton = await canvas.findAllByRole('button'); + await userEvent.click(clickedUtilButton[1]); +}; diff --git a/frontend/src/components/Header/LoginButton/LoginButton.stories.tsx b/frontend/src/components/Header/LoginButton/LoginButton.stories.tsx new file mode 100644 index 00000000..c79f7fde --- /dev/null +++ b/frontend/src/components/Header/LoginButton/LoginButton.stories.tsx @@ -0,0 +1,12 @@ +import LoginButton from '.'; +import { ComponentMeta, ComponentStory } from '@storybook/react'; + +export default { + title: 'Component/Header/HeaderItems/LoginButton', + component: LoginButton, +} as ComponentMeta; + +const Template: ComponentStory = (args) => ; + +export const _LoginButton = Template.bind({}); +_LoginButton.args = {}; diff --git a/frontend/src/components/Header/LoginButton/index.tsx b/frontend/src/components/Header/LoginButton/index.tsx new file mode 100644 index 00000000..61081abf --- /dev/null +++ b/frontend/src/components/Header/LoginButton/index.tsx @@ -0,0 +1,14 @@ +import Link from 'next/link'; +import { Button } from '@mantine/core'; + +const LoginButton = () => { + return ( + + + + ); +}; + +export default LoginButton; diff --git a/frontend/src/components/Header/RootTitle/RootTitle.stories.tsx b/frontend/src/components/Header/RootTitle/RootTitle.stories.tsx new file mode 100644 index 00000000..5226882f --- /dev/null +++ b/frontend/src/components/Header/RootTitle/RootTitle.stories.tsx @@ -0,0 +1,14 @@ +import RootTitle from '.'; +import { ComponentMeta, ComponentStory } from '@storybook/react'; + +export default { + title: 'Component/Header/HeaderItems/RootTitle', + component: RootTitle, +} as ComponentMeta; + +const Template: ComponentStory = (args) => ; +export const _RootTitle = Template.bind({}); +_RootTitle.args = { + title: '๋ชจ์ž„๊ฒŒ์‹œํŒ!!!!', + subTitle: '๋‹ค์–‘ํ•œ ์†Œ๋ชจ์ž„์„ ์œ„ํ•œ ๊ฒŒ์‹œํŒ', +}; diff --git a/frontend/src/components/Header/RootTitle/index.tsx b/frontend/src/components/Header/RootTitle/index.tsx new file mode 100644 index 00000000..880237fb --- /dev/null +++ b/frontend/src/components/Header/RootTitle/index.tsx @@ -0,0 +1,20 @@ +import { Title, Text } from '@mantine/core'; +import { RootTitleWrapper } from '@components/Header/RootTitle/styles'; + +interface Props { + title: string; + subTitle: string; +} + +const RootTitle = ({ title, subTitle }: Props) => { + return ( + + {title} + + {subTitle} + + + ); +}; + +export default RootTitle; diff --git a/frontend/src/components/Header/RootTitle/styles.tsx b/frontend/src/components/Header/RootTitle/styles.tsx new file mode 100644 index 00000000..5826dc95 --- /dev/null +++ b/frontend/src/components/Header/RootTitle/styles.tsx @@ -0,0 +1,9 @@ +import styled from '@emotion/styled'; + +const RootTitleWrapper = styled.div` + display: flex; + flex-direction: column; + gap: 0.4rem; +`; + +export { RootTitleWrapper }; diff --git a/frontend/src/components/Header/UtilButton/UtilButton.stories.tsx b/frontend/src/components/Header/UtilButton/UtilButton.stories.tsx new file mode 100644 index 00000000..11212677 --- /dev/null +++ b/frontend/src/components/Header/UtilButton/UtilButton.stories.tsx @@ -0,0 +1,24 @@ +import UtilButton from '.'; +import { ComponentMeta, ComponentStory } from '@storybook/react'; +import { Menu, Text } from '@mantine/core'; + +export default { + title: 'Component/Header/HeaderItems/UtilButton', + component: UtilButton, +} as ComponentMeta; + +const Template: ComponentStory = (args) => ( + + + + ๋กœ๊ทธ์•„์›ƒ + + + + + ์ด๋ฆ„์ด ์—„์ฒญ์—„์ฒญ ๊ธด๊ฑฐ + + + +); +export const _UtilButton = Template.bind({}); diff --git a/frontend/src/components/Header/UtilButton/index.tsx b/frontend/src/components/Header/UtilButton/index.tsx new file mode 100644 index 00000000..f5796cf2 --- /dev/null +++ b/frontend/src/components/Header/UtilButton/index.tsx @@ -0,0 +1,28 @@ +import { ActionIcon, Menu } from '@mantine/core'; +import { IconDotsVertical } from '@tabler/icons'; +import { ReactNode } from 'react'; + +interface Props { + /** + * Menu.Items๋กœ ๊ฐ์‹ธ์ง„ ์ปดํฌ๋„ŒํŠธ๋“ค์„ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค. + * ํ•„์š”ํ•œ ์ด๋ฒคํŠธ๋“ค์€ Menu.Items์— ๋ฐ”์ธ๋”ฉํ•˜์—ฌ ๋„˜๊ฒจ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. + * Menu.Item์˜ p๋Š” md๋กœ ๊ณ ์ •๋˜๋„๋ก ํ•ด์•ผ ๋””์ž์ธ ์‹œ์•ˆ์— ๋งž์Šต๋‹ˆ๋‹ค. + * ์˜ˆ์‹œ๋Š” ์Šคํ† ๋ฆฌ๋ถ์˜ Header/DetailFull์„ ์ฐธ๊ณ ํ•˜์„ธ์š”. + */ + children: ReactNode; +} + +const UtilButton = ({ children }: Props) => { + return ( + + + + + + + {children} + + ); +}; + +export default UtilButton; diff --git a/frontend/src/components/Header/index.tsx b/frontend/src/components/Header/index.tsx new file mode 100644 index 00000000..0ca6a0d0 --- /dev/null +++ b/frontend/src/components/Header/index.tsx @@ -0,0 +1,23 @@ +import { ReactNode } from 'react'; +import { HeaderWrapper } from '@components/Header/styles'; + +interface Props { + /** + * ์™ผ์ชฝ์— ์œ„์น˜ํ•  ์ž์‹ ์š”์†Œ๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. + */ + leftNode: ReactNode; + /** + * ์˜ค๋ฅธ์ชฝ์— ์œ„์น˜ํ•  ์ž์‹ ์š”์†Œ๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. + */ + rightNode?: ReactNode; +} + +const Header = ({ leftNode, rightNode }: Props) => { + return ( + + {leftNode} + {rightNode} + + ); +}; +export default Header; diff --git a/frontend/src/components/Header/styles.tsx b/frontend/src/components/Header/styles.tsx new file mode 100644 index 00000000..bdce1ca1 --- /dev/null +++ b/frontend/src/components/Header/styles.tsx @@ -0,0 +1,13 @@ +import styled from '@emotion/styled'; + +const HeaderWrapper = styled.div` + display: flex; + justify-content: space-between; + align-items: center; + padding: 0 1.6rem; + height: 6.4rem; + background-color: ${({ theme }) => theme.colors.white}; + box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.1); +`; + +export { HeaderWrapper }; diff --git a/frontend/src/components/StatCounter/index.stories.tsx b/frontend/src/components/StatCounter/StatCounter.stories.tsx similarity index 100% rename from frontend/src/components/StatCounter/index.stories.tsx rename to frontend/src/components/StatCounter/StatCounter.stories.tsx index 1bd2da74..1dd8a973 100644 --- a/frontend/src/components/StatCounter/index.stories.tsx +++ b/frontend/src/components/StatCounter/StatCounter.stories.tsx @@ -1,5 +1,5 @@ -import { ComponentMeta, ComponentStory } from '@storybook/react'; import StatCounter from '.'; +import { ComponentMeta, ComponentStory } from '@storybook/react'; export default { title: 'Component/StatCounter', diff --git a/frontend/src/components/StatCounter/index.tsx b/frontend/src/components/StatCounter/index.tsx index 458bb39f..3599a651 100644 --- a/frontend/src/components/StatCounter/index.tsx +++ b/frontend/src/components/StatCounter/index.tsx @@ -41,7 +41,7 @@ const StatCounter = ({ variant, count = 0 }: Props) => { const StatCounterWrapper = styled.div` display: flex; align-items: center; - gap: 0.5rem; + gap: 0.4rem; `; export default StatCounter; diff --git a/frontend/src/components/Title.tsx b/frontend/src/components/Title.tsx deleted file mode 100644 index 28113720..00000000 --- a/frontend/src/components/Title.tsx +++ /dev/null @@ -1,5 +0,0 @@ -const Title = () => { - return
    Title
    ; -}; - -export default Title; diff --git a/frontend/src/pages/_app.tsx b/frontend/src/pages/_app.tsx index 1198c6a9..dd687c3d 100644 --- a/frontend/src/pages/_app.tsx +++ b/frontend/src/pages/_app.tsx @@ -1,12 +1,9 @@ -import { MantineProvider } from '@mantine/core'; import Head from 'next/head'; import { AppProps } from 'next/app'; import { QueryClientProvider, QueryClient } from '@tanstack/react-query'; import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; import RouterTransition from '@components/RouterTransition'; -import theme from '@styles/theme'; -import CustomFonts from '@styles/CustomFont'; -import GlobalStyles from '@styles/GlobalStyles'; +import CommonStyles from '@styles/CommonStyles'; const queryClient = new QueryClient(); @@ -19,12 +16,10 @@ export default function App({ Component, pageProps }: AppProps) { - - - + - + ); diff --git a/frontend/src/pages/Login.tsx b/frontend/src/pages/login.tsx similarity index 95% rename from frontend/src/pages/Login.tsx rename to frontend/src/pages/login.tsx index 870beda3..1ec2a738 100644 --- a/frontend/src/pages/Login.tsx +++ b/frontend/src/pages/login.tsx @@ -1,5 +1,5 @@ import styled from '@emotion/styled'; -import LogoIcon from '@public/icons/logo.svg'; +import LogoIcon from '@public/icons/logo-lg.svg'; import PageLayout from '@components/common/PageLayout'; import GitLoginButton from '@components/gitLoginButton'; diff --git a/frontend/src/styles/CommonStyles.tsx b/frontend/src/styles/CommonStyles.tsx new file mode 100644 index 00000000..ea6b09a8 --- /dev/null +++ b/frontend/src/styles/CommonStyles.tsx @@ -0,0 +1,19 @@ +import { ReactNode } from 'react'; +import { MantineProvider } from '@mantine/core'; +import theme from '@styles/theme'; +import CustomFonts from '@styles/CustomFont'; +import GlobalStyles from '@styles/GlobalStyles'; + +interface Props { + children: ReactNode; +} + +const CommonStyles = ({ children }: Props) => ( + + + + {children} + +); + +export default CommonStyles; diff --git a/frontend/src/styles/GlobalStyles.tsx b/frontend/src/styles/GlobalStyles.tsx index b91f8013..6831c29f 100644 --- a/frontend/src/styles/GlobalStyles.tsx +++ b/frontend/src/styles/GlobalStyles.tsx @@ -1,7 +1,18 @@ import { Global } from '@mantine/core'; -const GlobalStyles = () => { - return ; +const GlobalStyle = () => { + return ( + + ); }; -export default GlobalStyles; +export default GlobalStyle; diff --git a/frontend/src/styles/theme.ts b/frontend/src/styles/theme.ts index 84a805ce..3cde55c2 100644 --- a/frontend/src/styles/theme.ts +++ b/frontend/src/styles/theme.ts @@ -36,12 +36,12 @@ const theme: MantineThemeOverride = { fontFamily: 'NanumSquareNeo, sans-serif', fontWeight: 900, sizes: { - h1: { fontSize: 32 }, - h2: { fontSize: 24 }, - h3: { fontSize: 20 }, - h4: { fontSize: 16 }, - h5: { fontSize: 14 }, - h6: { fontSize: 12 }, + h1: { fontSize: 32, lineHeight: 1.2 }, + h2: { fontSize: 24, lineHeight: 1.2 }, + h3: { fontSize: 20, lineHeight: 1.2 }, + h4: { fontSize: 16, lineHeight: 1.2 }, + h5: { fontSize: 14, lineHeight: 1.2 }, + h6: { fontSize: 12, lineHeight: 1.2 }, }, }, }; diff --git a/frontend/src/typings/custom.d.ts b/frontend/src/typings/custom.d.ts index 6ecb272b..d59fccad 100644 --- a/frontend/src/typings/custom.d.ts +++ b/frontend/src/typings/custom.d.ts @@ -1,5 +1,6 @@ declare module '*.svg' { - import React from 'react'; - const svg: React.FC>; - export default svg; + import React = require('react'); + export const ReactComponent: React.FunctionComponent>; + const src: string; + export default src; } From 52c51d7fa44fee725deb22696e838392aad7e500 Mon Sep 17 00:00:00 2001 From: yangseungchan Date: Tue, 22 Nov 2022 12:15:49 +0900 Subject: [PATCH 014/142] =?UTF-8?q?[Feature]=20Frontend=20nginx=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9=20(#49)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ๐Ÿฅ… chore: docker ๊ฐœ๋ฐœ์šฉ ์ด๋ฏธ์ง€, ์ปดํฌ์ฆˆ ํŒŒ์ผ ๋ถ„๋ฆฌ + ๊ฐœ๋ฐœํ™˜๊ฒฝ ๊ตฌ์„ฑ ์Šคํฌ๋ฆฝํŠธ ์ƒ์„ฑ * โœจ feature: nginx ๋กœ์ปฌ ์ปจํ…Œ์ด๋„ˆ ์„ค์ • * ๐Ÿฅ… chore: frontend CI/CD ํ…Œ์ŠคํŠธ * ๐Ÿฅ… chore: frontend cd ํ…Œ์ŠคํŠธ * ๐Ÿฅ… chore: ํ”„๋ก ํŠธ CD ํ…Œ์ŠคํŠธ * ๐Ÿฅ… chore: ํ”„๋ก ํŠธ CD ์„ค์ • ์™„๋ฃŒ * ๐Ÿฅ… chore: docker-copose local ๋ฒ„์ „์—… --- frontend/.dockerignore | 3 +- frontend/Dockerfile | 20 +++++++++++-- frontend/Dockerfile.development | 5 ++++ frontend/docker-compose.local.yml | 15 ++++------ frontend/docker-compose.yml | 24 +++++++++++++-- frontend/nginx.Dockerfile | 10 +++++++ frontend/nginx.conf | 50 +++++++++++++++++++++++++++++++ frontend/scripts/dev-env.sh | 20 +++++++++++++ 8 files changed, 131 insertions(+), 16 deletions(-) create mode 100644 frontend/Dockerfile.development create mode 100644 frontend/nginx.Dockerfile create mode 100644 frontend/nginx.conf create mode 100755 frontend/scripts/dev-env.sh diff --git a/frontend/.dockerignore b/frontend/.dockerignore index 15a1fb83..35823bbd 100644 --- a/frontend/.dockerignore +++ b/frontend/.dockerignore @@ -21,4 +21,5 @@ **/secrets.dev.yaml **/values.dev.yaml README.md -.next \ No newline at end of file +.next +node_modules/ \ No newline at end of file diff --git a/frontend/Dockerfile b/frontend/Dockerfile index 9a0afcf7..0dc7087a 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -1,6 +1,20 @@ +# node 16.18.1 ์ด๋ฏธ์ง€ ์‚ฌ์šฉ FROM node:16.18.1-alpine as development + +# ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ ์„ค์ • WORKDIR /usr/src/app -COPY package.json ./ -COPY package-lock.json ./ + +# package.json, package-lock.json ๋ณต์‚ฌ +COPY package*.json ./ + +# ์˜์กด์„ฑ ์„ค์น˜ RUN npm install -COPY . . \ No newline at end of file + +# ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋“  ํŒŒ์ผ ๋ณต์‚ฌ +COPY . . + +# Build NextJS app +RUN npm run build + +# 3000 ํฌํŠธ ๊ฐœ๋ฐฉ +EXPOSE 3000 \ No newline at end of file diff --git a/frontend/Dockerfile.development b/frontend/Dockerfile.development new file mode 100644 index 00000000..96c49503 --- /dev/null +++ b/frontend/Dockerfile.development @@ -0,0 +1,5 @@ +FROM node:16.18.1-alpine as development +WORKDIR /usr/src/app +COPY package*.json ./ +RUN npm install +COPY . . \ No newline at end of file diff --git a/frontend/docker-compose.local.yml b/frontend/docker-compose.local.yml index c4e2dfff..fd23f8b4 100644 --- a/frontend/docker-compose.local.yml +++ b/frontend/docker-compose.local.yml @@ -1,11 +1,9 @@ -version: '3.4' +version: '3.9' services: frontend: - container_name: moyeo-client - build: - context: . - dockerfile: Dockerfile + container_name: moyeo-nextjs + image: moyeo-frontend-dev environment: NODE_ENV: development ports: @@ -16,15 +14,12 @@ services: - /usr/src/app/node_modules storybook: container_name: moyeo-storybook - image: frontend_frontend + image: moyeo-frontend-dev environment: NODE_ENV: development ports: - 6006:6006 - command: > - sh -c " - npm run storybook - " + command: npm run storybook volumes: - .:/usr/src/app - /usr/src/app/node_modules diff --git a/frontend/docker-compose.yml b/frontend/docker-compose.yml index 2289694f..dba896cd 100644 --- a/frontend/docker-compose.yml +++ b/frontend/docker-compose.yml @@ -1,4 +1,4 @@ -version: '3.4' +version: '3.9' services: frontend: @@ -8,4 +8,24 @@ services: NODE_ENV: development ports: - 3000:3000 - command: npm run dev + command: npm run start + networks: + - backbone + + nginx: + container_name: moyeo-nginx + build: + context: . + dockerfile: nginx.Dockerfile + ports: + - 80:80 + volumes: + - ./nginx.conf:/etc/nginx/nginx.conf + depends_on: + - frontend + networks: + - backbone + +networks: + backbone: + driver: bridge diff --git a/frontend/nginx.Dockerfile b/frontend/nginx.Dockerfile new file mode 100644 index 00000000..903436fa --- /dev/null +++ b/frontend/nginx.Dockerfile @@ -0,0 +1,10 @@ +FROM nginx:alpine + +# ์ด๋ฏธ์ง€ ์กด์žฌํ•˜๋Š” config ํŒŒ์ผ๋“ค ๋ฏธ๋ฆฌ ์ œ๊ฑฐ +RUN rm /etc/nginx/conf.d/* + +# nginx.conf ํŒŒ์ผ ๋ณต์‚ฌ +COPY nginx.conf /etc/nginx/conf.d + +# 80ํฌํŠธ ๊ฐœ๋ฐฉ +EXPOSE 80 \ No newline at end of file diff --git a/frontend/nginx.conf b/frontend/nginx.conf new file mode 100644 index 00000000..06533e8e --- /dev/null +++ b/frontend/nginx.conf @@ -0,0 +1,50 @@ +events { + worker_connections 1024; +} + +http { + proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=STATIC:10m inactive=7d use_temp_path=off; + + upstream nextjs_upstream { + server moyeo-client:3000; + } + + server { + listen 80 default_server; + server_name _; + server_tokens off; + + # proxy header ์„ค์ • + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection 'upgrade'; + proxy_set_header Host $host; + proxy_cache_bypass $http_upgrade; + + # gzip ์„ค์ • + gzip on; + gzip_proxied any; + gzip_comp_level 4; + gzip_types text/css application/javascript image/svg+xml; + + # bundle js์™€ ๊ฐ™์€ ์ •์ ํŒŒ์ผ ๊ฒฝ๋กœ + location /_next/static { + proxy_cache STATIC; + proxy_pass http://nextjs_upstream; + } + + # ์ด๋ฏธ์ง€์™€ ๊ฐ™์€ ์ •์ ํŒŒ์ผ ๊ฒฝ๋กœ + location /static { + proxy_cache STATIC; + # nextjs ์˜ cahce-control ์„ ๋ฌด์‹œํ•˜๊ณ  nginx์—์„œ ์บ์‹œํ•˜๋„๋ก ์„ค์ • + proxy_ignore_headers Cache-Control; + proxy_cache_valid 60m; + proxy_pass http://nextjs_upstream; + } + + location / { + proxy_pass http://nextjs_upstream; + } + } + +} \ No newline at end of file diff --git a/frontend/scripts/dev-env.sh b/frontend/scripts/dev-env.sh new file mode 100755 index 00000000..2f4fc496 --- /dev/null +++ b/frontend/scripts/dev-env.sh @@ -0,0 +1,20 @@ +#!/bin/sh + +# ์—๋Ÿฌ๋ฅผ ๋งŒ๋‚˜๋„ ๋ฌด์ค‘๋‹จ์œผ๋กœ ๋ช…๋ น์–ด ์‹คํ–‰ +set +e + +# ๊ธฐ์กด์˜ ๊ฐœ๋ฐœ ์ปจํ…Œ์ด๋„ˆ ์ค‘์ง€ ๋ฐ ์ œ๊ฑฐ +docker stop moyeo-nextjs +docker rm moyeo-nextjs +docker stop moyeo-storybook +docker rm moyeo-storybook + +# ์ด๋ฏธ์ง€ ์ œ๊ฑฐ +docker rmi moyeo-frontend-dev + + +# ๊ฐœ๋ฐœ์šฉ ์ด๋ฏธ์ง€ ๋นŒ๋“œ +docker build -t moyeo-frontend-dev -f Dockerfile.development . + +# ๊ฐœ๋ฐœ์šฉ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ +docker-compose -f docker-compose.local.yml up -d \ No newline at end of file From 8e8a301095addcd7a0287778d46b2c830931f482 Mon Sep 17 00:00:00 2001 From: Gakko <90585081+pythonstrup@users.noreply.github.com> Date: Tue, 22 Nov 2022 13:42:04 +0900 Subject: [PATCH 015/142] =?UTF-8?q?[Feature]=20HTTPS=20=EC=84=A4=EC=A0=95?= =?UTF-8?q?=ED=95=98=EA=B8=B0=20(#47)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ๐Ÿฅ… chore: nginx ๋ฐฐํฌ์šฉ Dockerfile ์ž‘์„ฑ * ๐Ÿฅ… chore: nginx ๋กœ์ปฌ์šฉ Dockerfile ์ž‘์„ฑ * ๐Ÿฅ… chore: nginx ๋กœ์ปฌ์šฉ config ์ž‘์„ฑ * ๐Ÿฅ… chore: nginx ๋ฐฐํฌ์šฉ config ์ž‘์„ฑ * ๐Ÿฅ… chore: nginx ๋ฐฐํฌ์šฉ dockerfile๋กœ ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: https ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ cd ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์šฉ CD docker ๋ช…๋ น์–ด ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: init letsencrypt shell script ์ถ”๊ฐ€ * ๐Ÿฅ… chore: dev-deploy ์ˆ˜์ • * ๐Ÿฅ… chore: init-letsencrypt script ์ˆ˜์ • * ๐Ÿฅ… chore: dev-deploy ์ˆ˜์ • * ๐Ÿฅ… chore: nginx ๋ฐฐํฌ์šฉ config ์ˆ˜์ • * ๐Ÿฅ… chore: docker compose nginx volumes ์—ฐ๊ฒฐ * ๐Ÿฅ… chore: Let's Encrypt ํ˜ธํ™˜์„ ์œ„ํ•œ dokcer compose ๋ฒ„์ „ ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์šฉ CD ์›์ƒ ๋ณต๊ตฌ --- backend/data/nginx/nginx.conf | 37 +++++++++++++++ backend/docker-compose.local.yml | 2 +- backend/docker-compose.yml | 25 ++++++++-- backend/init-letsencrypt.sh | 80 ++++++++++++++++++++++++++++++++ backend/{ => local}/nginx.conf | 0 backend/nginx.Dockerfile | 2 +- backend/scripts/dev-deploy.sh | 8 +++- 7 files changed, 146 insertions(+), 8 deletions(-) create mode 100644 backend/data/nginx/nginx.conf create mode 100644 backend/init-letsencrypt.sh rename backend/{ => local}/nginx.conf (100%) diff --git a/backend/data/nginx/nginx.conf b/backend/data/nginx/nginx.conf new file mode 100644 index 00000000..f5dd449c --- /dev/null +++ b/backend/data/nginx/nginx.conf @@ -0,0 +1,37 @@ + +upstream backend-server { + server 101.101.219.219:3000; +} + +server { + listen 80 default_server; + server_name api.moyeomoyeo.com; + server_tokens off; + + # certbot์ด ๋ฐœ๊ธ‰ํ•œ challenge ํŒŒ์ผ์„ nginx๊ฐ€ ์„œ๋น™ + location /.well-known/acme-challenge/ { + allow all; + root /var/www/certbot; + } + + # ๋ชจ๋“  http(80ํฌํŠธ) ์š”์ฒญ์„ https๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŒ… + location / { + return 301 https://$host$request_uri; + } +} + +server { + listen 443 ssl; + server_name api.moyeomoyeo.com; + server_tokens off; + + ssl_certificate /etc/letsencrypt/live/api.moyeomoyeo.com/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/api.moyeomoyeo.com/privkey.pem; + include /etc/letsencrypt/options-ssl-nginx.conf; + ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; + + location / { + proxy_pass http://backend-server; + proxy_http_version 1.1; + } +} \ No newline at end of file diff --git a/backend/docker-compose.local.yml b/backend/docker-compose.local.yml index a104d71b..023d099b 100644 --- a/backend/docker-compose.local.yml +++ b/backend/docker-compose.local.yml @@ -1,4 +1,4 @@ -version: '3.9' +version: '3.3' services: moyeo-nginx: diff --git a/backend/docker-compose.yml b/backend/docker-compose.yml index b1219f0b..c15d2d26 100644 --- a/backend/docker-compose.yml +++ b/backend/docker-compose.yml @@ -1,18 +1,35 @@ -version: '3.9' +version: '3.3' services: moyeo-nginx: container_name: moyeo-nginx - build: - context: . - dockerfile: nginx.Dockerfile + image: nginx restart: always + volumes: + - ./data/nginx:/etc/nginx/conf.d + - ./data/certbot/conf:/etc/letsencrypt + - ./data/certbot/www:/var/www/certbot ports: - 80:80 + - 443:443 depends_on: - moyeo-server networks: - backbone + command: '/bin/sh -c ''while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g "daemon off;"''' + + certbot: + container_name: certbot + image: certbot/certbot + restart: unless-stopped + volumes: + - ./data/certbot/conf:/etc/letsencrypt + - ./data/certbot/www:/var/www/certbot + depends_on: + - moyeo-nginx + networks: + - backbone + entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'" moyeo-server: container_name: moyeo-server diff --git a/backend/init-letsencrypt.sh b/backend/init-letsencrypt.sh new file mode 100644 index 00000000..cc882c6b --- /dev/null +++ b/backend/init-letsencrypt.sh @@ -0,0 +1,80 @@ +#!/bin/bash + +if ! [ -x "$(command -v docker-compose)" ]; then + echo 'Error: docker-compose is not installed.' >&2 + exit 1 +fi + +domains=(api.moyeomoyeo.com) +rsa_key_size=4096 +data_path="./data/certbot" +email="pythonstrup@gmail.com" # Adding a valid address is strongly recommended +staging=0 # Set to 1 if you're testing your setup to avoid hitting request limits + +if [ -d "$data_path" ]; then + read -p "Existing data found for $domains. Continue and replace existing certificate? (y/N) " decision + if [ "$decision" != "Y" ] && [ "$decision" != "y" ]; then + exit + fi +fi + + +if [ ! -e "$data_path/conf/options-ssl-nginx.conf" ] || [ ! -e "$data_path/conf/ssl-dhparams.pem" ]; then + echo "### Downloading recommended TLS parameters ..." + mkdir -p "$data_path/conf" + curl -s https://raw.githubusercontent.com/certbot/certbot/master/certbot-nginx/certbot_nginx/_internal/tls_configs/options-ssl-nginx.conf > "$data_path/conf/options-ssl-nginx.conf" + curl -s https://raw.githubusercontent.com/certbot/certbot/master/certbot/certbot/ssl-dhparams.pem > "$data_path/conf/ssl-dhparams.pem" + echo +fi + +echo "### Creating dummy certificate for $domains ..." +path="/etc/letsencrypt/live/$domains" +mkdir -p "$data_path/conf/live/$domains" +docker-compose run --rm --entrypoint "\ + openssl req -x509 -nodes -newkey rsa:$rsa_key_size -days 1\ + -keyout '$path/privkey.pem' \ + -out '$path/fullchain.pem' \ + -subj '/CN=localhost'" certbot +echo + + +echo "### Starting nginx ..." +docker-compose up --force-recreate -d nginx +echo + +echo "### Deleting dummy certificate for $domains ..." +docker-compose run --rm --entrypoint "\ + rm -Rf /etc/letsencrypt/live/$domains && \ + rm -Rf /etc/letsencrypt/archive/$domains && \ + rm -Rf /etc/letsencrypt/renewal/$domains.conf" certbot +echo + + +echo "### Requesting Let's Encrypt certificate for $domains ..." +#Join $domains to -d args +domain_args="" +for domain in "${domains[@]}"; do + domain_args="$domain_args -d $domain" +done + +# Select appropriate email arg +case "$email" in + "") email_arg="--register-unsafely-without-email" ;; + *) email_arg="--email $email" ;; +esac + +# Enable staging mode if needed +if [ $staging != "0" ]; then staging_arg="--staging"; fi + +docker-compose run --rm --entrypoint "\ + certbot certonly --webroot -w /var/www/certbot \ + $staging_arg \ + $email_arg \ + $domain_args \ + --rsa-key-size $rsa_key_size \ + --agree-tos \ + --force-renewal" certbot +echo + +echo "### Reloading nginx ..." +docker-compose exec nginx nginx -s reload \ No newline at end of file diff --git a/backend/nginx.conf b/backend/local/nginx.conf similarity index 100% rename from backend/nginx.conf rename to backend/local/nginx.conf diff --git a/backend/nginx.Dockerfile b/backend/nginx.Dockerfile index ca1d03e6..28ee18fa 100644 --- a/backend/nginx.Dockerfile +++ b/backend/nginx.Dockerfile @@ -1,5 +1,5 @@ FROM nginx -COPY nginx.conf /etc/nginx/conf.d +COPY ./local/nginx.conf /etc/nginx/conf.d EXPOSE 80 diff --git a/backend/scripts/dev-deploy.sh b/backend/scripts/dev-deploy.sh index d492e329..2014aa25 100644 --- a/backend/scripts/dev-deploy.sh +++ b/backend/scripts/dev-deploy.sh @@ -10,10 +10,14 @@ touch .env echo -e $4 > .env +# docker down +docker compose down + # ๋„์ปค ์ปจํ…Œ์ด๋„ˆ ์ „์ฒด ์‚ญ์ œ docker rm `docker ps -a -q` -# ๋„์ปค ์ด๋ฏธ์ง€ ์ „์ฒด ์‚ญ์ œ -docker compose down --rmi all +chmod +x ./init-letsencrypt.sh + +./init-letsencrypt.sh docker compose up -d --build \ No newline at end of file From 0d197ec021e362936164f89a8fec950919e04902 Mon Sep 17 00:00:00 2001 From: Kim Myeongil <67570061+username1103@users.noreply.github.com> Date: Tue, 22 Nov 2022 15:51:58 +0900 Subject: [PATCH 016/142] =?UTF-8?q?[Feature]=20NestJS=20=EC=85=8B=EC=97=85?= =?UTF-8?q?=ED=95=98=EA=B8=B0=20(#39)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :goal_net: chore: ์˜์กด์„ฑ ์„ค์น˜ - @nestjs/config - class-validator - class-transformer * :sparkles: feature: app config service ์ถ”๊ฐ€ - app config์— ๊ด€๋ จ๋œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ๋กœ๋“œ ๋ฐ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•œ app config service ์ถ”๊ฐ€ * :sparkles: feature: ์„œ๋ฒ„ ์‹คํ–‰ ํฌํŠธ๋ฅผ ํ™˜๊ฒฝ๋ณ€์ˆ˜์—์„œ ๊ฐ€์ ธ์˜ค๋„๋ก ์ˆ˜์ • * :goal_net: chore: ๋ฐฑ์—”๋“œ CI์‹œ ํ™˜๊ฒฝ๋ณ€์ˆ˜ํŒŒ์ผ ์ƒ์„ฑ * :sparkles: feature: ์˜ˆ์™ธ ํ•„ํ„ฐ ์ œ์ž‘ - ์ปค์Šคํ…€ ๊ธ€๋กœ๋ฒŒ ์˜ˆ์™ธํ•„ํ„ฐ ์ œ์ž‘ - API NotFound filter ์ œ์ž‘ - ์ผ๊ด€๋œ ์—๋Ÿฌ ํฌ๋งท์„ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ์ œ์ž‘ํ–ˆ์–ด์š”. * :sparkles: feature: ์ธํ’‹ ๊ฒ€์ฆ ํ•ธ๋“ค๋ง ์ถ”๊ฐ€ - all exception filter์—์„œ ๋ชจ๋“  ์—๋Ÿฌ ํ•ธ๋“ค๋งํ•˜๋„๋ก ์ˆ˜์ • - global validationPipe ์ถ”๊ฐ€ * :sparkles: feature: response serialize ์ถ”๊ฐ€ * :sparkles: feature: API versioning ์ถ”๊ฐ€ - URI๋ฅผ ์‚ฌ์šฉํ•œ api versioning ์ถ”๊ฐ€ - ๊ธฐ๋ณธ์  version์œผ๋กœ v1 ์„ค์ • * :recycle: refactor: nest setup ๋ถ„๋ฆฌ - ์ถ”ํ›„ e2e ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ์‹œ nest setup์„ ์œ„ํ•ด ๋ถ„๋ฆฌ * :sparkles: feature: swagger ์…‹์—… - @nestjs/swagger ์„ค์น˜ - swagger ์…‹์—… - API ๋ฉ”์†Œ๋“œ ์ˆœ์œผ๋กœ ์ •๋ ฌ - ์š”์ฒญ ๋ชฉ๋ก ์„œ๋ฒ„์— localhost ์ถ”๊ฐ€ - /v1/docs์— swagger ํŽ˜์ด์ง€ ์ถ”๊ฐ€ * :sparkles: feature: response entity ์ถ”๊ฐ€ - ์ผ๊ด€๋œ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์ œ๊ณต์„ ์œ„ํ•ด response entity ์ถ”๊ฐ€ * :sparkles: feature: ApiSuccessReponse ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ์ถ”๊ฐ€ - ResponseEntity์— ๋งž๋Š” ์ ์ ˆํ•œ swagger ๋ณ€ํ™˜์„ ์œ„ํ•ด ์ถ”๊ฐ€ * :sparkles: feature: ApiErrorResponse ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ์ถ”๊ฐ€ - ํŽธํ•œ swagger ์ž‘์„ฑ์„ ์œ„ํ•ด ์ถ”๊ฐ€ * :sparkles: feature: example ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๋ฐ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ์‚ฌ์šฉ์˜ˆ์ œ ์ถ”๊ฐ€ * :sparkles: feature: Http request logger ์ถ”๊ฐ€ - morgan ์„ค์น˜ - api-sucess-logger ๋ฏธ๋“ค์›จ์–ด ์ถ”๊ฐ€ - api-excecption-logger ๋ฏธ๋“ค์›จ์–ด ์ถ”๊ฐ€ * :recycle: refactor: path alias ์ ์šฉ - tsconfig path alias ์ ์šฉ - jest path alias ์ ์šฉ * :goal_net: chore: npm script ์ถ”๊ฐ€ - ๋ฐฑ์—”๋“œ ๋กœ์ปฌ ํ™˜๊ฒฝ ์‹คํ–‰ ์Šคํฌ๋ฆฝํŠธ start:local ์ถ”๊ฐ€ - ๋ฐฑ์—”๋“œ ๋กœ์ปฌ ํ™˜๊ฒฝ ๋ฉˆ์ถค ์Šคํฌ๋ฆฝํŠธ stop:local ์ถ”๊ฐ€ - ๋ฐฑ์—”๋“œ ๋กœ์ปฌ ํ™˜๊ฒฝ ์ƒˆ๋กœ๊ณ ์นจ ์Šคํฌ๋ฆฝํŠธ reload:local [Service..] ์ถ”๊ฐ€ --- .github/workflows/backend-dev-ci.yml | 7 +- backend/.gitignore | 6 +- backend/package-lock.json | 327 +++++++++++++++++- backend/package.json | 18 +- backend/src/app.controller.spec.ts | 13 +- backend/src/app.controller.ts | 28 +- backend/src/app.module.ts | 15 +- .../app/__test__/config.service.spec.ts | 32 ++ .../src/common/config/app/config.module.ts | 18 + .../src/common/config/app/config.service.ts | 28 ++ backend/src/common/config/app/validate.ts | 37 ++ backend/src/common/config/config-option.ts | 7 + .../decorator/api-error-response.decorator.ts | 57 +++ .../api-success-resposne.decorator.ts | 33 ++ .../exception/api-not-found.exception.ts | 7 + .../exception/bad-parameter.exception.ts | 7 + .../src/common/filter/all-exception.filter.ts | 61 ++++ .../api-exception-logger.middleware.ts | 22 ++ .../api-success-logger.middleware.ts | 23 ++ backend/src/common/response-entity.ts | 60 ++++ backend/src/main.ts | 12 +- backend/src/setNestApp.ts | 33 ++ backend/src/setSwagger.ts | 44 +++ backend/test/app.e2e-spec.ts | 28 +- backend/test/jest-e2e.json | 16 +- backend/tsconfig.json | 2 +- backend/tsconfig.paths.json | 31 ++ 27 files changed, 940 insertions(+), 32 deletions(-) create mode 100644 backend/src/common/config/app/__test__/config.service.spec.ts create mode 100644 backend/src/common/config/app/config.module.ts create mode 100644 backend/src/common/config/app/config.service.ts create mode 100644 backend/src/common/config/app/validate.ts create mode 100644 backend/src/common/config/config-option.ts create mode 100644 backend/src/common/decorator/api-error-response.decorator.ts create mode 100644 backend/src/common/decorator/api-success-resposne.decorator.ts create mode 100644 backend/src/common/exception/api-not-found.exception.ts create mode 100644 backend/src/common/exception/bad-parameter.exception.ts create mode 100644 backend/src/common/filter/all-exception.filter.ts create mode 100644 backend/src/common/middleware/api-exception-logger.middleware.ts create mode 100644 backend/src/common/middleware/api-success-logger.middleware.ts create mode 100644 backend/src/common/response-entity.ts create mode 100644 backend/src/setNestApp.ts create mode 100644 backend/src/setSwagger.ts create mode 100644 backend/tsconfig.paths.json diff --git a/.github/workflows/backend-dev-ci.yml b/.github/workflows/backend-dev-ci.yml index 3b181f0b..df3c8d1f 100644 --- a/.github/workflows/backend-dev-ci.yml +++ b/.github/workflows/backend-dev-ci.yml @@ -34,6 +34,11 @@ jobs: - name: build run: npm run build + - name: create environment variable file + run: | + touch .env.test + echo -e ${{ secrets.BACKEND_CI_TEST_ENVIRONMENT }} > .env.test + - name: test run: npm run test @@ -41,7 +46,7 @@ jobs: run: npm run test:e2e slack-notifications: - needs: [CI] + needs: [ CI ] if: ${{ always() }} uses: ./.github/workflows/slack-notification.yml with: diff --git a/backend/.gitignore b/backend/.gitignore index fea46634..5f018094 100644 --- a/backend/.gitignore +++ b/backend/.gitignore @@ -1,5 +1,9 @@ node_modules .DS.Store + dist -.env \ No newline at end of file + +.env +.env.* + diff --git a/backend/package-lock.json b/backend/package-lock.json index 6bf81cbf..4f87df79 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -10,8 +10,13 @@ "license": "UNLICENSED", "dependencies": { "@nestjs/common": "^9.0.0", + "@nestjs/config": "^2.2.0", "@nestjs/core": "^9.0.0", "@nestjs/platform-express": "^9.0.0", + "@nestjs/swagger": "^6.1.3", + "class-transformer": "^0.5.1", + "class-validator": "^0.13.2", + "morgan": "^1.10.0", "reflect-metadata": "^0.1.13", "rimraf": "^3.0.2", "rxjs": "^7.2.0" @@ -36,7 +41,6 @@ "ts-jest": "28.0.8", "ts-loader": "^9.2.3", "ts-node": "^10.0.0", - "tsconfig-paths": "4.1.0", "typescript": "^4.7.4" } }, @@ -1537,6 +1541,30 @@ } } }, + "node_modules/@nestjs/config": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@nestjs/config/-/config-2.2.0.tgz", + "integrity": "sha512-78Eg6oMbCy3D/YvqeiGBTOWei1Jwi3f2pSIZcZ1QxY67kYsJzTRTkwRT8Iv30DbK0sGKc1mcloDLD5UXgZAZtg==", + "dependencies": { + "dotenv": "16.0.1", + "dotenv-expand": "8.0.3", + "lodash": "4.17.21", + "uuid": "8.3.2" + }, + "peerDependencies": { + "@nestjs/common": "^7.0.0 || ^8.0.0 || ^9.0.0", + "reflect-metadata": "^0.1.13", + "rxjs": "^6.0.0 || ^7.2.0" + } + }, + "node_modules/@nestjs/config/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/@nestjs/core": { "version": "9.2.0", "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-9.2.0.tgz", @@ -1575,6 +1603,25 @@ } } }, + "node_modules/@nestjs/mapped-types": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-1.2.0.tgz", + "integrity": "sha512-NTFwPZkQWsArQH8QSyFWGZvJ08gR+R4TofglqZoihn/vU+ktHEJjMqsIsADwb7XD97DhiD+TVv5ac+jG33BHrg==", + "peerDependencies": { + "@nestjs/common": "^7.0.8 || ^8.0.0 || ^9.0.0", + "class-transformer": "^0.2.0 || ^0.3.0 || ^0.4.0 || ^0.5.0", + "class-validator": "^0.11.1 || ^0.12.0 || ^0.13.0", + "reflect-metadata": "^0.1.12" + }, + "peerDependenciesMeta": { + "class-transformer": { + "optional": true + }, + "class-validator": { + "optional": true + } + } + }, "node_modules/@nestjs/platform-express": { "version": "9.2.0", "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-9.2.0.tgz", @@ -1691,6 +1738,29 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, + "node_modules/@nestjs/swagger": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/@nestjs/swagger/-/swagger-6.1.3.tgz", + "integrity": "sha512-H9C/yRgLFb5QrAt6iGrYmIX9X7Q0zXkgZaTNUATljUBra+RCWrEUbLHBcGjTAOtcIyGV/vmyCLv68YSVcZoE0Q==", + "dependencies": { + "@nestjs/mapped-types": "1.2.0", + "js-yaml": "4.1.0", + "lodash": "4.17.21", + "path-to-regexp": "3.2.0", + "swagger-ui-dist": "4.15.1" + }, + "peerDependencies": { + "@fastify/static": "^6.0.0", + "@nestjs/common": "^9.0.0", + "@nestjs/core": "^9.0.0", + "reflect-metadata": "^0.1.12" + }, + "peerDependenciesMeta": { + "@fastify/static": { + "optional": true + } + } + }, "node_modules/@nestjs/testing": { "version": "9.2.0", "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-9.2.0.tgz", @@ -2604,8 +2674,7 @@ "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/array-flatten": { "version": "1.1.1", @@ -2765,6 +2834,22 @@ } ] }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/basic-auth/node_modules/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==" + }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -3078,6 +3163,20 @@ "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "dev": true }, + "node_modules/class-transformer": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", + "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==" + }, + "node_modules/class-validator": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.13.2.tgz", + "integrity": "sha512-yBUcQy07FPlGzUjoLuUfIOXzgynnQPPruyK1Ge2B74k9ROwnle1E+NxLWnUv5OLU8hA/qL5leAE9XnXq3byaBw==", + "dependencies": { + "libphonenumber-js": "^1.9.43", + "validator": "^13.7.0" + } + }, "node_modules/cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -3466,6 +3565,22 @@ "node": ">=6.0.0" } }, + "node_modules/dotenv": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz", + "integrity": "sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/dotenv-expand": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-8.0.3.tgz", + "integrity": "sha512-SErOMvge0ZUyWd5B0NXMQlDkN+8r+HhVUsxgOO7IoPDOdDRD2JjExpN6y3KnFR66jsJMwSn1pqIivhU5rcJiNg==", + "engines": { + "node": ">=12" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -5746,7 +5861,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, "dependencies": { "argparse": "^2.0.1" }, @@ -5845,6 +5959,11 @@ "node": ">= 0.8.0" } }, + "node_modules/libphonenumber-js": { + "version": "1.10.14", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.14.tgz", + "integrity": "sha512-McGS7GV/WjJ2KjfOGhJU1oJn29RYeo7Q+RpANRbUNMQ9gj5XArpbjurSuyYPTejFwbaUojstQ4XyWCrAzGOUXw==" + }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -5878,8 +5997,7 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash.memoize": { "version": "4.1.2", @@ -6130,6 +6248,45 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "dependencies": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/morgan/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/morgan/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/morgan/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -6287,6 +6444,14 @@ "node": ">= 0.8" } }, + "node_modules/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==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -7478,6 +7643,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/swagger-ui-dist": { + "version": "4.15.1", + "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-4.15.1.tgz", + "integrity": "sha512-DlZARu6ckUFqDe0j5IPayO4k0gQvYQw9Un02MhxAgaMtVnTH2vmyyDe+yKeV0r1LiiPx3JbasdS/5Yyb/AV3iw==" + }, "node_modules/symbol-observable": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", @@ -8042,6 +8212,14 @@ "node": ">=10.12.0" } }, + "node_modules/validator": { + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", + "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==", + "engines": { + "node": ">= 0.10" + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -9509,6 +9687,24 @@ "uuid": "9.0.0" } }, + "@nestjs/config": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@nestjs/config/-/config-2.2.0.tgz", + "integrity": "sha512-78Eg6oMbCy3D/YvqeiGBTOWei1Jwi3f2pSIZcZ1QxY67kYsJzTRTkwRT8Iv30DbK0sGKc1mcloDLD5UXgZAZtg==", + "requires": { + "dotenv": "16.0.1", + "dotenv-expand": "8.0.3", + "lodash": "4.17.21", + "uuid": "8.3.2" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + } + } + }, "@nestjs/core": { "version": "9.2.0", "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-9.2.0.tgz", @@ -9523,6 +9719,12 @@ "uuid": "9.0.0" } }, + "@nestjs/mapped-types": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-1.2.0.tgz", + "integrity": "sha512-NTFwPZkQWsArQH8QSyFWGZvJ08gR+R4TofglqZoihn/vU+ktHEJjMqsIsADwb7XD97DhiD+TVv5ac+jG33BHrg==", + "requires": {} + }, "@nestjs/platform-express": { "version": "9.2.0", "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-9.2.0.tgz", @@ -9613,6 +9815,18 @@ } } }, + "@nestjs/swagger": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/@nestjs/swagger/-/swagger-6.1.3.tgz", + "integrity": "sha512-H9C/yRgLFb5QrAt6iGrYmIX9X7Q0zXkgZaTNUATljUBra+RCWrEUbLHBcGjTAOtcIyGV/vmyCLv68YSVcZoE0Q==", + "requires": { + "@nestjs/mapped-types": "1.2.0", + "js-yaml": "4.1.0", + "lodash": "4.17.21", + "path-to-regexp": "3.2.0", + "swagger-ui-dist": "4.15.1" + } + }, "@nestjs/testing": { "version": "9.2.0", "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-9.2.0.tgz", @@ -10346,8 +10560,7 @@ "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "array-flatten": { "version": "1.1.1", @@ -10465,6 +10678,21 @@ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true }, + "basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "requires": { + "safe-buffer": "5.1.2" + }, + "dependencies": { + "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==" + } + } + }, "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -10688,6 +10916,20 @@ "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "dev": true }, + "class-transformer": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", + "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==" + }, + "class-validator": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.13.2.tgz", + "integrity": "sha512-yBUcQy07FPlGzUjoLuUfIOXzgynnQPPruyK1Ge2B74k9ROwnle1E+NxLWnUv5OLU8hA/qL5leAE9XnXq3byaBw==", + "requires": { + "libphonenumber-js": "^1.9.43", + "validator": "^13.7.0" + } + }, "cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -10980,6 +11222,16 @@ "esutils": "^2.0.2" } }, + "dotenv": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz", + "integrity": "sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==" + }, + "dotenv-expand": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-8.0.3.tgz", + "integrity": "sha512-SErOMvge0ZUyWd5B0NXMQlDkN+8r+HhVUsxgOO7IoPDOdDRD2JjExpN6y3KnFR66jsJMwSn1pqIivhU5rcJiNg==" + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -12698,7 +12950,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, "requires": { "argparse": "^2.0.1" } @@ -12771,6 +13022,11 @@ "type-check": "~0.4.0" } }, + "libphonenumber-js": { + "version": "1.10.14", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.14.tgz", + "integrity": "sha512-McGS7GV/WjJ2KjfOGhJU1oJn29RYeo7Q+RpANRbUNMQ9gj5XArpbjurSuyYPTejFwbaUojstQ4XyWCrAzGOUXw==" + }, "lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -12795,8 +13051,7 @@ "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash.memoize": { "version": "4.1.2", @@ -12979,6 +13234,41 @@ "minimist": "^1.2.6" } }, + "morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "requires": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "requires": { + "ee-first": "1.1.1" + } + } + } + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -13101,6 +13391,11 @@ "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==" + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -13972,6 +14267,11 @@ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, + "swagger-ui-dist": { + "version": "4.15.1", + "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-4.15.1.tgz", + "integrity": "sha512-DlZARu6ckUFqDe0j5IPayO4k0gQvYQw9Un02MhxAgaMtVnTH2vmyyDe+yKeV0r1LiiPx3JbasdS/5Yyb/AV3iw==" + }, "symbol-observable": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", @@ -14346,6 +14646,11 @@ "convert-source-map": "^1.6.0" } }, + "validator": { + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", + "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==" + }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", diff --git a/backend/package.json b/backend/package.json index 223f9200..421177b0 100644 --- a/backend/package.json +++ b/backend/package.json @@ -13,6 +13,9 @@ "start:dev": "nest start --watch", "start:debug": "nest start --debug --watch", "start:prod": "node dist/main", + "start:local": "docker compose -f docker-compose.local.yml up -d --build", + "stop:local": "docker compose -f docker-compose.local.yml down", + "reload:local": "docker compose -f docker-compose.local.yml up --force-recreate -d", "lint:fix": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", "lint": "eslint \"{src,apps,libs,test}/**/*.ts\"", "test": "jest", @@ -23,8 +26,13 @@ }, "dependencies": { "@nestjs/common": "^9.0.0", + "@nestjs/config": "^2.2.0", "@nestjs/core": "^9.0.0", "@nestjs/platform-express": "^9.0.0", + "@nestjs/swagger": "^6.1.3", + "class-transformer": "^0.5.1", + "class-validator": "^0.13.2", + "morgan": "^1.10.0", "reflect-metadata": "^0.1.13", "rimraf": "^3.0.2", "rxjs": "^7.2.0" @@ -49,10 +57,18 @@ "ts-jest": "28.0.8", "ts-loader": "^9.2.3", "ts-node": "^10.0.0", - "tsconfig-paths": "4.1.0", "typescript": "^4.7.4" }, "jest": { + "moduleNameMapper": { + "^@common/(.*)$": "/common/$1", + "^@middleware/(.*)$": "/common/middleware/$1", + "^@filter/(.*)$": "/common/filter/$1", + "^@config/(.*)$": "/common/config/$1", + "^@decorator/(.*)$": "/common/decorator/$1", + "^@exception/(.*)$": "/common/exception/$1", + "^@app/(.*)$": "/app/$1" + }, "moduleFileExtensions": [ "js", "json", diff --git a/backend/src/app.controller.spec.ts b/backend/src/app.controller.spec.ts index d22f3890..26b28090 100644 --- a/backend/src/app.controller.spec.ts +++ b/backend/src/app.controller.spec.ts @@ -1,6 +1,7 @@ import { Test, TestingModule } from '@nestjs/testing'; import { AppController } from './app.controller'; import { AppService } from './app.service'; +import { ResponseEntity } from '@common/response-entity'; describe('AppController', () => { let appController: AppController; @@ -15,8 +16,16 @@ describe('AppController', () => { }); describe('root', () => { - it('should return "Hello World!"', () => { - expect(appController.getHello()).toBe('Hello World!'); + test('example test', async () => { + // given + const id = 11; + + // when + const result = appController.getHello({ id }); + + // then + + expect(result).toEqual(ResponseEntity.OK_WITH_DATA('Hello World!')); }); }); }); diff --git a/backend/src/app.controller.ts b/backend/src/app.controller.ts index cce879ee..4c7b914f 100644 --- a/backend/src/app.controller.ts +++ b/backend/src/app.controller.ts @@ -1,12 +1,32 @@ -import { Controller, Get } from '@nestjs/common'; +import { Controller, Get, HttpCode, HttpStatus, Param } from '@nestjs/common'; +import { ApiProperty, ApiTags } from '@nestjs/swagger'; +import { Type } from 'class-transformer'; +import { IsNumber } from 'class-validator'; +import { ResponseEntity } from '@common/response-entity'; +import { ApiSuccessResponse } from '@decorator/api-success-resposne.decorator'; +import { ApiErrorResponse } from '@decorator/api-error-response.decorator'; +import { BadParameterException } from '@exception/bad-parameter.exception'; +import { ApiNotFoundException } from '@exception/api-not-found.exception'; import { AppService } from './app.service'; +export class ExampleDto { + @IsNumber() + @Type(() => Number) + @ApiProperty({ example: 1 }) + id: number; +} + @Controller() +@ApiTags('example') export class AppController { constructor(private readonly appService: AppService) {} - @Get() - getHello(): string { - return this.appService.getHello(); + @Get(':id') + @HttpCode(HttpStatus.OK) + @ApiSuccessResponse(HttpStatus.OK, String) + @ApiErrorResponse(BadParameterException, ApiNotFoundException) + getHello(@Param() params: ExampleDto) { + if (params.id < 10) throw new ApiNotFoundException(); + return ResponseEntity.OK_WITH_DATA(this.appService.getHello()); } } diff --git a/backend/src/app.module.ts b/backend/src/app.module.ts index 86628031..d9f8a7a0 100644 --- a/backend/src/app.module.ts +++ b/backend/src/app.module.ts @@ -1,10 +1,19 @@ -import { Module } from '@nestjs/common'; +import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common'; import { AppController } from './app.controller'; import { AppService } from './app.service'; +import { AppConfigModule } from '@config/app/config.module'; +import { ApiSuccessLoggerMiddleware } from '@middleware/api-success-logger.middleware'; +import { ApiExceptionLoggerMiddleware } from '@middleware/api-exception-logger.middleware'; @Module({ - imports: [], + imports: [AppConfigModule], controllers: [AppController], providers: [AppService], }) -export class AppModule {} +export class AppModule implements NestModule { + configure(consumer: MiddlewareConsumer) { + consumer + .apply(ApiSuccessLoggerMiddleware, ApiExceptionLoggerMiddleware) + .forRoutes('*'); + } +} diff --git a/backend/src/common/config/app/__test__/config.service.spec.ts b/backend/src/common/config/app/__test__/config.service.spec.ts new file mode 100644 index 00000000..21e35f8a --- /dev/null +++ b/backend/src/common/config/app/__test__/config.service.spec.ts @@ -0,0 +1,32 @@ +import { AppConfigService } from '../config.service'; +import { Test } from '@nestjs/testing'; +import { AppConfigModule } from '../config.module'; + +describe('App Config Service Test', () => { + let appConfigService: AppConfigService; + + beforeEach(async () => { + const module = await Test.createTestingModule({ + imports: [AppConfigModule], + }).compile(); + + appConfigService = module.get(AppConfigService); + }); + test('ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์„ค์ •๋œ PORT ๋ฒˆํ˜ธ๋ฅผ ์ž˜ ๊ฐ€์ ธ์˜ค๋Š”๊ฐ€', async () => { + // given + + // when + + // then + expect(appConfigService.port).toEqual(parseInt(process.env.PORT, 10)); + }); + + test('ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์„ค์ •๋œ NODE_ENV๋ฅผ ์ž˜ ๊ฐ€์ ธ์˜ค๋Š”๊ฐ€', async () => { + // given + + // when + + // then + expect(appConfigService.env).toEqual(process.env.NODE_ENV); + }); +}); diff --git a/backend/src/common/config/app/config.module.ts b/backend/src/common/config/app/config.module.ts new file mode 100644 index 00000000..0fcafdcc --- /dev/null +++ b/backend/src/common/config/app/config.module.ts @@ -0,0 +1,18 @@ +import { Module } from '@nestjs/common'; +import { AppConfigService } from './config.service'; +import { ConfigModule } from '@nestjs/config'; +import { getEnvironmentFilePath, isIgnoreEnvFile } from '../config-option'; +import { validate } from './validate'; + +@Module({ + imports: [ + ConfigModule.forRoot({ + envFilePath: getEnvironmentFilePath(), + ignoreEnvFile: isIgnoreEnvFile(), + validate, + }), + ], + providers: [AppConfigService], + exports: [AppConfigService], +}) +export class AppConfigModule {} diff --git a/backend/src/common/config/app/config.service.ts b/backend/src/common/config/app/config.service.ts new file mode 100644 index 00000000..7dae8fc6 --- /dev/null +++ b/backend/src/common/config/app/config.service.ts @@ -0,0 +1,28 @@ +import { Injectable } from '@nestjs/common'; +import { ConfigService } from '@nestjs/config'; +import { AppConfig, NodeEnv } from './validate'; + +@Injectable() +export class AppConfigService { + constructor(private readonly configService: ConfigService) {} + + get port() { + return this.configService.get('PORT', { infer: true }); + } + + get env() { + return this.configService.get('NODE_ENV', { infer: true }); + } + + isDevelopment() { + return this.env === NodeEnv.DEVELOPMENT; + } + + isPrduction() { + return this.env === NodeEnv.PRODUCTION; + } + + isTest() { + return this.env === NodeEnv.TEST; + } +} diff --git a/backend/src/common/config/app/validate.ts b/backend/src/common/config/app/validate.ts new file mode 100644 index 00000000..f000e243 --- /dev/null +++ b/backend/src/common/config/app/validate.ts @@ -0,0 +1,37 @@ +import { IsEnum, IsNumber, validateSync } from 'class-validator'; +import { Expose, plainToClass, Type } from 'class-transformer'; + +export enum NodeEnv { + DEVELOPMENT = 'development', + TEST = 'test', + PRODUCTION = 'production', +} + +export class AppConfig { + @IsNumber() + @Type(() => Number) + @Expose() + PORT: number; + + @IsEnum(NodeEnv) + @Expose() + NODE_ENV: NodeEnv; +} + +export const validate = (config: Record) => { + const validatedConfig = plainToClass( + AppConfig, + { ...config }, + { enableImplicitConversion: true, excludeExtraneousValues: true }, + ); + + const errors = validateSync(validatedConfig, { + skipMissingProperties: false, + }); + + if (errors.length > 0) { + throw new Error(errors.toString()); + } + + return validatedConfig; +}; diff --git a/backend/src/common/config/config-option.ts b/backend/src/common/config/config-option.ts new file mode 100644 index 00000000..0a66440b --- /dev/null +++ b/backend/src/common/config/config-option.ts @@ -0,0 +1,7 @@ +export const getEnvironmentFilePath = (): string => { + return process.env.NODE_ENV === 'test' ? '.env.test' : '.env.development'; +}; + +export const isIgnoreEnvFile = () => { + return process.env.NODE_ENV === 'production'; +}; diff --git a/backend/src/common/decorator/api-error-response.decorator.ts b/backend/src/common/decorator/api-error-response.decorator.ts new file mode 100644 index 00000000..7c6066de --- /dev/null +++ b/backend/src/common/decorator/api-error-response.decorator.ts @@ -0,0 +1,57 @@ +import { applyDecorators, HttpException } from '@nestjs/common'; +import { + ApiResponse, + ApiResponseOptions, + getSchemaPath, +} from '@nestjs/swagger'; +import { instanceToPlain } from 'class-transformer'; +import { ResponseEntity } from '../response-entity'; + +export function ApiErrorResponse(...errors: { new (): HttpException }[]) { + const apiResponses = {}; + + errors.forEach((error) => { + const errorInstance = new error(); + const status = errorInstance.getStatus(); + const { + status: errorCode, + message, + ...data + } = errorInstance.getResponse() as { + status: string; + message: string; + [key: string]: any; + }; + if (!apiResponses[status]) { + apiResponses[status] = { + status, + content: { + 'application/json': { + schema: { $ref: getSchemaPath(ResponseEntity) }, + examples: { + [errorCode]: { + description: message, + value: instanceToPlain( + ResponseEntity.ERROR_WITH_DATA(message, errorCode, data), + ), + }, + }, + }, + }, + }; + } else { + apiResponses[status].content['application/json'].examples[errorCode] = { + description: message, + value: instanceToPlain( + ResponseEntity.ERROR_WITH_DATA(message, errorCode, data), + ), + }; + } + }); + + return applyDecorators( + ...Object.values(apiResponses).map((value: ApiResponseOptions) => { + return ApiResponse({ ...value }); + }), + ); +} diff --git a/backend/src/common/decorator/api-success-resposne.decorator.ts b/backend/src/common/decorator/api-success-resposne.decorator.ts new file mode 100644 index 00000000..f5cea92f --- /dev/null +++ b/backend/src/common/decorator/api-success-resposne.decorator.ts @@ -0,0 +1,33 @@ +import { applyDecorators, HttpCode, HttpStatus, Type } from '@nestjs/common'; +import { ApiProperty, ApiResponse } from '@nestjs/swagger'; +import { ResponseEntity } from '../response-entity'; + +export function ApiSuccessResponse( + status: HttpStatus, + dataType: Type = String, + { isArray } = { isArray: false }, +) { + class Temp extends ResponseEntity { + @ApiProperty({ + type: dataType, + example: dataType === String ? '' : () => dataType, + isArray, + }) + get data() { + return super.data; + } + } + + Object.defineProperty(Temp, 'name', { + value: `ResponseEntity<${dataType.name}${isArray ? 'Array' : ''}>`, + }); + + return applyDecorators( + HttpCode(status), + ApiResponse({ + type: dataType && Temp, + status, + description: HttpStatus[status], + }), + ); +} diff --git a/backend/src/common/exception/api-not-found.exception.ts b/backend/src/common/exception/api-not-found.exception.ts new file mode 100644 index 00000000..1b4958b3 --- /dev/null +++ b/backend/src/common/exception/api-not-found.exception.ts @@ -0,0 +1,7 @@ +import { NotFoundException } from '@nestjs/common'; + +export class ApiNotFoundException extends NotFoundException { + constructor(message = 'ํ•ด๋‹นํ•˜๋Š” API๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค') { + super({ status: 'API_NOT_FOUND', message }); + } +} diff --git a/backend/src/common/exception/bad-parameter.exception.ts b/backend/src/common/exception/bad-parameter.exception.ts new file mode 100644 index 00000000..0667fbea --- /dev/null +++ b/backend/src/common/exception/bad-parameter.exception.ts @@ -0,0 +1,7 @@ +import { BadRequestException } from '@nestjs/common'; + +export class BadParameterException extends BadRequestException { + constructor(message = '์ž…๋ ฅ๊ฐ’์ด ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค') { + super({ status: 'BAD_PARAMETER', message }); + } +} diff --git a/backend/src/common/filter/all-exception.filter.ts b/backend/src/common/filter/all-exception.filter.ts new file mode 100644 index 00000000..1fedbb30 --- /dev/null +++ b/backend/src/common/filter/all-exception.filter.ts @@ -0,0 +1,61 @@ +import { + ArgumentsHost, + BadRequestException, + Catch, + ExceptionFilter, + HttpException, + InternalServerErrorException, + Logger, + NotFoundException, +} from '@nestjs/common'; +import { HttpAdapterHost } from '@nestjs/core'; +import { instanceToPlain } from 'class-transformer'; +import { ApiNotFoundException } from '../exception/api-not-found.exception'; +import { BadParameterException } from '../exception/bad-parameter.exception'; +import { ResponseEntity } from '../response-entity'; + +@Catch() +export class AllExceptionFilter implements ExceptionFilter { + private readonly logger = new Logger(AllExceptionFilter.name); + + constructor(private readonly httpAdapterHost: HttpAdapterHost) {} + + catch(exception: Error, host: ArgumentsHost) { + this.logger.error(exception, exception.stack); + + const { httpAdapter } = this.httpAdapterHost; + + const ctx = host.switchToHttp(); + + const convertedException = this.convertException(exception); + + const httpStatus = convertedException.getStatus(); + const { status, message, ...data } = convertedException.getResponse() as { + status: string; + message: string; + [key: string]: any; + }; + + httpAdapter.reply( + ctx.getResponse(), + instanceToPlain(ResponseEntity.ERROR_WITH_DATA(message, status, data)), + httpStatus, + ); + } + + convertException(exception: Error) { + if (!(exception instanceof HttpException)) { + return new InternalServerErrorException(); + } + + if (exception.name === NotFoundException.name) { + return new ApiNotFoundException(); + } + + if (exception.name === BadRequestException.name) { + return new BadParameterException(exception.message); + } + + return exception; + } +} diff --git a/backend/src/common/middleware/api-exception-logger.middleware.ts b/backend/src/common/middleware/api-exception-logger.middleware.ts new file mode 100644 index 00000000..9c420e7e --- /dev/null +++ b/backend/src/common/middleware/api-exception-logger.middleware.ts @@ -0,0 +1,22 @@ +import * as morgan from 'morgan'; +import { Logger, NestMiddleware } from '@nestjs/common'; +import { Request, Response } from 'express'; + +export class ApiExceptionLoggerMiddleware implements NestMiddleware { + private readonly errorResponseFormat = `:ip - :method :url :status - :response-time ms`; + + private readonly logger = new Logger(ApiExceptionLoggerMiddleware.name); + + constructor() { + morgan.token('ip', (req: Request) => req.ip); + } + + use(req: any, res: any, next: (error?: any) => void): any { + return morgan(this.errorResponseFormat, { + skip: (_req: Request, _res: Response) => _res.statusCode < 400, + stream: { + write: (message) => this.logger.error(message.trim()), + }, + })(req, res, next); + } +} diff --git a/backend/src/common/middleware/api-success-logger.middleware.ts b/backend/src/common/middleware/api-success-logger.middleware.ts new file mode 100644 index 00000000..115f91f1 --- /dev/null +++ b/backend/src/common/middleware/api-success-logger.middleware.ts @@ -0,0 +1,23 @@ +import * as morgan from 'morgan'; +import { Injectable, Logger, NestMiddleware } from '@nestjs/common'; +import { Request } from 'express'; + +@Injectable() +export class ApiSuccessLoggerMiddleware implements NestMiddleware { + private readonly successResponseFormat = `:ip - :method :url :status :response-time ms - :res[content-length]`; + + private readonly logger = new Logger(ApiSuccessLoggerMiddleware.name); + + constructor() { + morgan.token('ip', (req: Request) => req.ip); + } + + use(req: any, res: any, next: (error?: any) => void) { + return morgan(this.successResponseFormat, { + skip: (_req, _res) => _res.statusCode >= 400, + stream: { + write: (message) => this.logger.log(message.trim()), + }, + })(req, res, next); + } +} diff --git a/backend/src/common/response-entity.ts b/backend/src/common/response-entity.ts new file mode 100644 index 00000000..355c27fe --- /dev/null +++ b/backend/src/common/response-entity.ts @@ -0,0 +1,60 @@ +import { Exclude, Expose } from 'class-transformer'; +import { ApiProperty } from '@nestjs/swagger'; + +export class ResponseEntity { + @Exclude() private readonly _status: string; + @Exclude() private readonly _message: string; + @Exclude() private readonly _data: T; + + protected constructor(status: string, message: string, data: T) { + this._status = status; + this._message = message; + this._data = data; + } + + static OK() { + return new ResponseEntity('OK', '', ''); + } + + static OK_WITH_DATA(data: T) { + return new ResponseEntity('OK', '', data); + } + + static ERROR() { + return new ResponseEntity( + 'INTERNAL_SERVER_ERROR', + '์•Œ ์ˆ˜ ์—†๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค', + '', + ); + } + + static ERROR_WITH(message: string, status = 'INTERNAL_SERVER_ERROR') { + return new ResponseEntity(status, message, ''); + } + + static ERROR_WITH_DATA( + message: string, + status = 'INTERNAL_SERVER_ERROR', + data: T, + ) { + return new ResponseEntity(status, message, data); + } + + @Expose() + @ApiProperty({ example: 'OK' }) + get status() { + return this._status; + } + + @Expose() + @ApiProperty({ example: '' }) + get message() { + return this._message; + } + + @Expose() + @ApiProperty() + get data(): T { + return this._data; + } +} diff --git a/backend/src/main.ts b/backend/src/main.ts index ff409c4a..dec4300e 100644 --- a/backend/src/main.ts +++ b/backend/src/main.ts @@ -1,9 +1,19 @@ import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; +import { AppConfigService } from './common/config/app/config.service'; + +import { setNestApp } from './setNestApp'; +import { setSwagger } from './setSwagger'; async function bootstrap() { const app = await NestFactory.create(AppModule); - await app.listen(3000); + + setNestApp(app); + + setSwagger(app); + + const appConfigService = app.get(AppConfigService); + await app.listen(appConfigService.port); } bootstrap(); diff --git a/backend/src/setNestApp.ts b/backend/src/setNestApp.ts new file mode 100644 index 00000000..c87ffaaf --- /dev/null +++ b/backend/src/setNestApp.ts @@ -0,0 +1,33 @@ +import { HttpAdapterHost, Reflector } from '@nestjs/core'; +import { + ClassSerializerInterceptor, + INestApplication, + ValidationPipe, + VersioningType, +} from '@nestjs/common'; +import { ValidationError } from 'class-validator'; +import { BadParameterException } from '@exception/bad-parameter.exception'; +import { AllExceptionFilter } from '@filter/all-exception.filter'; + +export const setNestApp = (app: INestApplication) => { + app.enableVersioning({ + type: VersioningType.URI, + defaultVersion: '1', + }); + + app.useGlobalPipes( + new ValidationPipe({ + transform: true, + stopAtFirstError: true, + exceptionFactory: (validationErrors: ValidationError[]) => { + return new BadParameterException( + Object.values(validationErrors[0].constraints).join(','), + ); + }, + }), + ); + + app.useGlobalFilters(new AllExceptionFilter(app.get(HttpAdapterHost))); + + app.useGlobalInterceptors(new ClassSerializerInterceptor(app.get(Reflector))); +}; diff --git a/backend/src/setSwagger.ts b/backend/src/setSwagger.ts new file mode 100644 index 00000000..8f5a7ca0 --- /dev/null +++ b/backend/src/setSwagger.ts @@ -0,0 +1,44 @@ +import { INestApplication } from '@nestjs/common'; +import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger'; +import { AppConfigService } from '@config/app/config.service'; +import { ResponseEntity } from '@common/response-entity'; + +export const setSwagger = (app: INestApplication) => { + const appConfigService = app.get(AppConfigService); + + const config = new DocumentBuilder() + .setTitle('MoyeoMoyeo REST API Specification') + .setVersion('1.0.0') + .addServer(`http://localhost:${appConfigService.port}`) + .build(); + + const document = SwaggerModule.createDocument(app, config, { + include: [], + extraModels: [ResponseEntity], + }); + + SwaggerModule.setup('/v1/docs', app, document, { + swaggerOptions: { + operationsSorter: (a: any, b: any) => { + const methodsOrder = [ + 'post', + 'put', + 'patch', + 'get', + 'delete', + 'options', + 'trace', + ]; + let result = + methodsOrder.indexOf(a.get('method')) - + methodsOrder.indexOf(b.get('method')); + + if (result === 0) { + result = a.get('path').localeCompare(b.get('path')); + } + + return result; + }, + }, + }); +}; diff --git a/backend/test/app.e2e-spec.ts b/backend/test/app.e2e-spec.ts index 50cda623..7d4d2906 100644 --- a/backend/test/app.e2e-spec.ts +++ b/backend/test/app.e2e-spec.ts @@ -1,7 +1,8 @@ import { Test, TestingModule } from '@nestjs/testing'; import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; -import { AppModule } from './../src/app.module'; +import { AppModule } from '@src/app.module'; +import { setNestApp } from '@src/setNestApp'; describe('AppController (e2e)', () => { let app: INestApplication; @@ -12,13 +13,28 @@ describe('AppController (e2e)', () => { }).compile(); app = moduleFixture.createNestApplication(); + + setNestApp(app); + await app.init(); }); + describe('GET /v1/:id', () => { + const url = (id) => `/v1/${id}`; + + test('example test', async () => { + // given + const id = 11; + + // when + const result = await request(app.getHttpServer()).get(url(id)); - it('/ (GET)', () => { - return request(app.getHttpServer()) - .get('/') - .expect(200) - .expect('Hello World!'); + // then + expect(result.status).toEqual(200); + expect(result.body).toMatchObject({ + status: 'OK', + message: '', + data: 'Hello World!', + }); + }); }); }); diff --git a/backend/test/jest-e2e.json b/backend/test/jest-e2e.json index e9d912f3..6d985301 100644 --- a/backend/test/jest-e2e.json +++ b/backend/test/jest-e2e.json @@ -1,5 +1,19 @@ { - "moduleFileExtensions": ["js", "json", "ts"], + "moduleNameMapper": { + "^@src/(.*)$": "/../src/$1", + "^@common/(.*)$": "/../src/common/$1", + "^@middleware/(.*)$": "/../src/common/middleware/$1", + "^@filter/(.*)$": "/../src/common/filter/$1", + "^@config/(.*)$": "/../src/common/config/$1", + "^@decorator/(.*)$": "/../src/common/decorator/$1", + "^@exception/(.*)$": "/../src/common/exception/$1", + "^@app/(.*)$": "/../src/app/$1" + }, + "moduleFileExtensions": [ + "js", + "json", + "ts" + ], "rootDir": ".", "testEnvironment": "node", "testRegex": ".e2e-spec.ts$", diff --git a/backend/tsconfig.json b/backend/tsconfig.json index adb614ca..cff01f68 100644 --- a/backend/tsconfig.json +++ b/backend/tsconfig.json @@ -1,4 +1,5 @@ { + "extends": "./tsconfig.paths.json", "compilerOptions": { "module": "commonjs", "declaration": true, @@ -9,7 +10,6 @@ "target": "es2017", "sourceMap": true, "outDir": "./dist", - "baseUrl": "./", "incremental": true, "skipLibCheck": true, "strictNullChecks": false, diff --git a/backend/tsconfig.paths.json b/backend/tsconfig.paths.json new file mode 100644 index 00000000..57ef284c --- /dev/null +++ b/backend/tsconfig.paths.json @@ -0,0 +1,31 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@src/*": [ + "src/*" + ], + "@common/*": [ + "src/common/*" + ], + "@middleware/*": [ + "src/common/middleware/*" + ], + "@filter/*": [ + "src/common/filter/*" + ], + "@config/*": [ + "src/common/config/*" + ], + "@decorator/*": [ + "src/common/decorator/*" + ], + "@exception/*": [ + "src/common/exception/*" + ], + "@app/*": [ + "src/app/*" + ] + } + } +} \ No newline at end of file From 2514f0a73f541547cc22307740598ac4df8dbf55 Mon Sep 17 00:00:00 2001 From: MinGyeong Park <37508296+kong430@users.noreply.github.com> Date: Tue, 22 Nov 2022 18:01:34 +0900 Subject: [PATCH 017/142] =?UTF-8?q?[Feature]=20=EB=AA=A8=EC=A7=91=20?= =?UTF-8?q?=EA=B2=8C=EC=8B=9C=EA=B8=80=20=EC=B9=B4=EB=93=9C=20=EC=BB=B4?= =?UTF-8?q?=ED=8F=AC=EB=84=8C=ED=8A=B8=20(#48)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :sparkles: feature: ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€ ๊ด€๋ จ type ๋ฐ enum ์ •์˜ * :sparkles: feature: constants path alias ์ถ”๊ฐ€ * :sparkles: feature: ArticleTag ์ปดํฌ๋„ŒํŠธ ๋ฐ ์Šคํ† ๋ฆฌ ์ƒ์„ฑ * :sparkles: feature: GroupArticleCard ์ปดํฌ๋„ŒํŠธ ๋ฐ ์Šคํ† ๋ฆฌ ์ƒ์„ฑ * :sparkles: refactor: StatCounter ์Šคํ† ๋ฆฌ ํŒŒ์ผ ์ด๋ฆ„ ๋ณ€๊ฒฝ (index->StatCounter) * :recycle: refactor: rem ์œผ๋กœ ๋‹จ์œ„ ์ˆ˜์ • ๋ฐ styles ํŒŒ์ผ ๋ถ„๋ฆฌ * :bug: fix: styled emotion์—์„œ ๊ฐ€์ ธ์˜ค๋„๋ก ์ˆ˜์ • * :sparkles: feature: ๋ชจ์ง‘ ์ข…๋ฃŒ dimmed ์ถ”๊ฐ€ * :recycle: refactor: ArticleType ์ด๋ฆ„ Types๋กœ ๋ณ€๊ฒฝ๋œ ๊ฒƒ ๋‹ค์‹œ ๋˜๋Œ๋ฆผ * :goal_net: chore: getBadgeColor ํ•จ์ˆ˜ TODO ์ฃผ์„ ์ถ”๊ฐ€ * :recycle: refactor: ์ปดํฌ๋„ŒํŠธ ํด๋”๋ช… UpperCamelCase๋กœ ๋ณ€๊ฒฝ --- .../ArticleTag/ArticleTag.stories.tsx | 15 +++++ frontend/src/components/ArticleTag/index.tsx | 37 ++++++++++++ .../GitLoginButton.stories.tsx | 0 .../index.tsx | 0 .../GroupArticleCard.stories.tsx | 24 ++++++++ .../src/components/GroupArticleCard/index.tsx | 44 ++++++++++++++ .../src/components/GroupArticleCard/styles.ts | 57 +++++++++++++++++++ .../StatCounter/StatCounter.stories.tsx | 2 +- frontend/src/constants/article.ts | 7 +++ frontend/src/constants/color.ts | 14 +++++ frontend/src/constants/dummy.ts | 26 +++++++++ frontend/src/constants/location.ts | 21 +++++++ frontend/src/pages/login.tsx | 2 +- frontend/src/typings/types.ts | 28 +++++++++ frontend/tsconfig.json | 3 +- 15 files changed, 277 insertions(+), 3 deletions(-) create mode 100644 frontend/src/components/ArticleTag/ArticleTag.stories.tsx create mode 100644 frontend/src/components/ArticleTag/index.tsx rename frontend/src/components/{gitLoginButton => GitLoginButton}/GitLoginButton.stories.tsx (100%) rename frontend/src/components/{gitLoginButton => GitLoginButton}/index.tsx (100%) create mode 100644 frontend/src/components/GroupArticleCard/GroupArticleCard.stories.tsx create mode 100644 frontend/src/components/GroupArticleCard/index.tsx create mode 100644 frontend/src/components/GroupArticleCard/styles.ts create mode 100644 frontend/src/constants/article.ts create mode 100644 frontend/src/constants/color.ts create mode 100644 frontend/src/constants/dummy.ts create mode 100644 frontend/src/constants/location.ts create mode 100644 frontend/src/typings/types.ts diff --git a/frontend/src/components/ArticleTag/ArticleTag.stories.tsx b/frontend/src/components/ArticleTag/ArticleTag.stories.tsx new file mode 100644 index 00000000..85613b94 --- /dev/null +++ b/frontend/src/components/ArticleTag/ArticleTag.stories.tsx @@ -0,0 +1,15 @@ +import { ComponentMeta, ComponentStory } from '@storybook/react'; +import ArticleTag from '.'; + +export default { + title: 'Component/ArticleTag', + component: ArticleTag, +} as ComponentMeta; + +const Template: ComponentStory = (args) => ; + +export const _ArticleTag = Template.bind({}); +_ArticleTag.args = { + id: 2, + content: '์ œ์ฃผ', +}; diff --git a/frontend/src/components/ArticleTag/index.tsx b/frontend/src/components/ArticleTag/index.tsx new file mode 100644 index 00000000..5e91180a --- /dev/null +++ b/frontend/src/components/ArticleTag/index.tsx @@ -0,0 +1,37 @@ +import { Badge } from '@mantine/core'; +import styled from '@emotion/styled'; +import { BADGE_COLORS } from '@constants/color'; + +interface Props { + /** + * ์นดํ…Œ๊ณ ๋ฆฌ id, ์ง€์—ญ id ๋“ฑ ๋ฑƒ์ง€ ์˜ต์…˜์˜ id๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. + * id๋ฅผ ํ†ตํ•ด ์ƒ‰์ƒ์ด ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. + */ + id: number; + /** + * ๋ฑƒ์ง€์— ๋“ค์–ด๊ฐˆ ๋‚ด์šฉ์ด ์ž…๋ ฅ๋ฉ๋‹ˆ๋‹ค. + */ + content: string; +} + +const ArticleTag = ({ id, content }: Props) => { + // TODO ์ด ํ•จ์ˆ˜๋ฅผ util๋กœ ๋ถ„๋ฆฌํ•˜๋Š”๊ฒŒ ์ข‹์„์ง€ ๊ณ ๋ฏผ + const getBadgeColor = (id: number) => { + const colorCount = BADGE_COLORS.length; + return BADGE_COLORS[id % colorCount]; + }; + + return ( + + + {content} + + + ); +}; + +const BadgeWrapper = styled.div` + width: fit-content; +`; + +export default ArticleTag; diff --git a/frontend/src/components/gitLoginButton/GitLoginButton.stories.tsx b/frontend/src/components/GitLoginButton/GitLoginButton.stories.tsx similarity index 100% rename from frontend/src/components/gitLoginButton/GitLoginButton.stories.tsx rename to frontend/src/components/GitLoginButton/GitLoginButton.stories.tsx diff --git a/frontend/src/components/gitLoginButton/index.tsx b/frontend/src/components/GitLoginButton/index.tsx similarity index 100% rename from frontend/src/components/gitLoginButton/index.tsx rename to frontend/src/components/GitLoginButton/index.tsx diff --git a/frontend/src/components/GroupArticleCard/GroupArticleCard.stories.tsx b/frontend/src/components/GroupArticleCard/GroupArticleCard.stories.tsx new file mode 100644 index 00000000..8d6b5776 --- /dev/null +++ b/frontend/src/components/GroupArticleCard/GroupArticleCard.stories.tsx @@ -0,0 +1,24 @@ +import { ComponentMeta, ComponentStory } from '@storybook/react'; +import GroupArticleCard from '.'; +import { dummyArticle } from '@constants/dummy'; +import { ArticleStatus } from '@constants/article'; + +export default { + title: 'Component/GroupArticleCard', + component: GroupArticleCard, +} as ComponentMeta; + +const Template: ComponentStory = (args) => ; + +export const NormalCard = Template.bind({}); +NormalCard.args = { article: dummyArticle }; + +export const LongTitleCard = Template.bind({}); +LongTitleCard.args = { + article: { ...dummyArticle, title: '๊ธธ์–ด์ง€๋Š” ์ œ๋ชฉ์ž…๋‹ˆ๋‹ค. ์ œ๋ชฉ์ด ๊ธธ์–ด์„œ ์ž˜๋ ค์š”.' }, +}; + +export const ClosedCard = Template.bind({}); +ClosedCard.args = { + article: { ...dummyArticle, status: ArticleStatus.SUCCEED }, +}; diff --git a/frontend/src/components/GroupArticleCard/index.tsx b/frontend/src/components/GroupArticleCard/index.tsx new file mode 100644 index 00000000..76b1e307 --- /dev/null +++ b/frontend/src/components/GroupArticleCard/index.tsx @@ -0,0 +1,44 @@ +import { Image } from '@mantine/core'; +import { ArticleType } from '@typings/types'; +import ArticleTag from '@components/ArticleTag'; +import StatCounter from '@components/StatCounter'; +import { ArticleStatus } from '@constants/article'; +import { + CapacityText, + CardWrapper, + DimmedBox, + InfoWrapper, + TagWrapper, + TitleText, + ClosedText, +} from '@components/GroupArticleCard/styles'; + +interface Props { + article: ArticleType; +} + +const GroupArticleCard = ({ article }: Props) => { + return ( + + {article.status !== ArticleStatus.PROGRESS && ( + + ๋ชจ์ง‘ ์ข…๋ฃŒ + + )} + {'thumbnail-image'} + + + + + + {article.title} + + {article.maxCapacity}๋ช… ์ค‘ {article.currentCapacity}๋ช… ์ฐธ์—ฌ์ค‘ + + + + + ); +}; + +export default GroupArticleCard; diff --git a/frontend/src/components/GroupArticleCard/styles.ts b/frontend/src/components/GroupArticleCard/styles.ts new file mode 100644 index 00000000..a02aed59 --- /dev/null +++ b/frontend/src/components/GroupArticleCard/styles.ts @@ -0,0 +1,57 @@ +import styled from '@emotion/styled'; + +const CardWrapper = styled.div` + display: flex; + flex-direction: column; + width: 17.3rem; + height: 30.7rem; + border-radius: 12px; + border: 1px solid ${({ theme }) => theme.colors.gray[2]}; + overflow: hidden; +`; + +const DimmedBox = styled.div` + display: flex; + position: absolute; + width: 17.3rem; + height: 30.7rem; + z-index: 1; + border-radius: 12px; + background-color: rgba(0, 0, 0, 0.4); + align-items: center; + justify-content: center; +`; + +const ClosedText = styled.div` + color: ${({ theme }) => theme.white}; + font-size: 2rem; + font-weight: 800; +`; + +const InfoWrapper = styled.div` + display: flex; + flex-direction: column; + gap: 0.8rem; + padding: 0.8rem; +`; + +const TagWrapper = styled.div` + display: flex; + gap: 0.8rem; +`; + +const TitleText = styled.span` + font-size: 1.4rem; + font-weight: 800; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +`; + +const CapacityText = styled.span` + font-size: 1rem; + font-weight: 400; + color: ${({ theme }) => theme.colors.gray[6]}; +`; + +export { CardWrapper, DimmedBox, InfoWrapper, TagWrapper, TitleText, CapacityText, ClosedText }; diff --git a/frontend/src/components/StatCounter/StatCounter.stories.tsx b/frontend/src/components/StatCounter/StatCounter.stories.tsx index 1dd8a973..1bd2da74 100644 --- a/frontend/src/components/StatCounter/StatCounter.stories.tsx +++ b/frontend/src/components/StatCounter/StatCounter.stories.tsx @@ -1,5 +1,5 @@ -import StatCounter from '.'; import { ComponentMeta, ComponentStory } from '@storybook/react'; +import StatCounter from '.'; export default { title: 'Component/StatCounter', diff --git a/frontend/src/constants/article.ts b/frontend/src/constants/article.ts new file mode 100644 index 00000000..d747e2b7 --- /dev/null +++ b/frontend/src/constants/article.ts @@ -0,0 +1,7 @@ +enum ArticleStatus { + PROGRESS = '๋ชจ์ง‘์ค‘', + SUCCEED = '๋ชจ์ง‘์„ฑ๊ณต', + FAIL = '๋ชจ์ง‘์ค‘๋‹จ', +} + +export { ArticleStatus }; diff --git a/frontend/src/constants/color.ts b/frontend/src/constants/color.ts new file mode 100644 index 00000000..11065700 --- /dev/null +++ b/frontend/src/constants/color.ts @@ -0,0 +1,14 @@ +const BADGE_COLORS = [ + 'cyan', + 'green', + 'yellow', + 'orange', + 'grape', + 'red', + 'indigo', + 'violet', + 'lime', + 'teal', +]; + +export { BADGE_COLORS }; diff --git a/frontend/src/constants/dummy.ts b/frontend/src/constants/dummy.ts new file mode 100644 index 00000000..2074b2a2 --- /dev/null +++ b/frontend/src/constants/dummy.ts @@ -0,0 +1,26 @@ +import { ArticleType } from '@typings/types'; +import { Location } from '@constants/location'; +import { ArticleStatus } from '@constants/article'; + +// TODO ๊ฐœ๋ฐœ์šฉ dummy data, ์ถ”ํ›„ ์‚ญ์ œ +const dummyArticle: ArticleType = { + id: 1, + title: '๋ชจ์ง‘ ํ…Œ์ŠคํŠธ1', + location: { + id: 2, + name: Location.BUSAN, + }, + category: { + id: 1, + name: '์Šคํ„ฐ๋””', + }, + commentCount: 31, + scrapCount: 12, + thumbnail: 'https://avatars.githubusercontent.com/u/90585081?v=4', + maxCapacity: 5, + currentCapacity: 3, + status: ArticleStatus.PROGRESS, + createdAt: '2021-04-03T18:45:19Z', +}; + +export { dummyArticle }; diff --git a/frontend/src/constants/location.ts b/frontend/src/constants/location.ts new file mode 100644 index 00000000..2729d624 --- /dev/null +++ b/frontend/src/constants/location.ts @@ -0,0 +1,21 @@ +enum Location { + SEOUL = '์„œ์šธ', + INCHEON = '์ธ์ฒœ', + BUSAN = '๋ถ€์‚ฐ', + DAEGU = '๋Œ€๊ตฌ', + GWANGJU = '๊ด‘์ฃผ', + DAEJEON = '๋Œ€์ „', + ULSAN = '์šธ์‚ฐ', + SEJONG = '์„ธ์ข…', + GYEONGGI = '๊ฒฝ๊ธฐ', + GANGWON = '๊ฐ•์›', + CHUNGBUK = '์ถฉ๋ถ', + CHUNGNAM = '์ถฉ๋‚จ', + JEONBUK = '์ „๋ถ', + JEONNAM = '์ „๋‚จ', + GYEONGBUK = '๊ฒฝ๋ถ', + GYEONGNAM = '๊ฒฝ๋‚จ', + JEJU = '์ œ์ฃผ', +} + +export { Location }; diff --git a/frontend/src/pages/login.tsx b/frontend/src/pages/login.tsx index 1ec2a738..563265dc 100644 --- a/frontend/src/pages/login.tsx +++ b/frontend/src/pages/login.tsx @@ -1,7 +1,7 @@ import styled from '@emotion/styled'; import LogoIcon from '@public/icons/logo-lg.svg'; import PageLayout from '@components/common/PageLayout'; -import GitLoginButton from '@components/gitLoginButton'; +import GitLoginButton from '@components/GitLoginButton'; const Login = () => { return ( diff --git a/frontend/src/typings/types.ts b/frontend/src/typings/types.ts new file mode 100644 index 00000000..90106911 --- /dev/null +++ b/frontend/src/typings/types.ts @@ -0,0 +1,28 @@ +import { Location } from '@constants/location'; +import { ArticleStatus } from '@constants/article'; + +interface ArticleType { + id: number; + title: string; + location: LocationType; + category: CategoryType; + commentCount: number; + scrapCount: number; + thumbnail: string; + maxCapacity: number; + currentCapacity: number; + status: ArticleStatus; + createdAt: string; +} + +interface LocationType { + id: number; + name: Location; +} + +interface CategoryType { + id: number; + name: string; +} + +export type { ArticleType, LocationType, CategoryType }; diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json index 52209eb7..b50374d7 100644 --- a/frontend/tsconfig.json +++ b/frontend/tsconfig.json @@ -27,7 +27,8 @@ "@pages/*": ["src/pages/*"], "@styles/*": ["src/styles/*"], "@typings/*": ["src/typings/*"], - "@public/*": ["public/*"] + "@public/*": ["public/*"], + "@constants/*": ["src/constants/*"] } }, "include": ["custom.d.ts", "next-env.d.ts", "**/*.ts", "**/*.tsx", ".storybook/**/*.tsx"], From 5591950b80b5d2bd8c17d2bb246bcd25e6710f02 Mon Sep 17 00:00:00 2001 From: yangseungchan Date: Tue, 22 Nov 2022 20:59:06 +0900 Subject: [PATCH 018/142] =?UTF-8?q?[Feature]=20Floating=20Button=20UI=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=20+=20Storybook=20=EB=B0=B0=ED=8F=AC=20?= =?UTF-8?q?=EC=95=A1=EC=85=98=20=EC=B6=94=EA=B0=80=20(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ๐Ÿฅ… chore: docker ๊ฐœ๋ฐœ์šฉ ์ด๋ฏธ์ง€, ์ปดํฌ์ฆˆ ํŒŒ์ผ ๋ถ„๋ฆฌ + ๊ฐœ๋ฐœํ™˜๊ฒฝ ๊ตฌ์„ฑ ์Šคํฌ๋ฆฝํŠธ ์ƒ์„ฑ * โœจ feature: nginx ๋กœ์ปฌ ์ปจํ…Œ์ด๋„ˆ ์„ค์ • * โœจ feature: FAB UI ๊ตฌ์„ฑ + ํด๋ฆญ์‹œ ํšŒ์ „ * โœจ feature: FloatingButton UI ์™„๋ฃŒ * ๐Ÿฅ… chore: docker compose ํฌ๋งท ์ ์šฉ * ๐Ÿฅ… chore: docker ์ปดํฌ์ฆˆ ๋ฒ„์ „ ๋ณ€๊ฒฝ * โœจ feature: frontend storybook ๋ฐฐํฌ ci ๊ตฌ์„ฑ * ๐Ÿฅ… chore: storybook action ์ˆ˜์ • * ๐Ÿฅ… chore: storybook ๋ฐฐํฌ ci ํ…Œ์ŠคํŠธ * ๐Ÿฅ… chore: storybook job ์ˆ˜์ • * ๐Ÿฅ… chore: storybook job ์˜ต์…˜์— fetch-depth ์ถ”๊ฐ€ * ๐Ÿฅ… chore: storybook url ์ฝ”๋ฉ˜ํŠธ job ์ถ”๊ฐ€ * ๐Ÿฅ… chore: chromatic ์Šคํ… Id ์ถ”๊ฐ€ * ๐Ÿฅ… chore: comment PR ์•ก์…˜ ๋ณ€๊ฒฝ * โ™ป๏ธ refactor: FloatingButton์˜ ๋‚ด๋ถ€ ์š”์†Œ๋ฅผ props๋กœ ๋ฐ›๊ฒŒ ์ˆ˜์ • * ๐Ÿฅ… chore: ์Šคํ† ๋ฆฌ๋ถ ๋‚ด ์˜คํƒ€ ์ˆ˜์ • * ๐Ÿฅ… chore: ์˜คํƒ€ ์ˆ˜์ • ๋ฐ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์ œ๊ฑฐ * โ™ป๏ธ refactor: FAB ์™ธ๋ถ€ ์˜์—ญ ํด๋ฆญ์‹œ ๋ฉ”๋‰ด๊ฐ€ ๋‹ซํžˆ๋„๋ก ์ˆ˜์ • * ๐Ÿฅ… chore: ci action ์ˆ˜์ • --- .github/workflows/frontend-ci.yml | 37 +++++++++- frontend/.gitignore | 5 +- frontend/docker-compose.local.yml | 2 +- frontend/docker-compose.yml | 4 +- frontend/package-lock.json | 26 +++++++ frontend/package.json | 8 ++- .../FloatingButton/FloatingButton.stories.tsx | 70 +++++++++++++++++++ .../src/components/FloatingButton/index.tsx | 39 +++++++++++ .../src/components/FloatingButton/styles.tsx | 19 +++++ 9 files changed, 202 insertions(+), 8 deletions(-) create mode 100644 frontend/src/components/FloatingButton/FloatingButton.stories.tsx create mode 100644 frontend/src/components/FloatingButton/index.tsx create mode 100644 frontend/src/components/FloatingButton/styles.tsx diff --git a/.github/workflows/frontend-ci.yml b/.github/workflows/frontend-ci.yml index b998514c..b92cdf5f 100644 --- a/.github/workflows/frontend-ci.yml +++ b/.github/workflows/frontend-ci.yml @@ -32,6 +32,39 @@ jobs: - name: test run: npm run test-all + storybook: + runs-on: ubuntu-latest + defaults: + run: + working-directory: './frontend' + outputs: + status: ${{ steps.chromatic.outputs.storybookUrl }} + steps: + - name: checkout + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: depedency install + run: npm install + + - name: chromatic + id: chromatic + uses: chromaui/action@v1 + with: + workingDir: frontend + projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }} + token: ${{ secrets.GITHUB_TOKEN }} + + - name: comment PR + uses: thollander/actions-comment-pull-request@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + message: 'storybook link -> ${{ steps.chromatic.outputs.storybookUrl }}' + reactions: rocket + + lhci: runs-on: ubuntu-latest defaults: @@ -139,12 +172,12 @@ jobs: msg: ${{ steps.format_lighthouse_score.outputs.comments }} slack-notifications: - needs: [CI, lhci] + needs: [CI, lhci, storybook] if: ${{ always() }} uses: ./.github/workflows/slack-notification.yml with: title: ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์šฉ CI - status: 'CI : ${{ needs.CI.outputs.status }} && lhci : ${{ needs.lhci.outputs.status }}' + status: 'CI : ${{ needs.CI.outputs.status }} && lhci : ${{ needs.lhci.outputs.status }} && storybook : {{ needs.storybook.outputs.status }}' commit_url: ${{ github.event.pull_request.html_url || github.event.head_commit.url }} secrets: webhook_url: ${{ secrets.SLACK_NOTIFICATION_WEBHOOK_URL }} \ No newline at end of file diff --git a/frontend/.gitignore b/frontend/.gitignore index dccd4e53..926d16e9 100644 --- a/frontend/.gitignore +++ b/frontend/.gitignore @@ -38,4 +38,7 @@ next-env.d.ts .vscode .lighthouseci /lhci_reports -.storybook-static \ No newline at end of file + +# storybook +.storybook-static +build-storybook.log \ No newline at end of file diff --git a/frontend/docker-compose.local.yml b/frontend/docker-compose.local.yml index fd23f8b4..66344c37 100644 --- a/frontend/docker-compose.local.yml +++ b/frontend/docker-compose.local.yml @@ -1,4 +1,4 @@ -version: '3.9' +version: '3.3' services: frontend: diff --git a/frontend/docker-compose.yml b/frontend/docker-compose.yml index dba896cd..e82000ea 100644 --- a/frontend/docker-compose.yml +++ b/frontend/docker-compose.yml @@ -1,11 +1,11 @@ -version: '3.9' +version: '3.3' services: frontend: container_name: moyeo-client image: ${DOCKER_CLIENT_IMAGE} environment: - NODE_ENV: development + NODE_ENV: production ports: - 3000:3000 command: npm run start diff --git a/frontend/package-lock.json b/frontend/package-lock.json index f5c74a5e..41acd71b 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -39,6 +39,7 @@ "@types/react-dom": "^18.0.9", "@typescript-eslint/eslint-plugin": "^5.43.0", "babel-loader": "^8.3.0", + "chromatic": "^6.11.4", "eslint": "8.22.0", "eslint-config-next": "^13.0.3", "eslint-config-prettier": "^8.5.0", @@ -12910,6 +12911,21 @@ "node": ">=10" } }, + "node_modules/chromatic": { + "version": "6.11.4", + "resolved": "https://registry.npmjs.org/chromatic/-/chromatic-6.11.4.tgz", + "integrity": "sha512-f1TcuIXKjGUuOjPuwFF44kzbuEcESFcDxHzrzWPLmHuC90dV8HLxbufqYaTOBYMO/rJ32Zftb7S9pXuF/Rhfog==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.5.7", + "@types/webpack-env": "^1.17.0" + }, + "bin": { + "chroma": "bin/main.cjs", + "chromatic": "bin/main.cjs", + "chromatic-cli": "bin/main.cjs" + } + }, "node_modules/chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", @@ -37052,6 +37068,16 @@ "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true }, + "chromatic": { + "version": "6.11.4", + "resolved": "https://registry.npmjs.org/chromatic/-/chromatic-6.11.4.tgz", + "integrity": "sha512-f1TcuIXKjGUuOjPuwFF44kzbuEcESFcDxHzrzWPLmHuC90dV8HLxbufqYaTOBYMO/rJ32Zftb7S9pXuF/Rhfog==", + "dev": true, + "requires": { + "@discoveryjs/json-ext": "^0.5.7", + "@types/webpack-env": "^1.17.0" + } + }, "chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", diff --git a/frontend/package.json b/frontend/package.json index 878e1683..e8c73ca9 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -15,7 +15,8 @@ "format": "prettier --write .", "test-all": "npm run check-format && npm run check-lint && npm run check-types && npm run build", "storybook": "start-storybook -p 6006 -c .storybook", - "build-storybook": "build-storybook" + "build-storybook": "build-storybook", + "chromatic": "npx chromatic --project-token=9744c2ad3f91" }, "lint-staged": { "./src/**/*.{js,jsx,ts,tsx}": [ @@ -55,6 +56,7 @@ "@types/react-dom": "^18.0.9", "@typescript-eslint/eslint-plugin": "^5.43.0", "babel-loader": "^8.3.0", + "chromatic": "^6.11.4", "eslint": "8.22.0", "eslint-config-next": "^13.0.3", "eslint-config-prettier": "^8.5.0", @@ -72,5 +74,7 @@ "storybook-addon-next-router": "^3.1.1", "typescript": "^4.8.4", "webpack": "^5.75.0" - } + }, + "readme": "ERROR: No README data found!", + "_id": "frontend@0.1.0" } diff --git a/frontend/src/components/FloatingButton/FloatingButton.stories.tsx b/frontend/src/components/FloatingButton/FloatingButton.stories.tsx new file mode 100644 index 00000000..844a521c --- /dev/null +++ b/frontend/src/components/FloatingButton/FloatingButton.stories.tsx @@ -0,0 +1,70 @@ +import FloatingButton from '.'; +import { ComponentMeta, ComponentStory } from '@storybook/react'; +import { userEvent, within } from '@storybook/testing-library'; +import PageLayout from '@components/common/PageLayout'; +import { Chip, Menu, Text } from '@mantine/core'; +import { IconArrowAutofitUp, IconPencil } from '@tabler/icons'; + +export default { + title: 'Component/FloatingButton', + component: FloatingButton, +} as ComponentMeta; + +const FloatingItemChildren = () => ( + <> + }> + + ์ƒ๋‹จ์œผ๋กœ ์ด๋™ + + + }> + + ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ + + + +); + +const DefaultTemplate: ComponentStory = (args) => ( + + + +); + +const OverflowTemplate: ComponentStory = (args) => ( + + {Array.from({ length: 100 }) + .fill(0) + .map((_, i) => ( + + Awesome chip + + ))} + + +); + +export const Default = DefaultTemplate.bind({}); +Default.args = { + children: , +}; + +export const Clicked = DefaultTemplate.bind({}); +Clicked.args = { + children: , +}; +Clicked.play = async ({ canvasElement }) => { + const canvas = within(canvasElement); + const button = await canvas.findByRole('button'); + userEvent.click(button); +}; + +export const InOverflowPage = OverflowTemplate.bind({}); +InOverflowPage.args = { + children: , +}; +InOverflowPage.play = async ({ canvasElement }) => { + const canvas = within(canvasElement); + const button = await canvas.findByRole('button'); + userEvent.click(button); +}; diff --git a/frontend/src/components/FloatingButton/index.tsx b/frontend/src/components/FloatingButton/index.tsx new file mode 100644 index 00000000..982325c4 --- /dev/null +++ b/frontend/src/components/FloatingButton/index.tsx @@ -0,0 +1,39 @@ +import { useState, ReactNode } from 'react'; +import { Menu } from '@mantine/core'; +import { useClickOutside } from '@mantine/hooks'; +import { IconPlus } from '@tabler/icons'; + +import { FABWrapper } from './styles'; + +interface Props { + /** + * ํ”Œ๋กœํŒ… ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ๋‚˜์˜ค๋Š” ์š”์†Œ๋“ค์„ ๋„ฃ๋Š”๋‹ค. + */ + children: ReactNode; +} + +const FloatingButton = ({ children }: Props) => { + const [opened, setOpened] = useState(false); + const ref = useClickOutside(() => setOpened(false)); + + return ( + + + setOpened((o) => !o)} + opened={opened} + ref={ref} + > + + + + {children} + + ); +}; + +export default FloatingButton; diff --git a/frontend/src/components/FloatingButton/styles.tsx b/frontend/src/components/FloatingButton/styles.tsx new file mode 100644 index 00000000..bd4c21f0 --- /dev/null +++ b/frontend/src/components/FloatingButton/styles.tsx @@ -0,0 +1,19 @@ +import styled from '@emotion/styled'; +import { ActionIcon, ActionIconProps, createPolymorphicComponent } from '@mantine/core'; + +interface FABWrapperProps extends ActionIconProps { + opened: boolean; +} + +// https://mantine.dev/styles/styled/#polymorphic-components +const _FABWrapper = styled(ActionIcon)<{ opened: boolean }>` + position: fixed; + bottom: 7.2rem; + right: 1.6rem; + transition: transform 0.2s ease-in-out; + ${({ opened }) => opened && `transform: rotate(45deg);`} +`; + +const FABWrapper = createPolymorphicComponent<'button', FABWrapperProps>(_FABWrapper); + +export { FABWrapper }; From 243cd4e32da274478689d13053e5c86f7e77fe5b Mon Sep 17 00:00:00 2001 From: Kim Myeongil <67570061+username1103@users.noreply.github.com> Date: Wed, 23 Nov 2022 11:21:46 +0900 Subject: [PATCH 019/142] =?UTF-8?q?[Feature]=20=EB=8D=B0=EC=9D=B4=ED=84=B0?= =?UTF-8?q?=EB=B2=A0=EC=9D=B4=EC=8A=A4=20=EC=84=B8=ED=8C=85=20(#56)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :goal_net: chore: ์˜์กด์„ฑ ์„ค์น˜ - @nestjs/typeorm, typeorm, mysql2 ์„ค์น˜ * :sparkles: feature: MysqlConfigService ์ถ”๊ฐ€ - MYSQL_PORT - MYSQL_HOST - MYSQL_DATABASE - MYSQL_USER - MYSQL_PASSWORD ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ถ”๊ฐ€ * :sparkles: feature: TypeORM ์—ฐ๊ฒฐ ์„ค์ • - TypeORM ๊ฐœ๋ฐœํ™˜๊ฒฝ ์—ฐ๊ฒฐ ์„ค์ • - TypeORM ํ…Œ์ŠคํŠธํ™˜๊ฒฝ ์—ฐ๊ฒฐ ์„ค์ • * :goal_net: chore: ๋กœ์ปฌ์šฉ ๋„์ปค ์ปดํฌ์ฆˆ ์ˆ˜์ • - ๋กœ์ปฌ ํ…Œ์ŠคํŠธ์šฉ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ถ”๊ฐ€ - .env.development, .env.test๋ฅผ ํ†ตํ•ด ๋””๋น„ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์…‹ํŒ…ํ•˜๋„๋ก ์ˆ˜์ • * :goal_net: chore: ci ํ…Œ์ŠคํŠธ์šฉ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ • --- .github/workflows/backend-dev-ci.yml | 17 + backend/docker-compose.local.yml | 23 +- backend/package-lock.json | 949 ++++++++++++++++-- backend/package.json | 6 +- backend/src/app.module.ts | 3 +- .../common/config/database/database.module.ts | 14 + .../mysql/__test__/config.service.spec.ts | 58 ++ .../config/database/mysql/config.module.ts | 18 + .../config/database/mysql/config.service.ts | 30 + .../common/config/database/mysql/validate.ts | 43 + .../config/database/typeorm/config.module.ts | 11 + .../config/database/typeorm/config.service.ts | 38 + backend/test/app.e2e-spec.ts | 9 + 13 files changed, 1121 insertions(+), 98 deletions(-) create mode 100644 backend/src/common/config/database/database.module.ts create mode 100644 backend/src/common/config/database/mysql/__test__/config.service.spec.ts create mode 100644 backend/src/common/config/database/mysql/config.module.ts create mode 100644 backend/src/common/config/database/mysql/config.service.ts create mode 100644 backend/src/common/config/database/mysql/validate.ts create mode 100644 backend/src/common/config/database/typeorm/config.module.ts create mode 100644 backend/src/common/config/database/typeorm/config.service.ts diff --git a/.github/workflows/backend-dev-ci.yml b/.github/workflows/backend-dev-ci.yml index df3c8d1f..91510863 100644 --- a/.github/workflows/backend-dev-ci.yml +++ b/.github/workflows/backend-dev-ci.yml @@ -16,6 +16,23 @@ jobs: working-directory: './backend' outputs: status: ${{ job.status }} + + services: + mysql: + image: mysql:8.0 + ports: + - 3306:3306 + env: + MYSQL_ROOT_PASSWORD: "test" + MYSQL_USER: "test" + MYSQL_PASSWORD: "test" + MYSQL_DATABASE: "test" + options: >- + --health-cmd="mysqladmin ping" + --health-interval=10s + --health-timeout=5s + --health-retries=3 + steps: - name: checkout uses: actions/checkout@v3 diff --git a/backend/docker-compose.local.yml b/backend/docker-compose.local.yml index 023d099b..d4e99041 100644 --- a/backend/docker-compose.local.yml +++ b/backend/docker-compose.local.yml @@ -35,12 +35,11 @@ services: image: mysql:8.0 restart: always ports: - - ${MYSQL_PORT}:3306 + - 3330:3306 + env_file: + - .env.development environment: MYSQL_ROOT_PASSWORD: test - MYSQL_DATABASE: test - MYSQL_USER: test - MYSQL_PASSWORD: test volumes: - ~/db:/var/lib/mysql command: @@ -49,6 +48,22 @@ services: networks: - backbone + moyeo-test-db: + container_name: moyeo-test-db + image: mysql:8.0 + restart: always + env_file: + - .env.test + ports: + - 3331:3306 + environment: + MYSQL_ROOT_PASSWORD: test + command: + - --character-set-server=utf8mb4 + - --collation-server=utf8mb4_unicode_ci + networks: + - backbone + networks: backbone: name: backbone diff --git a/backend/package-lock.json b/backend/package-lock.json index 4f87df79..7e3c3701 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -14,12 +14,16 @@ "@nestjs/core": "^9.0.0", "@nestjs/platform-express": "^9.0.0", "@nestjs/swagger": "^6.1.3", + "@nestjs/typeorm": "^9.0.1", "class-transformer": "^0.5.1", "class-validator": "^0.13.2", "morgan": "^1.10.0", + "mysql2": "^2.3.3", "reflect-metadata": "^0.1.13", "rimraf": "^3.0.2", - "rxjs": "^7.2.0" + "rxjs": "^7.2.0", + "typeorm": "^0.3.10", + "typeorm-naming-strategies": "^4.1.0" }, "devDependencies": { "@nestjs/cli": "^9.0.0", @@ -792,7 +796,7 @@ "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, + "devOptional": true, "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -804,7 +808,7 @@ "version": "0.3.9", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, + "devOptional": true, "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -1372,7 +1376,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, + "devOptional": true, "engines": { "node": ">=6.0.0" } @@ -1414,7 +1418,7 @@ "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true + "devOptional": true }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.17", @@ -1788,6 +1792,29 @@ } } }, + "node_modules/@nestjs/typeorm": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@nestjs/typeorm/-/typeorm-9.0.1.tgz", + "integrity": "sha512-A2BgLIPsMtmMI0bPKEf4bmzgFPsnvHqNBx3KkvaJ7hJrBQy0OqYOb+Rr06ifblKWDWS2tUPNrAFQbZjtk3PI+g==", + "dependencies": { + "uuid": "8.3.2" + }, + "peerDependencies": { + "@nestjs/common": "^8.0.0 || ^9.0.0", + "@nestjs/core": "^8.0.0 || ^9.0.0", + "reflect-metadata": "^0.1.13", + "rxjs": "^7.2.0", + "typeorm": "^0.3.0" + } + }, + "node_modules/@nestjs/typeorm/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -1879,29 +1906,34 @@ "@sinonjs/commons": "^1.7.0" } }, + "node_modules/@sqltools/formatter": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@sqltools/formatter/-/formatter-1.2.5.tgz", + "integrity": "sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==" + }, "node_modules/@tsconfig/node10": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true + "devOptional": true }, "node_modules/@tsconfig/node12": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true + "devOptional": true }, "node_modules/@tsconfig/node14": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true + "devOptional": true }, "node_modules/@tsconfig/node16": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "dev": true + "devOptional": true }, "node_modules/@types/babel__core": { "version": "7.1.20", @@ -2077,7 +2109,7 @@ "version": "16.18.3", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", - "dev": true + "devOptional": true }, "node_modules/@types/parse-json": { "version": "4.0.0", @@ -2520,7 +2552,7 @@ "version": "8.8.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", - "dev": true, + "devOptional": true, "bin": { "acorn": "bin/acorn" }, @@ -2550,7 +2582,7 @@ "version": "8.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=0.4.0" } @@ -2628,7 +2660,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "engines": { "node": ">=8" } @@ -2647,6 +2678,11 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, "node_modules/anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", @@ -2660,6 +2696,14 @@ "node": ">= 8" } }, + "node_modules/app-root-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz", + "integrity": "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==", + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/append-field": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", @@ -2669,7 +2713,7 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true + "devOptional": true }, "node_modules/argparse": { "version": "2.0.1", @@ -2818,7 +2862,6 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, "funding": [ { "type": "github", @@ -3189,6 +3232,76 @@ "node": ">=8" } }, + "node_modules/cli-highlight": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz", + "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", + "dependencies": { + "chalk": "^4.0.0", + "highlight.js": "^10.7.1", + "mz": "^2.4.0", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^6.0.0", + "yargs": "^16.0.0" + }, + "bin": { + "highlight": "bin/highlight" + }, + "engines": { + "node": ">=8.0.0", + "npm": ">=5.0.0" + } + }, + "node_modules/cli-highlight/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/cli-highlight/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cli-highlight/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cli-highlight/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "engines": { + "node": ">=10" + } + }, "node_modules/cli-spinners": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", @@ -3229,7 +3342,6 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -3412,7 +3524,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true + "devOptional": true }, "node_modules/cross-spawn": { "version": "7.0.3", @@ -3428,11 +3540,22 @@ "node": ">= 8" } }, + "node_modules/date-fns": { + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz", + "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==", + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -3487,6 +3610,14 @@ "node": ">=0.4.0" } }, + "node_modules/denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", + "engines": { + "node": ">=0.10" + } + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -3527,7 +3658,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, + "devOptional": true, "engines": { "node": ">=0.3.1" } @@ -3607,8 +3738,7 @@ "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/encodeurl": { "version": "1.0.2", @@ -3659,7 +3789,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, "engines": { "node": ">=6" } @@ -4446,6 +4575,14 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, + "node_modules/generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "dependencies": { + "is-property": "^1.0.2" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -4459,7 +4596,6 @@ "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, "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -4621,6 +4757,14 @@ "node": ">=8" } }, + "node_modules/highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "engines": { + "node": "*" + } + }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", @@ -4666,7 +4810,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, "funding": [ { "type": "github", @@ -4867,7 +5010,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, "engines": { "node": ">=8" } @@ -4920,6 +5062,11 @@ "node": ">=8" } }, + "node_modules/is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==" + }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -6043,11 +6190,15 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, "node_modules/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, "dependencies": { "yallist": "^4.0.0" }, @@ -6107,7 +6258,7 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "devOptional": true }, "node_modules/makeerror": { "version": "1.0.12", @@ -6290,8 +6441,7 @@ "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/multer": { "version": "1.4.4-lts.1", @@ -6316,6 +6466,70 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, + "node_modules/mysql2": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-2.3.3.tgz", + "integrity": "sha512-wxJUev6LgMSgACDkb/InIFxDprRa6T95+VEoR+xPvtngtccNH2dGjEB/fVZ8yg1gWv1510c9CvXuJHi5zUm0ZA==", + "dependencies": { + "denque": "^2.0.1", + "generate-function": "^2.3.1", + "iconv-lite": "^0.6.3", + "long": "^4.0.0", + "lru-cache": "^6.0.0", + "named-placeholders": "^1.1.2", + "seq-queue": "^0.0.5", + "sqlstring": "^2.3.2" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/mysql2/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/named-placeholders": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.2.tgz", + "integrity": "sha512-wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA==", + "dependencies": { + "lru-cache": "^4.1.3" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/named-placeholders/node_modules/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==", + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/named-placeholders/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -6625,6 +6839,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -6872,6 +7104,11 @@ "node": ">= 0.10" } }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" + }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -7026,7 +7263,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -7197,6 +7433,11 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, "node_modules/schema-utils": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", @@ -7302,6 +7543,11 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, + "node_modules/seq-queue": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", + "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==" + }, "node_modules/serialize-javascript": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", @@ -7330,6 +7576,18 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -7442,6 +7700,14 @@ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, + "node_modules/sqlstring": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", + "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", @@ -7509,7 +7775,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -7523,7 +7788,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -7789,6 +8053,25 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -7938,7 +8221,7 @@ "version": "10.9.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dev": true, + "devOptional": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -8106,11 +8389,183 @@ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" }, + "node_modules/typeorm": { + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.3.10.tgz", + "integrity": "sha512-VMKiM84EpJQ+Mz9xDIPqnfplWhyUy1d8ccaKdMY9obifxJOTFnv8GYVyPsGwG8Lk7Nb8MlttHyHWENGAhBA3WA==", + "dependencies": { + "@sqltools/formatter": "^1.2.2", + "app-root-path": "^3.0.0", + "buffer": "^6.0.3", + "chalk": "^4.1.0", + "cli-highlight": "^2.1.11", + "date-fns": "^2.28.0", + "debug": "^4.3.3", + "dotenv": "^16.0.0", + "glob": "^7.2.0", + "js-yaml": "^4.1.0", + "mkdirp": "^1.0.4", + "reflect-metadata": "^0.1.13", + "sha.js": "^2.4.11", + "tslib": "^2.3.1", + "uuid": "^8.3.2", + "xml2js": "^0.4.23", + "yargs": "^17.3.1" + }, + "bin": { + "typeorm": "cli.js", + "typeorm-ts-node-commonjs": "cli-ts-node-commonjs.js", + "typeorm-ts-node-esm": "cli-ts-node-esm.js" + }, + "engines": { + "node": ">= 12.9.0" + }, + "funding": { + "url": "https://opencollective.com/typeorm" + }, + "peerDependencies": { + "@google-cloud/spanner": "^5.18.0", + "@sap/hana-client": "^2.12.25", + "better-sqlite3": "^7.1.2", + "hdb-pool": "^0.1.6", + "ioredis": "^5.0.4", + "mongodb": "^3.6.0", + "mssql": "^7.3.0", + "mysql2": "^2.2.5", + "oracledb": "^5.1.0", + "pg": "^8.5.1", + "pg-native": "^3.0.0", + "pg-query-stream": "^4.0.0", + "redis": "^3.1.1 || ^4.0.0", + "sql.js": "^1.4.0", + "sqlite3": "^5.0.3", + "ts-node": "^10.7.0", + "typeorm-aurora-data-api-driver": "^2.0.0" + }, + "peerDependenciesMeta": { + "@google-cloud/spanner": { + "optional": true + }, + "@sap/hana-client": { + "optional": true + }, + "better-sqlite3": { + "optional": true + }, + "hdb-pool": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "mongodb": { + "optional": true + }, + "mssql": { + "optional": true + }, + "mysql2": { + "optional": true + }, + "oracledb": { + "optional": true + }, + "pg": { + "optional": true + }, + "pg-native": { + "optional": true + }, + "pg-query-stream": { + "optional": true + }, + "redis": { + "optional": true + }, + "sql.js": { + "optional": true + }, + "sqlite3": { + "optional": true + }, + "ts-node": { + "optional": true + }, + "typeorm-aurora-data-api-driver": { + "optional": true + } + } + }, + "node_modules/typeorm-naming-strategies": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/typeorm-naming-strategies/-/typeorm-naming-strategies-4.1.0.tgz", + "integrity": "sha512-vPekJXzZOTZrdDvTl1YoM+w+sUIfQHG4kZTpbFYoTsufyv9NIBRe4Q+PdzhEAFA2std3D9LZHEb1EjE9zhRpiQ==", + "peerDependencies": { + "typeorm": "^0.2.0 || ^0.3.0" + } + }, + "node_modules/typeorm/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/typeorm/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/typeorm/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/typeorm/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/typescript": { "version": "4.8.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", - "dev": true, + "devOptional": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -8196,7 +8651,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true + "devOptional": true }, "node_modules/v8-to-istanbul": { "version": "9.0.1", @@ -8429,7 +8884,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -8460,6 +8914,26 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "engines": { + "node": ">=4.0" + } + }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -8472,7 +8946,6 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, "engines": { "node": ">=10" } @@ -8480,8 +8953,7 @@ "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yaml": { "version": "1.10.2", @@ -8496,7 +8968,6 @@ "version": "17.6.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", - "dev": true, "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -8514,7 +8985,6 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, "engines": { "node": ">=12" } @@ -8523,7 +8993,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, + "devOptional": true, "engines": { "node": ">=6" } @@ -9111,7 +9581,7 @@ "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, + "devOptional": true, "requires": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -9120,7 +9590,7 @@ "version": "0.3.9", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, + "devOptional": true, "requires": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -9566,7 +10036,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true + "devOptional": true }, "@jridgewell/set-array": { "version": "1.1.2", @@ -9601,7 +10071,7 @@ "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true + "devOptional": true }, "@jridgewell/trace-mapping": { "version": "0.3.17", @@ -9836,6 +10306,21 @@ "tslib": "2.4.1" } }, + "@nestjs/typeorm": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@nestjs/typeorm/-/typeorm-9.0.1.tgz", + "integrity": "sha512-A2BgLIPsMtmMI0bPKEf4bmzgFPsnvHqNBx3KkvaJ7hJrBQy0OqYOb+Rr06ifblKWDWS2tUPNrAFQbZjtk3PI+g==", + "requires": { + "uuid": "8.3.2" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + } + } + }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -9907,29 +10392,34 @@ "@sinonjs/commons": "^1.7.0" } }, + "@sqltools/formatter": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@sqltools/formatter/-/formatter-1.2.5.tgz", + "integrity": "sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==" + }, "@tsconfig/node10": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true + "devOptional": true }, "@tsconfig/node12": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true + "devOptional": true }, "@tsconfig/node14": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true + "devOptional": true }, "@tsconfig/node16": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "dev": true + "devOptional": true }, "@types/babel__core": { "version": "7.1.20", @@ -10105,7 +10595,7 @@ "version": "16.18.3", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", - "dev": true + "devOptional": true }, "@types/parse-json": { "version": "4.0.0", @@ -10456,7 +10946,7 @@ "version": "8.8.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", - "dev": true + "devOptional": true }, "acorn-import-assertions": { "version": "1.8.0", @@ -10476,7 +10966,7 @@ "version": "8.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true + "devOptional": true }, "ajv": { "version": "8.11.0", @@ -10525,8 +11015,7 @@ "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { "version": "4.3.0", @@ -10536,6 +11025,11 @@ "color-convert": "^2.0.1" } }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, "anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", @@ -10546,6 +11040,11 @@ "picomatch": "^2.0.4" } }, + "app-root-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz", + "integrity": "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==" + }, "append-field": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", @@ -10555,7 +11054,7 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true + "devOptional": true }, "argparse": { "version": "2.0.1", @@ -10675,8 +11174,7 @@ "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, "basic-auth": { "version": "2.0.1", @@ -10939,6 +11437,59 @@ "restore-cursor": "^3.1.0" } }, + "cli-highlight": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz", + "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", + "requires": { + "chalk": "^4.0.0", + "highlight.js": "^10.7.1", + "mz": "^2.4.0", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^6.0.0", + "yargs": "^16.0.0" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" + } + } + }, "cli-spinners": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", @@ -10965,7 +11516,6 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -11111,7 +11661,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true + "devOptional": true }, "cross-spawn": { "version": "7.0.3", @@ -11124,11 +11674,15 @@ "which": "^2.0.1" } }, + "date-fns": { + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz", + "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==" + }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "requires": { "ms": "2.1.2" } @@ -11166,6 +11720,11 @@ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true }, + "denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==" + }, "depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -11196,7 +11755,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true + "devOptional": true }, "diff-sequences": { "version": "28.1.1", @@ -11252,8 +11811,7 @@ "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "encodeurl": { "version": "1.0.2", @@ -11297,8 +11855,7 @@ "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, "escape-html": { "version": "1.0.3", @@ -11898,6 +12455,14 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, + "generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "requires": { + "is-property": "^1.0.2" + } + }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -11907,8 +12472,7 @@ "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 + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "get-intrinsic": { "version": "1.1.3", @@ -12019,6 +12583,11 @@ "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", "dev": true }, + "highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==" + }, "html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", @@ -12054,8 +12623,7 @@ "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "ignore": { "version": "5.2.0", @@ -12195,8 +12763,7 @@ "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "is-generator-fn": { "version": "2.1.0", @@ -12231,6 +12798,11 @@ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true }, + "is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==" + }, "is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -13087,11 +13659,15 @@ } } }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, "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" } @@ -13132,7 +13708,7 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "devOptional": true }, "makeerror": { "version": "1.0.12", @@ -13272,8 +13848,7 @@ "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "multer": { "version": "1.4.4-lts.1", @@ -13295,6 +13870,65 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, + "mysql2": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-2.3.3.tgz", + "integrity": "sha512-wxJUev6LgMSgACDkb/InIFxDprRa6T95+VEoR+xPvtngtccNH2dGjEB/fVZ8yg1gWv1510c9CvXuJHi5zUm0ZA==", + "requires": { + "denque": "^2.0.1", + "generate-function": "^2.3.1", + "iconv-lite": "^0.6.3", + "long": "^4.0.0", + "lru-cache": "^6.0.0", + "named-placeholders": "^1.1.2", + "seq-queue": "^0.0.5", + "sqlstring": "^2.3.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "named-placeholders": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.2.tgz", + "integrity": "sha512-wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA==", + "requires": { + "lru-cache": "^4.1.3" + }, + "dependencies": { + "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==", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" + } + } + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -13517,6 +14151,26 @@ "lines-and-columns": "^1.1.6" } }, + "parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" + }, + "parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "requires": { + "parse5": "^6.0.1" + }, + "dependencies": { + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + } + } + }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -13693,6 +14347,11 @@ "ipaddr.js": "1.9.1" } }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" + }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -13807,8 +14466,7 @@ "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" }, "require-from-string": { "version": "2.0.2", @@ -13913,6 +14571,11 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, "schema-utils": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", @@ -14002,6 +14665,11 @@ } } }, + "seq-queue": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", + "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==" + }, "serialize-javascript": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", @@ -14027,6 +14695,15 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -14117,6 +14794,11 @@ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, + "sqlstring": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", + "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==" + }, "stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", @@ -14173,7 +14855,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -14184,7 +14865,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -14366,6 +15046,22 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -14462,7 +15158,7 @@ "version": "10.9.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dev": true, + "devOptional": true, "requires": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -14578,11 +15274,71 @@ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" }, + "typeorm": { + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.3.10.tgz", + "integrity": "sha512-VMKiM84EpJQ+Mz9xDIPqnfplWhyUy1d8ccaKdMY9obifxJOTFnv8GYVyPsGwG8Lk7Nb8MlttHyHWENGAhBA3WA==", + "requires": { + "@sqltools/formatter": "^1.2.2", + "app-root-path": "^3.0.0", + "buffer": "^6.0.3", + "chalk": "^4.1.0", + "cli-highlight": "^2.1.11", + "date-fns": "^2.28.0", + "debug": "^4.3.3", + "dotenv": "^16.0.0", + "glob": "^7.2.0", + "js-yaml": "^4.1.0", + "mkdirp": "^1.0.4", + "reflect-metadata": "^0.1.13", + "sha.js": "^2.4.11", + "tslib": "^2.3.1", + "uuid": "^8.3.2", + "xml2js": "^0.4.23", + "yargs": "^17.3.1" + }, + "dependencies": { + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + } + } + }, + "typeorm-naming-strategies": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/typeorm-naming-strategies/-/typeorm-naming-strategies-4.1.0.tgz", + "integrity": "sha512-vPekJXzZOTZrdDvTl1YoM+w+sUIfQHG4kZTpbFYoTsufyv9NIBRe4Q+PdzhEAFA2std3D9LZHEb1EjE9zhRpiQ==", + "requires": {} + }, "typescript": { "version": "4.8.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", - "dev": true + "devOptional": true }, "universalify": { "version": "2.0.0", @@ -14633,7 +15389,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true + "devOptional": true }, "v8-to-istanbul": { "version": "9.0.1", @@ -14805,7 +15561,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -14827,6 +15582,20 @@ "signal-exit": "^3.0.7" } }, + "xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + } + }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -14835,14 +15604,12 @@ "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yaml": { "version": "1.10.2", @@ -14854,7 +15621,6 @@ "version": "17.6.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", - "dev": true, "requires": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -14868,14 +15634,13 @@ "yargs-parser": { "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" }, "yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true + "devOptional": true }, "yocto-queue": { "version": "0.1.0", diff --git a/backend/package.json b/backend/package.json index 421177b0..4557e918 100644 --- a/backend/package.json +++ b/backend/package.json @@ -30,12 +30,16 @@ "@nestjs/core": "^9.0.0", "@nestjs/platform-express": "^9.0.0", "@nestjs/swagger": "^6.1.3", + "@nestjs/typeorm": "^9.0.1", "class-transformer": "^0.5.1", "class-validator": "^0.13.2", "morgan": "^1.10.0", + "mysql2": "^2.3.3", "reflect-metadata": "^0.1.13", "rimraf": "^3.0.2", - "rxjs": "^7.2.0" + "rxjs": "^7.2.0", + "typeorm": "^0.3.10", + "typeorm-naming-strategies": "^4.1.0" }, "devDependencies": { "@nestjs/cli": "^9.0.0", diff --git a/backend/src/app.module.ts b/backend/src/app.module.ts index d9f8a7a0..d340a0d4 100644 --- a/backend/src/app.module.ts +++ b/backend/src/app.module.ts @@ -4,9 +4,10 @@ import { AppService } from './app.service'; import { AppConfigModule } from '@config/app/config.module'; import { ApiSuccessLoggerMiddleware } from '@middleware/api-success-logger.middleware'; import { ApiExceptionLoggerMiddleware } from '@middleware/api-exception-logger.middleware'; +import { DatabaseModule } from '@config/database/database.module'; @Module({ - imports: [AppConfigModule], + imports: [AppConfigModule, DatabaseModule], controllers: [AppController], providers: [AppService], }) diff --git a/backend/src/common/config/database/database.module.ts b/backend/src/common/config/database/database.module.ts new file mode 100644 index 00000000..c58dbe78 --- /dev/null +++ b/backend/src/common/config/database/database.module.ts @@ -0,0 +1,14 @@ +import { Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { TypeOrmConfigModule } from '@config/database/typeorm/config.module'; +import { TypeOrmConfigService } from '@config/database/typeorm/config.service'; + +@Module({ + imports: [ + TypeOrmModule.forRootAsync({ + imports: [TypeOrmConfigModule], + useExisting: TypeOrmConfigService, + }), + ], +}) +export class DatabaseModule {} diff --git a/backend/src/common/config/database/mysql/__test__/config.service.spec.ts b/backend/src/common/config/database/mysql/__test__/config.service.spec.ts new file mode 100644 index 00000000..6428e18c --- /dev/null +++ b/backend/src/common/config/database/mysql/__test__/config.service.spec.ts @@ -0,0 +1,58 @@ +import { Test } from '@nestjs/testing'; +import { MysqlConfigModule } from '@config/database/mysql/config.module'; +import { MysqlConfigService } from '@config/database/mysql/config.service'; + +describe('MysqlConfigService Test', () => { + let mysqlConfigService: MysqlConfigService; + + beforeEach(async () => { + const module = await Test.createTestingModule({ + imports: [MysqlConfigModule], + }).compile(); + + mysqlConfigService = module.get(MysqlConfigService); + }); + + test('MYSQL_PORT๋ฅผ ์ž˜๊ฐ€์ ธ์˜ค๋Š”๊ฐ€', async () => { + // given + const port = process.env.MYSQL_PORT; + // when + + // then + expect(mysqlConfigService.port).toEqual(parseInt(port, 10)); + }); + + test('MYSQL_HOST๋ฅผ ์ž˜๊ฐ€์ ธ์˜ค๋Š”๊ฐ€', async () => { + // given + const hostname = process.env.MYSQL_HOST; + + // when + // then + expect(mysqlConfigService.hostname).toEqual(hostname); + }); + + test('MYSQL_USER๋ฅผ ์ž˜๊ฐ€์ ธ์˜ค๋Š”๊ฐ€', async () => { + // given + const username = process.env.MYSQL_USER; + + // when + // then + expect(mysqlConfigService.username).toEqual(username); + }); + test('MYSQL_PASSWORD๋ฅผ ์ž˜๊ฐ€์ ธ์˜ค๋Š”๊ฐ€', async () => { + // given + const password = process.env.MYSQL_PASSWORD; + + // when + // then + expect(mysqlConfigService.password).toEqual(password); + }); + test('MYSQL_DATABASE๋ฅผ ์ž˜๊ฐ€์ ธ์˜ค๋Š”๊ฐ€', async () => { + // given + const database = process.env.MYSQL_DATABASE; + + // when + // then + expect(mysqlConfigService.database).toEqual(database); + }); +}); diff --git a/backend/src/common/config/database/mysql/config.module.ts b/backend/src/common/config/database/mysql/config.module.ts new file mode 100644 index 00000000..9663c9f2 --- /dev/null +++ b/backend/src/common/config/database/mysql/config.module.ts @@ -0,0 +1,18 @@ +import { Module } from '@nestjs/common'; +import { ConfigModule } from '@nestjs/config'; +import { getEnvironmentFilePath, isIgnoreEnvFile } from '@config/config-option'; +import { MysqlConfigService } from '@config/database/mysql/config.service'; +import { validate } from '@config/database/mysql/validate'; + +@Module({ + imports: [ + ConfigModule.forRoot({ + envFilePath: getEnvironmentFilePath(), + ignoreEnvFile: isIgnoreEnvFile(), + validate, + }), + ], + providers: [MysqlConfigService], + exports: [MysqlConfigService], +}) +export class MysqlConfigModule {} diff --git a/backend/src/common/config/database/mysql/config.service.ts b/backend/src/common/config/database/mysql/config.service.ts new file mode 100644 index 00000000..ac0cb6a7 --- /dev/null +++ b/backend/src/common/config/database/mysql/config.service.ts @@ -0,0 +1,30 @@ +import { ConfigService } from '@nestjs/config'; +import { Injectable } from '@nestjs/common'; +import { MysqlConfig } from '@config/database/mysql/validate'; + +@Injectable() +export class MysqlConfigService { + constructor( + private readonly configService: ConfigService, + ) {} + + get port() { + return this.configService.get('MYSQL_PORT', { infer: true }); + } + + get hostname() { + return this.configService.get('MYSQL_HOST', { infer: true }); + } + + get username() { + return this.configService.get('MYSQL_USER', { infer: true }); + } + + get password() { + return this.configService.get('MYSQL_PASSWORD', { infer: true }); + } + + get database() { + return this.configService.get('MYSQL_DATABASE', { infer: true }); + } +} diff --git a/backend/src/common/config/database/mysql/validate.ts b/backend/src/common/config/database/mysql/validate.ts new file mode 100644 index 00000000..4c67fc77 --- /dev/null +++ b/backend/src/common/config/database/mysql/validate.ts @@ -0,0 +1,43 @@ +import { IsNumber, IsString, validateSync } from 'class-validator'; +import { Expose, plainToClass, Type } from 'class-transformer'; + +export class MysqlConfig { + @IsString() + @Expose() + MYSQL_HOST: string; + + @IsString() + @Expose() + MYSQL_DATABASE: string; + + @IsString() + @Expose() + MYSQL_USER: string; + + @IsString() + @Expose() + MYSQL_PASSWORD: string; + + @IsNumber() + @Type(() => Number) + @Expose() + MYSQL_PORT: number; +} + +export const validate = (config: Record) => { + const validatedConfig = plainToClass( + MysqlConfig, + { ...config }, + { enableImplicitConversion: true, excludeExtraneousValues: true }, + ); + + const errors = validateSync(validatedConfig, { + skipMissingProperties: false, + }); + + if (errors.length > 0) { + throw new Error(errors.toString()); + } + + return validatedConfig; +}; diff --git a/backend/src/common/config/database/typeorm/config.module.ts b/backend/src/common/config/database/typeorm/config.module.ts new file mode 100644 index 00000000..e6bb16ef --- /dev/null +++ b/backend/src/common/config/database/typeorm/config.module.ts @@ -0,0 +1,11 @@ +import { Module } from '@nestjs/common'; +import { MysqlConfigModule } from '@config/database/mysql/config.module'; +import { AppConfigModule } from '@config/app/config.module'; +import { TypeOrmConfigService } from '@config/database/typeorm/config.service'; + +@Module({ + imports: [MysqlConfigModule, AppConfigModule], + providers: [TypeOrmConfigService], + exports: [TypeOrmConfigService], +}) +export class TypeOrmConfigModule {} diff --git a/backend/src/common/config/database/typeorm/config.service.ts b/backend/src/common/config/database/typeorm/config.service.ts new file mode 100644 index 00000000..cb936e6b --- /dev/null +++ b/backend/src/common/config/database/typeorm/config.service.ts @@ -0,0 +1,38 @@ +import { TypeOrmModuleOptions, TypeOrmOptionsFactory } from '@nestjs/typeorm'; +import { Injectable } from '@nestjs/common'; +import * as path from 'path'; +import { SnakeNamingStrategy } from 'typeorm-naming-strategies'; +import { MysqlConfigService } from '@config/database/mysql/config.service'; +import { AppConfigService } from '@config/app/config.service'; + +@Injectable() +export class TypeOrmConfigService implements TypeOrmOptionsFactory { + constructor( + private readonly mysqlConfigService: MysqlConfigService, + private readonly appConfigServce: AppConfigService, + ) {} + + createTypeOrmOptions( + connectionName?: string, + ): Promise | TypeOrmModuleOptions { + const entityPath = path.resolve( + __dirname, + '../../../../**/*.entity.{js,ts}', + ); + + return { + type: 'mysql', + name: connectionName, + host: this.mysqlConfigService.hostname, + username: this.mysqlConfigService.username, + password: this.mysqlConfigService.password, + database: this.mysqlConfigService.database, + port: this.mysqlConfigService.port, + synchronize: !this.appConfigServce.isPrduction(), + logging: this.appConfigServce.isDevelopment() ? 'all' : ['error', 'warn'], + entities: [entityPath], + dropSchema: this.appConfigServce.isTest(), + namingStrategy: new SnakeNamingStrategy(), + }; + } +} diff --git a/backend/test/app.e2e-spec.ts b/backend/test/app.e2e-spec.ts index 7d4d2906..3a37f798 100644 --- a/backend/test/app.e2e-spec.ts +++ b/backend/test/app.e2e-spec.ts @@ -1,11 +1,13 @@ import { Test, TestingModule } from '@nestjs/testing'; import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; +import { DataSource } from 'typeorm'; import { AppModule } from '@src/app.module'; import { setNestApp } from '@src/setNestApp'; describe('AppController (e2e)', () => { let app: INestApplication; + let dataSource: DataSource; beforeEach(async () => { const moduleFixture: TestingModule = await Test.createTestingModule({ @@ -16,8 +18,15 @@ describe('AppController (e2e)', () => { setNestApp(app); + dataSource = app.get(DataSource); + await app.init(); }); + + afterAll(async () => { + await dataSource.destroy(); + }); + describe('GET /v1/:id', () => { const url = (id) => `/v1/${id}`; From 49b5cbcafd124fe2036260201e51b7c0c2b663de Mon Sep 17 00:00:00 2001 From: MinGyeong Park <37508296+kong430@users.noreply.github.com> Date: Thu, 24 Nov 2022 11:09:04 +0900 Subject: [PATCH 020/142] =?UTF-8?q?[Feature]=20MSW=20=EC=84=B8=ED=8C=85=20?= =?UTF-8?q?=EB=B0=8F=20=EB=AC=B4=ED=95=9C=EC=8A=A4=ED=81=AC=EB=A1=A4=20(#5?= =?UTF-8?q?7)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :goal_net: chore: msw ์„ค์น˜ ๋ฐ boilerplate ์ƒ์„ฑ * :sparkles: feature: ๊ธฐ๋ณธ ๋ฌดํ•œ์Šคํฌ๋กค ๊ตฌํ˜„ * :sparkles: feature: mock api url ๋ณ€๊ฒฝ * :sparkles: feature: apis path alias ์ถ”๊ฐ€ * :goal_net: chore: promise ๊ด€๋ จ lint rule ๋ณ€๊ฒฝ * :recycle: refactor: useFetchTestData hooks/queries๋กœ ๋ถ„๋ฆฌ * :sparkles: feature: mocks path alias ์ถ”๊ฐ€ * :goal_net: chore: frontend-ci ํŒŒ์ผ $ ๋น ์ง„ ๋ถ€๋ถ„ ์ถ”๊ฐ€ * :recycle: refactor: change msw baseUrl * :sparkles: feature: msw url ๋ณ€๊ฒฝ * :bug: fix: lhci ๋Œ์•„๊ฐ€์ง€ ์•Š๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ msw๊ฐ€ production์ผ๋•Œ๋„ ๋™์ž‘ํ•˜๊ฒŒ ๋ณ€๊ฒฝ * :goal_net: chore: _app.tsx effect ํ•จ์ˆ˜์— void ์ถ”๊ฐ€ @typescript-eslint/no-floating-promises warning ํ•ด๊ฒฐ * :goal_net: chore: .lighthouseci ํด๋” ์ž˜๋ชป ์˜ฌ๋ผ๊ฐ„ ๊ฒƒ ์ œ๊ฑฐ --- .github/workflows/frontend-ci.yml | 18 +- frontend/.eslintrc.json | 4 +- frontend/package-lock.json | 1522 ++++++++++++++++- frontend/package.json | 5 + frontend/public/mockServiceWorker.js | 323 ++++ frontend/src/apis/test/getTestData.ts | 9 + .../src/hooks/queries/useFetchTestData.ts | 21 + frontend/src/hooks/useIntersect.ts | 27 + frontend/src/mocks/browser.ts | 4 + frontend/src/mocks/handlers.ts | 4 + frontend/src/mocks/index.ts | 11 + frontend/src/mocks/resolvers/test.ts | 19 + frontend/src/mocks/server.ts | 4 + frontend/src/pages/_app.tsx | 14 + frontend/src/pages/test.tsx | 50 + frontend/src/typings/types.ts | 8 +- frontend/tsconfig.json | 4 +- 17 files changed, 2021 insertions(+), 26 deletions(-) create mode 100644 frontend/public/mockServiceWorker.js create mode 100644 frontend/src/apis/test/getTestData.ts create mode 100644 frontend/src/hooks/queries/useFetchTestData.ts create mode 100644 frontend/src/hooks/useIntersect.ts create mode 100644 frontend/src/mocks/browser.ts create mode 100644 frontend/src/mocks/handlers.ts create mode 100644 frontend/src/mocks/index.ts create mode 100644 frontend/src/mocks/resolvers/test.ts create mode 100644 frontend/src/mocks/server.ts create mode 100644 frontend/src/pages/test.tsx diff --git a/.github/workflows/frontend-ci.yml b/.github/workflows/frontend-ci.yml index b92cdf5f..a15150a0 100644 --- a/.github/workflows/frontend-ci.yml +++ b/.github/workflows/frontend-ci.yml @@ -1,6 +1,6 @@ name: Frontend CI run-name: ${{ github.actor }}๊ฐ€ ์‹คํ–‰ํ•จ -on: +on: pull_request: branches: - develop @@ -8,7 +8,7 @@ on: - 'frontend/**' - './github/workflows/frontend-ci.yml' - './github/workflows/slack-notification.yml' - + jobs: CI: runs-on: ubuntu-latest @@ -23,7 +23,7 @@ jobs: - name: nodeJS uses: actions/setup-node@v3 - with: + with: node-version: 16.18.1 - name: dependency install @@ -78,17 +78,17 @@ jobs: - name: nodeJS uses: actions/setup-node@v3 - with: + with: node-version: 16.18.1 - + - name: dependency install run: | npm install - + - name: Build run: | npm run build - + - name: lighthouse run: | npm install -g @lhci/cli @@ -177,7 +177,7 @@ jobs: uses: ./.github/workflows/slack-notification.yml with: title: ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์šฉ CI - status: 'CI : ${{ needs.CI.outputs.status }} && lhci : ${{ needs.lhci.outputs.status }} && storybook : {{ needs.storybook.outputs.status }}' + status: 'CI : ${{ needs.CI.outputs.status }} && lhci : ${{ needs.lhci.outputs.status }} && storybook : ${{ needs.storybook.outputs.status }}' commit_url: ${{ github.event.pull_request.html_url || github.event.head_commit.url }} secrets: - webhook_url: ${{ secrets.SLACK_NOTIFICATION_WEBHOOK_URL }} \ No newline at end of file + webhook_url: ${{ secrets.SLACK_NOTIFICATION_WEBHOOK_URL }} diff --git a/frontend/.eslintrc.json b/frontend/.eslintrc.json index 3a5268b1..10ecfd85 100644 --- a/frontend/.eslintrc.json +++ b/frontend/.eslintrc.json @@ -41,6 +41,8 @@ "@typescript-eslint/space-before-function-paren": "off", "no-console": "warn", "@typescript-eslint/strict-boolean-expressions": "off", - "@typescript-eslint/no-floating-promises": "warn" + "@typescript-eslint/no-floating-promises": "warn", + "@typescript-eslint/return-await": "off", + "@typescript-eslint/promise-function-async": "off" } } diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 41acd71b..cea58fe5 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -18,6 +18,7 @@ "@tabler/icons": "^1.111.0", "@tanstack/react-query": "^4.16.1", "@tanstack/react-query-devtools": "^4.16.1", + "axios": "^1.1.3", "next": "^12.3.3", "react": "^17.0.2", "react-dom": "^17.0.2" @@ -52,6 +53,7 @@ "eslint-plugin-storybook": "^0.6.7", "husky": "^8.0.2", "lint-staged": "^13.0.3", + "msw": "^0.29.0", "prettier": "^2.7.1", "storybook-addon-next": "^1.6.10", "storybook-addon-next-router": "^3.1.1", @@ -3018,6 +3020,29 @@ "integrity": "sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==", "dev": true }, + "node_modules/@mswjs/cookies": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/@mswjs/cookies/-/cookies-0.1.7.tgz", + "integrity": "sha512-bDg1ReMBx+PYDB4Pk7y1Q07Zz1iKIEUWQpkEXiA2lEWg9gvOZ8UBmGXilCEUvyYoRFlmr/9iXTRR69TrgSwX/Q==", + "dev": true, + "dependencies": { + "@types/set-cookie-parser": "^2.4.0", + "set-cookie-parser": "^2.4.6" + } + }, + "node_modules/@mswjs/interceptors": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.10.0.tgz", + "integrity": "sha512-/M0GGpid5q2EDI+Keas1sLYF3VZFXHDE5gCmX/jHdp+OJFruVNca3PUk7A8KnGdPpuycZogdPsmRBSOXwjyA7A==", + "dev": true, + "dependencies": { + "@open-draft/until": "^1.0.3", + "debug": "^4.3.0", + "headers-utils": "^3.0.2", + "strict-event-emitter": "^0.2.0", + "xmldom": "^0.6.0" + } + }, "node_modules/@next/env": { "version": "12.3.3", "resolved": "https://registry.npmjs.org/@next/env/-/env-12.3.3.tgz", @@ -3321,6 +3346,12 @@ "node": ">=10" } }, + "node_modules/@open-draft/until": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@open-draft/until/-/until-1.0.3.tgz", + "integrity": "sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q==", + "dev": true + }, "node_modules/@pmmmwh/react-refresh-webpack-plugin": { "version": "0.5.9", "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.9.tgz", @@ -10183,6 +10214,12 @@ "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==", "dev": true }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "dev": true + }, "node_modules/@types/eslint": { "version": "8.4.10", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", @@ -10243,6 +10280,34 @@ "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", "dev": true }, + "node_modules/@types/inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-HhxyLejTHMfohAuhRun4csWigAMjXTmRyiJTU1Y/I1xmggikFMkOUoMQRlFm+zQcPEGHSs3io/0FAmNZf8EymQ==", + "dev": true, + "dependencies": { + "@types/through": "*", + "rxjs": "^6.4.0" + } + }, + "node_modules/@types/inquirer/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@types/inquirer/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, "node_modules/@types/is-function": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@types/is-function/-/is-function-1.0.1.tgz", @@ -10315,6 +10380,12 @@ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "dev": true }, + "node_modules/@types/js-levenshtein": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/js-levenshtein/-/js-levenshtein-1.1.1.tgz", + "integrity": "sha512-qC4bCqYGy1y/NP7dDVr7KJarn+PbX1nSpwA7JXdu0HxT3QYjO8MJ+cntENtHFVy2dRAyBV23OZ6MxsW1AM1L8g==", + "dev": true + }, "node_modules/@types/json-schema": { "version": "7.0.11", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", @@ -10437,6 +10508,15 @@ "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", "dev": true }, + "node_modules/@types/set-cookie-parser": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@types/set-cookie-parser/-/set-cookie-parser-2.4.2.tgz", + "integrity": "sha512-fBZgytwhYAUkj/jC/FAV4RQ5EerRup1YQsXQCh8rZfiHkc4UahC192oH0smGwsXol3cL3A5oETuAHeQHmhXM4w==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/source-list-map": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", @@ -10464,6 +10544,15 @@ "@types/jest": "*" } }, + "node_modules/@types/through": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.30.tgz", + "integrity": "sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/uglify-js": { "version": "3.17.1", "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.17.1.tgz", @@ -11691,8 +11780,7 @@ "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/at-least-node": { "version": "1.0.0", @@ -11758,6 +11846,29 @@ "node": ">=4" } }, + "node_modules/axios": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.1.3.tgz", + "integrity": "sha512-00tXVRwKx/FZr/IDVFt4C+f9FYairX517WoGCL6dpOntqLkZofjhu43F/Xl44UOpqa+9sLFDrG/XAnFsUYgkDA==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axios/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/axobject-query": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", @@ -12163,6 +12274,84 @@ "file-uri-to-path": "1.0.0" } }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/bl/node_modules/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, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bl/node_modules/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, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bl/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, "node_modules/bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -12863,6 +13052,12 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -13109,6 +13304,18 @@ "node": ">=8" } }, + "node_modules/cli-spinners": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", + "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/cli-table3": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", @@ -13184,6 +13391,15 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -13195,6 +13411,15 @@ "wrap-ansi": "^7.0.0" } }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, "node_modules/clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", @@ -13272,7 +13497,6 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, "dependencies": { "delayed-stream": "~1.0.0" }, @@ -14312,6 +14536,18 @@ "node": ">=0.10.0" } }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/define-lazy-prop": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", @@ -14354,7 +14590,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, "engines": { "node": ">=0.4.0" } @@ -16209,6 +16444,20 @@ "node": ">=0.10.0" } }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", @@ -16349,6 +16598,30 @@ "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", "dev": true }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -16642,6 +16915,25 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", @@ -17263,6 +17555,15 @@ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", "dev": true }, + "node_modules/graphql": { + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz", + "integrity": "sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==", + "dev": true, + "engines": { + "node": ">= 10.x" + } + }, "node_modules/handlebars": { "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", @@ -17638,6 +17939,12 @@ "he": "bin/he" } }, + "node_modules/headers-utils": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/headers-utils/-/headers-utils-3.0.2.tgz", + "integrity": "sha512-xAxZkM1dRyGV2Ou5bzMxBPNLoRCjcX+ya7KSWybQD2KwLphxsapUVK6x/02o7f4VU6GPSXch9vNY2+gkU8tYWQ==", + "dev": true + }, "node_modules/hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -18013,6 +18320,102 @@ "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" }, + "node_modules/inquirer": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz", + "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/inquirer/node_modules/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 + }, + "node_modules/inquirer/node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/internal-slot": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", @@ -18362,6 +18765,15 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-map": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", @@ -18541,6 +18953,18 @@ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", "dev": true }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", @@ -19451,6 +19875,15 @@ "node": ">=8" } }, + "node_modules/js-levenshtein": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", + "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/js-string-escape": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", @@ -20036,6 +20469,92 @@ "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", "dev": true }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/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 + }, + "node_modules/log-symbols/node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/log-update": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", @@ -20624,7 +21143,6 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, "engines": { "node": ">= 0.6" } @@ -20633,7 +21151,6 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, "dependencies": { "mime-db": "1.52.0" }, @@ -20897,6 +21414,169 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "node_modules/msw": { + "version": "0.29.0", + "resolved": "https://registry.npmjs.org/msw/-/msw-0.29.0.tgz", + "integrity": "sha512-C/wz1d5uAEZRvAPAYrXG1rwLxXl0+BOs+JPrCzasoABZW3ATwS6ifSze+/DAgA93e9M86RXwvy6yDtZeZWmCFQ==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@mswjs/cookies": "^0.1.5", + "@mswjs/interceptors": "^0.10.0", + "@open-draft/until": "^1.0.3", + "@types/cookie": "^0.4.0", + "@types/inquirer": "^7.3.1", + "@types/js-levenshtein": "^1.1.0", + "chalk": "^4.1.1", + "chokidar": "^3.4.2", + "cookie": "^0.4.1", + "graphql": "^15.4.0", + "headers-utils": "^3.0.2", + "inquirer": "^8.1.0", + "js-levenshtein": "^1.1.6", + "node-fetch": "^2.6.1", + "node-match-path": "^0.6.3", + "statuses": "^2.0.0", + "strict-event-emitter": "^0.2.0", + "type-fest": "^1.1.3", + "yargs": "^17.0.1" + }, + "bin": { + "msw": "cli/index.js" + } + }, + "node_modules/msw/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/msw/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/msw/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/msw/node_modules/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/msw/node_modules/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 + }, + "node_modules/msw/node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/msw/node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/msw/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/msw/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/msw/node_modules/yargs": { + "version": "17.6.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", + "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/msw/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/multipipe": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-1.0.2.tgz", @@ -20906,6 +21586,12 @@ "object-assign": "^4.1.0" } }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, "node_modules/nan": { "version": "2.17.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", @@ -21215,6 +21901,12 @@ } ] }, + "node_modules/node-match-path": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/node-match-path/-/node-match-path-0.6.3.tgz", + "integrity": "sha512-fB1reOHKLRZCJMAka28hIxCwQLxGmd7WewOCBDYKpyA1KXi68A7vaGgdZAPhY2E6SXoYt3KqYCCvXLJ+O0Fu/Q==", + "dev": true + }, "node_modules/node-releases": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", @@ -21675,6 +22367,99 @@ "node": ">= 0.8.0" } }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/node_modules/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 + }, + "node_modules/ora/node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", @@ -21691,6 +22476,15 @@ "node": ">=0.10.0" } }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/p-all": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/p-all/-/p-all-2.1.0.tgz", @@ -22515,6 +23309,11 @@ "node": ">= 0.10" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "node_modules/prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", @@ -23611,6 +24410,15 @@ "node": "6.* || >= 7.*" } }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -24169,6 +24977,12 @@ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, + "node_modules/set-cookie-parser": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.5.1.tgz", + "integrity": "sha512-1jeBGaKNGdEq4FgIrORu/N570dwoPYio8lSoYLWmX7sQ//0JY08Xh9o5pBcgmHQ/MbsYp/aZnOe1s1lIsbLprQ==", + "dev": true + }, "node_modules/set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", @@ -25042,6 +25856,15 @@ "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", "dev": true }, + "node_modules/strict-event-emitter": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.2.8.tgz", + "integrity": "sha512-KDf/ujU8Zud3YaLtMCcTI4xkZlZVIYxTLr+XIULexP+77EEVWixeXroLUXQXiVtH4XH2W7jr/3PT1v3zBuvc3A==", + "dev": true, + "dependencies": { + "events": "^3.3.0" + } + }, "node_modules/string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", @@ -25600,6 +26423,18 @@ "node": ">=0.6.0" } }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -26953,6 +27788,15 @@ "node": ">=0.10.0" } }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, "node_modules/web-namespaces": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", @@ -27343,6 +28187,15 @@ "default-browser-id": "^1.0.4" } }, + "node_modules/xmldom": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.6.0.tgz", + "integrity": "sha512-iAcin401y58LckRZ0TkI4k0VSM1Qg0KGSc3i8rU+xrxe19A/BN1zHyVSJY7uoutVlaTSzYyk/v5AmkewAP7jtg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -29552,6 +30405,29 @@ } } }, + "@mswjs/cookies": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/@mswjs/cookies/-/cookies-0.1.7.tgz", + "integrity": "sha512-bDg1ReMBx+PYDB4Pk7y1Q07Zz1iKIEUWQpkEXiA2lEWg9gvOZ8UBmGXilCEUvyYoRFlmr/9iXTRR69TrgSwX/Q==", + "dev": true, + "requires": { + "@types/set-cookie-parser": "^2.4.0", + "set-cookie-parser": "^2.4.6" + } + }, + "@mswjs/interceptors": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.10.0.tgz", + "integrity": "sha512-/M0GGpid5q2EDI+Keas1sLYF3VZFXHDE5gCmX/jHdp+OJFruVNca3PUk7A8KnGdPpuycZogdPsmRBSOXwjyA7A==", + "dev": true, + "requires": { + "@open-draft/until": "^1.0.3", + "debug": "^4.3.0", + "headers-utils": "^3.0.2", + "strict-event-emitter": "^0.2.0", + "xmldom": "^0.6.0" + } + }, "@next/env": { "version": "12.3.3", "resolved": "https://registry.npmjs.org/@next/env/-/env-12.3.3.tgz", @@ -29717,6 +30593,12 @@ "rimraf": "^3.0.2" } }, + "@open-draft/until": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@open-draft/until/-/until-1.0.3.tgz", + "integrity": "sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q==", + "dev": true + }, "@pmmmwh/react-refresh-webpack-plugin": { "version": "0.5.9", "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.9.tgz", @@ -34901,6 +35783,12 @@ "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==", "dev": true }, + "@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "dev": true + }, "@types/eslint": { "version": "8.4.10", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", @@ -34961,6 +35849,33 @@ "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", "dev": true }, + "@types/inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-HhxyLejTHMfohAuhRun4csWigAMjXTmRyiJTU1Y/I1xmggikFMkOUoMQRlFm+zQcPEGHSs3io/0FAmNZf8EymQ==", + "dev": true, + "requires": { + "@types/through": "*", + "rxjs": "^6.4.0" + }, + "dependencies": { + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, "@types/is-function": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@types/is-function/-/is-function-1.0.1.tgz", @@ -35026,6 +35941,12 @@ } } }, + "@types/js-levenshtein": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/js-levenshtein/-/js-levenshtein-1.1.1.tgz", + "integrity": "sha512-qC4bCqYGy1y/NP7dDVr7KJarn+PbX1nSpwA7JXdu0HxT3QYjO8MJ+cntENtHFVy2dRAyBV23OZ6MxsW1AM1L8g==", + "dev": true + }, "@types/json-schema": { "version": "7.0.11", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", @@ -35148,6 +36069,15 @@ "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", "dev": true }, + "@types/set-cookie-parser": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@types/set-cookie-parser/-/set-cookie-parser-2.4.2.tgz", + "integrity": "sha512-fBZgytwhYAUkj/jC/FAV4RQ5EerRup1YQsXQCh8rZfiHkc4UahC192oH0smGwsXol3cL3A5oETuAHeQHmhXM4w==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/source-list-map": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", @@ -35175,6 +36105,15 @@ "@types/jest": "*" } }, + "@types/through": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.30.tgz", + "integrity": "sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/uglify-js": { "version": "3.17.1", "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.17.1.tgz", @@ -36134,8 +37073,7 @@ "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "at-least-node": { "version": "1.0.0", @@ -36176,6 +37114,28 @@ "integrity": "sha512-u2MVsXfew5HBvjsczCv+xlwdNnB1oQR9HlAcsejZttNjKKSkeDNVwB1vMThIUIFI9GoT57Vtk8iQLwqOfAkboA==", "dev": true }, + "axios": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.1.3.tgz", + "integrity": "sha512-00tXVRwKx/FZr/IDVFt4C+f9FYairX517WoGCL6dpOntqLkZofjhu43F/Xl44UOpqa+9sLFDrG/XAnFsUYgkDA==", + "requires": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + }, + "dependencies": { + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + } + } + }, "axobject-query": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", @@ -36478,6 +37438,55 @@ "file-uri-to-path": "1.0.0" } }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "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 + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + } + } + }, "bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -37035,6 +38044,12 @@ "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", "dev": true }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, "chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -37224,6 +38239,12 @@ "restore-cursor": "^3.1.0" } }, + "cli-spinners": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", + "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==", + "dev": true + }, "cli-table3": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", @@ -37272,6 +38293,12 @@ } } }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true + }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -37283,6 +38310,12 @@ "wrap-ansi": "^7.0.0" } }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true + }, "clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", @@ -37344,7 +38377,6 @@ "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" } @@ -38178,6 +39210,15 @@ "untildify": "^2.0.0" } }, + "defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, "define-lazy-prop": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", @@ -38207,8 +39248,7 @@ "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" }, "delegates": { "version": "1.0.0", @@ -39648,6 +40688,17 @@ "is-extendable": "^1.0.1" } }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, "extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", @@ -39774,6 +40825,23 @@ "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", "dev": true }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + }, + "dependencies": { + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + } + } + }, "file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -40019,6 +41087,11 @@ } } }, + "follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" + }, "for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", @@ -40483,6 +41556,12 @@ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", "dev": true }, + "graphql": { + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz", + "integrity": "sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==", + "dev": true + }, "handlebars": { "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", @@ -40765,6 +41844,12 @@ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, + "headers-utils": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/headers-utils/-/headers-utils-3.0.2.tgz", + "integrity": "sha512-xAxZkM1dRyGV2Ou5bzMxBPNLoRCjcX+ya7KSWybQD2KwLphxsapUVK6x/02o7f4VU6GPSXch9vNY2+gkU8tYWQ==", + "dev": true + }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -41035,6 +42120,80 @@ "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" }, + "inquirer": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz", + "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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 + }, + "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.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "internal-slot": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", @@ -41267,6 +42426,12 @@ "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", "dev": true }, + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true + }, "is-map": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", @@ -41383,6 +42548,12 @@ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", "dev": true }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", @@ -42075,6 +43246,12 @@ } } }, + "js-levenshtein": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", + "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", + "dev": true + }, "js-string-escape": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", @@ -42501,6 +43678,67 @@ "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", "dev": true }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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 + }, + "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.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "log-update": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", @@ -42972,14 +44210,12 @@ "mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" }, "mime-types": { "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, "requires": { "mime-db": "1.52.0" } @@ -43199,6 +44435,128 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "msw": { + "version": "0.29.0", + "resolved": "https://registry.npmjs.org/msw/-/msw-0.29.0.tgz", + "integrity": "sha512-C/wz1d5uAEZRvAPAYrXG1rwLxXl0+BOs+JPrCzasoABZW3ATwS6ifSze+/DAgA93e9M86RXwvy6yDtZeZWmCFQ==", + "dev": true, + "requires": { + "@mswjs/cookies": "^0.1.5", + "@mswjs/interceptors": "^0.10.0", + "@open-draft/until": "^1.0.3", + "@types/cookie": "^0.4.0", + "@types/inquirer": "^7.3.1", + "@types/js-levenshtein": "^1.1.0", + "chalk": "^4.1.1", + "chokidar": "^3.4.2", + "cookie": "^0.4.1", + "graphql": "^15.4.0", + "headers-utils": "^3.0.2", + "inquirer": "^8.1.0", + "js-levenshtein": "^1.1.6", + "node-fetch": "^2.6.1", + "node-match-path": "^0.6.3", + "statuses": "^2.0.0", + "strict-event-emitter": "^0.2.0", + "type-fest": "^1.1.3", + "yargs": "^17.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.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 + }, + "cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true + }, + "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.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true + }, + "yargs": { + "version": "17.6.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", + "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", + "dev": true, + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true + } + } + }, "multipipe": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-1.0.2.tgz", @@ -43208,6 +44566,12 @@ "object-assign": "^4.1.0" } }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, "nan": { "version": "2.17.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", @@ -43446,6 +44810,12 @@ } } }, + "node-match-path": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/node-match-path/-/node-match-path-0.6.3.tgz", + "integrity": "sha512-fB1reOHKLRZCJMAka28hIxCwQLxGmd7WewOCBDYKpyA1KXi68A7vaGgdZAPhY2E6SXoYt3KqYCCvXLJ+O0Fu/Q==", + "dev": true + }, "node-releases": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", @@ -43797,6 +45167,74 @@ } } }, + "ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "requires": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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 + }, + "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.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", @@ -43810,6 +45248,12 @@ "dev": true, "optional": true }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true + }, "p-all": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/p-all/-/p-all-2.1.0.tgz", @@ -44425,6 +45869,11 @@ "ipaddr.js": "1.9.1" } }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", @@ -45271,6 +46720,12 @@ "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", "dev": true }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true + }, "run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -45714,6 +47169,12 @@ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, + "set-cookie-parser": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.5.1.tgz", + "integrity": "sha512-1jeBGaKNGdEq4FgIrORu/N570dwoPYio8lSoYLWmX7sQ//0JY08Xh9o5pBcgmHQ/MbsYp/aZnOe1s1lIsbLprQ==", + "dev": true + }, "set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", @@ -46430,6 +47891,15 @@ "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", "dev": true }, + "strict-event-emitter": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.2.8.tgz", + "integrity": "sha512-KDf/ujU8Zud3YaLtMCcTI4xkZlZVIYxTLr+XIULexP+77EEVWixeXroLUXQXiVtH4XH2W7jr/3PT1v3zBuvc3A==", + "dev": true, + "requires": { + "events": "^3.3.0" + } + }, "string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", @@ -46838,6 +48308,15 @@ "setimmediate": "^1.0.4" } }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, "tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -47893,6 +49372,15 @@ } } }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, "web-namespaces": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", @@ -48180,6 +49668,12 @@ "default-browser-id": "^1.0.4" } }, + "xmldom": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.6.0.tgz", + "integrity": "sha512-iAcin401y58LckRZ0TkI4k0VSM1Qg0KGSc3i8rU+xrxe19A/BN1zHyVSJY7uoutVlaTSzYyk/v5AmkewAP7jtg==", + "dev": true + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", diff --git a/frontend/package.json b/frontend/package.json index e8c73ca9..5d2f78db 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -35,6 +35,7 @@ "@tabler/icons": "^1.111.0", "@tanstack/react-query": "^4.16.1", "@tanstack/react-query-devtools": "^4.16.1", + "axios": "^1.1.3", "next": "^12.3.3", "react": "^17.0.2", "react-dom": "^17.0.2" @@ -69,12 +70,16 @@ "eslint-plugin-storybook": "^0.6.7", "husky": "^8.0.2", "lint-staged": "^13.0.3", + "msw": "^0.29.0", "prettier": "^2.7.1", "storybook-addon-next": "^1.6.10", "storybook-addon-next-router": "^3.1.1", "typescript": "^4.8.4", "webpack": "^5.75.0" }, + "msw": { + "workerDirectory": "public" + }, "readme": "ERROR: No README data found!", "_id": "frontend@0.1.0" } diff --git a/frontend/public/mockServiceWorker.js b/frontend/public/mockServiceWorker.js new file mode 100644 index 00000000..46014410 --- /dev/null +++ b/frontend/public/mockServiceWorker.js @@ -0,0 +1,323 @@ +/* eslint-disable */ +/* tslint:disable */ + +/** + * Mock Service Worker. + * @see https://github.com/mswjs/msw + * - Please do NOT modify this file. + * - Please do NOT serve this file on production. + */ + +const INTEGRITY_CHECKSUM = '82ef9b96d8393b6da34527d1d6e19187' +const bypassHeaderName = 'x-msw-bypass' +const activeClientIds = new Set() + +self.addEventListener('install', function () { + return self.skipWaiting() +}) + +self.addEventListener('activate', async function (event) { + return self.clients.claim() +}) + +self.addEventListener('message', async function (event) { + const clientId = event.source.id + + if (!clientId || !self.clients) { + return + } + + const client = await self.clients.get(clientId) + + if (!client) { + return + } + + const allClients = await self.clients.matchAll() + + switch (event.data) { + case 'KEEPALIVE_REQUEST': { + sendToClient(client, { + type: 'KEEPALIVE_RESPONSE', + }) + break + } + + case 'INTEGRITY_CHECK_REQUEST': { + sendToClient(client, { + type: 'INTEGRITY_CHECK_RESPONSE', + payload: INTEGRITY_CHECKSUM, + }) + break + } + + case 'MOCK_ACTIVATE': { + activeClientIds.add(clientId) + + sendToClient(client, { + type: 'MOCKING_ENABLED', + payload: true, + }) + break + } + + case 'MOCK_DEACTIVATE': { + activeClientIds.delete(clientId) + break + } + + case 'CLIENT_CLOSED': { + activeClientIds.delete(clientId) + + const remainingClients = allClients.filter((client) => { + return client.id !== clientId + }) + + // Unregister itself when there are no more clients + if (remainingClients.length === 0) { + self.registration.unregister() + } + + break + } + } +}) + +// Resolve the "master" client for the given event. +// Client that issues a request doesn't necessarily equal the client +// that registered the worker. It's with the latter the worker should +// communicate with during the response resolving phase. +async function resolveMasterClient(event) { + const client = await self.clients.get(event.clientId) + + if (client.frameType === 'top-level') { + return client + } + + const allClients = await self.clients.matchAll() + + return allClients + .filter((client) => { + // Get only those clients that are currently visible. + return client.visibilityState === 'visible' + }) + .find((client) => { + // Find the client ID that's recorded in the + // set of clients that have registered the worker. + return activeClientIds.has(client.id) + }) +} + +async function handleRequest(event, requestId) { + const client = await resolveMasterClient(event) + const response = await getResponse(event, client, requestId) + + // Send back the response clone for the "response:*" life-cycle events. + // Ensure MSW is active and ready to handle the message, otherwise + // this message will pend indefinitely. + if (client && activeClientIds.has(client.id)) { + ;(async function () { + const clonedResponse = response.clone() + sendToClient(client, { + type: 'RESPONSE', + payload: { + requestId, + type: clonedResponse.type, + ok: clonedResponse.ok, + status: clonedResponse.status, + statusText: clonedResponse.statusText, + body: + clonedResponse.body === null ? null : await clonedResponse.text(), + headers: serializeHeaders(clonedResponse.headers), + redirected: clonedResponse.redirected, + }, + }) + })() + } + + return response +} + +async function getResponse(event, client, requestId) { + const { request } = event + const requestClone = request.clone() + const getOriginalResponse = () => fetch(requestClone) + + // Bypass mocking when the request client is not active. + if (!client) { + return getOriginalResponse() + } + + // Bypass initial page load requests (i.e. static assets). + // The absence of the immediate/parent client in the map of the active clients + // means that MSW hasn't dispatched the "MOCK_ACTIVATE" event yet + // and is not ready to handle requests. + if (!activeClientIds.has(client.id)) { + return await getOriginalResponse() + } + + // Bypass requests with the explicit bypass header + if (requestClone.headers.get(bypassHeaderName) === 'true') { + const cleanRequestHeaders = serializeHeaders(requestClone.headers) + + // Remove the bypass header to comply with the CORS preflight check. + delete cleanRequestHeaders[bypassHeaderName] + + const originalRequest = new Request(requestClone, { + headers: new Headers(cleanRequestHeaders), + }) + + return fetch(originalRequest) + } + + // Send the request to the client-side MSW. + const reqHeaders = serializeHeaders(request.headers) + const body = await request.text() + + const clientMessage = await sendToClient(client, { + type: 'REQUEST', + payload: { + id: requestId, + url: request.url, + method: request.method, + headers: reqHeaders, + cache: request.cache, + mode: request.mode, + credentials: request.credentials, + destination: request.destination, + integrity: request.integrity, + redirect: request.redirect, + referrer: request.referrer, + referrerPolicy: request.referrerPolicy, + body, + bodyUsed: request.bodyUsed, + keepalive: request.keepalive, + }, + }) + + switch (clientMessage.type) { + case 'MOCK_SUCCESS': { + return delayPromise( + () => respondWithMock(clientMessage), + clientMessage.payload.delay, + ) + } + + case 'MOCK_NOT_FOUND': { + return getOriginalResponse() + } + + case 'NETWORK_ERROR': { + const { name, message } = clientMessage.payload + const networkError = new Error(message) + networkError.name = name + + // Rejecting a request Promise emulates a network error. + throw networkError + } + + case 'INTERNAL_ERROR': { + const parsedBody = JSON.parse(clientMessage.payload.body) + + console.error( + `\ +[MSW] Request handler function for "%s %s" has thrown the following exception: + +${parsedBody.errorType}: ${parsedBody.message} +(see more detailed error stack trace in the mocked response body) + +This exception has been gracefully handled as a 500 response, however, it's strongly recommended to resolve this error. +If you wish to mock an error response, please refer to this guide: https://mswjs.io/docs/recipes/mocking-error-responses\ +`, + request.method, + request.url, + ) + + return respondWithMock(clientMessage) + } + } + + return getOriginalResponse() +} + +self.addEventListener('fetch', function (event) { + const { request } = event + + // Bypass navigation requests. + if (request.mode === 'navigate') { + return + } + + // Opening the DevTools triggers the "only-if-cached" request + // that cannot be handled by the worker. Bypass such requests. + if (request.cache === 'only-if-cached' && request.mode !== 'same-origin') { + return + } + + // Bypass all requests when there are no active clients. + // Prevents the self-unregistered worked from handling requests + // after it's been deleted (still remains active until the next reload). + if (activeClientIds.size === 0) { + return + } + + const requestId = uuidv4() + + return event.respondWith( + handleRequest(event, requestId).catch((error) => { + console.error( + '[MSW] Failed to mock a "%s" request to "%s": %s', + request.method, + request.url, + error, + ) + }), + ) +}) + +function serializeHeaders(headers) { + const reqHeaders = {} + headers.forEach((value, name) => { + reqHeaders[name] = reqHeaders[name] + ? [].concat(reqHeaders[name]).concat(value) + : value + }) + return reqHeaders +} + +function sendToClient(client, message) { + return new Promise((resolve, reject) => { + const channel = new MessageChannel() + + channel.port1.onmessage = (event) => { + if (event.data && event.data.error) { + return reject(event.data.error) + } + + resolve(event.data) + } + + client.postMessage(JSON.stringify(message), [channel.port2]) + }) +} + +function delayPromise(cb, duration) { + return new Promise((resolve) => { + setTimeout(() => resolve(cb()), duration) + }) +} + +function respondWithMock(clientMessage) { + return new Response(clientMessage.payload.body, { + ...clientMessage.payload, + headers: clientMessage.payload.headers, + }) +} + +function uuidv4() { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { + const r = (Math.random() * 16) | 0 + const v = c == 'x' ? r : (r & 0x3) | 0x8 + return v.toString(16) + }) +} diff --git a/frontend/src/apis/test/getTestData.ts b/frontend/src/apis/test/getTestData.ts new file mode 100644 index 00000000..6c85a916 --- /dev/null +++ b/frontend/src/apis/test/getTestData.ts @@ -0,0 +1,9 @@ +import axios from 'axios'; + +const getTestData = async (nextId: number) => { + return axios.get(`http://testServer/test`, { + params: { limit: 5, nextId }, + }); +}; + +export default getTestData; diff --git a/frontend/src/hooks/queries/useFetchTestData.ts b/frontend/src/hooks/queries/useFetchTestData.ts new file mode 100644 index 00000000..f73ac138 --- /dev/null +++ b/frontend/src/hooks/queries/useFetchTestData.ts @@ -0,0 +1,21 @@ +import { useInfiniteQuery } from '@tanstack/react-query'; +import getTestData from '@apis/test/getTestData'; +import { AxiosResponse } from 'axios'; +import { TestResponseType } from '@typings/types'; + +const useFetchTestData = () => { + const { data, fetchNextPage, hasNextPage, isFetching, isError } = useInfiniteQuery( + ['test'], + ({ pageParam = 0 }) => getTestData(pageParam), + { + getNextPageParam: (lastPage: AxiosResponse) => + lastPage.data.isLast ? undefined : lastPage.data.currentId + 1, + } + ); + if (isError) { + // TODO ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๊ณตํ†ต ๋กœ์ง ์ ์šฉ + } + return { data, fetchNextPage, hasNextPage, isFetching }; +}; + +export default useFetchTestData; diff --git a/frontend/src/hooks/useIntersect.ts b/frontend/src/hooks/useIntersect.ts new file mode 100644 index 00000000..4ab6c1cc --- /dev/null +++ b/frontend/src/hooks/useIntersect.ts @@ -0,0 +1,27 @@ +import { useCallback, useEffect, useRef } from 'react'; + +const useIntersect = ( + onIntersect: (entry: IntersectionObserverEntry, observer: IntersectionObserver) => void, + options?: IntersectionObserverInit +) => { + const ref = useRef(null); + const callback = useCallback( + (entries: IntersectionObserverEntry[], observer: IntersectionObserver) => { + entries.forEach((entry) => { + if (entry.isIntersecting) onIntersect(entry, observer); + }); + }, + [onIntersect] + ); + + useEffect(() => { + if (!ref.current) return; + const observer = new IntersectionObserver(callback, options); + observer.observe(ref.current); + return () => observer.disconnect(); + }, [ref, options, callback]); + + return ref; +}; + +export default useIntersect; diff --git a/frontend/src/mocks/browser.ts b/frontend/src/mocks/browser.ts new file mode 100644 index 00000000..750e031c --- /dev/null +++ b/frontend/src/mocks/browser.ts @@ -0,0 +1,4 @@ +import { setupWorker } from 'msw'; +import { handlers } from './handlers'; + +export const worker = setupWorker(...handlers); diff --git a/frontend/src/mocks/handlers.ts b/frontend/src/mocks/handlers.ts new file mode 100644 index 00000000..e3e8730a --- /dev/null +++ b/frontend/src/mocks/handlers.ts @@ -0,0 +1,4 @@ +import { rest } from 'msw'; +import { getTest } from './resolvers/test'; + +export const handlers = [rest.get('http://testServer/test', getTest)]; diff --git a/frontend/src/mocks/index.ts b/frontend/src/mocks/index.ts new file mode 100644 index 00000000..86fbb088 --- /dev/null +++ b/frontend/src/mocks/index.ts @@ -0,0 +1,11 @@ +const initMockApi = async () => { + if (typeof window === 'undefined') { + const { server } = await import('@mocks/server'); + server.listen(); + } else { + const { worker } = await import('@mocks/browser'); + await worker.start(); + } +}; + +export default initMockApi; diff --git a/frontend/src/mocks/resolvers/test.ts b/frontend/src/mocks/resolvers/test.ts new file mode 100644 index 00000000..10bd62cd --- /dev/null +++ b/frontend/src/mocks/resolvers/test.ts @@ -0,0 +1,19 @@ +export const getTest = (req: any, res: any, ctx: any) => { + const { searchParams } = req.url; + const limit = Number(searchParams.get('limit')); + const nextId = Number(searchParams.get('nextId')); + + const totalCount = testData.length; + const totalPages = Math.round(totalCount / limit); + + return res( + ctx.status(200), + ctx.json({ + dataArr: testData.slice(limit * nextId, limit * nextId + limit), + isLast: totalPages - 1 === nextId, + currentId: nextId, + }) + ); +}; + +const testData = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15']; diff --git a/frontend/src/mocks/server.ts b/frontend/src/mocks/server.ts new file mode 100644 index 00000000..e52fee0a --- /dev/null +++ b/frontend/src/mocks/server.ts @@ -0,0 +1,4 @@ +import { setupServer } from 'msw/node'; +import { handlers } from './handlers'; + +export const server = setupServer(...handlers); diff --git a/frontend/src/pages/_app.tsx b/frontend/src/pages/_app.tsx index dd687c3d..552bbd30 100644 --- a/frontend/src/pages/_app.tsx +++ b/frontend/src/pages/_app.tsx @@ -4,10 +4,24 @@ import { QueryClientProvider, QueryClient } from '@tanstack/react-query'; import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; import RouterTransition from '@components/RouterTransition'; import CommonStyles from '@styles/CommonStyles'; +import initMockApi from '@mocks/.'; +import { useEffect, useState } from 'react'; const queryClient = new QueryClient(); export default function App({ Component, pageProps }: AppProps) { + const [shouldRender, setShouldRender] = useState(false); + + useEffect(() => { + void (async () => { + // TODO development์ผ๋•Œ๋งŒ ์‹คํ–‰ + await initMockApi(); + setShouldRender(true); + })(); + }, []); + + if (!shouldRender) return null; + return ( <> diff --git a/frontend/src/pages/test.tsx b/frontend/src/pages/test.tsx new file mode 100644 index 00000000..5c22d7f7 --- /dev/null +++ b/frontend/src/pages/test.tsx @@ -0,0 +1,50 @@ +import { useMemo } from 'react'; +import styled from '@emotion/styled'; +import useIntersect from '@hooks/useIntersect'; +import PageLayout from '@components/common/PageLayout'; +import useFetchTestData from '@hooks/queries/useFetchTestData'; + +const Test = () => { + const { data, fetchNextPage, hasNextPage, isFetching } = useFetchTestData(); + + const testData = useMemo( + () => (data ? data.pages.flatMap(({ data }) => data.dataArr) : []), + [data] + ); + + const ref = useIntersect((entry, observer) => { + observer.unobserve(entry.target); + if (hasNextPage && !isFetching) { + void fetchNextPage(); + } + }); + + return ( + + {testData.map((data, index) => ( + {data} + ))} +
    +
    + ); +}; + +const TestDiv = styled.div` + height: 300px; +`; + +// TODO SSR ์ ์šฉ +// export const getServerSideProps = async () => { +// console.log('hesr'); +// const queryClient = new QueryClient(); +// await queryClient.prefetchInfiniteQuery(['test'], async () => await getTestData(0), { +// staleTime: 1000, +// }); +// return { +// props: { +// dehydratedState: JSON.parse(JSON.stringify(dehydrate(queryClient))), +// }, +// }; +// }; + +export default Test; diff --git a/frontend/src/typings/types.ts b/frontend/src/typings/types.ts index 90106911..1e164d35 100644 --- a/frontend/src/typings/types.ts +++ b/frontend/src/typings/types.ts @@ -25,4 +25,10 @@ interface CategoryType { name: string; } -export type { ArticleType, LocationType, CategoryType }; +interface TestResponseType { + dataArr: string[]; + isLast: boolean; + currentId: number; +} + +export type { ArticleType, LocationType, CategoryType, TestResponseType }; diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json index b50374d7..90f0745e 100644 --- a/frontend/tsconfig.json +++ b/frontend/tsconfig.json @@ -12,7 +12,6 @@ "moduleResolution": "node", "noEmit": true, "noFallthroughCasesInSwitch": true, - "noImplicitReturns": true, "pretty": true, "resolveJsonModule": true, "skipLibCheck": true, @@ -27,6 +26,9 @@ "@pages/*": ["src/pages/*"], "@styles/*": ["src/styles/*"], "@typings/*": ["src/typings/*"], + "@hooks/*": ["src/hooks/*"], + "@apis/*": ["src/apis/*"], + "@mocks/*": ["src/mocks/*"], "@public/*": ["public/*"], "@constants/*": ["src/constants/*"] } From b7cf8c040bed3217a3654432c521b2567184d8ef Mon Sep 17 00:00:00 2001 From: yangseungchan Date: Thu, 24 Nov 2022 11:23:33 +0900 Subject: [PATCH 021/142] =?UTF-8?q?[Feature]=20PageLayout=20=EC=88=98?= =?UTF-8?q?=EC=A0=95,=20FloatingButton=20=EA=B0=9C=ED=8E=B8=20(#59)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ๐Ÿฅ… chore: frontend ci ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ • * :recycle: refactor: FAB ์ปดํฌ๋„ŒํŠธ ๋ฆฌํŒฉํ† ๋ง ํšŒ์ „ ํšจ๊ณผ ๋Œ€์ƒ ๋ณ€๊ฒฝ, FAB์˜ props ์—๋Ÿฌ ์ˆ˜์ • * โ™ป๏ธ refactor: PageLayout ์ปดํฌ๋„ŒํŠธ ๋ฆฌํŒฉํ† ๋ง * ๐Ÿ› fix: pageLayout ์Šคํฌ๋กค ๋ฒ„๊ทธ ์ˆ˜์ • * ๐Ÿฅ… chore: FAB ์Šคํƒ€์ผ๋ง ์ˆ˜์ • * ๐Ÿฅ… chore: ์ปดํฌ๋„ŒํŠธ๋“ค์˜ ํด๋” ์œ„์น˜ ๋ณ€๊ฒฝ * โ™ป๏ธ refactor: FAB ํšŒ์ „ ์—ฌ๋ถ€๋ฅผ boolean attribute๋กœ ์ „๋‹ฌํ•˜๋„๋ก ์ˆ˜์ • * :recycle: refactor: FAB์˜ UI๋กœ์ง๊ณผ ๋‹ค๋ฅธ ๋กœ์ง ๋ถ„๋ฆฌ๋ฅผ ์œ„ํ•œ ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ PageUtilButton ์ถ”๊ฐ€, FloatingButton ๋ฆฌํŒฉํ† ๋ง * โ™ป๏ธ refactor: UserLoginItem ์ถ”๊ฐ€, Header story ๋ณ€๊ฒฝ * โ™ป๏ธ refactor: PageLayout ์ปดํฌ๋„ŒํŠธ ๋ฆฌํŒฉํ† ๋ง ๋ฐ ์Šคํ† ๋ฆฌ ์ž‘์„ฑ * ๐Ÿฅ… chore: PageUtilButton -> FloatingUtilButton ์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: ์ปดํฌ๋„ŒํŠธ๋“ค์˜ ์Šคํ† ๋ฆฌ ์ˆ˜์ • * ๐Ÿ› fix: content ๋ถ€๋ถ„์ด ํŽ˜์ด์ง€ ์—ฌ๋ฐฑ์„ ๊ฝ‰์ฑ„์šฐ๋„๋ก ์ˆ˜์ • * ๐Ÿฅ… chore: ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ ํŽ˜์ด์ง€ ์ด๋™ ๋กœ์ง ์ถ”๊ฐ€ * ๐Ÿฅ… chore: ์ปดํฌ๋„ŒํŠธ ์ด๋ฆ„์„ FloatingUtillButton์œผ๋กœ ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: ๊ฒŒ์‹œ๊ธ€ ์“ฐ๊ธฐํŽ˜์ด์ง€ ๊ฒฝ๋กœ ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: PageLayout props ์ด๋ฆ„ ๋ณ€๊ฒฝ --- .github/workflows/frontend-ci.yml | 8 +- .../FloatingButton/FloatingButton.stories.tsx | 70 ------------- .../src/components/FloatingButton/styles.tsx | 19 ---- .../FloatingButton/FloatingButton.stories.tsx | 33 +++++++ .../{ => common}/FloatingButton/index.tsx | 12 ++- .../common/FloatingButton/styles.tsx | 25 +++++ .../FloatingUtilButton.stories.tsx | 45 +++++++++ .../common/FloatingUtilButton/index.tsx | 44 +++++++++ .../{ => common}/Footer/Footer.stories.tsx | 0 .../components/{ => common}/Footer/index.tsx | 4 +- .../DetailTitle/DetailTitle.stories.tsx | 0 .../{ => common}/Header/DetailTitle/index.tsx | 0 .../Header/DetailTitle/styles.tsx | 0 .../{ => common}/Header/Header.stories.tsx | 32 ++---- .../LoginButton/LoginButton.stories.tsx | 0 .../{ => common}/Header/LoginButton/index.tsx | 0 .../Header/RootTitle/RootTitle.stories.tsx | 0 .../{ => common}/Header/RootTitle/index.tsx | 2 +- .../{ => common}/Header/RootTitle/styles.tsx | 0 .../common/Header/UserLoginItem/index.tsx | 27 ++++++ .../Header/UtilButton/UtilButton.stories.tsx | 0 .../{ => common}/Header/UtilButton/index.tsx | 0 .../components/{ => common}/Header/index.tsx | 2 +- .../components/{ => common}/Header/styles.tsx | 7 +- frontend/src/components/common/PageLayout.tsx | 33 ------- .../common/PageLayout/PageLayout.stories.tsx | 97 +++++++++++++++++++ .../components/common/PageLayout/index.tsx | 41 ++++++++ frontend/src/pages/My.tsx | 2 +- frontend/src/pages/Notification.tsx | 2 +- frontend/src/pages/article/write/index.tsx | 13 +++ frontend/src/pages/index.tsx | 24 ++++- frontend/src/styles/utils.ts | 7 ++ 32 files changed, 387 insertions(+), 162 deletions(-) delete mode 100644 frontend/src/components/FloatingButton/FloatingButton.stories.tsx delete mode 100644 frontend/src/components/FloatingButton/styles.tsx create mode 100644 frontend/src/components/common/FloatingButton/FloatingButton.stories.tsx rename frontend/src/components/{ => common}/FloatingButton/index.tsx (79%) create mode 100644 frontend/src/components/common/FloatingButton/styles.tsx create mode 100644 frontend/src/components/common/FloatingUtilButton/FloatingUtilButton.stories.tsx create mode 100644 frontend/src/components/common/FloatingUtilButton/index.tsx rename frontend/src/components/{ => common}/Footer/Footer.stories.tsx (100%) rename frontend/src/components/{ => common}/Footer/index.tsx (94%) rename frontend/src/components/{ => common}/Header/DetailTitle/DetailTitle.stories.tsx (100%) rename frontend/src/components/{ => common}/Header/DetailTitle/index.tsx (100%) rename frontend/src/components/{ => common}/Header/DetailTitle/styles.tsx (100%) rename frontend/src/components/{ => common}/Header/Header.stories.tsx (78%) rename frontend/src/components/{ => common}/Header/LoginButton/LoginButton.stories.tsx (100%) rename frontend/src/components/{ => common}/Header/LoginButton/index.tsx (100%) rename frontend/src/components/{ => common}/Header/RootTitle/RootTitle.stories.tsx (100%) rename frontend/src/components/{ => common}/Header/RootTitle/index.tsx (82%) rename frontend/src/components/{ => common}/Header/RootTitle/styles.tsx (100%) create mode 100644 frontend/src/components/common/Header/UserLoginItem/index.tsx rename frontend/src/components/{ => common}/Header/UtilButton/UtilButton.stories.tsx (100%) rename frontend/src/components/{ => common}/Header/UtilButton/index.tsx (100%) rename frontend/src/components/{ => common}/Header/index.tsx (86%) rename frontend/src/components/{ => common}/Header/styles.tsx (63%) delete mode 100644 frontend/src/components/common/PageLayout.tsx create mode 100644 frontend/src/components/common/PageLayout/PageLayout.stories.tsx create mode 100644 frontend/src/components/common/PageLayout/index.tsx create mode 100644 frontend/src/pages/article/write/index.tsx create mode 100644 frontend/src/styles/utils.ts diff --git a/.github/workflows/frontend-ci.yml b/.github/workflows/frontend-ci.yml index a15150a0..60ba3b1a 100644 --- a/.github/workflows/frontend-ci.yml +++ b/.github/workflows/frontend-ci.yml @@ -10,7 +10,7 @@ on: - './github/workflows/slack-notification.yml' jobs: - CI: + checking: runs-on: ubuntu-latest defaults: run: @@ -38,7 +38,7 @@ jobs: run: working-directory: './frontend' outputs: - status: ${{ steps.chromatic.outputs.storybookUrl }} + status: ${{ job.status }} steps: - name: checkout uses: actions/checkout@v3 @@ -172,12 +172,12 @@ jobs: msg: ${{ steps.format_lighthouse_score.outputs.comments }} slack-notifications: - needs: [CI, lhci, storybook] + needs: [checking, lhci, storybook] if: ${{ always() }} uses: ./.github/workflows/slack-notification.yml with: title: ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์šฉ CI - status: 'CI : ${{ needs.CI.outputs.status }} && lhci : ${{ needs.lhci.outputs.status }} && storybook : ${{ needs.storybook.outputs.status }}' + status: 'checking : ${{ needs.checking.outputs.status }} && lhci : ${{ needs.lhci.outputs.status }} && storybook : ${{ needs.storybook.outputs.status }}' commit_url: ${{ github.event.pull_request.html_url || github.event.head_commit.url }} secrets: webhook_url: ${{ secrets.SLACK_NOTIFICATION_WEBHOOK_URL }} diff --git a/frontend/src/components/FloatingButton/FloatingButton.stories.tsx b/frontend/src/components/FloatingButton/FloatingButton.stories.tsx deleted file mode 100644 index 844a521c..00000000 --- a/frontend/src/components/FloatingButton/FloatingButton.stories.tsx +++ /dev/null @@ -1,70 +0,0 @@ -import FloatingButton from '.'; -import { ComponentMeta, ComponentStory } from '@storybook/react'; -import { userEvent, within } from '@storybook/testing-library'; -import PageLayout from '@components/common/PageLayout'; -import { Chip, Menu, Text } from '@mantine/core'; -import { IconArrowAutofitUp, IconPencil } from '@tabler/icons'; - -export default { - title: 'Component/FloatingButton', - component: FloatingButton, -} as ComponentMeta; - -const FloatingItemChildren = () => ( - <> - }> - - ์ƒ๋‹จ์œผ๋กœ ์ด๋™ - - - }> - - ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ - - - -); - -const DefaultTemplate: ComponentStory = (args) => ( - - - -); - -const OverflowTemplate: ComponentStory = (args) => ( - - {Array.from({ length: 100 }) - .fill(0) - .map((_, i) => ( - - Awesome chip - - ))} - - -); - -export const Default = DefaultTemplate.bind({}); -Default.args = { - children: , -}; - -export const Clicked = DefaultTemplate.bind({}); -Clicked.args = { - children: , -}; -Clicked.play = async ({ canvasElement }) => { - const canvas = within(canvasElement); - const button = await canvas.findByRole('button'); - userEvent.click(button); -}; - -export const InOverflowPage = OverflowTemplate.bind({}); -InOverflowPage.args = { - children: , -}; -InOverflowPage.play = async ({ canvasElement }) => { - const canvas = within(canvasElement); - const button = await canvas.findByRole('button'); - userEvent.click(button); -}; diff --git a/frontend/src/components/FloatingButton/styles.tsx b/frontend/src/components/FloatingButton/styles.tsx deleted file mode 100644 index bd4c21f0..00000000 --- a/frontend/src/components/FloatingButton/styles.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import styled from '@emotion/styled'; -import { ActionIcon, ActionIconProps, createPolymorphicComponent } from '@mantine/core'; - -interface FABWrapperProps extends ActionIconProps { - opened: boolean; -} - -// https://mantine.dev/styles/styled/#polymorphic-components -const _FABWrapper = styled(ActionIcon)<{ opened: boolean }>` - position: fixed; - bottom: 7.2rem; - right: 1.6rem; - transition: transform 0.2s ease-in-out; - ${({ opened }) => opened && `transform: rotate(45deg);`} -`; - -const FABWrapper = createPolymorphicComponent<'button', FABWrapperProps>(_FABWrapper); - -export { FABWrapper }; diff --git a/frontend/src/components/common/FloatingButton/FloatingButton.stories.tsx b/frontend/src/components/common/FloatingButton/FloatingButton.stories.tsx new file mode 100644 index 00000000..fbe75ea2 --- /dev/null +++ b/frontend/src/components/common/FloatingButton/FloatingButton.stories.tsx @@ -0,0 +1,33 @@ +import { ComponentMeta, ComponentStory } from '@storybook/react'; +import { userEvent, within } from '@storybook/testing-library'; + +import FloatingButton from '.'; +import PageLayout from '@components/common/PageLayout'; +import Header from '@components/common/Header'; +import DetailTitle from '@components/common/Header/DetailTitle'; + +export default { + title: 'Component/FloatingButton', + component: FloatingButton, +} as ComponentMeta; + +const SampleHeader = () => ( +
    } /> +); + +const DefaultTemplate: ComponentStory = (args) => ( + } hasFooter> + + +); + +export const Default = DefaultTemplate.bind({}); +Default.args = {}; + +export const Clicked = DefaultTemplate.bind({}); +Clicked.args = {}; +Clicked.play = async ({ canvasElement }) => { + const canvas = within(canvasElement); + const buttons = await canvas.findAllByRole('button'); + userEvent.click(buttons[1]); +}; diff --git a/frontend/src/components/FloatingButton/index.tsx b/frontend/src/components/common/FloatingButton/index.tsx similarity index 79% rename from frontend/src/components/FloatingButton/index.tsx rename to frontend/src/components/common/FloatingButton/index.tsx index 982325c4..37615cda 100644 --- a/frontend/src/components/FloatingButton/index.tsx +++ b/frontend/src/components/common/FloatingButton/index.tsx @@ -1,15 +1,18 @@ import { useState, ReactNode } from 'react'; import { Menu } from '@mantine/core'; import { useClickOutside } from '@mantine/hooks'; -import { IconPlus } from '@tabler/icons'; -import { FABWrapper } from './styles'; +import { FABWrapper, StyledIconPlus } from './styles'; + +/** + * FloatingButton์˜ ์ž์ฒด์˜ UI ๋กœ์ง๋งŒ ์ •์˜ํ•œ ์ปดํฌ๋„ŒํŠธ + */ interface Props { /** * ํ”Œ๋กœํŒ… ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ๋‚˜์˜ค๋Š” ์š”์†Œ๋“ค์„ ๋„ฃ๋Š”๋‹ค. */ - children: ReactNode; + children?: ReactNode; } const FloatingButton = ({ children }: Props) => { @@ -25,10 +28,9 @@ const FloatingButton = ({ children }: Props) => { radius="xl" size={48} onClick={() => setOpened((o) => !o)} - opened={opened} ref={ref} > - + {children} diff --git a/frontend/src/components/common/FloatingButton/styles.tsx b/frontend/src/components/common/FloatingButton/styles.tsx new file mode 100644 index 00000000..6329c3b9 --- /dev/null +++ b/frontend/src/components/common/FloatingButton/styles.tsx @@ -0,0 +1,25 @@ +import { IconPlus } from '@tabler/icons'; +import styled from '@emotion/styled'; +import { ActionIcon, ActionIconProps, createPolymorphicComponent } from '@mantine/core'; +import { transientOptions } from '@styles/utils'; + +// https://mantine.dev/styles/styled/#polymorphic-components +const _FABWrapper = styled(ActionIcon)` + position: fixed; + bottom: 7.2rem; + right: 1.6rem; + z-index: 100; +`; + +const FABWrapper = createPolymorphicComponent<'button', ActionIconProps>(_FABWrapper); + +interface StyledIconPlusProps { + $opened: boolean; +} + +const StyledIconPlus = styled(IconPlus, transientOptions)` + transition: transform 0.2s ease-in-out; + ${({ $opened }) => $opened && `transform: rotate(45deg);`} +`; + +export { FABWrapper, StyledIconPlus }; diff --git a/frontend/src/components/common/FloatingUtilButton/FloatingUtilButton.stories.tsx b/frontend/src/components/common/FloatingUtilButton/FloatingUtilButton.stories.tsx new file mode 100644 index 00000000..81f00f91 --- /dev/null +++ b/frontend/src/components/common/FloatingUtilButton/FloatingUtilButton.stories.tsx @@ -0,0 +1,45 @@ +import { ComponentMeta, ComponentStory } from '@storybook/react'; +import { userEvent, within } from '@storybook/testing-library'; + +import FloatingUtilButton from '.'; +import PageLayout from '@components/common/PageLayout'; +import Header from '@components/common/Header'; +import DetailTitle from '@components/common/Header/DetailTitle'; + +export default { + title: 'Component/FloatingUtilButton', + component: FloatingUtilButton, + argTypes: { + authorized: { + description: '๋กœ๊ทธ์ธ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.', + control: { + type: 'boolean', + }, + }, + }, +} as ComponentMeta; + +const SampleHeader = () => ( +
    } /> +); + +const DefaultTemplate: ComponentStory = (args) => ( + } hasFooter> + + +); + +export const Default = DefaultTemplate.bind({}); +Default.args = { + authorized: true, +}; + +export const Clicked = DefaultTemplate.bind({}); +Clicked.args = { + authorized: true, +}; +Clicked.play = async ({ canvasElement }) => { + const canvas = within(canvasElement); + const buttons = await canvas.findAllByRole('button'); + userEvent.click(buttons[1]); +}; diff --git a/frontend/src/components/common/FloatingUtilButton/index.tsx b/frontend/src/components/common/FloatingUtilButton/index.tsx new file mode 100644 index 00000000..b51e1c3a --- /dev/null +++ b/frontend/src/components/common/FloatingUtilButton/index.tsx @@ -0,0 +1,44 @@ +import { Menu, Text } from '@mantine/core'; +import { IconArrowAutofitUp, IconPencil } from '@tabler/icons'; +import Link from 'next/link'; +import FloatingButton from '@components/common/FloatingButton'; + +/** + * FloatingButton๊ณผ + * FloatingButton์„ ๋ˆŒ๋ €์„ ๋•Œ ๋‚˜์˜ค๋Š” Item๋“ค + * Item ๋ณ„๋กœ ํ•„์š”ํ•œ ๋กœ์ง๋“ค์„ ์ •์˜ํ•œ๋‹ค. + */ +interface Props { + /** + * ์œ ์ € ์ธ์ฆ ์—ฌ๋ถ€๋ฅผ ๋„˜๊ฒจ์ค€๋‹ค. + * (userQuery ๋ถ™์ด๋ฉด ์ง€์šฐ์ž) + */ + authorized?: boolean; +} + +const FloatingUtilButton = ({ authorized = false }: Props) => { + return ( + + } + onClick={() => window.scrollTo({ top: 0, behavior: 'smooth' })} + > + + ์ƒ๋‹จ์œผ๋กœ ์ด๋™ + + + {authorized && ( + + }> + + ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ + + + + )} + + ); +}; + +export default FloatingUtilButton; diff --git a/frontend/src/components/Footer/Footer.stories.tsx b/frontend/src/components/common/Footer/Footer.stories.tsx similarity index 100% rename from frontend/src/components/Footer/Footer.stories.tsx rename to frontend/src/components/common/Footer/Footer.stories.tsx diff --git a/frontend/src/components/Footer/index.tsx b/frontend/src/components/common/Footer/index.tsx similarity index 94% rename from frontend/src/components/Footer/index.tsx rename to frontend/src/components/common/Footer/index.tsx index 869846f6..6ec352ab 100644 --- a/frontend/src/components/Footer/index.tsx +++ b/frontend/src/components/common/Footer/index.tsx @@ -31,8 +31,10 @@ const Footer = () => { ); }; -const FooterWrapper = styled.div` +const FooterWrapper = styled.footer` display: flex; + position: sticky; + bottom: 0; width: 100%; height: 5.6rem; justify-content: space-between; diff --git a/frontend/src/components/Header/DetailTitle/DetailTitle.stories.tsx b/frontend/src/components/common/Header/DetailTitle/DetailTitle.stories.tsx similarity index 100% rename from frontend/src/components/Header/DetailTitle/DetailTitle.stories.tsx rename to frontend/src/components/common/Header/DetailTitle/DetailTitle.stories.tsx diff --git a/frontend/src/components/Header/DetailTitle/index.tsx b/frontend/src/components/common/Header/DetailTitle/index.tsx similarity index 100% rename from frontend/src/components/Header/DetailTitle/index.tsx rename to frontend/src/components/common/Header/DetailTitle/index.tsx diff --git a/frontend/src/components/Header/DetailTitle/styles.tsx b/frontend/src/components/common/Header/DetailTitle/styles.tsx similarity index 100% rename from frontend/src/components/Header/DetailTitle/styles.tsx rename to frontend/src/components/common/Header/DetailTitle/styles.tsx diff --git a/frontend/src/components/Header/Header.stories.tsx b/frontend/src/components/common/Header/Header.stories.tsx similarity index 78% rename from frontend/src/components/Header/Header.stories.tsx rename to frontend/src/components/common/Header/Header.stories.tsx index 2fd367a3..d3daa261 100644 --- a/frontend/src/components/Header/Header.stories.tsx +++ b/frontend/src/components/common/Header/Header.stories.tsx @@ -1,13 +1,13 @@ -import { Avatar, Menu, Text } from '@mantine/core'; +import { Menu, Text } from '@mantine/core'; import { ComponentMeta, ComponentStory } from '@storybook/react'; import { within, userEvent } from '@storybook/testing-library'; import Header from '.'; +import UserLoginItem from '@components/common/Header/UserLoginItem'; import Logo from '@public/icons/logo-md.svg'; -import LoginButton from '@components/Header/LoginButton'; -import RootTitle from '@components/Header/RootTitle'; -import DetailTitle from '@components/Header/DetailTitle'; -import UtilButton from '@components/Header/UtilButton'; +import RootTitle from '@components/common/Header/RootTitle'; +import DetailTitle from '@components/common/Header/DetailTitle'; +import UtilButton from '@components/common/Header/UtilButton'; export default { title: 'Component/Header', @@ -19,39 +19,25 @@ const Template: ComponentStory = (args) =>
    ; export const HomeRootNotLogin = Template.bind({}); HomeRootNotLogin.args = { leftNode: , - rightNode: , + rightNode: , }; export const HomeRootLogin = Template.bind({}); HomeRootLogin.args = { leftNode: , - rightNode: ( - - ), + rightNode: , }; export const OtherRootLogin = Template.bind({}); OtherRootLogin.args = { leftNode: , - rightNode: ( - - ), + rightNode: , }; export const OtherRootNotLogin = Template.bind({}); OtherRootNotLogin.args = { leftNode: , - rightNode: , + rightNode: , }; export const DetailPlain = Template.bind({}); diff --git a/frontend/src/components/Header/LoginButton/LoginButton.stories.tsx b/frontend/src/components/common/Header/LoginButton/LoginButton.stories.tsx similarity index 100% rename from frontend/src/components/Header/LoginButton/LoginButton.stories.tsx rename to frontend/src/components/common/Header/LoginButton/LoginButton.stories.tsx diff --git a/frontend/src/components/Header/LoginButton/index.tsx b/frontend/src/components/common/Header/LoginButton/index.tsx similarity index 100% rename from frontend/src/components/Header/LoginButton/index.tsx rename to frontend/src/components/common/Header/LoginButton/index.tsx diff --git a/frontend/src/components/Header/RootTitle/RootTitle.stories.tsx b/frontend/src/components/common/Header/RootTitle/RootTitle.stories.tsx similarity index 100% rename from frontend/src/components/Header/RootTitle/RootTitle.stories.tsx rename to frontend/src/components/common/Header/RootTitle/RootTitle.stories.tsx diff --git a/frontend/src/components/Header/RootTitle/index.tsx b/frontend/src/components/common/Header/RootTitle/index.tsx similarity index 82% rename from frontend/src/components/Header/RootTitle/index.tsx rename to frontend/src/components/common/Header/RootTitle/index.tsx index 880237fb..8e549c5f 100644 --- a/frontend/src/components/Header/RootTitle/index.tsx +++ b/frontend/src/components/common/Header/RootTitle/index.tsx @@ -1,5 +1,5 @@ import { Title, Text } from '@mantine/core'; -import { RootTitleWrapper } from '@components/Header/RootTitle/styles'; +import { RootTitleWrapper } from '@components/common/Header/RootTitle/styles'; interface Props { title: string; diff --git a/frontend/src/components/Header/RootTitle/styles.tsx b/frontend/src/components/common/Header/RootTitle/styles.tsx similarity index 100% rename from frontend/src/components/Header/RootTitle/styles.tsx rename to frontend/src/components/common/Header/RootTitle/styles.tsx diff --git a/frontend/src/components/common/Header/UserLoginItem/index.tsx b/frontend/src/components/common/Header/UserLoginItem/index.tsx new file mode 100644 index 00000000..45390a0d --- /dev/null +++ b/frontend/src/components/common/Header/UserLoginItem/index.tsx @@ -0,0 +1,27 @@ +import LoginButton from '@components/common/Header/LoginButton'; +import { Avatar } from '@mantine/core'; + +/** + * ๋กœ๊ทธ์ธ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜์—ฌ + * ์•„๋ฐ”ํƒ€๋ฅผ ๋ Œ๋”๋งํ•˜๊ฑฐ๋‚˜ ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์„ ๋ Œ๋”๋ง + */ + +const UserLoginItem = ({ authorized = false }: { authorized?: boolean }) => { + /** + * TODO + * query๋กœ user ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์™€์„œ ๋กœ๊ทธ์ธํ–ˆ๋Š”์ง€ ์•ˆํ–ˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•œ๋‹ค. + * query๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด props๋กœ ๋กœ๊ทธ์ธ ์—ฌ๋ถ€๋ฅผ ๋ฐ›๋Š” ๊ฑด ์ œ๊ฑฐํ•œ๋‹ค. + */ + return authorized ? ( + + ) : ( + + ); +}; + +export default UserLoginItem; diff --git a/frontend/src/components/Header/UtilButton/UtilButton.stories.tsx b/frontend/src/components/common/Header/UtilButton/UtilButton.stories.tsx similarity index 100% rename from frontend/src/components/Header/UtilButton/UtilButton.stories.tsx rename to frontend/src/components/common/Header/UtilButton/UtilButton.stories.tsx diff --git a/frontend/src/components/Header/UtilButton/index.tsx b/frontend/src/components/common/Header/UtilButton/index.tsx similarity index 100% rename from frontend/src/components/Header/UtilButton/index.tsx rename to frontend/src/components/common/Header/UtilButton/index.tsx diff --git a/frontend/src/components/Header/index.tsx b/frontend/src/components/common/Header/index.tsx similarity index 86% rename from frontend/src/components/Header/index.tsx rename to frontend/src/components/common/Header/index.tsx index 0ca6a0d0..e2183cd7 100644 --- a/frontend/src/components/Header/index.tsx +++ b/frontend/src/components/common/Header/index.tsx @@ -1,5 +1,5 @@ import { ReactNode } from 'react'; -import { HeaderWrapper } from '@components/Header/styles'; +import { HeaderWrapper } from '@components/common/Header/styles'; interface Props { /** diff --git a/frontend/src/components/Header/styles.tsx b/frontend/src/components/common/Header/styles.tsx similarity index 63% rename from frontend/src/components/Header/styles.tsx rename to frontend/src/components/common/Header/styles.tsx index bdce1ca1..b9d08418 100644 --- a/frontend/src/components/Header/styles.tsx +++ b/frontend/src/components/common/Header/styles.tsx @@ -1,12 +1,15 @@ import styled from '@emotion/styled'; -const HeaderWrapper = styled.div` +const HeaderWrapper = styled.header` + position: sticky; + top: 0; + width: 100%; display: flex; justify-content: space-between; align-items: center; padding: 0 1.6rem; height: 6.4rem; - background-color: ${({ theme }) => theme.colors.white}; + background-color: ${({ theme }) => theme.white}; box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.1); `; diff --git a/frontend/src/components/common/PageLayout.tsx b/frontend/src/components/common/PageLayout.tsx deleted file mode 100644 index 621cacc4..00000000 --- a/frontend/src/components/common/PageLayout.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import Footer from '@components/Footer'; -import { PropsWithChildren } from 'react'; -import styled from '@emotion/styled'; - -interface Props extends PropsWithChildren { - footer?: boolean; -} - -const PageLayout = ({ footer, children }: Props) => { - return ( - -
    header
    - {children} - {footer &&
    } - - ); -}; - -const PageWrapper = styled.div` - display: flex; - flex-direction: column; - height: 100vh; - align-items: center; - gap: 0.5rem; -`; - -const ContentWrapper = styled.div` - width: 100%; - height: 100%; - overflow: auto; -`; - -export default PageLayout; diff --git a/frontend/src/components/common/PageLayout/PageLayout.stories.tsx b/frontend/src/components/common/PageLayout/PageLayout.stories.tsx new file mode 100644 index 00000000..ebf37202 --- /dev/null +++ b/frontend/src/components/common/PageLayout/PageLayout.stories.tsx @@ -0,0 +1,97 @@ +import { ComponentMeta, ComponentStory } from '@storybook/react'; +import { Menu, Text } from '@mantine/core'; + +import PageLayout from '.'; +import Header from '@components/common/Header'; +import RootTitle from '@components/common/Header/RootTitle'; +import UserLoginItem from '@components/common/Header/UserLoginItem'; +import DetailTitle from '@components/common/Header/DetailTitle'; +import UtilButton from '@components/common/Header/UtilButton'; + +export default { + title: 'Component/Layout/PageLayout', + component: PageLayout, +} as ComponentMeta; + +const Template: ComponentStory = (args) => ; + +export const RootPageLayout = Template.bind({}); +RootPageLayout.args = { + hasFooter: true, + hasFloatingUtil: true, + header: ( +
    } + rightNode={} + /> + ), +}; + +export const DetailPageLayout = Template.bind({}); +DetailPageLayout.args = { + hasFooter: false, + hasFloatingUtil: false, + header: ( +
    } + rightNode={ + + + + ๋กœ๊ทธ์•„์›ƒ + + + + + ์ด๋ฆ„์ด ์—„์ฒญ ๊ธด๊ฑฐ + + + + } + /> + ), +}; + +export const PageLayoutInOverflow = Template.bind({}); +PageLayoutInOverflow.args = { + hasFooter: true, + hasFloatingUtil: true, + header: ( +
    } + rightNode={ + + + + ๋กœ๊ทธ์•„์›ƒ + + + + + ์ด๋ฆ„์ด ์—„์ฒญ ๊ธด๊ฑฐ + + + + } + /> + ), + children: ( + <> +
    +
    +
    +
    +
    + + ), +}; diff --git a/frontend/src/components/common/PageLayout/index.tsx b/frontend/src/components/common/PageLayout/index.tsx new file mode 100644 index 00000000..40122c72 --- /dev/null +++ b/frontend/src/components/common/PageLayout/index.tsx @@ -0,0 +1,41 @@ +import { ReactNode, PropsWithChildren } from 'react'; +import styled from '@emotion/styled'; +import FloatingUtilButton from '@components/common/FloatingUtilButton'; + +import Footer from '@components/common/Footer'; + +interface Props extends PropsWithChildren { + header?: ReactNode; + hasFooter?: boolean; + hasFloatingUtil?: boolean; +} + +const PageLayout = ({ header, hasFooter, hasFloatingUtil, children }: Props) => { + return ( + + {header} + + {children} + {hasFloatingUtil && } + + {hasFooter &&
    } + + ); +}; + +const PageWrapper = styled.div` + width: 100%; + height: 100%; + min-height: 100vh; + position: relative; + display: flex; + flex-direction: column; +`; + +const ContentWrapper = styled.div` + width: 100%; + height: 100%; + flex: 1; +`; + +export default PageLayout; diff --git a/frontend/src/pages/My.tsx b/frontend/src/pages/My.tsx index 98725e40..f244c4ca 100644 --- a/frontend/src/pages/My.tsx +++ b/frontend/src/pages/My.tsx @@ -1,7 +1,7 @@ import PageLayout from '@components/common/PageLayout'; const My = () => { - return my page; + return my page; }; export default My; diff --git a/frontend/src/pages/Notification.tsx b/frontend/src/pages/Notification.tsx index 3ab5c79e..8823f386 100644 --- a/frontend/src/pages/Notification.tsx +++ b/frontend/src/pages/Notification.tsx @@ -1,7 +1,7 @@ import PageLayout from '@components/common/PageLayout'; const Notification = () => { - return notification page; + return notification page; }; export default Notification; diff --git a/frontend/src/pages/article/write/index.tsx b/frontend/src/pages/article/write/index.tsx new file mode 100644 index 00000000..8ee3a543 --- /dev/null +++ b/frontend/src/pages/article/write/index.tsx @@ -0,0 +1,13 @@ +import PageLayout from '@components/common/PageLayout'; +import Header from '@components/common/Header'; +import DetailTitle from '@components/common/Header/DetailTitle'; + +const WritePage = () => { + return ( + +
    } /> + + ); +}; + +export default WritePage; diff --git a/frontend/src/pages/index.tsx b/frontend/src/pages/index.tsx index 1f131fc9..bff6afcf 100644 --- a/frontend/src/pages/index.tsx +++ b/frontend/src/pages/index.tsx @@ -1,7 +1,29 @@ import PageLayout from '@components/common/PageLayout'; +import Header from '@components/common/Header'; +import DetailTitle from '@components/common/Header/DetailTitle'; + +import { Chip } from '@mantine/core'; const Main = () => { - return my page; + return ( + } + /> + } + hasFooter + hasFloatingUtil + > + {Array.from({ length: 100 }) + .fill(0) + .map((_, i) => ( + + Awesome chip + + ))} + + ); }; export default Main; diff --git a/frontend/src/styles/utils.ts b/frontend/src/styles/utils.ts new file mode 100644 index 00000000..7615e9c5 --- /dev/null +++ b/frontend/src/styles/utils.ts @@ -0,0 +1,7 @@ +import { CreateStyled } from '@emotion/styled'; + +const transientOptions: Parameters[1] = { + shouldForwardProp: (propName: string) => !propName.startsWith('$'), +}; + +export { transientOptions }; From 4a6f6babdd2ae8453b318884ab27f86e1d6100ff Mon Sep 17 00:00:00 2001 From: MinGyeong Park <37508296+kong430@users.noreply.github.com> Date: Thu, 24 Nov 2022 11:57:27 +0900 Subject: [PATCH 022/142] =?UTF-8?q?[Feature]=20=EB=AA=A8=EC=A7=91=20?= =?UTF-8?q?=EA=B2=8C=EC=8B=9C=EA=B8=80=20=EC=83=81=EC=84=B8=EB=B3=B4?= =?UTF-8?q?=EA=B8=B0=20=ED=8E=98=EC=9D=B4=EC=A7=80=20=EB=A7=88=ED=81=AC?= =?UTF-8?q?=EC=97=85=20(#61)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :recycle: refactor: my, notification ํŽ˜์ด์ง€๋ช… lowerCamelCase๋กœ ๋ณ€๊ฒฝ * :sparkles: feature: location, category, color ์ƒ์ˆ˜ ๋ฐ ํƒ€์ž… ์ •์˜ * :sparkles: feature: category enum์œผ๋กœ ์ •์˜ * :sparkles: feature: ArticleTag ์ปดํฌ๋„ŒํŠธ์—์„œ color๋ฅผ props๋กœ ๋ฐ›๋„๋ก ๋ณ€๊ฒฝ * :sparkles: feature: ArticleType๊ณผ ArticlePreviewType์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์ •์˜ * :sparkles: feature: ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€ ์ƒ์„ธ ํŽ˜์ด์ง€ ๋งˆํฌ์—… * :recycle: refactor: export ๋ฌธ์„ style ๋กœ์ง ์•ž์œผ๋กœ ์˜ฎ๊น€ * :recycle: refactor: util ํด๋”๋ช… utils๋กœ ๋ณ€๊ฒฝ * :goal_net: chore: html ๋ Œ๋”๋ง TODO ์ฃผ์„ ์ œ๊ฑฐ * :goal_net: chore: ๋ฆฌ๋ทฐ 1์ฐจ ๋ฐ˜์˜ Article Tag Props description ์ˆ˜์ •, ๋ถˆํ•„์š”ํ•œ Wrapper Element ์ œ๊ฑฐ --- .../ArticleTag/ArticleTag.stories.tsx | 2 +- frontend/src/components/ArticleTag/index.tsx | 17 +- .../GroupArticleCard.stories.tsx | 8 +- .../src/components/GroupArticleCard/index.tsx | 21 +- frontend/src/constants/article.ts | 12 +- frontend/src/constants/category.ts | 17 ++ frontend/src/constants/color.ts | 23 +- frontend/src/constants/dummy.ts | 31 ++- frontend/src/constants/location.ts | 22 +- frontend/src/pages/article/[id].tsx | 199 ++++++++++++++++++ frontend/src/pages/{My.tsx => my.tsx} | 0 .../{Notification.tsx => notification.tsx} | 0 frontend/src/pages/test.tsx | 2 +- frontend/src/typings/types.ts | 23 +- frontend/src/utils/colors.ts | 13 ++ 15 files changed, 345 insertions(+), 45 deletions(-) create mode 100644 frontend/src/constants/category.ts create mode 100644 frontend/src/pages/article/[id].tsx rename frontend/src/pages/{My.tsx => my.tsx} (100%) rename frontend/src/pages/{Notification.tsx => notification.tsx} (100%) create mode 100644 frontend/src/utils/colors.ts diff --git a/frontend/src/components/ArticleTag/ArticleTag.stories.tsx b/frontend/src/components/ArticleTag/ArticleTag.stories.tsx index 85613b94..1d7bcccb 100644 --- a/frontend/src/components/ArticleTag/ArticleTag.stories.tsx +++ b/frontend/src/components/ArticleTag/ArticleTag.stories.tsx @@ -10,6 +10,6 @@ const Template: ComponentStory = (args) => { - // TODO ์ด ํ•จ์ˆ˜๋ฅผ util๋กœ ๋ถ„๋ฆฌํ•˜๋Š”๊ฒŒ ์ข‹์„์ง€ ๊ณ ๋ฏผ - const getBadgeColor = (id: number) => { - const colorCount = BADGE_COLORS.length; - return BADGE_COLORS[id % colorCount]; - }; - +const ArticleTag = ({ color, content, size = 'sm' }: Props) => { return ( - + {content} diff --git a/frontend/src/components/GroupArticleCard/GroupArticleCard.stories.tsx b/frontend/src/components/GroupArticleCard/GroupArticleCard.stories.tsx index 8d6b5776..26a9c843 100644 --- a/frontend/src/components/GroupArticleCard/GroupArticleCard.stories.tsx +++ b/frontend/src/components/GroupArticleCard/GroupArticleCard.stories.tsx @@ -1,6 +1,6 @@ import { ComponentMeta, ComponentStory } from '@storybook/react'; import GroupArticleCard from '.'; -import { dummyArticle } from '@constants/dummy'; +import { dummyArticlePreview } from '@constants/dummy'; import { ArticleStatus } from '@constants/article'; export default { @@ -11,14 +11,14 @@ export default { const Template: ComponentStory = (args) => ; export const NormalCard = Template.bind({}); -NormalCard.args = { article: dummyArticle }; +NormalCard.args = { article: dummyArticlePreview }; export const LongTitleCard = Template.bind({}); LongTitleCard.args = { - article: { ...dummyArticle, title: '๊ธธ์–ด์ง€๋Š” ์ œ๋ชฉ์ž…๋‹ˆ๋‹ค. ์ œ๋ชฉ์ด ๊ธธ์–ด์„œ ์ž˜๋ ค์š”.' }, + article: { ...dummyArticlePreview, title: '๊ธธ์–ด์ง€๋Š” ์ œ๋ชฉ์ž…๋‹ˆ๋‹ค. ์ œ๋ชฉ์ด ๊ธธ์–ด์„œ ์ž˜๋ ค์š”.' }, }; export const ClosedCard = Template.bind({}); ClosedCard.args = { - article: { ...dummyArticle, status: ArticleStatus.SUCCEED }, + article: { ...dummyArticlePreview, status: ArticleStatus.SUCCEED }, }; diff --git a/frontend/src/components/GroupArticleCard/index.tsx b/frontend/src/components/GroupArticleCard/index.tsx index 76b1e307..ffc674e1 100644 --- a/frontend/src/components/GroupArticleCard/index.tsx +++ b/frontend/src/components/GroupArticleCard/index.tsx @@ -1,8 +1,8 @@ import { Image } from '@mantine/core'; -import { ArticleType } from '@typings/types'; +import { ArticlePreviewType } from '@typings/types'; import ArticleTag from '@components/ArticleTag'; import StatCounter from '@components/StatCounter'; -import { ArticleStatus } from '@constants/article'; +import { ArticleStatus, ArticleStatusKr } from '@constants/article'; import { CapacityText, CardWrapper, @@ -12,9 +12,10 @@ import { TitleText, ClosedText, } from '@components/GroupArticleCard/styles'; +import { getCommonBadgeColor, getStatusBadgeColor } from '../../utils/colors'; interface Props { - article: ArticleType; + article: ArticlePreviewType; } const GroupArticleCard = ({ article }: Props) => { @@ -28,8 +29,18 @@ const GroupArticleCard = ({ article }: Props) => { {'thumbnail-image'} - - + + + {article.title} diff --git a/frontend/src/constants/article.ts b/frontend/src/constants/article.ts index d747e2b7..69b1ab0b 100644 --- a/frontend/src/constants/article.ts +++ b/frontend/src/constants/article.ts @@ -1,7 +1,13 @@ enum ArticleStatus { + PROGRESS = 'PROGRESS', + SUCCEED = 'SUCCEED', + FAIL = 'FAIL', +} + +enum ArticleStatusKr { PROGRESS = '๋ชจ์ง‘์ค‘', - SUCCEED = '๋ชจ์ง‘์„ฑ๊ณต', - FAIL = '๋ชจ์ง‘์ค‘๋‹จ', + SUCCEED = '๋ชจ์ง‘์™„๋ฃŒ', + FAIL = '๋ชจ์ง‘์ฆ๋‹จ', } -export { ArticleStatus }; +export { ArticleStatus, ArticleStatusKr }; diff --git a/frontend/src/constants/category.ts b/frontend/src/constants/category.ts new file mode 100644 index 00000000..1c06fd1b --- /dev/null +++ b/frontend/src/constants/category.ts @@ -0,0 +1,17 @@ +enum Category { + STUDY = 'STUDY', + PROJECT = 'PROJECT', + COMPETITION = 'COMPETITION', + MEAL = 'MEAL', + ETC = 'ETC', +} + +enum CategoryKr { + STUDY = '์Šคํ„ฐ๋””', + PROJECT = 'ํ”„๋กœ์ ํŠธ', + COMPETITION = '๊ณต๋ชจ์ „', + MEAL = '์‹์‚ฌ', + ETC = '๊ธฐํƒ€', +} + +export { Category, CategoryKr }; diff --git a/frontend/src/constants/color.ts b/frontend/src/constants/color.ts index 11065700..cfb17fb7 100644 --- a/frontend/src/constants/color.ts +++ b/frontend/src/constants/color.ts @@ -1,14 +1,11 @@ -const BADGE_COLORS = [ - 'cyan', - 'green', - 'yellow', - 'orange', - 'grape', - 'red', - 'indigo', - 'violet', - 'lime', - 'teal', -]; +import { ArticleStatus } from '@constants/article'; -export { BADGE_COLORS }; +const BADGE_COLORS = ['cyan', 'green', 'yellow', 'orange', 'grape', 'violet', 'teal', 'pink']; + +const STATUS_COLOR = { + [ArticleStatus.PROGRESS]: 'lime', + [ArticleStatus.SUCCEED]: 'indigo', + [ArticleStatus.FAIL]: 'red', +}; + +export { BADGE_COLORS, STATUS_COLOR }; diff --git a/frontend/src/constants/dummy.ts b/frontend/src/constants/dummy.ts index 2074b2a2..e23e7d4f 100644 --- a/frontend/src/constants/dummy.ts +++ b/frontend/src/constants/dummy.ts @@ -1,8 +1,29 @@ -import { ArticleType } from '@typings/types'; +import { ArticlePreviewType, ArticleType } from '@typings/types'; import { Location } from '@constants/location'; import { ArticleStatus } from '@constants/article'; +import { Category } from '@constants/category'; // TODO ๊ฐœ๋ฐœ์šฉ dummy data, ์ถ”ํ›„ ์‚ญ์ œ +const dummyArticlePreview: ArticlePreviewType = { + id: 1, + title: '๋ชจ์ง‘ ํ…Œ์ŠคํŠธ1', + location: { + id: 2, + name: Location.BUSAN, + }, + category: { + id: 1, + name: Category.STUDY, + }, + commentCount: 31, + scrapCount: 12, + thumbnail: 'https://avatars.githubusercontent.com/u/90585081?v=4', + maxCapacity: 5, + currentCapacity: 3, + status: ArticleStatus.PROGRESS, + createdAt: '2021-04-03T18:45:19Z', +}; + const dummyArticle: ArticleType = { id: 1, title: '๋ชจ์ง‘ ํ…Œ์ŠคํŠธ1', @@ -12,8 +33,12 @@ const dummyArticle: ArticleType = { }, category: { id: 1, - name: '์Šคํ„ฐ๋””', + name: Category.STUDY, }, + contents: '
    test
    ', + authorId: 1, + authorName: 'JHPark_GOD', + authorThumbnail: 'https://avatars.githubusercontent.com/u/90585081?v=4', commentCount: 31, scrapCount: 12, thumbnail: 'https://avatars.githubusercontent.com/u/90585081?v=4', @@ -23,4 +48,4 @@ const dummyArticle: ArticleType = { createdAt: '2021-04-03T18:45:19Z', }; -export { dummyArticle }; +export { dummyArticlePreview, dummyArticle }; diff --git a/frontend/src/constants/location.ts b/frontend/src/constants/location.ts index 2729d624..ee865324 100644 --- a/frontend/src/constants/location.ts +++ b/frontend/src/constants/location.ts @@ -1,4 +1,24 @@ enum Location { + SEOUL = 'SEOUL', + INCHEON = 'INCHEON', + BUSAN = 'BUSAN', + DAEGU = 'DAEGU', + GWANGJU = 'GWANGJU', + DAEJEON = 'DAEJEON', + ULSAN = 'ULSAN', + SEJONG = 'SEJONG', + GYEONGGI = 'GYEONGGI', + GANGWON = 'GANGWON', + CHUNGBUK = 'CHUNGBUK', + CHUNGNAM = 'CHUNGNAM', + JEONBUK = 'JEONBUK', + JEONNAM = 'JEONNAM', + GYEONGBUK = 'GYEONGBUK', + GYEONGNAM = 'GYEONGNAM', + JEJU = 'JEJU', +} + +enum LocationKr { SEOUL = '์„œ์šธ', INCHEON = '์ธ์ฒœ', BUSAN = '๋ถ€์‚ฐ', @@ -18,4 +38,4 @@ enum Location { JEJU = '์ œ์ฃผ', } -export { Location }; +export { Location, LocationKr }; diff --git a/frontend/src/pages/article/[id].tsx b/frontend/src/pages/article/[id].tsx new file mode 100644 index 00000000..f011122d --- /dev/null +++ b/frontend/src/pages/article/[id].tsx @@ -0,0 +1,199 @@ +import PageLayout from '@components/common/PageLayout'; +import { Avatar, Progress, TypographyStylesProvider } from '@mantine/core'; +import styled from '@emotion/styled'; +import { dummyArticle } from '@constants/dummy'; +import ArticleTag from '@components/ArticleTag'; +import { getCommonBadgeColor, getStatusBadgeColor } from '../../utils/colors'; +import { ArticleStatusKr } from '@constants/article'; +import { CategoryKr } from '@constants/category'; +import { LocationKr } from '@constants/location'; +import { useTheme } from '@emotion/react'; +import StatCounter from '@components/StatCounter'; +import { IconList } from '@tabler/icons'; + +const ArticleDetail = () => { + const { + colors: { indigo, gray }, + } = useTheme(); + + const { + authorName, + title, + status, + authorThumbnail, + createdAt, + category, + location, + contents, + currentCapacity, + maxCapacity, + commentCount, + } = dummyArticle; + + return ( + + + + + + + {authorName} + + + + {title} + + + + + + + + ๋ชจ์ง‘ ํ˜„ํ™ฉ + + {currentCapacity}๋ช… / {maxCapacity}๋ช… + + + + + ์‹ ์ฒญ์ž ํ™•์ธ + + + + + + + + + + + +
    ๋Œ“๊ธ€์˜์—ญ
    +
    +
    +
    + ); +}; + +export default ArticleDetail; + +const PageWrapper = styled.div` + display: flex; + flex-direction: column; +`; + +const DetailWrapper = styled.div` + display: flex; + flex-direction: column; + gap: 1.6rem; + padding: 1.6rem; +`; + +const ProfileWrapper = styled.div` + display: flex; + gap: 1.2rem; + align-items: center; +`; + +const ProfileTextWrapper = styled.div` + display: flex; + flex-direction: column; + gap: 0.8rem; +`; + +const Author = styled.span` + font-size: 1.6rem; + font-weight: 700; +`; + +const Time = styled.span` + font-size: 1.2rem; + font-weight: 700; + color: ${({ theme }) => theme.colors.gray[4]}; +`; + +const Title = styled.span` + font-size: 2rem; + font-weight: 800; +`; + +const TagWrapper = styled.div` + display: flex; + gap: 0.8rem; +`; + +const ParticipantWrapper = styled.div` + display: flex; + justify-content: space-between; +`; + +const StatusWrapper = styled.div` + display: flex; + gap: 0.8rem; +`; + +const StatusText = styled.span` + font-size: 1.4rem; + font-weight: 700; + color: ${({ theme }) => theme.colors.gray[4]}; +`; + +const CountText = styled.span` + font-size: 1.4rem; + font-weight: 700; +`; + +const ParticipantButton = styled.button` + display: flex; + gap: 4px; + padding: 0; + height: 1.7rem; + align-items: center; + border: none; + background-color: ${({ theme }) => theme.white}; + &:hover { + cursor: pointer; + } +`; + +const ViewText = styled.span` + font-size: 1.4rem; + font-weight: 700; + color: ${({ theme }) => theme.colors.gray[6]}; +`; + +const ContentBox = styled.div` + width: 100%; + min-height: 200px; + padding: 1.6rem; + border: 1px solid ${({ theme }) => theme.colors.gray[2]}; + border-radius: 8px; +`; + +const CommentWrapper = styled.div` + display: flex; + flex-direction: column; +`; + +const Divider = styled.div` + width: 100%; + height: 0.05rem; + background-color: ${({ theme }) => theme.colors.gray[4]}; +`; diff --git a/frontend/src/pages/My.tsx b/frontend/src/pages/my.tsx similarity index 100% rename from frontend/src/pages/My.tsx rename to frontend/src/pages/my.tsx diff --git a/frontend/src/pages/Notification.tsx b/frontend/src/pages/notification.tsx similarity index 100% rename from frontend/src/pages/Notification.tsx rename to frontend/src/pages/notification.tsx diff --git a/frontend/src/pages/test.tsx b/frontend/src/pages/test.tsx index 5c22d7f7..e9ccdaf9 100644 --- a/frontend/src/pages/test.tsx +++ b/frontend/src/pages/test.tsx @@ -20,7 +20,7 @@ const Test = () => { }); return ( - + {testData.map((data, index) => ( {data} ))} diff --git a/frontend/src/typings/types.ts b/frontend/src/typings/types.ts index 1e164d35..7a078e8d 100644 --- a/frontend/src/typings/types.ts +++ b/frontend/src/typings/types.ts @@ -1,9 +1,28 @@ import { Location } from '@constants/location'; import { ArticleStatus } from '@constants/article'; +import { Category } from '@constants/category'; + +interface ArticlePreviewType { + id: number; + title: string; + location: LocationType; + category: CategoryType; + commentCount: number; + scrapCount: number; + thumbnail: string; + maxCapacity: number; + currentCapacity: number; + status: ArticleStatus; + createdAt: string; +} interface ArticleType { id: number; title: string; + contents: string; + authorId: number; + authorName: string; + authorThumbnail: string; location: LocationType; category: CategoryType; commentCount: number; @@ -22,7 +41,7 @@ interface LocationType { interface CategoryType { id: number; - name: string; + name: Category; } interface TestResponseType { @@ -31,4 +50,4 @@ interface TestResponseType { currentId: number; } -export type { ArticleType, LocationType, CategoryType, TestResponseType }; +export type { ArticlePreviewType, ArticleType, LocationType, CategoryType, TestResponseType }; diff --git a/frontend/src/utils/colors.ts b/frontend/src/utils/colors.ts new file mode 100644 index 00000000..332df2e3 --- /dev/null +++ b/frontend/src/utils/colors.ts @@ -0,0 +1,13 @@ +import { BADGE_COLORS, STATUS_COLOR } from '@constants/color'; +import { ArticleStatus } from '@constants/article'; + +const getCommonBadgeColor = (id: number) => { + const colorCount = BADGE_COLORS.length; + return BADGE_COLORS[id % colorCount]; +}; + +const getStatusBadgeColor = (status: ArticleStatus) => { + return STATUS_COLOR[status]; +}; + +export { getCommonBadgeColor, getStatusBadgeColor }; From 3fd2be74452fcfd2b04c79c743a722bb96d666e5 Mon Sep 17 00:00:00 2001 From: Kim Myeongil <67570061+username1103@users.noreply.github.com> Date: Thu, 24 Nov 2022 12:32:04 +0900 Subject: [PATCH 023/142] =?UTF-8?q?[Feature]=20=ED=86=A0=ED=81=B0=20?= =?UTF-8?q?=EB=B0=9C=EA=B8=89=20=EB=B0=8F=20=EB=A6=AC=ED=94=84=EB=A0=88?= =?UTF-8?q?=EC=8B=9C=20=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80=20(#63)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :goal_net: chore: ์˜์กด์„ฑ ์„ค์น˜ - @nestjs/jwt - passport - passport-jwt * :sparkles: feature: Jwt ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๋กœ๋“œ ์ถ”๊ฐ€ - JwtConfigService ์ถ”๊ฐ€ - JWT_SECRET - JWT_ACCESS_TOKEN_EXPIRATION_MINUTES - JWT_REFRESH_TOKEN_EXPIRATION_DAYS ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ถ”๊ฐ€ * :sparkles: feature: User ์—”ํ‹ฐํ‹ฐ ์ถ”๊ฐ€ - ์ž„์‹œ ์œ ์ € ์—”ํ‹ฐํ‹ฐ ์ถ”๊ฐ€ * :sparkles: feature: date-time util ์ถ”๊ฐ€ - @js-joda/core ์„ค์น˜ - toDate, toLocalDateTime ์ถ”๊ฐ€ * :sparkles: feature: jwt-token ๋ชจ๋“ˆ ์ถ”๊ฐ€ - ํ† ํฐ ์ƒ์„ฑ ์ถ”๊ฐ€ * :sparkles: feature: jwt auth guard ์ถ”๊ฐ€ - ํ† ํฐ ์ธ์ฆ ๊ฐ€๋“œ ์ถ”๊ฐ€ * :recycle: refactor: ์ฝ”๋“œ ์ผ๊ด€์„ฑ์„ ์œ„ํ•ด if๋ฌธ ๊ด„ํ˜ธ ์ œ๊ฑฐ * :sparkles: feature: JwtAuth ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ์ถ”๊ฐ€ - ํ† ํฐ ์ธ์ฆ ๋ฐ ์Šค์›จ๊ฑฐ ๋ฌธ์„œ ์ž๋™ ์ž‘์„ฑ์„ ์œ„ํ•œ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ์ถ”๊ฐ€ * :recycle: refactor: verifyAuthToken ๋ฆฌํŒฉํ„ฐ๋ง - jwtService(@nestjs/jwt)๋ฅผ ์‚ฌ์šฉํ•œ ๋กœ์ง๊ณผ ํ† ํฐ ์ธ์ฆ๋กœ์ง ๋ถ„๋ฆฌ - verifyAuthToken ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ * :memo: docs: jwtAuth swagger ๋ฌธ์„œ ์ˆ˜์ • - ํ˜„์žฌ ์ฟ ํ‚ค ์ ์šฉ ๋ฐ ์š”์ฒญ์ด ์›ํ™œํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์Œ * :bug: fix: nginx 127.0.0.1์—์„œ๋งŒ ์ ‘์† ๊ฐ€๋Šฅํ•˜๋˜ ๋ฒ„๊ทธ ์ˆ˜์ • - ๊ธฐ์กด์— 127.0.0.1 ์—์„œ๋งŒ ๋กœ์ปฌ ์ ‘์†์ด ๊ฐ€๋Šฅํ–ˆ๋‹ค. - localhost ์ ‘์†์‹œ nginx์˜ default ํŽ˜์ด์ง€๊ฐ€ ๋‚˜ํƒ€๋‚ฌ๋‹ค. - nginx ์ปจํ…Œ์ด๋„ˆ์˜ /etc/nginx/conf.d/default.conf ๋ฌธ์ œ์˜€๋‹ค. ํ•ด๋‹น ํŒŒ์ผ์„ ์ œ๊ฑฐํ•˜์—ฌ ํ•ด๊ฒฐํ–ˆ์Œ. * :goal_net: chore: ํ…Œ์ŠคํŠธ์—์„œ JwtAuthGuard override - JwtAuthGuard๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œํ•˜์—ฌ AuthController ํ…Œ์ŠคํŠธ * :goal_net: chore: ํ…Œ์ŠคํŠธ ์˜ˆ์ œ ์ˆ˜์ • * :goal_net: chore: ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ๋ณ€์ˆ˜ ์ œ๊ฑฐ --- backend/nginx.Dockerfile | 4 +- backend/package-lock.json | 298 +++++++++++++++++- backend/package.json | 4 + backend/src/app.controller.spec.ts | 9 +- backend/src/app.controller.ts | 5 +- backend/src/app.module.ts | 3 +- backend/src/app/user/user.entity.ts | 40 +++ .../jwt/__test__/config.service.spec.ts | 46 +++ .../src/common/config/jwt/config.module.ts | 18 ++ .../src/common/config/jwt/config.service.ts | 24 ++ backend/src/common/config/jwt/validate.ts | 36 +++ .../common/decorator/jwt-auth.decorator.ts | 13 + .../exception/invalid-token.exception.ts | 7 + backend/src/common/guard/jwt-auth.guard.ts | 71 +++++ .../__test__/jwt-token.service.spec.ts | 100 ++++++ .../module/jwt-token/jwt-token.module.ts | 21 ++ .../module/jwt-token/jwt-token.service.ts | 90 ++++++ .../jwt-token/type/auth-token-payload.ts | 11 + .../module/jwt-token/type/token-type.ts | 4 + .../common/util/__test__/date-time.spec.ts | 38 +++ backend/src/common/util/date-time.ts | 17 + backend/src/setNestApp.ts | 3 + backend/src/setSwagger.ts | 10 +- backend/test/app.e2e-spec.ts | 7 +- 24 files changed, 860 insertions(+), 19 deletions(-) create mode 100644 backend/src/app/user/user.entity.ts create mode 100644 backend/src/common/config/jwt/__test__/config.service.spec.ts create mode 100644 backend/src/common/config/jwt/config.module.ts create mode 100644 backend/src/common/config/jwt/config.service.ts create mode 100644 backend/src/common/config/jwt/validate.ts create mode 100644 backend/src/common/decorator/jwt-auth.decorator.ts create mode 100644 backend/src/common/exception/invalid-token.exception.ts create mode 100644 backend/src/common/guard/jwt-auth.guard.ts create mode 100644 backend/src/common/module/jwt-token/__test__/jwt-token.service.spec.ts create mode 100644 backend/src/common/module/jwt-token/jwt-token.module.ts create mode 100644 backend/src/common/module/jwt-token/jwt-token.service.ts create mode 100644 backend/src/common/module/jwt-token/type/auth-token-payload.ts create mode 100644 backend/src/common/module/jwt-token/type/token-type.ts create mode 100644 backend/src/common/util/__test__/date-time.spec.ts create mode 100644 backend/src/common/util/date-time.ts diff --git a/backend/nginx.Dockerfile b/backend/nginx.Dockerfile index 28ee18fa..b5d84471 100644 --- a/backend/nginx.Dockerfile +++ b/backend/nginx.Dockerfile @@ -1,5 +1,7 @@ FROM nginx -COPY ./local/nginx.conf /etc/nginx/conf.d +RUN rm -rf /etc/nginx/conf.d/* + +COPY ./local/nginx.conf /etc/nginx/conf.d/nginx.conf EXPOSE 80 diff --git a/backend/package-lock.json b/backend/package-lock.json index 7e3c3701..f9be76f5 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -9,14 +9,17 @@ "version": "0.0.1", "license": "UNLICENSED", "dependencies": { + "@js-joda/core": "^5.4.2", "@nestjs/common": "^9.0.0", "@nestjs/config": "^2.2.0", "@nestjs/core": "^9.0.0", + "@nestjs/jwt": "^9.0.0", "@nestjs/platform-express": "^9.0.0", "@nestjs/swagger": "^6.1.3", "@nestjs/typeorm": "^9.0.1", "class-transformer": "^0.5.1", "class-validator": "^0.13.2", + "cookie-parser": "^1.4.6", "morgan": "^1.10.0", "mysql2": "^2.3.3", "reflect-metadata": "^0.1.13", @@ -29,6 +32,7 @@ "@nestjs/cli": "^9.0.0", "@nestjs/schematics": "^9.0.0", "@nestjs/testing": "^9.0.0", + "@types/cookie-parser": "^1.4.3", "@types/express": "^4.17.13", "@types/jest": "28.1.8", "@types/node": "^16.0.0", @@ -1430,6 +1434,11 @@ "@jridgewell/sourcemap-codec": "1.4.14" } }, + "node_modules/@js-joda/core": { + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/@js-joda/core/-/core-5.4.2.tgz", + "integrity": "sha512-QIDIZ9a0NfDStgD47VaTgwiPjlw1p4QPLwjOB/9+/DqIztoQopPNNAd+HdtQMHgE+ibP3dJacd8/TVL/A1RaaA==" + }, "node_modules/@nestjs/cli": { "version": "9.1.5", "resolved": "https://registry.npmjs.org/@nestjs/cli/-/cli-9.1.5.tgz", @@ -1607,6 +1616,18 @@ } } }, + "node_modules/@nestjs/jwt": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@nestjs/jwt/-/jwt-9.0.0.tgz", + "integrity": "sha512-ZsXGY/wMYKzEhymw2+dxiwrHTRKIKrGszx6r2EjQqNLypdXMQu0QrujwZJ8k3+XQV4snmuJwwNakQoA2ILfq8w==", + "dependencies": { + "@types/jsonwebtoken": "8.5.8", + "jsonwebtoken": "8.5.1" + }, + "peerDependencies": { + "@nestjs/common": "^8.0.0 || ^9.0.0" + } + }, "node_modules/@nestjs/mapped-types": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-1.2.0.tgz", @@ -1995,6 +2016,15 @@ "@types/node": "*" } }, + "node_modules/@types/cookie-parser": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@types/cookie-parser/-/cookie-parser-1.4.3.tgz", + "integrity": "sha512-CqSKwFwefj4PzZ5n/iwad/bow2hTCh0FlNAeWLtQM3JA/NX/iYagIpWG2cf1bQKQ2c9gU2log5VUCrn7LDOs0w==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, "node_modules/@types/cookiejar": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.2.tgz", @@ -2099,6 +2129,14 @@ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, + "node_modules/@types/jsonwebtoken": { + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.8.tgz", + "integrity": "sha512-zm6xBQpFDIDM6o9r6HSgDeIcLy82TKWctCXEPbJJcXb5AKmi5BNNdLXneixK4lplX3PqIVcwLBCGE/kAGnlD4A==", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/mime": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", @@ -2108,8 +2146,7 @@ "node_modules/@types/node": { "version": "16.18.3", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", - "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", - "devOptional": true + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==" }, "node_modules/@types/parse-json": { "version": "4.0.0", @@ -3057,6 +3094,11 @@ "ieee754": "^1.1.13" } }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -3476,6 +3518,26 @@ "node": ">= 0.6" } }, + "node_modules/cookie-parser": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz", + "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==", + "dependencies": { + "cookie": "0.4.1", + "cookie-signature": "1.0.6" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/cookie-parser/node_modules/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", @@ -3712,6 +3774,14 @@ "node": ">=12" } }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -6075,6 +6145,54 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=4", + "npm": ">=1.4.28" + } + }, + "node_modules/jsonwebtoken/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, "node_modules/kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", @@ -6146,6 +6264,36 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -6158,6 +6306,11 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -10083,6 +10236,11 @@ "@jridgewell/sourcemap-codec": "1.4.14" } }, + "@js-joda/core": { + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/@js-joda/core/-/core-5.4.2.tgz", + "integrity": "sha512-QIDIZ9a0NfDStgD47VaTgwiPjlw1p4QPLwjOB/9+/DqIztoQopPNNAd+HdtQMHgE+ibP3dJacd8/TVL/A1RaaA==" + }, "@nestjs/cli": { "version": "9.1.5", "resolved": "https://registry.npmjs.org/@nestjs/cli/-/cli-9.1.5.tgz", @@ -10189,6 +10347,15 @@ "uuid": "9.0.0" } }, + "@nestjs/jwt": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@nestjs/jwt/-/jwt-9.0.0.tgz", + "integrity": "sha512-ZsXGY/wMYKzEhymw2+dxiwrHTRKIKrGszx6r2EjQqNLypdXMQu0QrujwZJ8k3+XQV4snmuJwwNakQoA2ILfq8w==", + "requires": { + "@types/jsonwebtoken": "8.5.8", + "jsonwebtoken": "8.5.1" + } + }, "@nestjs/mapped-types": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-1.2.0.tgz", @@ -10481,6 +10648,15 @@ "@types/node": "*" } }, + "@types/cookie-parser": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@types/cookie-parser/-/cookie-parser-1.4.3.tgz", + "integrity": "sha512-CqSKwFwefj4PzZ5n/iwad/bow2hTCh0FlNAeWLtQM3JA/NX/iYagIpWG2cf1bQKQ2c9gU2log5VUCrn7LDOs0w==", + "dev": true, + "requires": { + "@types/express": "*" + } + }, "@types/cookiejar": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.2.tgz", @@ -10585,6 +10761,14 @@ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, + "@types/jsonwebtoken": { + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.8.tgz", + "integrity": "sha512-zm6xBQpFDIDM6o9r6HSgDeIcLy82TKWctCXEPbJJcXb5AKmi5BNNdLXneixK4lplX3PqIVcwLBCGE/kAGnlD4A==", + "requires": { + "@types/node": "*" + } + }, "@types/mime": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", @@ -10594,8 +10778,7 @@ "@types/node": { "version": "16.18.3", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", - "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", - "devOptional": true + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==" }, "@types/parse-json": { "version": "4.0.0", @@ -11313,6 +11496,11 @@ "ieee754": "^1.1.13" } }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -11619,6 +11807,22 @@ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" }, + "cookie-parser": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz", + "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==", + "requires": { + "cookie": "0.4.1", + "cookie-signature": "1.0.6" + }, + "dependencies": { + "cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" + } + } + }, "cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", @@ -11791,6 +11995,14 @@ "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-8.0.3.tgz", "integrity": "sha512-SErOMvge0ZUyWd5B0NXMQlDkN+8r+HhVUsxgOO7IoPDOdDRD2JjExpN6y3KnFR66jsJMwSn1pqIivhU5rcJiNg==" }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -13572,6 +13784,49 @@ "universalify": "^2.0.0" } }, + "jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "requires": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, "kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", @@ -13625,6 +13880,36 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -13637,6 +13922,11 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, "log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", diff --git a/backend/package.json b/backend/package.json index 4557e918..4504970b 100644 --- a/backend/package.json +++ b/backend/package.json @@ -25,14 +25,17 @@ "test:e2e": "jest --config ./test/jest-e2e.json" }, "dependencies": { + "@js-joda/core": "^5.4.2", "@nestjs/common": "^9.0.0", "@nestjs/config": "^2.2.0", "@nestjs/core": "^9.0.0", + "@nestjs/jwt": "^9.0.0", "@nestjs/platform-express": "^9.0.0", "@nestjs/swagger": "^6.1.3", "@nestjs/typeorm": "^9.0.1", "class-transformer": "^0.5.1", "class-validator": "^0.13.2", + "cookie-parser": "^1.4.6", "morgan": "^1.10.0", "mysql2": "^2.3.3", "reflect-metadata": "^0.1.13", @@ -45,6 +48,7 @@ "@nestjs/cli": "^9.0.0", "@nestjs/schematics": "^9.0.0", "@nestjs/testing": "^9.0.0", + "@types/cookie-parser": "^1.4.3", "@types/express": "^4.17.13", "@types/jest": "28.1.8", "@types/node": "^16.0.0", diff --git a/backend/src/app.controller.spec.ts b/backend/src/app.controller.spec.ts index 26b28090..2b594af2 100644 --- a/backend/src/app.controller.spec.ts +++ b/backend/src/app.controller.spec.ts @@ -2,15 +2,22 @@ import { Test, TestingModule } from '@nestjs/testing'; import { AppController } from './app.controller'; import { AppService } from './app.service'; import { ResponseEntity } from '@common/response-entity'; +import { JwtAuthGuard } from '@common/guard/jwt-auth.guard'; describe('AppController', () => { let appController: AppController; beforeEach(async () => { const app: TestingModule = await Test.createTestingModule({ + imports: [], controllers: [AppController], providers: [AppService], - }).compile(); + }) + .overrideGuard(JwtAuthGuard) + .useValue(() => { + return null; + }) + .compile(); appController = app.get(AppController); }); diff --git a/backend/src/app.controller.ts b/backend/src/app.controller.ts index 4c7b914f..aac523aa 100644 --- a/backend/src/app.controller.ts +++ b/backend/src/app.controller.ts @@ -1,4 +1,4 @@ -import { Controller, Get, HttpCode, HttpStatus, Param } from '@nestjs/common'; +import { Controller, Get, HttpStatus, Param } from '@nestjs/common'; import { ApiProperty, ApiTags } from '@nestjs/swagger'; import { Type } from 'class-transformer'; import { IsNumber } from 'class-validator'; @@ -8,6 +8,7 @@ import { ApiErrorResponse } from '@decorator/api-error-response.decorator'; import { BadParameterException } from '@exception/bad-parameter.exception'; import { ApiNotFoundException } from '@exception/api-not-found.exception'; import { AppService } from './app.service'; +import { JwtAuth } from '@decorator/jwt-auth.decorator'; export class ExampleDto { @IsNumber() @@ -22,7 +23,7 @@ export class AppController { constructor(private readonly appService: AppService) {} @Get(':id') - @HttpCode(HttpStatus.OK) + @JwtAuth() @ApiSuccessResponse(HttpStatus.OK, String) @ApiErrorResponse(BadParameterException, ApiNotFoundException) getHello(@Param() params: ExampleDto) { diff --git a/backend/src/app.module.ts b/backend/src/app.module.ts index d340a0d4..d431f106 100644 --- a/backend/src/app.module.ts +++ b/backend/src/app.module.ts @@ -5,9 +5,10 @@ import { AppConfigModule } from '@config/app/config.module'; import { ApiSuccessLoggerMiddleware } from '@middleware/api-success-logger.middleware'; import { ApiExceptionLoggerMiddleware } from '@middleware/api-exception-logger.middleware'; import { DatabaseModule } from '@config/database/database.module'; +import { JwtTokenModule } from '@common/module/jwt-token/jwt-token.module'; @Module({ - imports: [AppConfigModule, DatabaseModule], + imports: [AppConfigModule, DatabaseModule, JwtTokenModule], controllers: [AppController], providers: [AppService], }) diff --git a/backend/src/app/user/user.entity.ts b/backend/src/app/user/user.entity.ts new file mode 100644 index 00000000..125fb7fa --- /dev/null +++ b/backend/src/app/user/user.entity.ts @@ -0,0 +1,40 @@ +import { + Column, + CreateDateColumn, + Entity, + PrimaryGeneratedColumn, + UpdateDateColumn, +} from 'typeorm'; + +@Entity({ name: 'user' }) +export class User { + @PrimaryGeneratedColumn() + id: number; + + @Column({ type: 'varchar', length: 30 }) + username: string; + + @Column({ type: 'varchar', length: 400, default: '' }) + profileImage: string; + + @Column({ type: 'varchar', length: 1000, default: '' }) + description: string; + + @Column({ type: 'varchar', length: 400, default: '' }) + githubUrl: string; + + @Column({ type: 'varchar', length: 400, default: '' }) + blogUrl: string; + + @Column({ type: 'varchar', length: 100 }) + socialId: string; + + @Column({ type: 'varchar', length: 10 }) + socialType: string; + + @CreateDateColumn({ type: 'timestamp' }) + createdAt: Date; + + @UpdateDateColumn({ type: 'timestamp' }) + updatedAt: Date; +} diff --git a/backend/src/common/config/jwt/__test__/config.service.spec.ts b/backend/src/common/config/jwt/__test__/config.service.spec.ts new file mode 100644 index 00000000..f68a998f --- /dev/null +++ b/backend/src/common/config/jwt/__test__/config.service.spec.ts @@ -0,0 +1,46 @@ +import { Test } from '@nestjs/testing'; +import { JwtConfigService } from '@config/jwt/config.service'; +import { JwtConfigModule } from '@config/jwt/config.module'; + +describe('JwtConfigService Test', () => { + let jwtConfigService: JwtConfigService; + + beforeEach(async () => { + const module = await Test.createTestingModule({ + imports: [JwtConfigModule], + }).compile(); + + jwtConfigService = module.get(JwtConfigService); + }); + + test('secret์„ ์ž˜ ๊ฐ€์ ธ์˜ค๋Š”๊ฐ€', async () => { + // given + const secret = process.env.JWT_SECRET; + // when + + // then + expect(jwtConfigService.secret).toEqual(secret); + }); + + test('accessTokenExpirationMinutes๋ฅผ ์ž˜ ๊ฐ€์ ธ์˜ค๋Š”๊ฐ€', async () => { + // given + const accessTokenExpirationMinutes = + process.env.JWT_ACCESS_TOKEN_EXPIRATION_MINUTES; + // when + // then + expect(jwtConfigService.accessTokenExpirationMinutes).toEqual( + parseInt(accessTokenExpirationMinutes, 10), + ); + }); + + test('refreshTokenExpirationDays๋ฅผ ์ž˜ ๊ฐ€์ ธ์˜ค๋Š”๊ฐ€', async () => { + // given + const refreshTokenExpirationDays = + process.env.JWT_REFRESH_TOKEN_EXPIRATION_DAYS; + // when + // then + expect(jwtConfigService.refreshTokenExpirationDays).toEqual( + parseInt(refreshTokenExpirationDays, 10), + ); + }); +}); diff --git a/backend/src/common/config/jwt/config.module.ts b/backend/src/common/config/jwt/config.module.ts new file mode 100644 index 00000000..6c4c4d8c --- /dev/null +++ b/backend/src/common/config/jwt/config.module.ts @@ -0,0 +1,18 @@ +import { Module } from '@nestjs/common'; +import { ConfigModule } from '@nestjs/config'; +import { getEnvironmentFilePath, isIgnoreEnvFile } from '@config/config-option'; +import { validate } from '@config/jwt/validate'; +import { JwtConfigService } from '@config/jwt/config.service'; + +@Module({ + imports: [ + ConfigModule.forRoot({ + envFilePath: getEnvironmentFilePath(), + ignoreEnvFile: isIgnoreEnvFile(), + validate, + }), + ], + providers: [JwtConfigService], + exports: [JwtConfigService], +}) +export class JwtConfigModule {} diff --git a/backend/src/common/config/jwt/config.service.ts b/backend/src/common/config/jwt/config.service.ts new file mode 100644 index 00000000..fbed940d --- /dev/null +++ b/backend/src/common/config/jwt/config.service.ts @@ -0,0 +1,24 @@ +import { ConfigService } from '@nestjs/config'; +import { JwtConfig } from '@config/jwt/validate'; +import { Injectable } from '@nestjs/common'; + +@Injectable() +export class JwtConfigService { + constructor(private readonly configService: ConfigService) {} + + get secret() { + return this.configService.get('JWT_SECRET', { infer: true }); + } + + get accessTokenExpirationMinutes() { + return this.configService.get('JWT_ACCESS_TOKEN_EXPIRATION_MINUTES', { + infer: true, + }); + } + + get refreshTokenExpirationDays() { + return this.configService.get('JWT_REFRESH_TOKEN_EXPIRATION_DAYS', { + infer: true, + }); + } +} diff --git a/backend/src/common/config/jwt/validate.ts b/backend/src/common/config/jwt/validate.ts new file mode 100644 index 00000000..a5a069de --- /dev/null +++ b/backend/src/common/config/jwt/validate.ts @@ -0,0 +1,36 @@ +import { IsNumber, IsString, validateSync } from 'class-validator'; +import { Expose, plainToClass, Type } from 'class-transformer'; + +export class JwtConfig { + @IsString() + @Expose() + JWT_SECRET: string; + + @IsNumber() + @Type(() => Number) + @Expose() + JWT_ACCESS_TOKEN_EXPIRATION_MINUTES: number; + + @IsNumber() + @Type(() => Number) + @Expose() + JWT_REFRESH_TOKEN_EXPIRATION_DAYS: number; +} + +export const validate = (config: Record) => { + const validatedConfig = plainToClass( + JwtConfig, + { ...config }, + { enableImplicitConversion: true, excludeExtraneousValues: true }, + ); + + const errors = validateSync(validatedConfig, { + skipMissingProperties: false, + }); + + if (errors.length > 0) { + throw new Error(errors.toString()); + } + + return validatedConfig; +}; diff --git a/backend/src/common/decorator/jwt-auth.decorator.ts b/backend/src/common/decorator/jwt-auth.decorator.ts new file mode 100644 index 00000000..8f702807 --- /dev/null +++ b/backend/src/common/decorator/jwt-auth.decorator.ts @@ -0,0 +1,13 @@ +import { applyDecorators, UseGuards } from '@nestjs/common'; +import { JwtAuthGuard } from '@common/guard/jwt-auth.guard'; +import { ApiCookieAuth } from '@nestjs/swagger'; +import { ApiErrorResponse } from '@decorator/api-error-response.decorator'; +import { InvalidTokenException } from '@exception/invalid-token.exception'; + +export function JwtAuth() { + return applyDecorators( + UseGuards(JwtAuthGuard), + ApiCookieAuth('cookieAuth'), + ApiErrorResponse(InvalidTokenException), + ); +} diff --git a/backend/src/common/exception/invalid-token.exception.ts b/backend/src/common/exception/invalid-token.exception.ts new file mode 100644 index 00000000..211b040f --- /dev/null +++ b/backend/src/common/exception/invalid-token.exception.ts @@ -0,0 +1,7 @@ +import { UnauthorizedException } from '@nestjs/common'; + +export class InvalidTokenException extends UnauthorizedException { + constructor(message = 'ํ† ํฐ์ •๋ณด๊ฐ€ ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค') { + super({ status: 'INVALID_TOKEN', message }); + } +} diff --git a/backend/src/common/guard/jwt-auth.guard.ts b/backend/src/common/guard/jwt-auth.guard.ts new file mode 100644 index 00000000..b3ae8b50 --- /dev/null +++ b/backend/src/common/guard/jwt-auth.guard.ts @@ -0,0 +1,71 @@ +import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common'; +import { JwtTokenService } from '@common/module/jwt-token/jwt-token.service'; +import { TokenType } from '@common/module/jwt-token/type/token-type'; +import { DataSource } from 'typeorm'; +import { User } from '@app/user/user.entity'; +import { InvalidTokenException } from '@exception/invalid-token.exception'; + +@Injectable() +export class JwtAuthGuard implements CanActivate { + constructor( + private readonly jwtTokenService: JwtTokenService, + private readonly dataSource: DataSource, + ) {} + + async canActivate(context: ExecutionContext) { + const request = context.switchToHttp().getRequest(); + const response = context.switchToHttp().getResponse(); + + try { + const { access_token, refresh_token } = request.cookies; + + if (!access_token) throw new Error('์—‘์„ธ์Šค ํ† ํฐ์ด ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค'); + + try { + const authTokenPayload = this.jwtTokenService.verifyAuthToken( + access_token, + TokenType.ACCESS, + ); + + const user = await this.dataSource + .getRepository(User) + .findOneBy({ id: authTokenPayload.userId }); + + if (!user) throw new Error('์œ ์ €๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค'); + + request.user = user; + + return true; + } catch (e) { + if (!refresh_token) throw new Error('Not Found RefreshToken'); + + const authTokenPayload = this.jwtTokenService.verifyAuthToken( + refresh_token, + TokenType.REFRESH, + ); + + const user = await this.dataSource + .getRepository(User) + .findOneBy({ id: authTokenPayload.userId }); + + if (!user) throw new Error('Not Found User'); + + request.user = user; + + const { accessToken, accessTokenExpires } = + this.jwtTokenService.generateAccessToken(user); + + response.cookie('access_token', accessToken, { + httpOnly: true, + expires: new Date(accessTokenExpires), + }); + + return true; + } + } catch (e) { + response.clearCookie('access_token'); + response.clearCookie('refresh_token'); + throw new InvalidTokenException(e.message); + } + } +} diff --git a/backend/src/common/module/jwt-token/__test__/jwt-token.service.spec.ts b/backend/src/common/module/jwt-token/__test__/jwt-token.service.spec.ts new file mode 100644 index 00000000..79e1f1b8 --- /dev/null +++ b/backend/src/common/module/jwt-token/__test__/jwt-token.service.spec.ts @@ -0,0 +1,100 @@ +import { JwtTokenService } from '@common/module/jwt-token/jwt-token.service'; +import { JwtService } from '@nestjs/jwt'; +import { JwtTokenModule } from '@common/module/jwt-token/jwt-token.module'; +import { Test } from '@nestjs/testing'; +import { TokenType } from '@common/module/jwt-token/type/token-type'; + +describe('JwtTokenService Test', () => { + let jwtTokenService: JwtTokenService; + let jwtService: JwtService; + + beforeEach(async () => { + const module = await Test.createTestingModule({ + imports: [JwtTokenModule], + }).compile(); + + jwtTokenService = module.get(JwtTokenService); + jwtService = module.get(JwtService); + }); + describe('verifyAuthToken', () => { + test('ํ† ํฐ์ด ์œ ํšจํ•˜๋ฉด authTokenPayload๋ฅผ ๋ฆฌํ„ดํ•˜๋Š”๊ฐ€', async () => { + // given + const accessToken = jwtService.sign({ + userId: 1, + tokenType: TokenType.ACCESS, + exp: Date.now() + 1000 * 60 * 60, + }); + + // when + const result = jwtTokenService.verifyAuthToken( + accessToken, + TokenType.ACCESS, + ); + + // then + expect(result).toMatchObject({ userId: 1, tokenType: TokenType.ACCESS }); + }); + + test('ํ† ํฐ์ด ์œ ํšจํ•˜์ง€ ์•Š์œผ๋ฉด ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š”๊ฐ€', async () => { + // given + const token = 'sdfjasifojdsio.fdsajfiodsj.fsdajfpoas'; + + // when + const wrapper = async () => { + jwtTokenService.verifyAuthToken(token, TokenType.ACCESS); + }; + + // then + expect(wrapper).rejects.toThrow(Error); + }); + + test('ํ† ํฐ ํƒ€์ž…์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š”๊ฐ€', async () => { + // given + const accessToken = jwtService.sign({ + userId: 1, + tokenType: TokenType.ACCESS, + exp: Date.now() + 1000 * 60 * 60, + }); + + // when + const wrapper = async () => { + jwtTokenService.verifyAuthToken(accessToken, TokenType.REFRESH); + }; + + // then + expect(wrapper).rejects.toThrow(Error); + }); + + test('ํ† ํฐ์— userId๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š”๊ฐ€', async () => { + // given + const accessToken = jwtService.sign({ + tokenType: TokenType.ACCESS, + exp: Date.now() + 1000 * 60 * 60, + }); + + // when + const wrapper = async () => { + jwtTokenService.verifyAuthToken(accessToken, TokenType.ACCESS); + }; + + // then + expect(wrapper).rejects.toThrow(Error); + }); + + test('ํ† ํฐ์˜ ์œ ํšจ๊ธฐ๊ฐ„์ด ๋งŒ๋ฃŒ๋œ ๊ฒฝ์šฐ ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š”๊ฐ€', async () => { + // given + const accessToken = jwtService.sign({ + tokenType: TokenType.ACCESS, + exp: Date.now() - 1000, + }); + + // when + const wrapper = async () => { + jwtTokenService.verifyAuthToken(accessToken, TokenType.ACCESS); + }; + + // then + expect(wrapper).rejects.toThrow(Error); + }); + }); +}); diff --git a/backend/src/common/module/jwt-token/jwt-token.module.ts b/backend/src/common/module/jwt-token/jwt-token.module.ts new file mode 100644 index 00000000..6c832f06 --- /dev/null +++ b/backend/src/common/module/jwt-token/jwt-token.module.ts @@ -0,0 +1,21 @@ +import { Module } from '@nestjs/common'; +import { JwtModule } from '@nestjs/jwt'; +import { JwtConfigModule } from '@config/jwt/config.module'; +import { JwtConfigService } from '@config/jwt/config.service'; +import { JwtTokenService } from '@common/module/jwt-token/jwt-token.service'; + +@Module({ + imports: [ + JwtConfigModule, + JwtModule.registerAsync({ + imports: [JwtConfigModule], + useFactory: async (jwtConfigService: JwtConfigService) => ({ + secret: jwtConfigService.secret, + }), + inject: [JwtConfigService], + }), + ], + providers: [JwtTokenService], + exports: [JwtTokenService], +}) +export class JwtTokenModule {} diff --git a/backend/src/common/module/jwt-token/jwt-token.service.ts b/backend/src/common/module/jwt-token/jwt-token.service.ts new file mode 100644 index 00000000..02290f19 --- /dev/null +++ b/backend/src/common/module/jwt-token/jwt-token.service.ts @@ -0,0 +1,90 @@ +import { Injectable } from '@nestjs/common'; +import { JwtService } from '@nestjs/jwt'; +import { LocalDateTime, ZoneId, ZoneOffset } from '@js-joda/core'; +import { plainToInstance } from 'class-transformer'; +import { validateSync } from 'class-validator'; +import { JwtConfigService } from '@config/jwt/config.service'; +import { TokenType } from '@common/module/jwt-token/type/token-type'; +import { toLocalDateTime } from '@common/util/date-time'; +import { User } from '@app/user/user.entity'; +import { AuthTokenPayload } from '@common/module/jwt-token/type/auth-token-payload'; + +@Injectable() +export class JwtTokenService { + constructor( + private readonly jwtService: JwtService, + private readonly jwtConfigService: JwtConfigService, + ) {} + + generateToken(user: User, expires: number, tokenType: TokenType) { + return this.jwtService.sign({ + userId: user.id, + exp: expires, + tokenType, + iat: LocalDateTime.now(ZoneId.UTC).toEpochSecond(ZoneOffset.UTC), + }); + } + + generateAccessToken(user: User, now: Date = new Date()) { + const accessTokenExpires = toLocalDateTime(now) + .plusMinutes(this.jwtConfigService.accessTokenExpirationMinutes) + .toEpochSecond(ZoneOffset.UTC); + const accessToken = this.generateToken( + user, + accessTokenExpires, + TokenType.ACCESS, + ); + + return { + accessToken, + accessTokenExpires, + }; + } + + generateRefreshToken(user: User, now: Date = new Date()) { + const refreshTokenExpires = toLocalDateTime(now) + .plusDays(this.jwtConfigService.refreshTokenExpirationDays) + .toEpochSecond(ZoneOffset.UTC); + const refreshToken = this.generateToken( + user, + refreshTokenExpires, + TokenType.REFRESH, + ); + + return { + refreshToken, + refreshTokenExpires, + }; + } + + verifyAuthToken(token: string, tokenType: TokenType) { + try { + const payload = this.jwtService.verify(token); + const authTokenPayload = plainToInstance(AuthTokenPayload, payload); + + if (!this.isValidPayload(authTokenPayload, tokenType)) + throw new Error('Invalid Token Payload'); + + return authTokenPayload; + } catch (e) { + throw new Error('Invalid Token'); + } + } + + private isValidPayload( + authTokenPayload: AuthTokenPayload, + tokenType: TokenType, + ) { + const errors = validateSync(authTokenPayload); + + if (errors.length > 0) { + return false; + } + + if (authTokenPayload.tokenType !== tokenType) { + return false; + } + + return true; + } +} diff --git a/backend/src/common/module/jwt-token/type/auth-token-payload.ts b/backend/src/common/module/jwt-token/type/auth-token-payload.ts new file mode 100644 index 00000000..ead0e32c --- /dev/null +++ b/backend/src/common/module/jwt-token/type/auth-token-payload.ts @@ -0,0 +1,11 @@ +import { TokenType } from '@common/module/jwt-token/type/token-type'; +import { IsEnum, IsNumber, Min } from 'class-validator'; + +export class AuthTokenPayload { + @IsNumber() + @Min(1) + userId: number; + + @IsEnum(TokenType) + tokenType: TokenType; +} diff --git a/backend/src/common/module/jwt-token/type/token-type.ts b/backend/src/common/module/jwt-token/type/token-type.ts new file mode 100644 index 00000000..461cbd77 --- /dev/null +++ b/backend/src/common/module/jwt-token/type/token-type.ts @@ -0,0 +1,4 @@ +export enum TokenType { + ACCESS = 'ACCESS', + REFRESH = 'REFRESH', +} diff --git a/backend/src/common/util/__test__/date-time.spec.ts b/backend/src/common/util/__test__/date-time.spec.ts new file mode 100644 index 00000000..9229db0b --- /dev/null +++ b/backend/src/common/util/__test__/date-time.spec.ts @@ -0,0 +1,38 @@ +import { DateTimeFormatter, LocalDateTime } from '@js-joda/core'; +import { toDate, toLocalDateTime } from '../date-time'; + +describe('Date Time Utils Test', () => { + describe('toDate', () => { + test('LocalDateTime to Date', async () => { + // given + const dateString = '2022-09-01T15:00:00.000Z'; + const localDateTime = LocalDateTime.parse( + dateString, + DateTimeFormatter.ISO_ZONED_DATE_TIME, + ); + + // when + const date = toDate(localDateTime); + + // then + expect(date).toEqual(new Date(dateString)); + expect(date.toISOString()).toEqual(dateString); + }); + }); + + describe('toLocalDateTime', () => { + test('Date To LocalDateTime', async () => { + // given + const dateString = '2022-09-01T15:00:00.000Z'; + const date = new Date(dateString); + + // when + const localDateTime = toLocalDateTime(date); + + // then + expect(localDateTime).toEqual( + LocalDateTime.parse(dateString, DateTimeFormatter.ISO_ZONED_DATE_TIME), + ); + }); + }); +}); diff --git a/backend/src/common/util/date-time.ts b/backend/src/common/util/date-time.ts new file mode 100644 index 00000000..4dcfb94b --- /dev/null +++ b/backend/src/common/util/date-time.ts @@ -0,0 +1,17 @@ +import { + convert, + DateTimeFormatter, + LocalDateTime, + ZoneId, +} from '@js-joda/core'; + +export const toDate = (date: LocalDateTime): Date => { + return convert(date, ZoneId.UTC).toDate(); +}; + +export const toLocalDateTime = (date: Date): LocalDateTime => { + return LocalDateTime.parse( + date.toISOString(), + DateTimeFormatter.ISO_ZONED_DATE_TIME, + ); +}; diff --git a/backend/src/setNestApp.ts b/backend/src/setNestApp.ts index c87ffaaf..2e0a8508 100644 --- a/backend/src/setNestApp.ts +++ b/backend/src/setNestApp.ts @@ -6,10 +6,13 @@ import { VersioningType, } from '@nestjs/common'; import { ValidationError } from 'class-validator'; +import * as cookieParser from 'cookie-parser'; import { BadParameterException } from '@exception/bad-parameter.exception'; import { AllExceptionFilter } from '@filter/all-exception.filter'; export const setNestApp = (app: INestApplication) => { + app.use(cookieParser()); + app.enableVersioning({ type: VersioningType.URI, defaultVersion: '1', diff --git a/backend/src/setSwagger.ts b/backend/src/setSwagger.ts index 8f5a7ca0..ad15cf6b 100644 --- a/backend/src/setSwagger.ts +++ b/backend/src/setSwagger.ts @@ -1,15 +1,17 @@ import { INestApplication } from '@nestjs/common'; import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger'; -import { AppConfigService } from '@config/app/config.service'; import { ResponseEntity } from '@common/response-entity'; export const setSwagger = (app: INestApplication) => { - const appConfigService = app.get(AppConfigService); - const config = new DocumentBuilder() .setTitle('MoyeoMoyeo REST API Specification') .setVersion('1.0.0') - .addServer(`http://localhost:${appConfigService.port}`) + .addServer(`http://localhost`) + .addCookieAuth( + 'access_token', + { type: 'apiKey', in: 'cookie' }, + 'cookieAuth', + ) .build(); const document = SwaggerModule.createDocument(app, config, { diff --git a/backend/test/app.e2e-spec.ts b/backend/test/app.e2e-spec.ts index 3a37f798..2c2ee0aa 100644 --- a/backend/test/app.e2e-spec.ts +++ b/backend/test/app.e2e-spec.ts @@ -38,12 +38,7 @@ describe('AppController (e2e)', () => { const result = await request(app.getHttpServer()).get(url(id)); // then - expect(result.status).toEqual(200); - expect(result.body).toMatchObject({ - status: 'OK', - message: '', - data: 'Hello World!', - }); + expect(result.status).toEqual(401); }); }); }); From 1e713408971245ab98b8e4db9ab62882d286403b Mon Sep 17 00:00:00 2001 From: yangseungchan Date: Thu, 24 Nov 2022 12:32:24 +0900 Subject: [PATCH 024/142] =?UTF-8?q?[Feature]=20Comment,=20CommentInput=20?= =?UTF-8?q?=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EB=A7=88=ED=81=AC?= =?UTF-8?q?=EC=97=85=20(#62)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ๐Ÿฅ… chore: frontend ci ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ • * :recycle: refactor: FAB ์ปดํฌ๋„ŒํŠธ ๋ฆฌํŒฉํ† ๋ง ํšŒ์ „ ํšจ๊ณผ ๋Œ€์ƒ ๋ณ€๊ฒฝ, FAB์˜ props ์—๋Ÿฌ ์ˆ˜์ • * โ™ป๏ธ refactor: PageLayout ์ปดํฌ๋„ŒํŠธ ๋ฆฌํŒฉํ† ๋ง * ๐Ÿ› fix: pageLayout ์Šคํฌ๋กค ๋ฒ„๊ทธ ์ˆ˜์ • * ๐Ÿฅ… chore: FAB ์Šคํƒ€์ผ๋ง ์ˆ˜์ • * ๐Ÿฅ… chore: ์ปดํฌ๋„ŒํŠธ๋“ค์˜ ํด๋” ์œ„์น˜ ๋ณ€๊ฒฝ * โ™ป๏ธ refactor: FAB ํšŒ์ „ ์—ฌ๋ถ€๋ฅผ boolean attribute๋กœ ์ „๋‹ฌํ•˜๋„๋ก ์ˆ˜์ • * :recycle: refactor: FAB์˜ UI๋กœ์ง๊ณผ ๋‹ค๋ฅธ ๋กœ์ง ๋ถ„๋ฆฌ๋ฅผ ์œ„ํ•œ ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ PageUtilButton ์ถ”๊ฐ€, FloatingButton ๋ฆฌํŒฉํ† ๋ง * โ™ป๏ธ refactor: UserLoginItem ์ถ”๊ฐ€, Header story ๋ณ€๊ฒฝ * โ™ป๏ธ refactor: PageLayout ์ปดํฌ๋„ŒํŠธ ๋ฆฌํŒฉํ† ๋ง ๋ฐ ์Šคํ† ๋ฆฌ ์ž‘์„ฑ * ๐Ÿฅ… chore: PageUtilButton -> FloatingUtilButton ์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: ์ปดํฌ๋„ŒํŠธ๋“ค์˜ ์Šคํ† ๋ฆฌ ์ˆ˜์ • * ๐Ÿ› fix: content ๋ถ€๋ถ„์ด ํŽ˜์ด์ง€ ์—ฌ๋ฐฑ์„ ๊ฝ‰์ฑ„์šฐ๋„๋ก ์ˆ˜์ • * ๐Ÿฅ… chore: ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ ํŽ˜์ด์ง€ ์ด๋™ ๋กœ์ง ์ถ”๊ฐ€ * ๐Ÿฅ… chore: ์ปดํฌ๋„ŒํŠธ ์ด๋ฆ„์„ FloatingUtillButton์œผ๋กœ ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: ๊ฒŒ์‹œ๊ธ€ ์“ฐ๊ธฐํŽ˜์ด์ง€ ๊ฒฝ๋กœ ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: PageLayout props ์ด๋ฆ„ ๋ณ€๊ฒฝ * [Feature] ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ธํŒ… (#56) * :goal_net: chore: ์˜์กด์„ฑ ์„ค์น˜ - @nestjs/typeorm, typeorm, mysql2 ์„ค์น˜ * :sparkles: feature: MysqlConfigService ์ถ”๊ฐ€ - MYSQL_PORT - MYSQL_HOST - MYSQL_DATABASE - MYSQL_USER - MYSQL_PASSWORD ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ถ”๊ฐ€ * :sparkles: feature: TypeORM ์—ฐ๊ฒฐ ์„ค์ • - TypeORM ๊ฐœ๋ฐœํ™˜๊ฒฝ ์—ฐ๊ฒฐ ์„ค์ • - TypeORM ํ…Œ์ŠคํŠธํ™˜๊ฒฝ ์—ฐ๊ฒฐ ์„ค์ • * :goal_net: chore: ๋กœ์ปฌ์šฉ ๋„์ปค ์ปดํฌ์ฆˆ ์ˆ˜์ • - ๋กœ์ปฌ ํ…Œ์ŠคํŠธ์šฉ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ถ”๊ฐ€ - .env.development, .env.test๋ฅผ ํ†ตํ•ด ๋””๋น„ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์…‹ํŒ…ํ•˜๋„๋ก ์ˆ˜์ • * :goal_net: chore: ci ํ…Œ์ŠคํŠธ์šฉ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ • * ๐Ÿฅ… chore: timeFormatter ์„ค์ • * โœจ feature: Comment ์ปดํฌ๋„ŒํŠธ UI ๊ตฌํ˜„ * โœจ feature: CommentInput ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * โ™ป๏ธ refactor: PageLayout์—์„œ Footer๋ฅผ ์ธ์ž๋กœ ๋ฐ›๋„๋ก ๋ณ€๊ฒฝ * โœจ feature: CommentInput ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * ๐Ÿฅ… chore: Storybook ๊ฒฝ๋กœ ์ •๋ฆฌ * ๐Ÿฅ… chore: TimeFormatter ์ปดํฌ๋„ŒํŠธ ์ œ๊ฑฐ, ์œ ํ‹ธ ํ•จ์ˆ˜๋กœ ๋Œ€์ฒด * ๐Ÿฅ… chore: Footer์˜ ์ด๋ฆ„์„ NavigationBar๋กœ ์ˆ˜์ • * ๐Ÿฅ… chore: timeago import ๊ฒฝ๋กœ ์ˆ˜์ • * ๐Ÿฅ… chore: CommentInput์˜ TODO์ถ”๊ฐ€ * ๐Ÿฅ… chore: typing ์ถฉ๋Œ ํ•ด๊ฒฐ Co-authored-by: Kim Myeongil <67570061+username1103@users.noreply.github.com> --- frontend/package-lock.json | 13 +++- frontend/package.json | 3 +- .../article/Comment/Comment.stories.tsx | 11 ++++ .../src/components/article/Comment/index.tsx | 63 +++++++++++++++++++ .../src/components/article/Comment/styles.tsx | 46 ++++++++++++++ .../CommentInput/CommentInput.stories.tsx | 22 +++++++ .../components/article/CommentInput/index.tsx | 34 ++++++++++ .../article/CommentInput/styles.tsx | 10 +++ .../FloatingButton/FloatingButton.stories.tsx | 3 +- .../FloatingUtilButton.stories.tsx | 3 +- .../common/Footer/Footer.stories.tsx | 11 ---- .../DetailTitle/DetailTitle.stories.tsx | 2 +- .../common/Header/Header.stories.tsx | 2 +- .../LoginButton/LoginButton.stories.tsx | 2 +- .../Header/RootTitle/RootTitle.stories.tsx | 2 +- .../Header/UtilButton/UtilButton.stories.tsx | 2 +- .../NavigationTab/NavigationTab.stories.tsx | 11 ++++ .../{Footer => NavigationTab}/index.tsx | 10 +-- .../common/PageLayout/PageLayout.stories.tsx | 7 ++- .../components/common/PageLayout/index.tsx | 8 +-- frontend/src/pages/index.tsx | 3 +- frontend/src/pages/my.tsx | 3 +- frontend/src/pages/notification.tsx | 3 +- frontend/src/pages/test.tsx | 3 +- frontend/src/typings/types.ts | 18 +++++- frontend/src/utils/dateTime.ts | 8 +++ frontend/tsconfig.json | 3 +- 27 files changed, 267 insertions(+), 39 deletions(-) create mode 100644 frontend/src/components/article/Comment/Comment.stories.tsx create mode 100644 frontend/src/components/article/Comment/index.tsx create mode 100644 frontend/src/components/article/Comment/styles.tsx create mode 100644 frontend/src/components/article/CommentInput/CommentInput.stories.tsx create mode 100644 frontend/src/components/article/CommentInput/index.tsx create mode 100644 frontend/src/components/article/CommentInput/styles.tsx delete mode 100644 frontend/src/components/common/Footer/Footer.stories.tsx create mode 100644 frontend/src/components/common/NavigationTab/NavigationTab.stories.tsx rename frontend/src/components/common/{Footer => NavigationTab}/index.tsx (88%) create mode 100644 frontend/src/utils/dateTime.ts diff --git a/frontend/package-lock.json b/frontend/package-lock.json index cea58fe5..029739c2 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -21,7 +21,8 @@ "axios": "^1.1.3", "next": "^12.3.3", "react": "^17.0.2", - "react-dom": "^17.0.2" + "react-dom": "^17.0.2", + "timeago.js": "^4.0.2" }, "devDependencies": { "@babel/core": "^7.20.2", @@ -26411,6 +26412,11 @@ "node": ">=0.4" } }, + "node_modules/timeago.js": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/timeago.js/-/timeago.js-4.0.2.tgz", + "integrity": "sha512-a7wPxPdVlQL7lqvitHGGRsofhdwtkoSXPGATFuSOA2i1ZNQEPLrGnj68vOp2sOJTCFAQVXPeNMX/GctBaO9L2w==" + }, "node_modules/timers-browserify": { "version": "2.0.12", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", @@ -48299,6 +48305,11 @@ } } }, + "timeago.js": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/timeago.js/-/timeago.js-4.0.2.tgz", + "integrity": "sha512-a7wPxPdVlQL7lqvitHGGRsofhdwtkoSXPGATFuSOA2i1ZNQEPLrGnj68vOp2sOJTCFAQVXPeNMX/GctBaO9L2w==" + }, "timers-browserify": { "version": "2.0.12", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", diff --git a/frontend/package.json b/frontend/package.json index 5d2f78db..aa520d6d 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -38,7 +38,8 @@ "axios": "^1.1.3", "next": "^12.3.3", "react": "^17.0.2", - "react-dom": "^17.0.2" + "react-dom": "^17.0.2", + "timeago.js": "^4.0.2" }, "devDependencies": { "@babel/core": "^7.20.2", diff --git a/frontend/src/components/article/Comment/Comment.stories.tsx b/frontend/src/components/article/Comment/Comment.stories.tsx new file mode 100644 index 00000000..1b94a054 --- /dev/null +++ b/frontend/src/components/article/Comment/Comment.stories.tsx @@ -0,0 +1,11 @@ +import Comment from '.'; +import { ComponentMeta, ComponentStory } from '@storybook/react'; + +export default { + title: 'Component/Comment', + component: Comment, +} as ComponentMeta; + +const Template: ComponentStory = (args) => ; + +export const Default = Template.bind({}); diff --git a/frontend/src/components/article/Comment/index.tsx b/frontend/src/components/article/Comment/index.tsx new file mode 100644 index 00000000..a923e88b --- /dev/null +++ b/frontend/src/components/article/Comment/index.tsx @@ -0,0 +1,63 @@ +import { Avatar, Text } from '@mantine/core'; +import dateTimeFormat from '@utils/dateTime'; +import { Comment as CommentItem } from '@typings/types'; +import { + CommentWrapper, + CommentHeader, + CommentAuthor, + CommentUtils, + CommentUtilItem, + CommentContent, +} from './styles'; + +/** + * mockComment ์ง€์šฐ๋ฉด props์˜ optional ์ง€์šฐ๊ธฐ + */ +const mockComment = { + id: 1, + authorId: 2, + authorName: 'J999_๊น€์บ ํผ', + authorProfileImage: 'https://avatars.githubusercontent.com/u/90585081?v=4"', + contents: + '์ข‹์€ ๊ธ€ ์ž˜ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค!์ข‹์€ ๊ธ€ ์ž˜ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค์ข‹์€ ๊ธ€ ์ž˜ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค์ข‹์€ ๊ธ€ ์ž˜ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค์ข‹์€ ๊ธ€ ์ž˜ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค', + createdAt: '2022-11-23T08:19:33.899Z', +}; + +interface Props { + /** + * ๋Œ“๊ธ€ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. + */ + comment?: CommentItem; +} + +const Comment = ({ comment = mockComment }: Props) => { + return ( + + + + + + {comment.authorName} + + + {dateTimeFormat(comment.createdAt)} + + + + alert('์‚ญ์ œ ํ•˜์‹ค?')}> + + ์‚ญ์ œ + + + + + + + {comment.contents} + + + + ); +}; + +export default Comment; diff --git a/frontend/src/components/article/Comment/styles.tsx b/frontend/src/components/article/Comment/styles.tsx new file mode 100644 index 00000000..2076a6f2 --- /dev/null +++ b/frontend/src/components/article/Comment/styles.tsx @@ -0,0 +1,46 @@ +import styled from '@emotion/styled'; + +const CommentWrapper = styled.div` + width: 100%; + padding: 1.6rem; + border-top: 1px solid ${({ theme }) => theme.colors.gray[2]}; + border-bottom: 1px solid ${({ theme }) => theme.colors.gray[2]}; + display: flex; + flex-direction: column; +`; + +const CommentHeader = styled.div` + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 0.8rem; +`; + +const CommentAuthor = styled.div` + display: flex; + align-items: center; + gap: 0.8rem; +`; + +const CommentUtils = styled.div` + display: flex; + align-items: center; + gap: 0.8rem; +`; + +const CommentUtilItem = styled.div` + cursor: pointer; +`; + +const CommentContent = styled.div` + width: 100%; +`; + +export { + CommentWrapper, + CommentHeader, + CommentAuthor, + CommentUtils, + CommentUtilItem, + CommentContent, +}; diff --git a/frontend/src/components/article/CommentInput/CommentInput.stories.tsx b/frontend/src/components/article/CommentInput/CommentInput.stories.tsx new file mode 100644 index 00000000..6f23f349 --- /dev/null +++ b/frontend/src/components/article/CommentInput/CommentInput.stories.tsx @@ -0,0 +1,22 @@ +import CommentInput from '.'; +import PageLayout from '@components/common/PageLayout'; +import Header from '@components/common/Header'; +import RootTitle from '@components/common/Header/RootTitle'; + +import { ComponentMeta, ComponentStory } from '@storybook/react'; + +export default { + title: 'Component/CommentInput', + component: CommentInput, +} as ComponentMeta; + +const Template: ComponentStory = (args) => ; +const PageTemplate: ComponentStory = (args) => ( + } />} + footer={} + > +); + +export const Default = Template.bind({}); +export const PageSticky = PageTemplate.bind({}); diff --git a/frontend/src/components/article/CommentInput/index.tsx b/frontend/src/components/article/CommentInput/index.tsx new file mode 100644 index 00000000..d5d7b057 --- /dev/null +++ b/frontend/src/components/article/CommentInput/index.tsx @@ -0,0 +1,34 @@ +import { useRef } from 'react'; +import { CommentInputWrapper } from './styles'; +import { TextInput, ActionIcon } from '@mantine/core'; +import { IconSend } from '@tabler/icons'; + +const CommentInput = () => { + const inputRef = useRef(null); + /** + * TODO : ๋Œ“๊ธ€ ์ž…๋ ฅ ํ•ธ๋“ค๋Ÿฌ ์ˆ˜์ • + */ + const handleSubmitComment = () => { + alert('๋Œ“๊ธ€ ์ž…๋ ฅ'); + if (inputRef.current) { + inputRef.current.value = ''; + } + }; + return ( + + + + + } + rightSectionWidth={48} + /> + + ); +}; + +export default CommentInput; diff --git a/frontend/src/components/article/CommentInput/styles.tsx b/frontend/src/components/article/CommentInput/styles.tsx new file mode 100644 index 00000000..e9b6de02 --- /dev/null +++ b/frontend/src/components/article/CommentInput/styles.tsx @@ -0,0 +1,10 @@ +import styled from '@emotion/styled'; + +const CommentInputWrapper = styled.div` + padding: 1.6rem; + width: 100%; + position: sticky; + bottom: 0; +`; + +export { CommentInputWrapper }; diff --git a/frontend/src/components/common/FloatingButton/FloatingButton.stories.tsx b/frontend/src/components/common/FloatingButton/FloatingButton.stories.tsx index fbe75ea2..4b0e9e5d 100644 --- a/frontend/src/components/common/FloatingButton/FloatingButton.stories.tsx +++ b/frontend/src/components/common/FloatingButton/FloatingButton.stories.tsx @@ -4,6 +4,7 @@ import { userEvent, within } from '@storybook/testing-library'; import FloatingButton from '.'; import PageLayout from '@components/common/PageLayout'; import Header from '@components/common/Header'; +import NavigationTab from '@components/common/NavigationTab'; import DetailTitle from '@components/common/Header/DetailTitle'; export default { @@ -16,7 +17,7 @@ const SampleHeader = () => ( ); const DefaultTemplate: ComponentStory = (args) => ( - } hasFooter> + } footer={}> ); diff --git a/frontend/src/components/common/FloatingUtilButton/FloatingUtilButton.stories.tsx b/frontend/src/components/common/FloatingUtilButton/FloatingUtilButton.stories.tsx index 81f00f91..12065285 100644 --- a/frontend/src/components/common/FloatingUtilButton/FloatingUtilButton.stories.tsx +++ b/frontend/src/components/common/FloatingUtilButton/FloatingUtilButton.stories.tsx @@ -4,6 +4,7 @@ import { userEvent, within } from '@storybook/testing-library'; import FloatingUtilButton from '.'; import PageLayout from '@components/common/PageLayout'; import Header from '@components/common/Header'; +import NavigationTab from '@components/common/NavigationTab'; import DetailTitle from '@components/common/Header/DetailTitle'; export default { @@ -24,7 +25,7 @@ const SampleHeader = () => ( ); const DefaultTemplate: ComponentStory = (args) => ( - } hasFooter> + } footer={}> ); diff --git a/frontend/src/components/common/Footer/Footer.stories.tsx b/frontend/src/components/common/Footer/Footer.stories.tsx deleted file mode 100644 index 8671a37a..00000000 --- a/frontend/src/components/common/Footer/Footer.stories.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import { ComponentMeta, ComponentStory } from '@storybook/react'; -import Footer from '.'; - -export default { - title: 'Component/Footer', - component: Footer, -} as ComponentMeta; - -const Template: ComponentStory = (args) =>
    ; - -export const _Footer = Template.bind({}); diff --git a/frontend/src/components/common/Header/DetailTitle/DetailTitle.stories.tsx b/frontend/src/components/common/Header/DetailTitle/DetailTitle.stories.tsx index 57ec3187..a29a06e2 100644 --- a/frontend/src/components/common/Header/DetailTitle/DetailTitle.stories.tsx +++ b/frontend/src/components/common/Header/DetailTitle/DetailTitle.stories.tsx @@ -2,7 +2,7 @@ import DetailTitle from '.'; import { ComponentMeta, ComponentStory } from '@storybook/react'; export default { - title: 'Component/Header/HeaderItems/DetailTitle', + title: 'Component/Layout/Header/HeaderItems/DetailTitle', component: DetailTitle, } as ComponentMeta; diff --git a/frontend/src/components/common/Header/Header.stories.tsx b/frontend/src/components/common/Header/Header.stories.tsx index d3daa261..8bbab603 100644 --- a/frontend/src/components/common/Header/Header.stories.tsx +++ b/frontend/src/components/common/Header/Header.stories.tsx @@ -10,7 +10,7 @@ import DetailTitle from '@components/common/Header/DetailTitle'; import UtilButton from '@components/common/Header/UtilButton'; export default { - title: 'Component/Header', + title: 'Component/Layout/Header', component: Header, } as ComponentMeta; diff --git a/frontend/src/components/common/Header/LoginButton/LoginButton.stories.tsx b/frontend/src/components/common/Header/LoginButton/LoginButton.stories.tsx index c79f7fde..b882ec95 100644 --- a/frontend/src/components/common/Header/LoginButton/LoginButton.stories.tsx +++ b/frontend/src/components/common/Header/LoginButton/LoginButton.stories.tsx @@ -2,7 +2,7 @@ import LoginButton from '.'; import { ComponentMeta, ComponentStory } from '@storybook/react'; export default { - title: 'Component/Header/HeaderItems/LoginButton', + title: 'Component/Layout/Header/HeaderItems/LoginButton', component: LoginButton, } as ComponentMeta; diff --git a/frontend/src/components/common/Header/RootTitle/RootTitle.stories.tsx b/frontend/src/components/common/Header/RootTitle/RootTitle.stories.tsx index 5226882f..161fb736 100644 --- a/frontend/src/components/common/Header/RootTitle/RootTitle.stories.tsx +++ b/frontend/src/components/common/Header/RootTitle/RootTitle.stories.tsx @@ -2,7 +2,7 @@ import RootTitle from '.'; import { ComponentMeta, ComponentStory } from '@storybook/react'; export default { - title: 'Component/Header/HeaderItems/RootTitle', + title: 'Component/Layout/Header/HeaderItems/RootTitle', component: RootTitle, } as ComponentMeta; diff --git a/frontend/src/components/common/Header/UtilButton/UtilButton.stories.tsx b/frontend/src/components/common/Header/UtilButton/UtilButton.stories.tsx index 11212677..fb63f0d3 100644 --- a/frontend/src/components/common/Header/UtilButton/UtilButton.stories.tsx +++ b/frontend/src/components/common/Header/UtilButton/UtilButton.stories.tsx @@ -3,7 +3,7 @@ import { ComponentMeta, ComponentStory } from '@storybook/react'; import { Menu, Text } from '@mantine/core'; export default { - title: 'Component/Header/HeaderItems/UtilButton', + title: 'Component/Layout/Header/HeaderItems/UtilButton', component: UtilButton, } as ComponentMeta; diff --git a/frontend/src/components/common/NavigationTab/NavigationTab.stories.tsx b/frontend/src/components/common/NavigationTab/NavigationTab.stories.tsx new file mode 100644 index 00000000..88669677 --- /dev/null +++ b/frontend/src/components/common/NavigationTab/NavigationTab.stories.tsx @@ -0,0 +1,11 @@ +import { ComponentMeta, ComponentStory } from '@storybook/react'; +import NavigationTab from '.'; + +export default { + title: 'Component/Layout/NavigationTab', + component: NavigationTab, +} as ComponentMeta; + +const Template: ComponentStory = (args) => ; + +export const _NavigationTab = Template.bind({}); diff --git a/frontend/src/components/common/Footer/index.tsx b/frontend/src/components/common/NavigationTab/index.tsx similarity index 88% rename from frontend/src/components/common/Footer/index.tsx rename to frontend/src/components/common/NavigationTab/index.tsx index 6ec352ab..15d21bc9 100644 --- a/frontend/src/components/common/Footer/index.tsx +++ b/frontend/src/components/common/NavigationTab/index.tsx @@ -4,14 +4,14 @@ import { useTheme } from '@emotion/react'; import Link from 'next/link'; import { useRouter } from 'next/router'; -const Footer = () => { +const NavigationTab = () => { const { colors: { indigo, gray }, } = useTheme(); const { pathname } = useRouter(); return ( - + @@ -27,11 +27,11 @@ const Footer = () => { - + ); }; -const FooterWrapper = styled.footer` +const NavigationTabWrapper = styled.footer` display: flex; position: sticky; bottom: 0; @@ -53,4 +53,4 @@ const TabDiv = styled.div` } `; -export default Footer; +export default NavigationTab; diff --git a/frontend/src/components/common/PageLayout/PageLayout.stories.tsx b/frontend/src/components/common/PageLayout/PageLayout.stories.tsx index ebf37202..4501844c 100644 --- a/frontend/src/components/common/PageLayout/PageLayout.stories.tsx +++ b/frontend/src/components/common/PageLayout/PageLayout.stories.tsx @@ -3,6 +3,7 @@ import { Menu, Text } from '@mantine/core'; import PageLayout from '.'; import Header from '@components/common/Header'; +import NavigationTab from '@components/common/NavigationTab'; import RootTitle from '@components/common/Header/RootTitle'; import UserLoginItem from '@components/common/Header/UserLoginItem'; import DetailTitle from '@components/common/Header/DetailTitle'; @@ -17,7 +18,7 @@ const Template: ComponentStory = (args) => , hasFloatingUtil: true, header: (
    , hasFloatingUtil: false, header: (
    , hasFloatingUtil: true, header: (
    { +const PageLayout = ({ header, footer, hasFloatingUtil, children }: Props) => { return ( {header} @@ -18,7 +16,7 @@ const PageLayout = ({ header, hasFooter, hasFloatingUtil, children }: Props) => {children} {hasFloatingUtil && } - {hasFooter &&
    } + {footer} ); }; diff --git a/frontend/src/pages/index.tsx b/frontend/src/pages/index.tsx index bff6afcf..b970a08b 100644 --- a/frontend/src/pages/index.tsx +++ b/frontend/src/pages/index.tsx @@ -1,6 +1,7 @@ import PageLayout from '@components/common/PageLayout'; import Header from '@components/common/Header'; import DetailTitle from '@components/common/Header/DetailTitle'; +import NavigationTab from '@components/common/NavigationTab'; import { Chip } from '@mantine/core'; @@ -12,7 +13,7 @@ const Main = () => { leftNode={} /> } - hasFooter + footer={} hasFloatingUtil > {Array.from({ length: 100 }) diff --git a/frontend/src/pages/my.tsx b/frontend/src/pages/my.tsx index f244c4ca..50f187e6 100644 --- a/frontend/src/pages/my.tsx +++ b/frontend/src/pages/my.tsx @@ -1,7 +1,8 @@ import PageLayout from '@components/common/PageLayout'; +import NavigationTab from '@components/common/NavigationTab'; const My = () => { - return my page; + return }>my page; }; export default My; diff --git a/frontend/src/pages/notification.tsx b/frontend/src/pages/notification.tsx index 8823f386..3f540d04 100644 --- a/frontend/src/pages/notification.tsx +++ b/frontend/src/pages/notification.tsx @@ -1,7 +1,8 @@ import PageLayout from '@components/common/PageLayout'; +import NavigationTab from '@components/common/NavigationTab'; const Notification = () => { - return notification page; + return }>notification page; }; export default Notification; diff --git a/frontend/src/pages/test.tsx b/frontend/src/pages/test.tsx index e9ccdaf9..01ba529b 100644 --- a/frontend/src/pages/test.tsx +++ b/frontend/src/pages/test.tsx @@ -3,6 +3,7 @@ import styled from '@emotion/styled'; import useIntersect from '@hooks/useIntersect'; import PageLayout from '@components/common/PageLayout'; import useFetchTestData from '@hooks/queries/useFetchTestData'; +import NavigationTab from '@components/common/NavigationTab'; const Test = () => { const { data, fetchNextPage, hasNextPage, isFetching } = useFetchTestData(); @@ -20,7 +21,7 @@ const Test = () => { }); return ( - + }> {testData.map((data, index) => ( {data} ))} diff --git a/frontend/src/typings/types.ts b/frontend/src/typings/types.ts index 7a078e8d..320cc0cf 100644 --- a/frontend/src/typings/types.ts +++ b/frontend/src/typings/types.ts @@ -44,10 +44,26 @@ interface CategoryType { name: Category; } +interface Comment { + id: number; + authorId: number; + authorName: string; + authorProfileImage: string; + contents: string; + createdAt: string; +} + interface TestResponseType { dataArr: string[]; isLast: boolean; currentId: number; } -export type { ArticlePreviewType, ArticleType, LocationType, CategoryType, TestResponseType }; +export type { + ArticlePreviewType, + ArticleType, + LocationType, + CategoryType, + TestResponseType, + Comment, +}; diff --git a/frontend/src/utils/dateTime.ts b/frontend/src/utils/dateTime.ts new file mode 100644 index 00000000..81e64930 --- /dev/null +++ b/frontend/src/utils/dateTime.ts @@ -0,0 +1,8 @@ +import { register, format } from 'timeago.js'; +import ko from 'timeago.js/lib/lang/ko'; + +register('ko', ko); + +export default function dateTimeFormat(date: string | Date) { + return format(date, 'ko'); +} diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json index 90f0745e..6cd0b137 100644 --- a/frontend/tsconfig.json +++ b/frontend/tsconfig.json @@ -30,7 +30,8 @@ "@apis/*": ["src/apis/*"], "@mocks/*": ["src/mocks/*"], "@public/*": ["public/*"], - "@constants/*": ["src/constants/*"] + "@constants/*": ["src/constants/*"], + "@utils/*": ["src/utils/*"] } }, "include": ["custom.d.ts", "next-env.d.ts", "**/*.ts", "**/*.tsx", ".storybook/**/*.tsx"], From 4a8b54e0910125df937203354b7cfc198d50aa10 Mon Sep 17 00:00:00 2001 From: Gakko <90585081+pythonstrup@users.noreply.github.com> Date: Thu, 24 Nov 2022 19:49:00 +0900 Subject: [PATCH 025/142] =?UTF-8?q?[Feature]=20HTTPS=20=ED=94=84=EB=A1=A0?= =?UTF-8?q?=ED=8A=B8=EC=97=94=EB=93=9C=20=EC=84=A4=EC=A0=95=20(#55)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ๐Ÿฅ… chore: ๊ฐœ๋ฐœ์šฉ ํ”„๋ก ํŠธ CD ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์ˆ˜์ • * ๐Ÿฅ… chore: certbot ์ ์šฉ์„ ์œ„ํ•œ docker compose ๋ฒ„์ „ ์กฐ์ • * ๐Ÿฅ… chore: ssl ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰๋ฐ›๋Š” ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ * ๐Ÿฅ… chore: https๋ฅผ ์œ„ํ•œ nginx config ์ž‘์„ฑ * ๐Ÿฅ… chore: docker compose certbot ์„ค์ • ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ์— ์ธ์ฆ์„œ ๋ฐœํ–‰ ๋กœ์ง ์‹คํ–‰ ์ถ”๊ฐ€ * ๐Ÿฅ… chore: ssl ์ธ์ฆ์„œ ์ž๋™๊ฐฑ์‹  ๋…ผ๋ฆฌ ์ถ”๊ฐ€ * ๐Ÿฅ… chore: https๋ฅผ ์œ„ํ•œ nginx config ์ž‘์„ฑ * ๐Ÿฅ… chore: https๋ฅผ ์œ„ํ•œ nginx config ์ž‘์„ฑ * ๐Ÿฅ… chore: next cache๋ฅผ ์œ„ํ•œ nginx ์„ค์ • * ๐Ÿฅ… chore: ssl ์ธ์ฆ์„œ ๋ฐœ๊ธ‰์„ ์œ„ํ•œ docker compose ์ˆ˜์ • * ๐Ÿฅ… chore: https ์ธ์ฆ์„œ ๋ฐœ๊ธ‰ ์œ„์น˜ ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: https ์„ค์ • ์™„๋ฃŒ --- backend/{data => dev}/nginx/nginx.conf | 0 backend/docker-compose.yml | 10 ++-- backend/init-letsencrypt.sh | 4 +- backend/scripts/dev-deploy.sh | 5 +- frontend/dev/default/nginx.conf | 36 ++++++++++++ frontend/dev/nginx/nginx.conf | 57 ++++++++++++++++++ frontend/docker-compose.yml | 25 ++++++-- frontend/init-letsencrypt.sh | 81 ++++++++++++++++++++++++++ frontend/nginx.Dockerfile | 10 ---- frontend/nginx.conf | 50 ---------------- frontend/scripts/dev-deploy.sh | 11 +++- 11 files changed, 213 insertions(+), 76 deletions(-) rename backend/{data => dev}/nginx/nginx.conf (100%) create mode 100644 frontend/dev/default/nginx.conf create mode 100644 frontend/dev/nginx/nginx.conf create mode 100644 frontend/init-letsencrypt.sh delete mode 100644 frontend/nginx.Dockerfile delete mode 100644 frontend/nginx.conf diff --git a/backend/data/nginx/nginx.conf b/backend/dev/nginx/nginx.conf similarity index 100% rename from backend/data/nginx/nginx.conf rename to backend/dev/nginx/nginx.conf diff --git a/backend/docker-compose.yml b/backend/docker-compose.yml index c15d2d26..da7285a5 100644 --- a/backend/docker-compose.yml +++ b/backend/docker-compose.yml @@ -6,9 +6,9 @@ services: image: nginx restart: always volumes: - - ./data/nginx:/etc/nginx/conf.d - - ./data/certbot/conf:/etc/letsencrypt - - ./data/certbot/www:/var/www/certbot + - ./dev/nginx:/etc/nginx/conf.d + - /letsencrypt/certbot/conf:/etc/letsencrypt + - /letsencrypt/certbot/www:/var/www/certbot ports: - 80:80 - 443:443 @@ -23,8 +23,8 @@ services: image: certbot/certbot restart: unless-stopped volumes: - - ./data/certbot/conf:/etc/letsencrypt - - ./data/certbot/www:/var/www/certbot + - /letsencrypt/certbot/conf:/etc/letsencrypt + - /letsencrypt/certbot/www:/var/www/certbot depends_on: - moyeo-nginx networks: diff --git a/backend/init-letsencrypt.sh b/backend/init-letsencrypt.sh index cc882c6b..85071b0f 100644 --- a/backend/init-letsencrypt.sh +++ b/backend/init-letsencrypt.sh @@ -1,5 +1,7 @@ #!/bin/bash +# ์˜คํ”ˆ ์†Œ์Šค: https://github.com/wmnnd/nginx-certbot ์ฐธ๊ณ  + if ! [ -x "$(command -v docker-compose)" ]; then echo 'Error: docker-compose is not installed.' >&2 exit 1 @@ -7,7 +9,7 @@ fi domains=(api.moyeomoyeo.com) rsa_key_size=4096 -data_path="./data/certbot" +data_path="/letsencrypt/certbot" email="pythonstrup@gmail.com" # Adding a valid address is strongly recommended staging=0 # Set to 1 if you're testing your setup to avoid hitting request limits diff --git a/backend/scripts/dev-deploy.sh b/backend/scripts/dev-deploy.sh index 2014aa25..16d8a048 100644 --- a/backend/scripts/dev-deploy.sh +++ b/backend/scripts/dev-deploy.sh @@ -16,8 +16,7 @@ docker compose down # ๋„์ปค ์ปจํ…Œ์ด๋„ˆ ์ „์ฒด ์‚ญ์ œ docker rm `docker ps -a -q` -chmod +x ./init-letsencrypt.sh - -./init-letsencrypt.sh +# ๋„์ปค ์ด๋ฏธ์ง€ ์ „์ฒด ์‚ญ์ œ +docker rmi `docker images -q` docker compose up -d --build \ No newline at end of file diff --git a/frontend/dev/default/nginx.conf b/frontend/dev/default/nginx.conf new file mode 100644 index 00000000..c1f81417 --- /dev/null +++ b/frontend/dev/default/nginx.conf @@ -0,0 +1,36 @@ +user nginx; +worker_processes auto; + +error_log /var/log/nginx/error.log notice; +pid /var/run/nginx.pid; + + +events { + worker_connections 1024; +} + + +http { + proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=STATIC:10m inactive=7d use_temp_path=off; + include /etc/nginx/mime.types; + default_type application/octet-stream; + + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + + access_log /var/log/nginx/access.log main; + + sendfile on; + #tcp_nopush on; + + keepalive_timeout 65; + + # gzip ์„ค์ • + gzip on; + gzip_proxied any; + gzip_comp_level 4; + gzip_types text/css application/javascript image/svg+xml; + + include /etc/nginx/conf.d/*.conf; +} \ No newline at end of file diff --git a/frontend/dev/nginx/nginx.conf b/frontend/dev/nginx/nginx.conf new file mode 100644 index 00000000..e4299221 --- /dev/null +++ b/frontend/dev/nginx/nginx.conf @@ -0,0 +1,57 @@ +upstream nextjs_upstream { + server 118.67.143.56:3000; +} + +server { + listen 80 default_server; + server_name www.moyeomoyeo.com; + server_tokens off; + + # certbot์ด ๋ฐœ๊ธ‰ํ•œ challenge ํŒŒ์ผ์„ nginx๊ฐ€ ์„œ๋น™ + location /.well-known/acme-challenge/ { + allow all; + root /var/www/certbot; + } + + # ๋ชจ๋“  http(80ํฌํŠธ) ์š”์ฒญ์„ https๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŒ… + location / { + return 301 https://$host$request_uri; + } +} + +server { + listen 443 ssl; + server_name www.moyeomoyeo.com; + server_tokens off; + + ssl_certificate /etc/letsencrypt/live/www.moyeomoyeo.com/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/www.moyeomoyeo.com/privkey.pem; + include /etc/letsencrypt/options-ssl-nginx.conf; + ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; + + # proxy header ์„ค์ • + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection 'upgrade'; + proxy_set_header Host $host; + proxy_cache_bypass $http_upgrade; + + # bundle js์™€ ๊ฐ™์€ ์ •์ ํŒŒ์ผ ๊ฒฝ๋กœ + location /_next/static { + proxy_cache STATIC; + proxy_pass http://nextjs_upstream; + } + + # ์ด๋ฏธ์ง€์™€ ๊ฐ™์€ ์ •์ ํŒŒ์ผ ๊ฒฝ๋กœ + location /static { + proxy_cache STATIC; + # nextjs ์˜ cahce-control ์„ ๋ฌด์‹œํ•˜๊ณ  nginx์—์„œ ์บ์‹œํ•˜๋„๋ก ์„ค์ • + proxy_ignore_headers Cache-Control; + proxy_cache_valid 60m; + proxy_pass http://nextjs_upstream; + } + + location / { + proxy_pass http://nextjs_upstream; + } +} \ No newline at end of file diff --git a/frontend/docker-compose.yml b/frontend/docker-compose.yml index e82000ea..370cee0e 100644 --- a/frontend/docker-compose.yml +++ b/frontend/docker-compose.yml @@ -13,18 +13,33 @@ services: - backbone nginx: - container_name: moyeo-nginx - build: - context: . - dockerfile: nginx.Dockerfile + container_name: nginx + image: nginx ports: - 80:80 + - 443:443 volumes: - - ./nginx.conf:/etc/nginx/nginx.conf + - ./dev/nginx:/etc/nginx/conf.d + - /letsencrypt/certbot/conf:/etc/letsencrypt + - /letsencrypt/certbot/www:/var/www/certbot depends_on: - frontend networks: - backbone + command: '/bin/sh -c ''while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g "daemon off;"''' + + certbot: + container_name: certbot + image: certbot/certbot + restart: unless-stopped + volumes: + - /letsencrypt/certbot/conf:/etc/letsencrypt + - /letsencrypt/certbot/www:/var/www/certbot + depends_on: + - nginx + networks: + - backbone + entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'" networks: backbone: diff --git a/frontend/init-letsencrypt.sh b/frontend/init-letsencrypt.sh new file mode 100644 index 00000000..ccce9e0f --- /dev/null +++ b/frontend/init-letsencrypt.sh @@ -0,0 +1,81 @@ +#!/bin/bash +# ์˜คํ”ˆ ์†Œ์Šค: https://github.com/wmnnd/nginx-certbot ์ฐธ๊ณ  + +if ! [ -x "$(command -v docker-compose)" ]; then + echo 'Error: docker-compose is not installed.' >&2 + exit 1 +fi + +domains=(www.moyeomoyeo.com) +rsa_key_size=4096 +data_path="/letsencrypt/certbot" +email="pythonstrup@gmail.com" # Adding a valid address is strongly recommended +staging=0 # Set to 1 if you're testing your setup to avoid hitting request limits + +if [ -d "$data_path" ]; then + read -p "Existing data found for $domains. Continue and replace existing certificate? (y/N) " decision + if [ "$decision" != "Y" ] && [ "$decision" != "y" ]; then + exit + fi +fi + + +if [ ! -e "$data_path/conf/options-ssl-nginx.conf" ] || [ ! -e "$data_path/conf/ssl-dhparams.pem" ]; then + echo "### Downloading recommended TLS parameters ..." + mkdir -p "$data_path/conf" + curl -s https://raw.githubusercontent.com/certbot/certbot/master/certbot-nginx/certbot_nginx/_internal/tls_configs/options-ssl-nginx.conf > "$data_path/conf/options-ssl-nginx.conf" + curl -s https://raw.githubusercontent.com/certbot/certbot/master/certbot/certbot/ssl-dhparams.pem > "$data_path/conf/ssl-dhparams.pem" + echo +fi + +echo "### Creating dummy certificate for $domains ..." +path="/etc/letsencrypt/live/$domains" +mkdir -p "$data_path/conf/live/$domains" +docker-compose run --rm --entrypoint "\ + openssl req -x509 -nodes -newkey rsa:$rsa_key_size -days 1\ + -keyout '$path/privkey.pem' \ + -out '$path/fullchain.pem' \ + -subj '/CN=localhost'" certbot +echo + + +echo "### Starting nginx ..." +docker-compose up --force-recreate -d nginx +echo + +echo "### Deleting dummy certificate for $domains ..." +docker-compose run --rm --entrypoint "\ + rm -Rf /etc/letsencrypt/live/$domains && \ + rm -Rf /etc/letsencrypt/archive/$domains && \ + rm -Rf /etc/letsencrypt/renewal/$domains.conf" certbot +echo + + +echo "### Requesting Let's Encrypt certificate for $domains ..." +#Join $domains to -d args +domain_args="" +for domain in "${domains[@]}"; do + domain_args="$domain_args -d $domain" +done + +# Select appropriate email arg +case "$email" in + "") email_arg="--register-unsafely-without-email" ;; + *) email_arg="--email $email" ;; +esac + +# Enable staging mode if needed +if [ $staging != "0" ]; then staging_arg="--staging"; fi + +docker-compose run --rm --entrypoint "\ + certbot certonly --webroot -w /var/www/certbot \ + $staging_arg \ + $email_arg \ + $domain_args \ + --rsa-key-size $rsa_key_size \ + --agree-tos \ + --force-renewal" certbot +echo + +echo "### Reloading nginx ..." +docker-compose exec nginx nginx -s reload \ No newline at end of file diff --git a/frontend/nginx.Dockerfile b/frontend/nginx.Dockerfile deleted file mode 100644 index 903436fa..00000000 --- a/frontend/nginx.Dockerfile +++ /dev/null @@ -1,10 +0,0 @@ -FROM nginx:alpine - -# ์ด๋ฏธ์ง€ ์กด์žฌํ•˜๋Š” config ํŒŒ์ผ๋“ค ๋ฏธ๋ฆฌ ์ œ๊ฑฐ -RUN rm /etc/nginx/conf.d/* - -# nginx.conf ํŒŒ์ผ ๋ณต์‚ฌ -COPY nginx.conf /etc/nginx/conf.d - -# 80ํฌํŠธ ๊ฐœ๋ฐฉ -EXPOSE 80 \ No newline at end of file diff --git a/frontend/nginx.conf b/frontend/nginx.conf deleted file mode 100644 index 06533e8e..00000000 --- a/frontend/nginx.conf +++ /dev/null @@ -1,50 +0,0 @@ -events { - worker_connections 1024; -} - -http { - proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=STATIC:10m inactive=7d use_temp_path=off; - - upstream nextjs_upstream { - server moyeo-client:3000; - } - - server { - listen 80 default_server; - server_name _; - server_tokens off; - - # proxy header ์„ค์ • - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection 'upgrade'; - proxy_set_header Host $host; - proxy_cache_bypass $http_upgrade; - - # gzip ์„ค์ • - gzip on; - gzip_proxied any; - gzip_comp_level 4; - gzip_types text/css application/javascript image/svg+xml; - - # bundle js์™€ ๊ฐ™์€ ์ •์ ํŒŒ์ผ ๊ฒฝ๋กœ - location /_next/static { - proxy_cache STATIC; - proxy_pass http://nextjs_upstream; - } - - # ์ด๋ฏธ์ง€์™€ ๊ฐ™์€ ์ •์ ํŒŒ์ผ ๊ฒฝ๋กœ - location /static { - proxy_cache STATIC; - # nextjs ์˜ cahce-control ์„ ๋ฌด์‹œํ•˜๊ณ  nginx์—์„œ ์บ์‹œํ•˜๋„๋ก ์„ค์ • - proxy_ignore_headers Cache-Control; - proxy_cache_valid 60m; - proxy_pass http://nextjs_upstream; - } - - location / { - proxy_pass http://nextjs_upstream; - } - } - -} \ No newline at end of file diff --git a/frontend/scripts/dev-deploy.sh b/frontend/scripts/dev-deploy.sh index f7008b57..ad46900f 100644 --- a/frontend/scripts/dev-deploy.sh +++ b/frontend/scripts/dev-deploy.sh @@ -10,6 +10,13 @@ touch .env echo $4 > .env -docker compose down --rmi all +# docker down +docker compose down -docker compose up -d \ No newline at end of file +# ๋„์ปค ์ปจํ…Œ์ด๋„ˆ ์ „์ฒด ์‚ญ์ œ +docker rm `docker ps -a -q` + +# ๋„์ปค ์ด๋ฏธ์ง€ ์ „์ฒด ์‚ญ์ œ +docker rmi `docker images -q` + +docker compose up -d --build \ No newline at end of file From d859bbc67f1bd6fe4dd679ffa316817ac1810d44 Mon Sep 17 00:00:00 2001 From: MinGyeong Park <37508296+kong430@users.noreply.github.com> Date: Thu, 24 Nov 2022 20:22:28 +0900 Subject: [PATCH 026/142] =?UTF-8?q?[Feature]=20=EB=AA=A8=EC=A7=91=20?= =?UTF-8?q?=EA=B2=8C=EC=8B=9C=EA=B8=80=20=EB=A0=8C=EB=8D=94=EB=A7=81=20(#7?= =?UTF-8?q?0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :bug: fix: page routes ๊ฒฝ๋กœ ์ˆ˜์ • * :sparkles: feature: ์นดํ…Œ๊ณ ๋ฆฌ, ์žฅ์†Œ ํƒœ๊ทธ ํ•œ๊ตญ์–ด๋กœ ํ‘œ์‹œ * :sparkles: feature: ํŽ˜์ด์ง€ content์— ๊ณตํ†ต์ ์œผ๋กœ padding ์ ์šฉ * :sparkles: feature: Header z-index 100์œผ๋กœ ์ ์šฉ * :sparkles: feature: ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ * :recycle: refactor: tag ์†์„ฑ์˜ ๋ฌธ์ž์—ด ๊ฐ’์— ์žˆ๋Š” ์ค‘๊ด„ํ˜ธ ์ œ๊ฑฐ * :sparkles: feature: article ๋ชฉ๋ก ๊ฐ€์ ธ์˜ค๋Š” api mocking * :sparkles: feature: ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก ๋ Œ๋”๋ง * :sparkles: feature: ๊ฒŒ์‹œ๊ธ€ ์ƒ์„ธ๋ณด๊ธฐ ํŽ˜์ด์ง€ header ์ ์šฉ ๋ฐ ์ „์ฒด padding ์ œ๊ฑฐ * :sparkles: feature: page title&subtitle ์ƒ์ˆ˜ํ™” * :recycle: refactor: component ํด๋” ๊ตฌ์กฐ ์ •๋ฆฌ * :recycle: refactor: GitLoginButton ์ปดํฌ๋„ŒํŠธ ํด๋” ๋ณ€๊ฒฝ * :goal_net: chore: test์œ„ํ•ด ์ž‘์„ฑํ–ˆ๋˜ ๋ถ€๋ถ„ ๋˜๋Œ๋ฆผ article ๋ชฉ๋ก์„ ๋นˆ๋ฐฐ์—ด๋กœ ์ง€์ •ํ–ˆ๋˜ ๊ฒƒ ๋˜๋Œ๋ฆผ * :sparkles: feature: NoGroupMessage ์Šคํ† ๋ฆฌ๋ถ ์ž‘์„ฑ * :sparkles: feature: PageLayout์—์„œ header์™€ footer ๊ณ ์ •ํ•˜๋„๋ก ์Šคํƒ€์ผ ์ถ”๊ฐ€ * :sparkles: feature: ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€ ์ƒํ•˜๊ฐ„๊ฒฉ 1.2rem์œผ๋กœ ์ ์šฉ * :goal_net: chore: test ์œ„ํ•ด ๋ณ€๊ฒฝํ–ˆ๋˜ ๋กœ์ง ๋˜๋Œ๋ฆผ article์˜ status๊ฐ€ PROGRESS๊ฐ€ ์•„๋‹ ๊ฒฝ์šฐ '๋ชจ์ง‘ ์ข…๋ฃŒ' ๋ณด์—ฌ์คŒ * :sparkles: feature: ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€ ์นด๋“œ hover style ์ ์šฉ * :sparkles: feature: ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก ๋ฆฌํ”„๋ ˆ์‰ฌ ๋กœ์ง ์ถ”๊ฐ€ * :recycle: refactor: storybook์—์„œ ์ปดํฌ๋„ŒํŠธ importํ•ด์˜ค๋Š” ๊ฒฝ๋กœ ์ˆ˜์ • * :goal_net: chore: test page ์ œ๊ฑฐ * :recycle: refactor: storybook์—์„œ ์ปดํฌ๋„ŒํŠธ importํ•ด์˜ค๋Š” ๊ฒฝ๋กœ ์ˆ˜์ • --- .../src/apis/test/getTestGroupArticles.ts | 16 ++ .../ArticleTag/ArticleTag.stories.tsx | 0 .../{ => common}/ArticleTag/index.tsx | 0 .../GroupArticleCard.stories.tsx | 0 .../{ => common}/GroupArticleCard/index.tsx | 14 +- .../{ => common}/GroupArticleCard/styles.ts | 10 +- .../src/components/common/Header/styles.tsx | 3 - .../components/common/NavigationTab/index.tsx | 10 +- .../NoGroupMessage/NoGroupMessage.stories.tsx | 11 ++ .../common/NoGroupMessage/index.tsx | 32 ++++ .../components/common/PageLayout/index.tsx | 19 ++- .../{ => common}/RouterTransition.tsx | 0 .../StatCounter/StatCounter.stories.tsx | 0 .../{ => common}/StatCounter/index.tsx | 0 .../GitLoginButton/GitLoginButton.stories.tsx | 0 .../{ => login}/GitLoginButton/index.tsx | 0 frontend/src/constants/pageTitle.ts | 28 +++ .../hooks/queries/useFetchGroupArticles.ts | 29 ++++ frontend/src/mocks/handlers.ts | 6 +- .../src/mocks/resolvers/getGroupArticles.ts | 23 +++ frontend/src/pages/_app.tsx | 2 +- frontend/src/pages/article/[id].tsx | 29 +++- frontend/src/pages/index.tsx | 160 ++++++++++++++++-- frontend/src/pages/login.tsx | 2 +- frontend/src/pages/test.tsx | 51 ------ 25 files changed, 352 insertions(+), 93 deletions(-) create mode 100644 frontend/src/apis/test/getTestGroupArticles.ts rename frontend/src/components/{ => common}/ArticleTag/ArticleTag.stories.tsx (100%) rename frontend/src/components/{ => common}/ArticleTag/index.tsx (100%) rename frontend/src/components/{ => common}/GroupArticleCard/GroupArticleCard.stories.tsx (100%) rename frontend/src/components/{ => common}/GroupArticleCard/index.tsx (74%) rename frontend/src/components/{ => common}/GroupArticleCard/styles.ts (91%) create mode 100644 frontend/src/components/common/NoGroupMessage/NoGroupMessage.stories.tsx create mode 100644 frontend/src/components/common/NoGroupMessage/index.tsx rename frontend/src/components/{ => common}/RouterTransition.tsx (100%) rename frontend/src/components/{ => common}/StatCounter/StatCounter.stories.tsx (100%) rename frontend/src/components/{ => common}/StatCounter/index.tsx (100%) rename frontend/src/components/{ => login}/GitLoginButton/GitLoginButton.stories.tsx (100%) rename frontend/src/components/{ => login}/GitLoginButton/index.tsx (100%) create mode 100644 frontend/src/constants/pageTitle.ts create mode 100644 frontend/src/hooks/queries/useFetchGroupArticles.ts create mode 100644 frontend/src/mocks/resolvers/getGroupArticles.ts delete mode 100644 frontend/src/pages/test.tsx diff --git a/frontend/src/apis/test/getTestGroupArticles.ts b/frontend/src/apis/test/getTestGroupArticles.ts new file mode 100644 index 00000000..d9bee72d --- /dev/null +++ b/frontend/src/apis/test/getTestGroupArticles.ts @@ -0,0 +1,16 @@ +import axios from 'axios'; +import { Category } from '@constants/category'; +import { Location } from '@constants/location'; + +const getTestGroupArticles = async ( + nextId: number, + category: Category, + location: Location, + progress: boolean +) => { + return axios.get(`http://testServer/group-articles`, { + params: { category, location, progress, nextId, limit: 5 }, + }); +}; + +export default getTestGroupArticles; diff --git a/frontend/src/components/ArticleTag/ArticleTag.stories.tsx b/frontend/src/components/common/ArticleTag/ArticleTag.stories.tsx similarity index 100% rename from frontend/src/components/ArticleTag/ArticleTag.stories.tsx rename to frontend/src/components/common/ArticleTag/ArticleTag.stories.tsx diff --git a/frontend/src/components/ArticleTag/index.tsx b/frontend/src/components/common/ArticleTag/index.tsx similarity index 100% rename from frontend/src/components/ArticleTag/index.tsx rename to frontend/src/components/common/ArticleTag/index.tsx diff --git a/frontend/src/components/GroupArticleCard/GroupArticleCard.stories.tsx b/frontend/src/components/common/GroupArticleCard/GroupArticleCard.stories.tsx similarity index 100% rename from frontend/src/components/GroupArticleCard/GroupArticleCard.stories.tsx rename to frontend/src/components/common/GroupArticleCard/GroupArticleCard.stories.tsx diff --git a/frontend/src/components/GroupArticleCard/index.tsx b/frontend/src/components/common/GroupArticleCard/index.tsx similarity index 74% rename from frontend/src/components/GroupArticleCard/index.tsx rename to frontend/src/components/common/GroupArticleCard/index.tsx index ffc674e1..7a928471 100644 --- a/frontend/src/components/GroupArticleCard/index.tsx +++ b/frontend/src/components/common/GroupArticleCard/index.tsx @@ -1,7 +1,7 @@ import { Image } from '@mantine/core'; import { ArticlePreviewType } from '@typings/types'; -import ArticleTag from '@components/ArticleTag'; -import StatCounter from '@components/StatCounter'; +import ArticleTag from '@components/common/ArticleTag'; +import StatCounter from '@components/common/StatCounter'; import { ArticleStatus, ArticleStatusKr } from '@constants/article'; import { CapacityText, @@ -11,8 +11,10 @@ import { TagWrapper, TitleText, ClosedText, -} from '@components/GroupArticleCard/styles'; -import { getCommonBadgeColor, getStatusBadgeColor } from '../../utils/colors'; +} from '@components/common/GroupArticleCard/styles'; +import { getCommonBadgeColor, getStatusBadgeColor } from '@utils/colors'; +import { CategoryKr } from '@constants/category'; +import { LocationKr } from '@constants/location'; interface Props { article: ArticlePreviewType; @@ -35,11 +37,11 @@ const GroupArticleCard = ({ article }: Props) => { /> {article.title} diff --git a/frontend/src/components/GroupArticleCard/styles.ts b/frontend/src/components/common/GroupArticleCard/styles.ts similarity index 91% rename from frontend/src/components/GroupArticleCard/styles.ts rename to frontend/src/components/common/GroupArticleCard/styles.ts index a02aed59..5353feb2 100644 --- a/frontend/src/components/GroupArticleCard/styles.ts +++ b/frontend/src/components/common/GroupArticleCard/styles.ts @@ -1,20 +1,24 @@ import styled from '@emotion/styled'; const CardWrapper = styled.div` + position: relative; display: flex; flex-direction: column; - width: 17.3rem; + width: 100%; height: 30.7rem; border-radius: 12px; border: 1px solid ${({ theme }) => theme.colors.gray[2]}; overflow: hidden; + &:hover { + cursor: pointer; + } `; const DimmedBox = styled.div` display: flex; position: absolute; - width: 17.3rem; - height: 30.7rem; + width: 100%; + height: 100%; z-index: 1; border-radius: 12px; background-color: rgba(0, 0, 0, 0.4); diff --git a/frontend/src/components/common/Header/styles.tsx b/frontend/src/components/common/Header/styles.tsx index b9d08418..0c16a012 100644 --- a/frontend/src/components/common/Header/styles.tsx +++ b/frontend/src/components/common/Header/styles.tsx @@ -1,9 +1,6 @@ import styled from '@emotion/styled'; const HeaderWrapper = styled.header` - position: sticky; - top: 0; - width: 100%; display: flex; justify-content: space-between; align-items: center; diff --git a/frontend/src/components/common/NavigationTab/index.tsx b/frontend/src/components/common/NavigationTab/index.tsx index 15d21bc9..b86d5fff 100644 --- a/frontend/src/components/common/NavigationTab/index.tsx +++ b/frontend/src/components/common/NavigationTab/index.tsx @@ -12,19 +12,19 @@ const NavigationTab = () => { return ( - + - + - + - + - + diff --git a/frontend/src/components/common/NoGroupMessage/NoGroupMessage.stories.tsx b/frontend/src/components/common/NoGroupMessage/NoGroupMessage.stories.tsx new file mode 100644 index 00000000..d52e33fc --- /dev/null +++ b/frontend/src/components/common/NoGroupMessage/NoGroupMessage.stories.tsx @@ -0,0 +1,11 @@ +import { ComponentMeta, ComponentStory } from '@storybook/react'; +import NoGroupMessage from '.'; + +export default { + title: 'Component/NoGroupMessage', + component: NoGroupMessage, +} as ComponentMeta; + +const Template: ComponentStory = () => ; + +export const _NoGroupMessage = Template.bind({}); diff --git a/frontend/src/components/common/NoGroupMessage/index.tsx b/frontend/src/components/common/NoGroupMessage/index.tsx new file mode 100644 index 00000000..31e36d00 --- /dev/null +++ b/frontend/src/components/common/NoGroupMessage/index.tsx @@ -0,0 +1,32 @@ +import styled from '@emotion/styled'; +import { IconMoodEmpty } from '@tabler/icons'; +import { useTheme } from '@emotion/react'; + +const Index = () => { + const { + colors: { gray }, + } = useTheme(); + + return ( + + + ๋ชจ์ž„์ด ์กด์žฌํ•˜์ง€ ์•Š์•„์š” + + ); +}; + +export default Index; + +const MessageWrapper = styled.div` + display: flex; + flex-direction: column; + gap: 1.6rem; + justify-content: center; + align-items: center; +`; + +const Message = styled.span` + font-size: 2rem; + font-weight: 900; + color: ${({ theme }) => theme.colors.gray[6]}; +`; diff --git a/frontend/src/components/common/PageLayout/index.tsx b/frontend/src/components/common/PageLayout/index.tsx index b60cc9c6..e29872e9 100644 --- a/frontend/src/components/common/PageLayout/index.tsx +++ b/frontend/src/components/common/PageLayout/index.tsx @@ -11,12 +11,12 @@ interface Props extends PropsWithChildren { const PageLayout = ({ header, footer, hasFloatingUtil, children }: Props) => { return ( - {header} + {header} {children} {hasFloatingUtil && } - {footer} + {footer} ); }; @@ -33,7 +33,22 @@ const PageWrapper = styled.div` const ContentWrapper = styled.div` width: 100%; height: 100%; + padding: 1.6rem; flex: 1; `; +const HeaderWrapper = styled.div` + position: sticky; + top: 0; + width: 100%; + z-index: 100; +`; + +const FooterWrapper = styled.div` + position: sticky; + bottom: 0; + width: 100%; + z-index: 100; +`; + export default PageLayout; diff --git a/frontend/src/components/RouterTransition.tsx b/frontend/src/components/common/RouterTransition.tsx similarity index 100% rename from frontend/src/components/RouterTransition.tsx rename to frontend/src/components/common/RouterTransition.tsx diff --git a/frontend/src/components/StatCounter/StatCounter.stories.tsx b/frontend/src/components/common/StatCounter/StatCounter.stories.tsx similarity index 100% rename from frontend/src/components/StatCounter/StatCounter.stories.tsx rename to frontend/src/components/common/StatCounter/StatCounter.stories.tsx diff --git a/frontend/src/components/StatCounter/index.tsx b/frontend/src/components/common/StatCounter/index.tsx similarity index 100% rename from frontend/src/components/StatCounter/index.tsx rename to frontend/src/components/common/StatCounter/index.tsx diff --git a/frontend/src/components/GitLoginButton/GitLoginButton.stories.tsx b/frontend/src/components/login/GitLoginButton/GitLoginButton.stories.tsx similarity index 100% rename from frontend/src/components/GitLoginButton/GitLoginButton.stories.tsx rename to frontend/src/components/login/GitLoginButton/GitLoginButton.stories.tsx diff --git a/frontend/src/components/GitLoginButton/index.tsx b/frontend/src/components/login/GitLoginButton/index.tsx similarity index 100% rename from frontend/src/components/GitLoginButton/index.tsx rename to frontend/src/components/login/GitLoginButton/index.tsx diff --git a/frontend/src/constants/pageTitle.ts b/frontend/src/constants/pageTitle.ts new file mode 100644 index 00000000..a4123061 --- /dev/null +++ b/frontend/src/constants/pageTitle.ts @@ -0,0 +1,28 @@ +const PAGE_TITLE = { + ARTICLE: { + title: '๋ชจ์ž„๊ฒŒ์‹œํŒ', + subTitle: '๋‹ค์–‘ํ•œ ์†Œ๋ชจ์ž„์„ ์œ„ํ•œ ๊ฒŒ์‹œํŒ', + }, + NOTIFICATION: { + title: '์•Œ๋ฆผ', + subTitle: '๋†“์นœ ์†Œ์‹๋“ค์€ ์—†๋Š”์ง€ ํ™•์ธํ•ด๋ณด์„ธ์š”', + }, + MY: { + title: '๋งˆ์ดํŽ˜์ด์ง€', + subTitle: 'ํ”„๋กœํ•„ ์ˆ˜์ • & ์•Œ๋ฆผ ์„ค์ •', + }, + EDIT_MY: { + title: 'ํ”„๋กœํ•„ ์ˆ˜์ •', + subTitle: '์ž์‹ ์˜ ํ”„๋กœํ•„์„ ์ˆ˜์ •ํ•ด๋ณด์„ธ์š”', + }, + PARTICIPATED_GROUP: { + title: '๋‚ด๊ฐ€ ์ฐธ์—ฌํ•œ ๋ชจ์ž„', + subTitle: '๋‚ด๊ฐ€ ์ฐธ์—ฌํ•œ ๋ชจ์ž„๋“ค์„ ํ™•์ธํ•ด๋ณด์„ธ์š”', + }, + OWN_GROUP: { + title: '๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ๋ชจ์ž„', + subTItle: '๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ๋ชจ์ž„๋“ค์„ ํ™•์ธํ•ด๋ณด์„ธ์š”', + }, +}; + +export { PAGE_TITLE }; diff --git a/frontend/src/hooks/queries/useFetchGroupArticles.ts b/frontend/src/hooks/queries/useFetchGroupArticles.ts new file mode 100644 index 00000000..c32ef5b5 --- /dev/null +++ b/frontend/src/hooks/queries/useFetchGroupArticles.ts @@ -0,0 +1,29 @@ +import { useInfiniteQuery } from '@tanstack/react-query'; +import { AxiosResponse } from 'axios'; +import { ArticleType } from '@typings/types'; +import getTestGroupArticles from '@apis/test/getTestGroupArticles'; +import { Category } from '@constants/category'; +import { Location } from '@constants/location'; + +interface ArticleResponseType { + articles: ArticleType[]; + isLast: boolean; + currentId: number; +} + +const useFetchGroupArticles = (category: Category, location: Location, progress: boolean) => { + const { data, fetchNextPage, hasNextPage, isFetching, isError } = useInfiniteQuery( + ['articles'], + ({ pageParam = 0 }) => getTestGroupArticles(pageParam, category, location, progress), + { + getNextPageParam: (lastPage: AxiosResponse) => + lastPage.data.isLast ? undefined : lastPage.data.currentId + 1, + } + ); + if (isError) { + // TODO ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๊ณตํ†ต ๋กœ์ง ์ ์šฉ + } + return { data, fetchNextPage, hasNextPage, isFetching }; +}; + +export default useFetchGroupArticles; diff --git a/frontend/src/mocks/handlers.ts b/frontend/src/mocks/handlers.ts index e3e8730a..d4c4b18b 100644 --- a/frontend/src/mocks/handlers.ts +++ b/frontend/src/mocks/handlers.ts @@ -1,4 +1,8 @@ import { rest } from 'msw'; import { getTest } from './resolvers/test'; +import { getGroupArticles } from '@mocks/resolvers/getGroupArticles'; -export const handlers = [rest.get('http://testServer/test', getTest)]; +export const handlers = [ + rest.get('http://testServer/test', getTest), + rest.get('http://testServer/group-articles', getGroupArticles), +]; diff --git a/frontend/src/mocks/resolvers/getGroupArticles.ts b/frontend/src/mocks/resolvers/getGroupArticles.ts new file mode 100644 index 00000000..69d74c9b --- /dev/null +++ b/frontend/src/mocks/resolvers/getGroupArticles.ts @@ -0,0 +1,23 @@ +import { dummyArticlePreview } from '@constants/dummy'; + +export const getGroupArticles = (req: any, res: any, ctx: any) => { + const { searchParams } = req.url; + const limit = Number(searchParams.get('limit')); + const nextId = Number(searchParams.get('nextId')); + + const totalCount = dummyArticlesPreview.length; + const totalPages = Math.round(totalCount / limit); + + return res( + ctx.status(200), + ctx.json({ + articles: dummyArticlesPreview.slice(limit * nextId, limit * nextId + limit), + isLast: totalPages - 1 === nextId, + currentId: nextId, + }) + ); +}; + +const dummyArticlesPreview = Array.from({ length: 20 }) + .fill(0) + .map((_, index) => ({ ...dummyArticlePreview, id: index })); diff --git a/frontend/src/pages/_app.tsx b/frontend/src/pages/_app.tsx index 552bbd30..2f22631e 100644 --- a/frontend/src/pages/_app.tsx +++ b/frontend/src/pages/_app.tsx @@ -2,7 +2,7 @@ import Head from 'next/head'; import { AppProps } from 'next/app'; import { QueryClientProvider, QueryClient } from '@tanstack/react-query'; import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; -import RouterTransition from '@components/RouterTransition'; +import RouterTransition from '@components/common/RouterTransition'; import CommonStyles from '@styles/CommonStyles'; import initMockApi from '@mocks/.'; import { useEffect, useState } from 'react'; diff --git a/frontend/src/pages/article/[id].tsx b/frontend/src/pages/article/[id].tsx index f011122d..07fb8600 100644 --- a/frontend/src/pages/article/[id].tsx +++ b/frontend/src/pages/article/[id].tsx @@ -1,15 +1,18 @@ -import PageLayout from '@components/common/PageLayout'; -import { Avatar, Progress, TypographyStylesProvider } from '@mantine/core'; +import { useTheme } from '@emotion/react'; import styled from '@emotion/styled'; +import { Avatar, Progress, TypographyStylesProvider } from '@mantine/core'; +import { IconList } from '@tabler/icons'; import { dummyArticle } from '@constants/dummy'; -import ArticleTag from '@components/ArticleTag'; -import { getCommonBadgeColor, getStatusBadgeColor } from '../../utils/colors'; +import ArticleTag from '@components/common/ArticleTag'; +import { getCommonBadgeColor, getStatusBadgeColor } from '@utils/colors'; import { ArticleStatusKr } from '@constants/article'; import { CategoryKr } from '@constants/category'; import { LocationKr } from '@constants/location'; -import { useTheme } from '@emotion/react'; -import StatCounter from '@components/StatCounter'; -import { IconList } from '@tabler/icons'; +import PageLayout from '@components/common/PageLayout'; +import StatCounter from '@components/common/StatCounter'; +import Header from '@components/common/Header'; +import DetailTitle from '@components/common/Header/DetailTitle'; +import { PAGE_TITLE } from '@constants/pageTitle'; const ArticleDetail = () => { const { @@ -31,7 +34,16 @@ const ArticleDetail = () => { } = dummyArticle; return ( - + + } + /> + } + > @@ -103,7 +115,6 @@ const DetailWrapper = styled.div` display: flex; flex-direction: column; gap: 1.6rem; - padding: 1.6rem; `; const ProfileWrapper = styled.div` diff --git a/frontend/src/pages/index.tsx b/frontend/src/pages/index.tsx index b970a08b..42942ce5 100644 --- a/frontend/src/pages/index.tsx +++ b/frontend/src/pages/index.tsx @@ -1,30 +1,168 @@ +import Link from 'next/link'; +import { useMemo, useState } from 'react'; +import { Checkbox, Select } from '@mantine/core'; +import styled from '@emotion/styled'; import PageLayout from '@components/common/PageLayout'; import Header from '@components/common/Header'; -import DetailTitle from '@components/common/Header/DetailTitle'; import NavigationTab from '@components/common/NavigationTab'; - -import { Chip } from '@mantine/core'; +import RootTitle from '@components/common/Header/RootTitle'; +import { Category, CategoryKr } from '@constants/category'; +import { Location, LocationKr } from '@constants/location'; +import GroupArticleCard from '@components/common/GroupArticleCard'; +import useIntersect from '@hooks/useIntersect'; +import useFetchGroupArticles from '@hooks/queries/useFetchGroupArticles'; +import { PAGE_TITLE } from '@constants/pageTitle'; +import Index from '@components/common/NoGroupMessage'; +import { IconRefresh } from '@tabler/icons'; +import { useTheme } from '@emotion/react'; +import { useQueryClient } from '@tanstack/react-query'; const Main = () => { + const { + colors: { gray }, + } = useTheme(); + const queryClient = useQueryClient(); + const [selectedCategory, setSelectedCategory] = useState(null); + const [selectedLocation, setSelectedLocation] = useState(null); + const [progressChecked, setProgressChecked] = useState(false); + const { data, fetchNextPage, hasNextPage, isFetching } = useFetchGroupArticles( + selectedCategory, + selectedLocation, + progressChecked + ); + + const ref = useIntersect((entry, observer) => { + observer.unobserve(entry.target); + if (hasNextPage && !isFetching) { + void fetchNextPage(); + } + }); + + const articles = useMemo( + () => (data ? data.pages.flatMap(({ data }) => data.articles) : []), + [data] + ); + + const refreshArticleList = () => { + void queryClient.resetQueries(['articles']); + }; + return ( } + leftNode={ + + } /> } footer={} hasFloatingUtil > - {Array.from({ length: 100 }) - .fill(0) - .map((_, i) => ( - - Awesome chip - - ))} + + + ({ + value: category, + label: CategoryKr[category], + })), + ]} + value={selectedCategory} + onChange={(value) => setSelectedCategory(value as Category)} + size="md" + maxDropdownHeight={200} + /> + ({ + value: location, + label: LocationKr[location], + })), + ]} + value={selectedLocation} + onChange={(value) => setSelectedLocation(value as Location)} + size="md" + maxDropdownHeight={200} + /> + + + setProgressChecked(event.currentTarget.checked)} + label="๋ชจ์ง‘ ์ค‘์ธ ๋ชจ์ž„๋งŒ ๋ณด๊ธฐ" + size="md" + /> + + + + + {articles.length ? ( + + {articles.map((article) => ( + +
    + +
    + + ))} +
    +
    + ) : ( + + )} +
    ); }; export default Main; + +// TODO ๊ณตํ†ต Dropdown ์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ +const StyledSelect = styled(Select)` + width: 100%; + & .mantine-Select-item { + padding: 1.2rem 1.6rem; + &[data-selected] { + &, &:hover { + background-color: ${({ theme }) => theme.colors.indigo[0]}; + color: ${({ theme }) => theme.colors.indigo[7]}; + }, + }, + } +`; + +const ContentWrapper = styled.div` + display: flex; + flex-direction: column; + gap: 1.2rem; +`; + +const FilterWrapper = styled.div` + display: flex; + gap: 1.2rem; +`; + +const RefreshWrapper = styled.div` + display: flex; + justify-content: space-between; + align-items: center; +`; + +const RefreshButton = styled.button` + background-color: ${({ theme }) => theme.white}; + border: none; + &:hover { + cursor: pointer; + } +`; + +const ArticleList = styled.div` + display: grid; + grid-template-columns: repeat(2, 1fr); + grid-gap: 1.3rem; +`; diff --git a/frontend/src/pages/login.tsx b/frontend/src/pages/login.tsx index 563265dc..64d9d72e 100644 --- a/frontend/src/pages/login.tsx +++ b/frontend/src/pages/login.tsx @@ -1,7 +1,7 @@ import styled from '@emotion/styled'; import LogoIcon from '@public/icons/logo-lg.svg'; import PageLayout from '@components/common/PageLayout'; -import GitLoginButton from '@components/GitLoginButton'; +import GitLoginButton from '@components/login/GitLoginButton'; const Login = () => { return ( diff --git a/frontend/src/pages/test.tsx b/frontend/src/pages/test.tsx deleted file mode 100644 index 01ba529b..00000000 --- a/frontend/src/pages/test.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import { useMemo } from 'react'; -import styled from '@emotion/styled'; -import useIntersect from '@hooks/useIntersect'; -import PageLayout from '@components/common/PageLayout'; -import useFetchTestData from '@hooks/queries/useFetchTestData'; -import NavigationTab from '@components/common/NavigationTab'; - -const Test = () => { - const { data, fetchNextPage, hasNextPage, isFetching } = useFetchTestData(); - - const testData = useMemo( - () => (data ? data.pages.flatMap(({ data }) => data.dataArr) : []), - [data] - ); - - const ref = useIntersect((entry, observer) => { - observer.unobserve(entry.target); - if (hasNextPage && !isFetching) { - void fetchNextPage(); - } - }); - - return ( - }> - {testData.map((data, index) => ( - {data} - ))} -
    -
    - ); -}; - -const TestDiv = styled.div` - height: 300px; -`; - -// TODO SSR ์ ์šฉ -// export const getServerSideProps = async () => { -// console.log('hesr'); -// const queryClient = new QueryClient(); -// await queryClient.prefetchInfiniteQuery(['test'], async () => await getTestData(0), { -// staleTime: 1000, -// }); -// return { -// props: { -// dehydratedState: JSON.parse(JSON.stringify(dehydrate(queryClient))), -// }, -// }; -// }; - -export default Test; From c507b23fb1baabc8895f459203857cfb856bdd82 Mon Sep 17 00:00:00 2001 From: yangseungchan Date: Thu, 24 Nov 2022 20:38:25 +0900 Subject: [PATCH 027/142] =?UTF-8?q?[Feature]=20=EB=AA=A8=EC=A7=91=20?= =?UTF-8?q?=EA=B2=8C=EC=8B=9C=EA=B8=80=20=EC=9E=91=EC=84=B1=20=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20&=20=EA=B4=80=EB=A0=A8=20=EC=BB=B4?= =?UTF-8?q?=ED=8F=AC=EB=84=8C=ED=8A=B8=EB=93=A4=20=EA=B5=AC=EC=84=B1=20(#7?= =?UTF-8?q?1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * โœจ feature: Dropdown ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * โœจ feature: ์—๋””ํ„ฐ ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * ๐Ÿฅ… chore: ์ปดํฌ๋„ŒํŠธ ํด๋” ์œ„์น˜ ์ •๋ฆฌ * ๐Ÿฅ… chore: RouterTransition ์œ„์น˜ ์กฐ์ • * ๐Ÿฅ… chore: Dropdown ์ปดํฌ๋„ŒํŠธ ์Šคํƒ€์ผ ์กฐ์ •, ์Šคํ† ๋ฆฌ ์ž‘์„ฑ * โœจ feature: TextInput ์ปดํฌ๋„ŒํŠธ ์ •์˜, ์Šคํ† ๋ฆฌ ์ž‘์„ฑ * โœจ feature: ImageThumbnail ์ปดํฌ๋„ŒํŠธ ์ž‘์„ฑ ๋ฐ ๊ด€๋ จ ์Šคํ† ๋ฆฌ ์ถ”๊ฐ€ * ๐Ÿฅ… chore: ArticleEditor ์œ ํ‹ธ ๊ตฌ์„ฑ ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: ArticleEditor ์ปดํฌ๋„ŒํŠธ์— ๋กœ๋”ฉ๋ฐ” ์ถ”๊ฐ€ * โœจ feature: ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ ํŽ˜์ด์ง€ ๊ตฌ์„ฑ * ๐Ÿฅ… chore: args param ์ œ๊ฑฐ * ๐Ÿฅ… chore: enum์œผ๋กœ ํƒ€์ž… ์ ์šฉ * ๐Ÿฅ… chore: Slider ์ตœ์†Œ๊ฐ’์„ 1๋กœ ๋ณ€๊ฒฝ --- frontend/package-lock.json | 281 +++++++++++++++--- frontend/package.json | 1 + .../ArticleEditor/ArticleEditor.stories.tsx | 11 + .../article/ArticleEditor/index.tsx | 70 +++++ .../ImageThumbnail/ImageThumbnail.stories.tsx | 11 + .../article/ImageThumbnail/index.tsx | 45 +++ .../common/DropDown/DropDown.stories.tsx | 18 ++ .../src/components/common/DropDown/index.tsx | 28 ++ .../common/RouterTransition/index.tsx | 29 ++ .../common/TextInput/TextInput.stories.tsx | 16 + .../src/components/common/TextInput/index.tsx | 9 + frontend/src/pages/article/write/index.tsx | 190 +++++++++++- 12 files changed, 669 insertions(+), 40 deletions(-) create mode 100644 frontend/src/components/article/ArticleEditor/ArticleEditor.stories.tsx create mode 100644 frontend/src/components/article/ArticleEditor/index.tsx create mode 100644 frontend/src/components/article/ImageThumbnail/ImageThumbnail.stories.tsx create mode 100644 frontend/src/components/article/ImageThumbnail/index.tsx create mode 100644 frontend/src/components/common/DropDown/DropDown.stories.tsx create mode 100644 frontend/src/components/common/DropDown/index.tsx create mode 100644 frontend/src/components/common/RouterTransition/index.tsx create mode 100644 frontend/src/components/common/TextInput/TextInput.stories.tsx create mode 100644 frontend/src/components/common/TextInput/index.tsx diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 029739c2..b52ebc16 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -15,6 +15,7 @@ "@mantine/hooks": "^5.7.2", "@mantine/next": "^5.7.2", "@mantine/nprogress": "^5.7.2", + "@mantine/rte": "^5.8.3", "@tabler/icons": "^1.111.0", "@tanstack/react-query": "^4.16.1", "@tanstack/react-query-devtools": "^4.16.1", @@ -2854,6 +2855,22 @@ "react-dom": ">=16.8.0" } }, + "node_modules/@mantine/rte": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/@mantine/rte/-/rte-5.8.3.tgz", + "integrity": "sha512-7y6bYXYf0sbNtXlqdWbgG8aV8/6ZertyCP1Ew1atCnSC+sHDvYbXRSMj3UFQm1wwgTz05Inya7jHUVbd1o7MqA==", + "dependencies": { + "@tabler/icons": "^1.68.0", + "quill-mention": "^3.0.8", + "react-quill": "2.0.0" + }, + "peerDependencies": { + "@mantine/core": "5.8.3", + "@mantine/hooks": "5.8.3", + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, "node_modules/@mantine/ssr": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@mantine/ssr/-/ssr-5.8.0.tgz", @@ -10477,6 +10494,14 @@ "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", "dev": true }, + "node_modules/@types/quill": { + "version": "1.3.10", + "resolved": "https://registry.npmjs.org/@types/quill/-/quill-1.3.10.tgz", + "integrity": "sha512-IhW3fPW+bkt9MLNlycw8u8fWb7oO7W5URC9MfZYHBlA24rex9rs23D5DETChu1zvgVdc5ka64ICjJOgQMr6Shw==", + "dependencies": { + "parchment": "^1.1.2" + } + }, "node_modules/@types/react": { "version": "18.0.25", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.25.tgz", @@ -12881,7 +12906,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -14562,7 +14586,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, "dependencies": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" @@ -16020,6 +16043,11 @@ "node": ">= 0.6" } }, + "node_modules/eventemitter3": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-2.0.3.tgz", + "integrity": "sha512-jLN68Dx5kyFHaePoXWPsCGW5qdyZQtLYHkxkg02/Mz6g0kYpDx4FyP6XfArhQdlOC4b8Mv+EMxPo/8La7Tzghg==" + }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", @@ -16429,8 +16457,7 @@ "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, "node_modules/extend-shallow": { "version": "3.0.2", @@ -17306,7 +17333,6 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -17353,7 +17379,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "dev": true, "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -17651,7 +17676,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, "dependencies": { "get-intrinsic": "^1.1.1" }, @@ -17663,7 +17687,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -17675,7 +17698,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, "dependencies": { "has-symbols": "^1.0.2" }, @@ -18504,7 +18526,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -18635,7 +18656,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -18854,7 +18874,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -20449,8 +20468,7 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash.debounce": { "version": "4.0.8", @@ -22107,7 +22125,6 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" @@ -22123,7 +22140,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, "engines": { "node": ">= 0.4" } @@ -22681,6 +22697,11 @@ "tslib": "^2.0.3" } }, + "node_modules/parchment": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/parchment/-/parchment-1.1.4.tgz", + "integrity": "sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg==" + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -23444,6 +23465,85 @@ } ] }, + "node_modules/quill": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/quill/-/quill-1.3.7.tgz", + "integrity": "sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g==", + "dependencies": { + "clone": "^2.1.1", + "deep-equal": "^1.0.1", + "eventemitter3": "^2.0.3", + "extend": "^3.0.2", + "parchment": "^1.1.4", + "quill-delta": "^3.6.2" + } + }, + "node_modules/quill-delta": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/quill-delta/-/quill-delta-3.6.3.tgz", + "integrity": "sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg==", + "dependencies": { + "deep-equal": "^1.0.1", + "extend": "^3.0.2", + "fast-diff": "1.1.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/quill-delta/node_modules/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==", + "dependencies": { + "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" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/quill-delta/node_modules/fast-diff": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.1.2.tgz", + "integrity": "sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig==" + }, + "node_modules/quill-mention": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/quill-mention/-/quill-mention-3.1.0.tgz", + "integrity": "sha512-uyjGK8QPJHEcjvNc3wUJy6a05Oiu+6JJ0N9SFAwjYHYThgMzlKucyD975fq28Mr1it8ZFRNiRMPa0sCiVOAEwA==", + "dependencies": { + "quill": "^1.3.7" + } + }, + "node_modules/quill/node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/quill/node_modules/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==", + "dependencies": { + "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" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/ramda": { "version": "0.28.0", "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.28.0.tgz", @@ -23654,6 +23754,20 @@ "resolved": "https://registry.npmjs.org/react-property/-/react-property-2.0.0.tgz", "integrity": "sha512-kzmNjIgU32mO4mmH5+iUyrqlpFQhF8K2k7eZ4fdLSOPFrD1XgEuSBv9LDEgxRXTMBqMd8ppT0x6TIzqE5pdGdw==" }, + "node_modules/react-quill": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/react-quill/-/react-quill-2.0.0.tgz", + "integrity": "sha512-4qQtv1FtCfLgoD3PXAur5RyxuUbPXQGOHgTlFie3jtxp43mXDtzCKaOgQ3mLyZfi1PUlyjycfivKelFhy13QUg==", + "dependencies": { + "@types/quill": "^1.3.10", + "lodash": "^4.17.4", + "quill": "^1.3.7" + }, + "peerDependencies": { + "react": "^16 || ^17 || ^18", + "react-dom": "^16 || ^17 || ^18" + } + }, "node_modules/react-refresh": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", @@ -23907,7 +24021,6 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -30283,6 +30396,16 @@ "@mantine/utils": "5.8.0" } }, + "@mantine/rte": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/@mantine/rte/-/rte-5.8.3.tgz", + "integrity": "sha512-7y6bYXYf0sbNtXlqdWbgG8aV8/6ZertyCP1Ew1atCnSC+sHDvYbXRSMj3UFQm1wwgTz05Inya7jHUVbd1o7MqA==", + "requires": { + "@tabler/icons": "^1.68.0", + "quill-mention": "^3.0.8", + "react-quill": "2.0.0" + } + }, "@mantine/ssr": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@mantine/ssr/-/ssr-5.8.0.tgz", @@ -36043,6 +36166,14 @@ "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", "dev": true }, + "@types/quill": { + "version": "1.3.10", + "resolved": "https://registry.npmjs.org/@types/quill/-/quill-1.3.10.tgz", + "integrity": "sha512-IhW3fPW+bkt9MLNlycw8u8fWb7oO7W5URC9MfZYHBlA24rex9rs23D5DETChu1zvgVdc5ka64ICjJOgQMr6Shw==", + "requires": { + "parchment": "^1.1.2" + } + }, "@types/react": { "version": "18.0.25", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.25.tgz", @@ -37930,7 +38061,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, "requires": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -39235,7 +39365,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, "requires": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" @@ -40351,6 +40480,11 @@ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "dev": true }, + "eventemitter3": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-2.0.3.tgz", + "integrity": "sha512-jLN68Dx5kyFHaePoXWPsCGW5qdyZQtLYHkxkg02/Mz6g0kYpDx4FyP6XfArhQdlOC4b8Mv+EMxPo/8La7Tzghg==" + }, "events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", @@ -40681,8 +40815,7 @@ "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, "extend-shallow": { "version": "3.0.2", @@ -41380,8 +41513,7 @@ "functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" }, "gauge": { "version": "3.0.2", @@ -41416,7 +41548,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "dev": true, "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -41632,7 +41763,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, "requires": { "get-intrinsic": "^1.1.1" } @@ -41640,14 +41770,12 @@ "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" }, "has-tostringtag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, "requires": { "has-symbols": "^1.0.2" } @@ -42264,7 +42392,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -42345,7 +42472,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, "requires": { "has-tostringtag": "^1.0.0" } @@ -42490,7 +42616,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -43663,8 +43788,7 @@ "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash.debounce": { "version": "4.0.8", @@ -44985,7 +45109,6 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" @@ -44994,8 +45117,7 @@ "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, "object-visit": { "version": "1.0.1", @@ -45416,6 +45538,11 @@ "tslib": "^2.0.3" } }, + "parchment": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/parchment/-/parchment-1.1.4.tgz", + "integrity": "sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg==" + }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -45983,6 +46110,77 @@ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, + "quill": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/quill/-/quill-1.3.7.tgz", + "integrity": "sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g==", + "requires": { + "clone": "^2.1.1", + "deep-equal": "^1.0.1", + "eventemitter3": "^2.0.3", + "extend": "^3.0.2", + "parchment": "^1.1.4", + "quill-delta": "^3.6.2" + }, + "dependencies": { + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==" + }, + "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==", + "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" + } + } + } + }, + "quill-delta": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/quill-delta/-/quill-delta-3.6.3.tgz", + "integrity": "sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg==", + "requires": { + "deep-equal": "^1.0.1", + "extend": "^3.0.2", + "fast-diff": "1.1.2" + }, + "dependencies": { + "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==", + "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" + } + }, + "fast-diff": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.1.2.tgz", + "integrity": "sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig==" + } + } + }, + "quill-mention": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/quill-mention/-/quill-mention-3.1.0.tgz", + "integrity": "sha512-uyjGK8QPJHEcjvNc3wUJy6a05Oiu+6JJ0N9SFAwjYHYThgMzlKucyD975fq28Mr1it8ZFRNiRMPa0sCiVOAEwA==", + "requires": { + "quill": "^1.3.7" + } + }, "ramda": { "version": "0.28.0", "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.28.0.tgz", @@ -46147,6 +46345,16 @@ "resolved": "https://registry.npmjs.org/react-property/-/react-property-2.0.0.tgz", "integrity": "sha512-kzmNjIgU32mO4mmH5+iUyrqlpFQhF8K2k7eZ4fdLSOPFrD1XgEuSBv9LDEgxRXTMBqMd8ppT0x6TIzqE5pdGdw==" }, + "react-quill": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/react-quill/-/react-quill-2.0.0.tgz", + "integrity": "sha512-4qQtv1FtCfLgoD3PXAur5RyxuUbPXQGOHgTlFie3jtxp43mXDtzCKaOgQ3mLyZfi1PUlyjycfivKelFhy13QUg==", + "requires": { + "@types/quill": "^1.3.10", + "lodash": "^4.17.4", + "quill": "^1.3.7" + } + }, "react-refresh": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", @@ -46348,7 +46556,6 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", diff --git a/frontend/package.json b/frontend/package.json index aa520d6d..996fa6ed 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -32,6 +32,7 @@ "@mantine/hooks": "^5.7.2", "@mantine/next": "^5.7.2", "@mantine/nprogress": "^5.7.2", + "@mantine/rte": "^5.8.3", "@tabler/icons": "^1.111.0", "@tanstack/react-query": "^4.16.1", "@tanstack/react-query-devtools": "^4.16.1", diff --git a/frontend/src/components/article/ArticleEditor/ArticleEditor.stories.tsx b/frontend/src/components/article/ArticleEditor/ArticleEditor.stories.tsx new file mode 100644 index 00000000..6c564013 --- /dev/null +++ b/frontend/src/components/article/ArticleEditor/ArticleEditor.stories.tsx @@ -0,0 +1,11 @@ +import ArticleEditor from '.'; +import { ComponentMeta, ComponentStory } from '@storybook/react'; + +export default { + title: 'Component/ArticleEditor', + component: ArticleEditor, +} as ComponentMeta; + +const Template: ComponentStory = () => ; + +export const Default = Template.bind({}); diff --git a/frontend/src/components/article/ArticleEditor/index.tsx b/frontend/src/components/article/ArticleEditor/index.tsx new file mode 100644 index 00000000..c91a0291 --- /dev/null +++ b/frontend/src/components/article/ArticleEditor/index.tsx @@ -0,0 +1,70 @@ +import dynamic from 'next/dynamic'; +import styled from '@emotion/styled'; +import { Text, LoadingOverlay } from '@mantine/core'; +import { RichTextEditorProps } from '@mantine/rte'; + +const RichTextEditor = dynamic(() => import('@mantine/rte'), { + ssr: false, + loading: () => ( + + , + + ), +}); + +interface Props extends RichTextEditorProps {} + +const ArticleEditor = (props: Props) => { + return ( + + + + ๋‚ด์šฉ + + + * + + + + + ); +}; + +const ArticleEditorWrapper = styled.div``; + +const ArticleEditorLabel = styled.div` + display: flex; + align-items: center; + gap: 0.4rem; + margin-bottom: 0.4rem; +`; + +const StyledEditor = styled(RichTextEditor)` + & .quill, + & .ql-container { + min-height: 40rem; + max-height: 40rem; + overflow: auto; + font-size: 1.4rem; + } +`; + +const LoadingWrapper = styled.div` + position: relative; + width: 100%; + height: 447px; + border: 1px solid ${({ theme }) => theme.colors.gray[4]}; + border-radius: '0.8rem'; +`; + +export default ArticleEditor; diff --git a/frontend/src/components/article/ImageThumbnail/ImageThumbnail.stories.tsx b/frontend/src/components/article/ImageThumbnail/ImageThumbnail.stories.tsx new file mode 100644 index 00000000..105ea66c --- /dev/null +++ b/frontend/src/components/article/ImageThumbnail/ImageThumbnail.stories.tsx @@ -0,0 +1,11 @@ +import ImageThumbnail from '.'; +import { ComponentMeta, ComponentStory } from '@storybook/react'; + +export default { + title: 'Component/ImageThumbnail', + component: ImageThumbnail, +} as ComponentMeta; + +const Template: ComponentStory = (args) => ; + +export const NoImageURL = Template.bind({}); diff --git a/frontend/src/components/article/ImageThumbnail/index.tsx b/frontend/src/components/article/ImageThumbnail/index.tsx new file mode 100644 index 00000000..a935e847 --- /dev/null +++ b/frontend/src/components/article/ImageThumbnail/index.tsx @@ -0,0 +1,45 @@ +import styled from '@emotion/styled'; +import Image from 'next/image'; +import { useTheme } from '@emotion/react'; +import { IconPhoto } from '@tabler/icons'; + +interface Props { + /** + * ์ธ๋„ค์ผ๋กœ ์‚ฌ์šฉํ•  ์ด๋ฏธ์ง€์˜ URL์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. + * ์˜ˆ์‹œ) https://images.unsplash.com/photo-1669267234783-ab82d945fe5f?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1007&q=80 + */ + src?: string | null; +} + +const ImageThumbnail = ({ src = null }: Props) => { + const { + colors: { gray }, + } = useTheme(); + + return ( + + {src ? ( + + ) : ( + + )} + + ); +}; + +export default ImageThumbnail; + +const ThumbnailImage = styled(Image)` + border-radius: 0.8rem; +`; + +const ThumbnailWrapper = styled.div` + background-color: ${({ theme }) => theme.colors.gray[0]}; + width: 12rem; + height: 12rem; + border-radius: 0.8rem; + display: flex; + justify-content: center; + align-items: center; + overflow: hidden; +`; diff --git a/frontend/src/components/common/DropDown/DropDown.stories.tsx b/frontend/src/components/common/DropDown/DropDown.stories.tsx new file mode 100644 index 00000000..14d86487 --- /dev/null +++ b/frontend/src/components/common/DropDown/DropDown.stories.tsx @@ -0,0 +1,18 @@ +import { ComponentMeta, ComponentStory } from '@storybook/react'; +import DropDown from '.'; +import { CategoryKr } from '@constants/category'; + +export default { + title: 'Component/DropDown', + component: DropDown, +} as ComponentMeta; + +const Template: ComponentStory = (args) => ; + +export const Default = Template.bind({}); +Default.args = { + label: '์นดํ…Œ๊ณ ๋ฆฌ', + placeholder: '์นดํ…Œ๊ณ ๋ฆฌ ์„ ํƒํ•˜๊ธฐ', + data: Object.entries(CategoryKr).map(([key, value]) => ({ label: value, value: key })), + required: true, +}; diff --git a/frontend/src/components/common/DropDown/index.tsx b/frontend/src/components/common/DropDown/index.tsx new file mode 100644 index 00000000..db260d55 --- /dev/null +++ b/frontend/src/components/common/DropDown/index.tsx @@ -0,0 +1,28 @@ +import styled from '@emotion/styled'; +import { Select, SelectProps } from '@mantine/core'; + +interface Props extends SelectProps {} + +const DropDown = (props: Props) => { + return ; +}; + +const StyledSelect = styled(Select)` + width: 100%; + & .mantine-Select-item { + padding: 1.6rem; + &[data-selected] { + &, + &:hover { + background-color: ${({ theme }) => theme.colors.indigo[0]}; + color: ${({ theme }) => theme.colors.indigo[7]}; + } + } + } + + & .mantine-Select-label { + padding-bottom: 0.4rem; + } +`; + +export default DropDown; diff --git a/frontend/src/components/common/RouterTransition/index.tsx b/frontend/src/components/common/RouterTransition/index.tsx new file mode 100644 index 00000000..76352b37 --- /dev/null +++ b/frontend/src/components/common/RouterTransition/index.tsx @@ -0,0 +1,29 @@ +import { useEffect } from 'react'; +import { useRouter } from 'next/router'; +import { + startNavigationProgress, + completeNavigationProgress, + NavigationProgress, +} from '@mantine/nprogress'; + +const RouterTransition = () => { + const router = useRouter(); + useEffect(() => { + const handleStart = (url: string) => url !== router.asPath && startNavigationProgress(); + const handleComplete = () => completeNavigationProgress(); + + router.events.on('routeChangeStart', handleStart); + router.events.on('routeChangeComplete', handleComplete); + router.events.on('routeChangeError', handleComplete); + + return () => { + router.events.off('routeChangeStart', handleStart); + router.events.off('routeChangeComplete', handleComplete); + router.events.off('routeChangeError', handleComplete); + }; + }, [router]); + + return ; +}; + +export default RouterTransition; diff --git a/frontend/src/components/common/TextInput/TextInput.stories.tsx b/frontend/src/components/common/TextInput/TextInput.stories.tsx new file mode 100644 index 00000000..60fb0912 --- /dev/null +++ b/frontend/src/components/common/TextInput/TextInput.stories.tsx @@ -0,0 +1,16 @@ +import TextInput from '.'; +import { ComponentMeta, ComponentStory } from '@storybook/react'; + +export default { + title: 'Component/TextInput', + component: TextInput, +} as ComponentMeta; + +const Template: ComponentStory = (args) => ; + +export const Default = Template.bind({}); +Default.args = { + label: '์ œ๋ชฉ', + placeholder: '์ œ๋ชฉ์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.', + required: true, +}; diff --git a/frontend/src/components/common/TextInput/index.tsx b/frontend/src/components/common/TextInput/index.tsx new file mode 100644 index 00000000..40a7af99 --- /dev/null +++ b/frontend/src/components/common/TextInput/index.tsx @@ -0,0 +1,9 @@ +import { TextInput as MantineTextInput, TextInputProps } from '@mantine/core'; + +interface Props extends TextInputProps {} + +const TextInput = (props: Props) => { + return ; +}; + +export default TextInput; diff --git a/frontend/src/pages/article/write/index.tsx b/frontend/src/pages/article/write/index.tsx index 8ee3a543..1f9ba7f1 100644 --- a/frontend/src/pages/article/write/index.tsx +++ b/frontend/src/pages/article/write/index.tsx @@ -1,13 +1,197 @@ +import { useState } from 'react'; +import Head from 'next/head'; +import styled from '@emotion/styled'; +import { Slider, Text, FileInput, ActionIcon } from '@mantine/core'; +import { IconCheck, IconUser, IconUpload } from '@tabler/icons'; + import PageLayout from '@components/common/PageLayout'; import Header from '@components/common/Header'; +import TextInput from '@components/common/TextInput'; import DetailTitle from '@components/common/Header/DetailTitle'; +import DropDown from '@components/common/DropDown'; +import { Category, CategoryKr } from '@constants/category'; +import { Location, LocationKr } from '@constants/location'; +import ArticleEditor from '@components/article/ArticleEditor'; +import ImageThumbnail from '@components/article/ImageThumbnail'; + +/** + * Todo + * - ๊ฒŒ์‹œ๊ธ€ ๋“ฑ๋ก API ์—ฐ๋™ + * - ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ API ์—ฐ๋™ + */ const WritePage = () => { + const [category, setCategory] = useState(null); + const [location, setLocation] = useState(null); + const [maxCapacity, setmaxCapacity] = useState(5); + const [title, setTitle] = useState(''); + const [content, setContent] = useState(''); + const [chatLink, setChatLink] = useState(''); + const [uploadedImage, setUploadedImage] = useState(null); + + const possibleToSubmit = + category && + location && + maxCapacity && + title.length > 0 && + content.length > 0 && + chatLink.length > 0 && + uploadedImage; + return ( - -
    } /> - + <> + + ๋ชจ์—ฌ๋ชจ์—ฌ - ๋ชจ์ง‘ ๊ฒŒ์‹œํŒ + + } + rightNode={ + alert('๊ฒŒ์‹œ๊ธ€ ๋“ฑ๋ก!')} + > + + + } + /> + } + > + + + ({ + label: value, + value: key, + }))} + value={category} + onChange={(value) => setCategory(value as Category)} + required + /> + + ({ + label: value, + value: key, + }))} + value={location} + onChange={(value) => setLocation(value as Location)} + required + /> + + + + + ์ธ์›์ œํ•œ + + + {maxCapacity}๋ช… + + + } + thumbSize={26} + styles={{ thumb: { borderWidth: 2, padding: 3 } }} + label={null} + min={1} + max={15} + value={maxCapacity} + onChange={setmaxCapacity} + /> + + + + setTitle(e.target.value)} + /> + + setChatLink(e.target.value)} + /> + + + + ์ธ๋„ค์ผ ์ด๋ฏธ์ง€ + + + * + + + + } + /> + + + + ); }; +const TermSection = styled.div` + padding: 1.6rem; + border-bottom: 1px solid ${({ theme }) => theme.colors.gray[4]}; + display: flex; + flex-direction: column; + gap: 1.6rem; ; +`; + +const SelectSection = styled.div` + width: 100%; + display: flex; + gap: 1.6rem; +`; + +const PersonSection = styled.div` + width: 100%; + display: flex; + flex-direction: column; + gap: 0.8rem; +`; + +const PersonSectionHeader = styled.div` + width: 100%; + display: flex; + justify-content: space-between; +`; + +const PostSection = styled.div` + width: 100%; + display: flex; + flex-direction: column; + gap: 1.6rem; + padding: 1.6rem; +`; + +const ImageSection = styled.div` + display: flex; + flex-direction: column; + gap: 0.8rem; +`; +const FileInputLabel = styled.div` + display: flex; + align-items: center; + gap: 0.4rem; +`; + export default WritePage; From 214f590f839c0b39a2c5b50d7f0d463f304d5fbd Mon Sep 17 00:00:00 2001 From: yangseungchan Date: Fri, 25 Nov 2022 11:45:37 +0900 Subject: [PATCH 028/142] =?UTF-8?q?=F0=9F=90=9B=20fix:=20mantine=20?= =?UTF-8?q?=EB=9D=BC=EC=9D=B4=EB=B8=8C=EB=9F=AC=EB=A6=AC=20=EB=B2=84?= =?UTF-8?q?=EC=A0=84=20=EB=AA=85=EC=8B=9C=20=EC=88=98=EC=A0=95=20(#76)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/package-lock.json | 140 ++++++++++++++++++------------------- frontend/package.json | 10 +-- 2 files changed, 75 insertions(+), 75 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index b52ebc16..1226d874 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -11,11 +11,11 @@ "@emotion/react": "^11.10.5", "@emotion/server": "^11.10.0", "@emotion/styled": "^11.10.5", - "@mantine/core": "^5.7.2", - "@mantine/hooks": "^5.7.2", - "@mantine/next": "^5.7.2", - "@mantine/nprogress": "^5.7.2", - "@mantine/rte": "^5.8.3", + "@mantine/core": "~5.7.2", + "@mantine/hooks": "~5.7.2", + "@mantine/next": "~5.7.2", + "@mantine/nprogress": "~5.7.2", + "@mantine/rte": "~5.7.2", "@tabler/icons": "^1.111.0", "@tanstack/react-query": "^4.16.1", "@tanstack/react-query-devtools": "^4.16.1", @@ -2803,37 +2803,37 @@ } }, "node_modules/@mantine/core": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@mantine/core/-/core-5.8.0.tgz", - "integrity": "sha512-GGQJqVXI3cbY5OzFrg3S3bJUypPktJIFeb2hI65qskFJViL6F8dUynRuKZfi8B4GHteG86zqiZCUo0cUVRTiaQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@mantine/core/-/core-5.7.2.tgz", + "integrity": "sha512-cDDvlYhDCzREfIZ33CRLQpXlv+UXRb4VBZWbfYxWXTRPV6gKNGXwlVmXcdDUJCcjRWLh9Wc4erWT8gdTAbvzsQ==", "dependencies": { "@floating-ui/react-dom-interactions": "^0.10.1", - "@mantine/styles": "5.8.0", - "@mantine/utils": "5.8.0", + "@mantine/styles": "5.7.2", + "@mantine/utils": "5.7.2", "@radix-ui/react-scroll-area": "1.0.0", "react-textarea-autosize": "8.3.4" }, "peerDependencies": { - "@mantine/hooks": "5.8.0", + "@mantine/hooks": "5.7.2", "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "node_modules/@mantine/hooks": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-5.8.0.tgz", - "integrity": "sha512-838TKK0jTvU9sy7OcbDYc2P9fXyyca4HQxKRP2kRJnsnL6ZAHWFlFosGIcN97FiWh+8uQA7jCoD8jyrUjrFDXg==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-5.7.2.tgz", + "integrity": "sha512-g+fxcnQwEeVM/5h+SAX/rDNL2s1652DGbP4xxfNg6yFqqhQzmtxQN7xsmkZ+ffx8wKhbsP5z13x6WZoxuJQh9Q==", "peerDependencies": { "react": ">=16.8.0" } }, "node_modules/@mantine/next": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@mantine/next/-/next-5.8.0.tgz", - "integrity": "sha512-hL+52JwxLaIua2oMzm3hPcUyJqf6BcE9Md5/S3IGoMvQ69neGFeJKKkQIzTD1ikjm4Rw7ryEjko/FA5axe7u5A==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@mantine/next/-/next-5.7.2.tgz", + "integrity": "sha512-rcGmr2u7SwG+/Zw/eZPmr/jloiHdeW+rW66q+MtUCoVdMD4ik9fXrOFRcIhDmeSFmE6aQ4hPFwXdSY3AdEYGQg==", "dependencies": { - "@mantine/ssr": "5.8.0", - "@mantine/styles": "5.8.0" + "@mantine/ssr": "5.7.2", + "@mantine/styles": "5.7.2" }, "peerDependencies": { "next": "*", @@ -2842,41 +2842,41 @@ } }, "node_modules/@mantine/nprogress": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@mantine/nprogress/-/nprogress-5.8.0.tgz", - "integrity": "sha512-D3LUE4V94iGkgLN23xfYe2zFZ5jcDmugB0cVS82m1q/crJOrMVKfpXesOE+mu+zUBKeOBVTcni66hXvGYFgiZg==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@mantine/nprogress/-/nprogress-5.7.2.tgz", + "integrity": "sha512-PdVB8PImiz3TawFyNRgIrD/7t2pMfxmB6d+JPfs5+UZcG0nbATF17wvop+YsjsQ92LmEMby5sYIgH7qEhze1Sw==", "dependencies": { - "@mantine/utils": "5.8.0" + "@mantine/utils": "5.7.2" }, "peerDependencies": { - "@mantine/core": "5.8.0", - "@mantine/hooks": "5.8.0", + "@mantine/core": "5.7.2", + "@mantine/hooks": "5.7.2", "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "node_modules/@mantine/rte": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/@mantine/rte/-/rte-5.8.3.tgz", - "integrity": "sha512-7y6bYXYf0sbNtXlqdWbgG8aV8/6ZertyCP1Ew1atCnSC+sHDvYbXRSMj3UFQm1wwgTz05Inya7jHUVbd1o7MqA==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@mantine/rte/-/rte-5.7.2.tgz", + "integrity": "sha512-8FkHlJBsiGwM7LTislqcUr0TC1Lfp6GQxGf/y2B4mW/LB1jmxGkYFgbHbiS/v38smaJC5FxqfeL/zgDQ9G57EA==", "dependencies": { "@tabler/icons": "^1.68.0", "quill-mention": "^3.0.8", "react-quill": "2.0.0" }, "peerDependencies": { - "@mantine/core": "5.8.3", - "@mantine/hooks": "5.8.3", + "@mantine/core": "5.7.2", + "@mantine/hooks": "5.7.2", "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "node_modules/@mantine/ssr": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@mantine/ssr/-/ssr-5.8.0.tgz", - "integrity": "sha512-JKhLPQBCLu/dv5V89y3/nA5Awr/ADR4Ti0ajmfEbe+8aUfDCgHQ3l80jpUYzWGeiT4qNBMzRg1ovxGZ0Ra1e5A==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@mantine/ssr/-/ssr-5.7.2.tgz", + "integrity": "sha512-2DB5Df6eR4C9/V7lpmwQE8jVkSHSJBTqkZxjsYa1HsKeX4cNFM0SbRsNYk1bQHSq377DXh6PkVMqTzSDqGcFgw==", "dependencies": { - "@mantine/styles": "5.8.0", + "@mantine/styles": "5.7.2", "html-react-parser": "1.4.12" }, "peerDependencies": { @@ -2887,9 +2887,9 @@ } }, "node_modules/@mantine/styles": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@mantine/styles/-/styles-5.8.0.tgz", - "integrity": "sha512-sCKPEJpiSF97ISrbJ6tr9GdYCLoX0vWA0aKWc5GGnpZLVTr5WlqMdqY7u0J00aAfjPHqeuN3hIrnEs7bn0qmVg==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@mantine/styles/-/styles-5.7.2.tgz", + "integrity": "sha512-z5Mxf6Zp7lXzfIM77XkZ68Wp62lDSMJwEMoKm0Kz5tRGV4oMQwirbZf4ZJznZKK3HkaT7ct1ScxnCouEWzlKUg==", "dependencies": { "clsx": "1.1.1", "csstype": "3.0.9" @@ -2906,9 +2906,9 @@ "integrity": "sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw==" }, "node_modules/@mantine/utils": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@mantine/utils/-/utils-5.8.0.tgz", - "integrity": "sha512-gVE4U3apoE53MUWgKqst9H0iWgurzBccZNSSGRv3kD62vAFcI1JJhxxuW7X271bc9IMhKjgezEH14ApH1jlwCA==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@mantine/utils/-/utils-5.7.2.tgz", + "integrity": "sha512-LE/ckEX+d1f5GOP1ARNEldUYybOp3Tualx5IYgeV06oyBOaeJaXs9Tco2NTM6j+opZwUbNuYEUmtp4bkArhpOg==", "peerDependencies": { "react": ">=16.8.0" } @@ -30363,43 +30363,43 @@ } }, "@mantine/core": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@mantine/core/-/core-5.8.0.tgz", - "integrity": "sha512-GGQJqVXI3cbY5OzFrg3S3bJUypPktJIFeb2hI65qskFJViL6F8dUynRuKZfi8B4GHteG86zqiZCUo0cUVRTiaQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@mantine/core/-/core-5.7.2.tgz", + "integrity": "sha512-cDDvlYhDCzREfIZ33CRLQpXlv+UXRb4VBZWbfYxWXTRPV6gKNGXwlVmXcdDUJCcjRWLh9Wc4erWT8gdTAbvzsQ==", "requires": { "@floating-ui/react-dom-interactions": "^0.10.1", - "@mantine/styles": "5.8.0", - "@mantine/utils": "5.8.0", + "@mantine/styles": "5.7.2", + "@mantine/utils": "5.7.2", "@radix-ui/react-scroll-area": "1.0.0", "react-textarea-autosize": "8.3.4" } }, "@mantine/hooks": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-5.8.0.tgz", - "integrity": "sha512-838TKK0jTvU9sy7OcbDYc2P9fXyyca4HQxKRP2kRJnsnL6ZAHWFlFosGIcN97FiWh+8uQA7jCoD8jyrUjrFDXg==" + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-5.7.2.tgz", + "integrity": "sha512-g+fxcnQwEeVM/5h+SAX/rDNL2s1652DGbP4xxfNg6yFqqhQzmtxQN7xsmkZ+ffx8wKhbsP5z13x6WZoxuJQh9Q==" }, "@mantine/next": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@mantine/next/-/next-5.8.0.tgz", - "integrity": "sha512-hL+52JwxLaIua2oMzm3hPcUyJqf6BcE9Md5/S3IGoMvQ69neGFeJKKkQIzTD1ikjm4Rw7ryEjko/FA5axe7u5A==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@mantine/next/-/next-5.7.2.tgz", + "integrity": "sha512-rcGmr2u7SwG+/Zw/eZPmr/jloiHdeW+rW66q+MtUCoVdMD4ik9fXrOFRcIhDmeSFmE6aQ4hPFwXdSY3AdEYGQg==", "requires": { - "@mantine/ssr": "5.8.0", - "@mantine/styles": "5.8.0" + "@mantine/ssr": "5.7.2", + "@mantine/styles": "5.7.2" } }, "@mantine/nprogress": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@mantine/nprogress/-/nprogress-5.8.0.tgz", - "integrity": "sha512-D3LUE4V94iGkgLN23xfYe2zFZ5jcDmugB0cVS82m1q/crJOrMVKfpXesOE+mu+zUBKeOBVTcni66hXvGYFgiZg==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@mantine/nprogress/-/nprogress-5.7.2.tgz", + "integrity": "sha512-PdVB8PImiz3TawFyNRgIrD/7t2pMfxmB6d+JPfs5+UZcG0nbATF17wvop+YsjsQ92LmEMby5sYIgH7qEhze1Sw==", "requires": { - "@mantine/utils": "5.8.0" + "@mantine/utils": "5.7.2" } }, "@mantine/rte": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/@mantine/rte/-/rte-5.8.3.tgz", - "integrity": "sha512-7y6bYXYf0sbNtXlqdWbgG8aV8/6ZertyCP1Ew1atCnSC+sHDvYbXRSMj3UFQm1wwgTz05Inya7jHUVbd1o7MqA==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@mantine/rte/-/rte-5.7.2.tgz", + "integrity": "sha512-8FkHlJBsiGwM7LTislqcUr0TC1Lfp6GQxGf/y2B4mW/LB1jmxGkYFgbHbiS/v38smaJC5FxqfeL/zgDQ9G57EA==", "requires": { "@tabler/icons": "^1.68.0", "quill-mention": "^3.0.8", @@ -30407,18 +30407,18 @@ } }, "@mantine/ssr": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@mantine/ssr/-/ssr-5.8.0.tgz", - "integrity": "sha512-JKhLPQBCLu/dv5V89y3/nA5Awr/ADR4Ti0ajmfEbe+8aUfDCgHQ3l80jpUYzWGeiT4qNBMzRg1ovxGZ0Ra1e5A==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@mantine/ssr/-/ssr-5.7.2.tgz", + "integrity": "sha512-2DB5Df6eR4C9/V7lpmwQE8jVkSHSJBTqkZxjsYa1HsKeX4cNFM0SbRsNYk1bQHSq377DXh6PkVMqTzSDqGcFgw==", "requires": { - "@mantine/styles": "5.8.0", + "@mantine/styles": "5.7.2", "html-react-parser": "1.4.12" } }, "@mantine/styles": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@mantine/styles/-/styles-5.8.0.tgz", - "integrity": "sha512-sCKPEJpiSF97ISrbJ6tr9GdYCLoX0vWA0aKWc5GGnpZLVTr5WlqMdqY7u0J00aAfjPHqeuN3hIrnEs7bn0qmVg==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@mantine/styles/-/styles-5.7.2.tgz", + "integrity": "sha512-z5Mxf6Zp7lXzfIM77XkZ68Wp62lDSMJwEMoKm0Kz5tRGV4oMQwirbZf4ZJznZKK3HkaT7ct1ScxnCouEWzlKUg==", "requires": { "clsx": "1.1.1", "csstype": "3.0.9" @@ -30432,9 +30432,9 @@ } }, "@mantine/utils": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@mantine/utils/-/utils-5.8.0.tgz", - "integrity": "sha512-gVE4U3apoE53MUWgKqst9H0iWgurzBccZNSSGRv3kD62vAFcI1JJhxxuW7X271bc9IMhKjgezEH14ApH1jlwCA==" + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@mantine/utils/-/utils-5.7.2.tgz", + "integrity": "sha512-LE/ckEX+d1f5GOP1ARNEldUYybOp3Tualx5IYgeV06oyBOaeJaXs9Tco2NTM6j+opZwUbNuYEUmtp4bkArhpOg==" }, "@mdx-js/mdx": { "version": "1.6.22", diff --git a/frontend/package.json b/frontend/package.json index 996fa6ed..e255dc23 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -28,11 +28,11 @@ "@emotion/react": "^11.10.5", "@emotion/server": "^11.10.0", "@emotion/styled": "^11.10.5", - "@mantine/core": "^5.7.2", - "@mantine/hooks": "^5.7.2", - "@mantine/next": "^5.7.2", - "@mantine/nprogress": "^5.7.2", - "@mantine/rte": "^5.8.3", + "@mantine/core": "~5.7.2", + "@mantine/hooks": "~5.7.2", + "@mantine/next": "~5.7.2", + "@mantine/nprogress": "~5.7.2", + "@mantine/rte": "~5.7.2", "@tabler/icons": "^1.111.0", "@tanstack/react-query": "^4.16.1", "@tanstack/react-query-devtools": "^4.16.1", From 528d1b198434b5801e6a8c07579024d3a936625e Mon Sep 17 00:00:00 2001 From: MinGyeong Park <37508296+kong430@users.noreply.github.com> Date: Sat, 26 Nov 2022 12:50:27 +0900 Subject: [PATCH 029/142] =?UTF-8?q?:pencil2:=20fix:=20=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20=EB=A0=88=EC=9D=B4=EC=95=84=EC=9B=83=EC=97=90=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9=EB=90=98=EC=96=B4=20=EC=9E=88=EB=8D=98=20pad?= =?UTF-8?q?ding=20=EC=A0=9C=EA=B1=B0=20(#77)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ํŽ˜์ด์ง€ ๋‚ด์—์„œ padding ์—†์ด ์ „์ฒด๋ฅผ ์ฐจ์ง€ํ•˜๋Š” ์š”์†Œ๋„ ์žˆ์œผ๋ฏ€๋กœ, ๊ฐ ํŽ˜์ด์ง€ ๋‚ด์—์„œ padding์„ ์ฃผ๋„๋ก ํ•จ --- frontend/src/components/common/PageLayout/index.tsx | 1 - frontend/src/pages/article/[id].tsx | 7 ++++--- frontend/src/pages/index.tsx | 1 + 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/frontend/src/components/common/PageLayout/index.tsx b/frontend/src/components/common/PageLayout/index.tsx index e29872e9..d984d04e 100644 --- a/frontend/src/components/common/PageLayout/index.tsx +++ b/frontend/src/components/common/PageLayout/index.tsx @@ -33,7 +33,6 @@ const PageWrapper = styled.div` const ContentWrapper = styled.div` width: 100%; height: 100%; - padding: 1.6rem; flex: 1; `; diff --git a/frontend/src/pages/article/[id].tsx b/frontend/src/pages/article/[id].tsx index 07fb8600..af7076a9 100644 --- a/frontend/src/pages/article/[id].tsx +++ b/frontend/src/pages/article/[id].tsx @@ -44,7 +44,7 @@ const ArticleDetail = () => { /> } > - + @@ -99,16 +99,17 @@ const ArticleDetail = () => {
    ๋Œ“๊ธ€์˜์—ญ
    -
    + ); }; export default ArticleDetail; -const PageWrapper = styled.div` +const ContenxtWrapper = styled.div` display: flex; flex-direction: column; + padding: 1.6rem; `; const DetailWrapper = styled.div` diff --git a/frontend/src/pages/index.tsx b/frontend/src/pages/index.tsx index 42942ce5..4c6eae11 100644 --- a/frontend/src/pages/index.tsx +++ b/frontend/src/pages/index.tsx @@ -140,6 +140,7 @@ const ContentWrapper = styled.div` display: flex; flex-direction: column; gap: 1.2rem; + padding: 1.6rem; `; const FilterWrapper = styled.div` From faf9e30c88043761d1e36008e91d9960139f4660 Mon Sep 17 00:00:00 2001 From: yangseungchan Date: Sat, 26 Nov 2022 14:54:05 +0900 Subject: [PATCH 030/142] =?UTF-8?q?[Fix]=20=EB=A1=9C=EA=B7=B8=EC=9D=B8?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=9D=B4=EC=8A=88=20/=20?= =?UTF-8?q?=EB=A1=9C=EC=BB=AC=20=ED=8F=B0=ED=8A=B8=20=EC=A0=81=EC=9A=A9=20?= =?UTF-8?q?=EC=9D=B4=EC=8A=88=20=ED=95=B4=EA=B2=B0=20(#84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ๐Ÿ› fix: ํฐํŠธ ์ „์—ญ ํฐํŠธ ์„ค์ • ์ถ”๊ฐ€ * ๐Ÿ› fix: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ๋ฒ„๊ทธ ์ˆ˜์ • --- frontend/src/pages/login.tsx | 8 ++++++-- frontend/src/styles/GlobalStyles.tsx | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/frontend/src/pages/login.tsx b/frontend/src/pages/login.tsx index 64d9d72e..4990e1d6 100644 --- a/frontend/src/pages/login.tsx +++ b/frontend/src/pages/login.tsx @@ -2,10 +2,14 @@ import styled from '@emotion/styled'; import LogoIcon from '@public/icons/logo-lg.svg'; import PageLayout from '@components/common/PageLayout'; import GitLoginButton from '@components/login/GitLoginButton'; +import Header from '@components/common/Header'; +import DetailTitle from '@components/common/Header/DetailTitle'; const Login = () => { return ( - + } />} + > @@ -24,7 +28,7 @@ const PageWrapper = styled.div` display: flex; flex-direction: column; gap: 3.6rem; - height: 100%; + height: calc(100vh - 6.4rem - 3.2rem); justify-content: center; align-items: center; `; diff --git a/frontend/src/styles/GlobalStyles.tsx b/frontend/src/styles/GlobalStyles.tsx index 6831c29f..0cd2dbd9 100644 --- a/frontend/src/styles/GlobalStyles.tsx +++ b/frontend/src/styles/GlobalStyles.tsx @@ -6,6 +6,7 @@ const GlobalStyle = () => { styles={{ '*, *::before, *::after': { boxSizing: 'border-box', + fontFamily: 'NanumSquareNeo, sans-serif', }, html: { fontSize: '62.5%', From a2cf10394fef6dc1eee6b1574bfb91da51dcb71a Mon Sep 17 00:00:00 2001 From: MinGyeong Park <37508296+kong430@users.noreply.github.com> Date: Sat, 26 Nov 2022 22:47:15 +0900 Subject: [PATCH 031/142] =?UTF-8?q?[Feature]=20=EC=B0=B8=EA=B0=80=EC=8B=A0?= =?UTF-8?q?=EC=B2=AD=EC=9E=90=20=EB=AA=A9=EB=A1=9D=20Modal=20(#86)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :sparkles: feature: Joiner ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ * :sparkles: feature: UserType ์ •์˜ * :sparkles: feature: EmptyMessage ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ ๋ฆฌํŒฉํ† ๋ง * :sparkles: feature: ์‹ ์ฒญ์ž ๋ชฉ๋ก ๋ชจ๋‹ฌ ์ƒ์„ฑ * :sparkles: feature: Jointer ์Šคํ† ๋ฆฌ ์ƒ์„ฑ * :recycle: refactor: Fragment๋ฅผ ๋นˆ ํƒœ๊ทธ๋กœ ๋ณ€๊ฒฝ * :recycle: refactor: ๋ฆฌ๋ทฐ ๋ฐ˜์˜ ParticipantItem styled์— ์„ธ๋ฏธ์ฝœ๋ก  ๋น ์ง„ ๊ฒƒ ์ถ”๊ฐ€, ๋งํฌ ๋ฒ„ํŠผ ๋„ค์ด๋ฐ ์ˆ˜์ •, modal title์˜ font-weight 700์œผ๋กœ ๋ณ€๊ฒฝ --- .../src/components/article/Comment/index.tsx | 2 +- .../ParticipantItem.stories.tsx | 15 ++++ .../ParticipantItem/index.tsx | 72 +++++++++++++++++++ .../ParticipantsModal.stories.tsx | 24 +++++++ .../article/ParticipantsModal/index.tsx | 42 +++++++++++ .../EmptyMessage/EmptyMessage.stories.tsx | 15 ++++ .../components/common/EmptyMessage/index.tsx | 42 +++++++++++ .../common/Joiner/Jointer.stories.tsx | 14 ++++ .../src/components/common/Joiner/index.tsx | 30 ++++++++ .../NoGroupMessage/NoGroupMessage.stories.tsx | 11 --- .../common/NoGroupMessage/index.tsx | 32 --------- frontend/src/constants/dummy.ts | 61 +++++++++++++++- frontend/src/pages/article/[id].tsx | 13 +++- frontend/src/pages/index.tsx | 10 +-- frontend/src/typings/types.ts | 14 +++- 15 files changed, 342 insertions(+), 55 deletions(-) create mode 100644 frontend/src/components/article/ParticipantsModal/ParticipantItem/ParticipantItem.stories.tsx create mode 100644 frontend/src/components/article/ParticipantsModal/ParticipantItem/index.tsx create mode 100644 frontend/src/components/article/ParticipantsModal/ParticipantsModal.stories.tsx create mode 100644 frontend/src/components/article/ParticipantsModal/index.tsx create mode 100644 frontend/src/components/common/EmptyMessage/EmptyMessage.stories.tsx create mode 100644 frontend/src/components/common/EmptyMessage/index.tsx create mode 100644 frontend/src/components/common/Joiner/Jointer.stories.tsx create mode 100644 frontend/src/components/common/Joiner/index.tsx delete mode 100644 frontend/src/components/common/NoGroupMessage/NoGroupMessage.stories.tsx delete mode 100644 frontend/src/components/common/NoGroupMessage/index.tsx diff --git a/frontend/src/components/article/Comment/index.tsx b/frontend/src/components/article/Comment/index.tsx index a923e88b..0a3ffbd4 100644 --- a/frontend/src/components/article/Comment/index.tsx +++ b/frontend/src/components/article/Comment/index.tsx @@ -1,6 +1,6 @@ import { Avatar, Text } from '@mantine/core'; import dateTimeFormat from '@utils/dateTime'; -import { Comment as CommentItem } from '@typings/types'; +import { CommentType as CommentItem } from '@typings/types'; import { CommentWrapper, CommentHeader, diff --git a/frontend/src/components/article/ParticipantsModal/ParticipantItem/ParticipantItem.stories.tsx b/frontend/src/components/article/ParticipantsModal/ParticipantItem/ParticipantItem.stories.tsx new file mode 100644 index 00000000..a7de4f83 --- /dev/null +++ b/frontend/src/components/article/ParticipantsModal/ParticipantItem/ParticipantItem.stories.tsx @@ -0,0 +1,15 @@ +import ParticipantItem from '.'; +import { ComponentMeta, ComponentStory } from '@storybook/react'; +import { dummyParticipants } from '@constants/dummy'; + +export default { + title: 'Component/ParticipantItem', + component: ParticipantItem, +} as ComponentMeta; + +const Template: ComponentStory = (args) => ; + +export const _ParticipantItem = Template.bind({}); +_ParticipantItem.args = { + participant: dummyParticipants[0], +}; diff --git a/frontend/src/components/article/ParticipantsModal/ParticipantItem/index.tsx b/frontend/src/components/article/ParticipantsModal/ParticipantItem/index.tsx new file mode 100644 index 00000000..9e2e7aca --- /dev/null +++ b/frontend/src/components/article/ParticipantsModal/ParticipantItem/index.tsx @@ -0,0 +1,72 @@ +import { Avatar } from '@mantine/core'; +import styled from '@emotion/styled'; +import { useTheme } from '@emotion/react'; +import { IconExternalLink } from '@tabler/icons'; +import { UserType } from '@typings/types'; + +interface Props { + participant: Partial; +} + +const ParticipantItem = ({ participant }: Props) => { + const { + colors: { gray }, + } = useTheme(); + const { userName, profileImage, description } = participant; + + return ( + + + + + {userName} + {description} + + + {/* TODO ํด๋ฆญ ์‹œ ์œ ์ € ํ”„๋กœํ•„ ํŽ˜์ด์ง€๋กœ ์ด๋™ */} + + + + + ); +}; + +export default ParticipantItem; + +const ItemWrapper = styled.div` + display: flex; + align-items: center; + justify-content: space-between; + padding: 0.8rem 0; +`; + +const ProfileWrapper = styled.div` + display: flex; + gap: 1.2rem; + align-items: center; +`; + +const ProfileTextWrapper = styled.div` + display: flex; + flex-direction: column; + gap: 0.4rem; +`; + +const Name = styled.span` + font-size: 1.4rem; + font-weight: 700; +`; + +const IntroduceText = styled.span` + font-size: 1rem; + font-weight: 700; + color: ${({ theme }) => theme.colors.gray[4]}; +`; + +const ProfileLinkButton = styled.div` + background-color: ${({ theme }) => theme.white}; + border: none; + &:hover { + cursor: pointer; + } +`; diff --git a/frontend/src/components/article/ParticipantsModal/ParticipantsModal.stories.tsx b/frontend/src/components/article/ParticipantsModal/ParticipantsModal.stories.tsx new file mode 100644 index 00000000..87bc7a59 --- /dev/null +++ b/frontend/src/components/article/ParticipantsModal/ParticipantsModal.stories.tsx @@ -0,0 +1,24 @@ +import ParticipantsModal from '.'; +import { ComponentMeta, ComponentStory } from '@storybook/react'; +import { dummyParticipants } from '@constants/dummy'; + +export default { + title: 'Component/ParticipantsModal', + component: ParticipantsModal, +} as ComponentMeta; + +const Template: ComponentStory = (args) => ( + +); + +export const Default = Template.bind({}); +Default.args = { + participants: dummyParticipants, + open: true, +}; + +export const NoParticipants = Template.bind({}); +NoParticipants.args = { + participants: [], + open: true, +}; diff --git a/frontend/src/components/article/ParticipantsModal/index.tsx b/frontend/src/components/article/ParticipantsModal/index.tsx new file mode 100644 index 00000000..0130d290 --- /dev/null +++ b/frontend/src/components/article/ParticipantsModal/index.tsx @@ -0,0 +1,42 @@ +import { Modal } from '@mantine/core'; +import styled from '@emotion/styled'; +import ParticipantItem from '@components/article/ParticipantsModal/ParticipantItem'; +import Joiner from '@components/common/Joiner'; +import { UserType } from '@typings/types'; +import EmptyMessage from '@components/common/EmptyMessage'; + +interface Props { + participants: Array>; + open: boolean; + onClose?: () => void; +} + +const ParticipantsModal = ({ participants, open, onClose }: Props) => { + return ( + + {participants.length ? ( + { + return ; + })} + /> + ) : ( + + )} + + ); +}; + +export default ParticipantsModal; + +const StyledModal = styled(Modal)` + & .mantine-Modal-title { + font-size: 2rem; + font-weight: 700; + } + + & .mantine-Modal-body { + max-height: 27rem; + overflow: auto; + } +`; diff --git a/frontend/src/components/common/EmptyMessage/EmptyMessage.stories.tsx b/frontend/src/components/common/EmptyMessage/EmptyMessage.stories.tsx new file mode 100644 index 00000000..58081bcb --- /dev/null +++ b/frontend/src/components/common/EmptyMessage/EmptyMessage.stories.tsx @@ -0,0 +1,15 @@ +import { ComponentMeta, ComponentStory } from '@storybook/react'; +import EmptyMessage from '.'; + +export default { + title: 'Component/EmptyMessage', + component: EmptyMessage, +} as ComponentMeta; + +const Template: ComponentStory = (args) => ; + +export const _EmptyMessage = Template.bind({}); +_EmptyMessage.args = { + target: 'article', + large: false, +}; diff --git a/frontend/src/components/common/EmptyMessage/index.tsx b/frontend/src/components/common/EmptyMessage/index.tsx new file mode 100644 index 00000000..92e3c291 --- /dev/null +++ b/frontend/src/components/common/EmptyMessage/index.tsx @@ -0,0 +1,42 @@ +import styled from '@emotion/styled'; +import { IconMoodEmpty } from '@tabler/icons'; +import { useTheme } from '@emotion/react'; + +interface Props { + target: 'article' | 'participant'; + large?: boolean; +} + +const targetKr = { + article: '๋ชจ์ž„์ด', + participant: '์‹ ์ฒญ์ž๊ฐ€', +}; + +const EmptyMessage = ({ target, large }: Props) => { + const { + colors: { gray }, + } = useTheme(); + + return ( + + + {targetKr[target]} ์กด์žฌํ•˜์ง€ ์•Š์•„์š” + + ); +}; + +export default EmptyMessage; + +const MessageWrapper = styled.div` + display: flex; + flex-direction: column; + gap: 1.6rem; + justify-content: center; + align-items: center; +`; + +const Message = styled.div<{ large: boolean }>` + font-size: ${(props) => (props.large ? '2rem' : '1.5rem')}; + font-weight: 900; + color: ${({ theme }) => theme.colors.gray[6]}; +`; diff --git a/frontend/src/components/common/Joiner/Jointer.stories.tsx b/frontend/src/components/common/Joiner/Jointer.stories.tsx new file mode 100644 index 00000000..1629beb5 --- /dev/null +++ b/frontend/src/components/common/Joiner/Jointer.stories.tsx @@ -0,0 +1,14 @@ +import { ComponentMeta, ComponentStory } from '@storybook/react'; +import Joiner from '.'; + +export default { + title: 'Component/Joiner', + component: Joiner, +} as ComponentMeta; + +const Template: ComponentStory = (args) => ; + +export const _Joiner = Template.bind({}); +_Joiner.args = { + components: [
    test1
    ,
    test2
    ], +}; diff --git a/frontend/src/components/common/Joiner/index.tsx b/frontend/src/components/common/Joiner/index.tsx new file mode 100644 index 00000000..ec45245d --- /dev/null +++ b/frontend/src/components/common/Joiner/index.tsx @@ -0,0 +1,30 @@ +import { Fragment, ReactNode } from 'react'; +import styled from '@emotion/styled'; + +interface JoinerProps { + components: ReactNode[]; + before?: boolean; + after?: boolean; +} + +export default function Joiner({ components, before, after }: JoinerProps) { + return ( + <> + {before && } + {components.length > 0 && + components.reduce((prev, curr) => ( + <> + {prev} + + {curr} + + ))} + {after && } + + ); +} + +const Separator = styled.div` + height: 0.1rem; + background-color: ${({ theme }) => theme.colors.gray[2]}; +`; diff --git a/frontend/src/components/common/NoGroupMessage/NoGroupMessage.stories.tsx b/frontend/src/components/common/NoGroupMessage/NoGroupMessage.stories.tsx deleted file mode 100644 index d52e33fc..00000000 --- a/frontend/src/components/common/NoGroupMessage/NoGroupMessage.stories.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import { ComponentMeta, ComponentStory } from '@storybook/react'; -import NoGroupMessage from '.'; - -export default { - title: 'Component/NoGroupMessage', - component: NoGroupMessage, -} as ComponentMeta; - -const Template: ComponentStory = () => ; - -export const _NoGroupMessage = Template.bind({}); diff --git a/frontend/src/components/common/NoGroupMessage/index.tsx b/frontend/src/components/common/NoGroupMessage/index.tsx deleted file mode 100644 index 31e36d00..00000000 --- a/frontend/src/components/common/NoGroupMessage/index.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import styled from '@emotion/styled'; -import { IconMoodEmpty } from '@tabler/icons'; -import { useTheme } from '@emotion/react'; - -const Index = () => { - const { - colors: { gray }, - } = useTheme(); - - return ( - - - ๋ชจ์ž„์ด ์กด์žฌํ•˜์ง€ ์•Š์•„์š” - - ); -}; - -export default Index; - -const MessageWrapper = styled.div` - display: flex; - flex-direction: column; - gap: 1.6rem; - justify-content: center; - align-items: center; -`; - -const Message = styled.span` - font-size: 2rem; - font-weight: 900; - color: ${({ theme }) => theme.colors.gray[6]}; -`; diff --git a/frontend/src/constants/dummy.ts b/frontend/src/constants/dummy.ts index e23e7d4f..33835f1d 100644 --- a/frontend/src/constants/dummy.ts +++ b/frontend/src/constants/dummy.ts @@ -1,4 +1,4 @@ -import { ArticlePreviewType, ArticleType } from '@typings/types'; +import { ArticlePreviewType, ArticleType, UserType } from '@typings/types'; import { Location } from '@constants/location'; import { ArticleStatus } from '@constants/article'; import { Category } from '@constants/category'; @@ -48,4 +48,61 @@ const dummyArticle: ArticleType = { createdAt: '2021-04-03T18:45:19Z', }; -export { dummyArticlePreview, dummyArticle }; +const dummyParticipants: Array> = [ + { + id: 1, + userName: 'test1', + description: 'ํ…Œ์ŠคํŠธ ์œ ์ €1์ž…๋‹ˆ๋‹ค', + profileImage: 'https://avatars.githubusercontent.com/u/90585081?v=4', + }, + { + id: 2, + userName: 'test2', + description: 'ํ…Œ์ŠคํŠธ ์œ ์ €2์ž…๋‹ˆ๋‹ค', + profileImage: 'https://avatars.githubusercontent.com/u/90585081?v=4', + }, + { + id: 3, + userName: 'test3', + description: 'ํ…Œ์ŠคํŠธ ์œ ์ €3์ž…๋‹ˆ๋‹ค', + profileImage: 'https://avatars.githubusercontent.com/u/90585081?v=4', + }, + { + id: 2, + userName: 'test2', + description: 'ํ…Œ์ŠคํŠธ ์œ ์ €2์ž…๋‹ˆ๋‹ค', + profileImage: 'https://avatars.githubusercontent.com/u/90585081?v=4', + }, + { + id: 4, + userName: 'test4', + description: 'ํ…Œ์ŠคํŠธ ์œ ์ €4์ž…๋‹ˆ๋‹ค', + profileImage: 'https://avatars.githubusercontent.com/u/90585081?v=4', + }, + { + id: 5, + userName: 'test5', + description: 'ํ…Œ์ŠคํŠธ ์œ ์ €5์ž…๋‹ˆ๋‹ค', + profileImage: 'https://avatars.githubusercontent.com/u/90585081?v=4', + }, + { + id: 6, + userName: 'test6', + description: 'ํ…Œ์ŠคํŠธ ์œ ์ €6์ž…๋‹ˆ๋‹ค', + profileImage: 'https://avatars.githubusercontent.com/u/90585081?v=4', + }, + { + id: 7, + userName: 'test7', + description: 'ํ…Œ์ŠคํŠธ ์œ ์ €7์ž…๋‹ˆ๋‹ค', + profileImage: 'https://avatars.githubusercontent.com/u/90585081?v=4', + }, + { + id: 8, + userName: 'test8', + description: 'ํ…Œ์ŠคํŠธ ์œ ์ €8์ž…๋‹ˆ๋‹ค', + profileImage: 'https://avatars.githubusercontent.com/u/90585081?v=4', + }, +]; + +export { dummyArticlePreview, dummyArticle, dummyParticipants }; diff --git a/frontend/src/pages/article/[id].tsx b/frontend/src/pages/article/[id].tsx index af7076a9..809682d2 100644 --- a/frontend/src/pages/article/[id].tsx +++ b/frontend/src/pages/article/[id].tsx @@ -1,8 +1,9 @@ +import { useState } from 'react'; import { useTheme } from '@emotion/react'; import styled from '@emotion/styled'; import { Avatar, Progress, TypographyStylesProvider } from '@mantine/core'; import { IconList } from '@tabler/icons'; -import { dummyArticle } from '@constants/dummy'; +import { dummyArticle, dummyParticipants } from '@constants/dummy'; import ArticleTag from '@components/common/ArticleTag'; import { getCommonBadgeColor, getStatusBadgeColor } from '@utils/colors'; import { ArticleStatusKr } from '@constants/article'; @@ -13,11 +14,13 @@ import StatCounter from '@components/common/StatCounter'; import Header from '@components/common/Header'; import DetailTitle from '@components/common/Header/DetailTitle'; import { PAGE_TITLE } from '@constants/pageTitle'; +import ParticipantsModal from '@components/article/ParticipantsModal'; const ArticleDetail = () => { const { colors: { indigo, gray }, } = useTheme(); + const [participantsModalOpen, setParticipantsModalOpen] = useState(false); const { authorName, @@ -78,7 +81,7 @@ const ArticleDetail = () => { {currentCapacity}๋ช… / {maxCapacity}๋ช… - + setParticipantsModalOpen(true)}> ์‹ ์ฒญ์ž ํ™•์ธ @@ -100,6 +103,12 @@ const ArticleDetail = () => {
    ๋Œ“๊ธ€์˜์—ญ
    + {/* TODO participants API ์š”์ฒญ */} + setParticipantsModalOpen(false)} + />
    ); }; diff --git a/frontend/src/pages/index.tsx b/frontend/src/pages/index.tsx index 4c6eae11..3584d187 100644 --- a/frontend/src/pages/index.tsx +++ b/frontend/src/pages/index.tsx @@ -2,6 +2,9 @@ import Link from 'next/link'; import { useMemo, useState } from 'react'; import { Checkbox, Select } from '@mantine/core'; import styled from '@emotion/styled'; +import { useTheme } from '@emotion/react'; +import { useQueryClient } from '@tanstack/react-query'; +import { IconRefresh } from '@tabler/icons'; import PageLayout from '@components/common/PageLayout'; import Header from '@components/common/Header'; import NavigationTab from '@components/common/NavigationTab'; @@ -12,10 +15,7 @@ import GroupArticleCard from '@components/common/GroupArticleCard'; import useIntersect from '@hooks/useIntersect'; import useFetchGroupArticles from '@hooks/queries/useFetchGroupArticles'; import { PAGE_TITLE } from '@constants/pageTitle'; -import Index from '@components/common/NoGroupMessage'; -import { IconRefresh } from '@tabler/icons'; -import { useTheme } from '@emotion/react'; -import { useQueryClient } from '@tanstack/react-query'; +import EmptyMessage from '@components/common/EmptyMessage'; const Main = () => { const { @@ -113,7 +113,7 @@ const Main = () => {
    ) : ( - + )}
    diff --git a/frontend/src/typings/types.ts b/frontend/src/typings/types.ts index 320cc0cf..711a5413 100644 --- a/frontend/src/typings/types.ts +++ b/frontend/src/typings/types.ts @@ -44,7 +44,7 @@ interface CategoryType { name: Category; } -interface Comment { +interface CommentType { id: number; authorId: number; authorName: string; @@ -59,11 +59,21 @@ interface TestResponseType { currentId: number; } +interface UserType { + id: number; + userName: string; + profileImage: string; + description: string; + githubUrl: string; + blogUrl: string; +} + export type { ArticlePreviewType, ArticleType, LocationType, CategoryType, TestResponseType, - Comment, + CommentType, + UserType, }; From f4f696f4ddd40d177bbfc14f46d19bef83b885c4 Mon Sep 17 00:00:00 2001 From: Gakko <90585081+pythonstrup@users.noreply.github.com> Date: Sun, 27 Nov 2022 02:19:49 +0900 Subject: [PATCH 032/142] =?UTF-8?q?[Feature]=20=EC=9D=B4=EB=AF=B8=EC=A7=80?= =?UTF-8?q?=20=EC=97=85=EB=A1=9C=EB=93=9C=20API=20(#69)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * โœจ feature: s3 config validate ์ž‘์„ฑ * โœจ feature: s3 config service ์ž‘์„ฑ - access key - secret key - region - endpoint - bucket S3 ์ธ์ฆ๊ณผ ๊ด€๋ จ๋œ ๊ฐ’ ๊ฐ€์ ธ์˜ค๊ธฐ * โœจ feature: s3 config module * โœจ feature: s3 config service test - access key - secret key - region - endpoint - bucket S3 ์ธ์ฆ๊ณผ ๊ด€๋ จ๋œ ๊ฐ’์ด ์ž˜ ๊ฐ€์ ธ์™€์ง€๋Š”์ง€ ํ…Œ์ŠคํŠธํ•˜๋Š” ์ฝ”๋“œ * ๐Ÿฅ… chore: ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ๋ฅผ npm ์˜์กด์„ฑ ์„ค์น˜ - aws-sdk - multer - multer-s3 * โœจ feature: image ์—…๋กœ๋“œ ๋กœ์ง * โœจ feature: image upload service ๋กœ์ง ์ž‘์„ฑ * โœจ feature: image upload response dto ์ž‘์„ฑ * โœจ feature: ํŒŒ์ผ ํ™•์žฅ์ž ์œ ํ˜•๋ณ„ ์˜ˆ์™ธ์ฒ˜๋ฆฌ - jpg, jpeg, png, gif๋ฅผ ์ง€์› - ๋‹ค๋ฅธ ํŒŒ์ผ์€ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค. * ๐Ÿฅ… chore: ImgaeService getStorageUrl๋กœ ํ•จ์ˆ˜๋ช… ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: s3 validate ๋ถˆํ•„์š”ํ•œ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ์ œ๊ฑฐ * ๐Ÿฅ… chore: ci ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ PR * ๐Ÿฅ… chore: ์ƒ์„ฑ์ž ์ฃผ์ž… readonly ์ถ”๊ฐ€ * ๐Ÿฅ… chore: ์ฝ”๋“œ ๋ฆฌ๋ทฐ ํ”ผ๋“œ๋ฐฑ ์ ์šฉ --- backend/package-lock.json | 493 +++++++++++++++++- backend/package.json | 4 + backend/src/app.module.ts | 3 +- .../image/dto/images-upload-response.dto.ts | 23 + backend/src/app/image/image.controller.ts | 30 ++ backend/src/app/image/image.module.ts | 11 + backend/src/app/image/image.service.ts | 85 +++ .../config/s3/__test__/config.service.spec.ts | 60 +++ backend/src/common/config/s3/config.module.ts | 18 + .../src/common/config/s3/config.service.ts | 32 ++ backend/src/common/config/s3/validate.ts | 46 ++ backend/src/common/response-entity.ts | 4 + 12 files changed, 802 insertions(+), 7 deletions(-) create mode 100644 backend/src/app/image/dto/images-upload-response.dto.ts create mode 100644 backend/src/app/image/image.controller.ts create mode 100644 backend/src/app/image/image.module.ts create mode 100644 backend/src/app/image/image.service.ts create mode 100644 backend/src/common/config/s3/__test__/config.service.spec.ts create mode 100644 backend/src/common/config/s3/config.module.ts create mode 100644 backend/src/common/config/s3/config.service.ts create mode 100644 backend/src/common/config/s3/validate.ts diff --git a/backend/package-lock.json b/backend/package-lock.json index f9be76f5..d3752049 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -17,10 +17,12 @@ "@nestjs/platform-express": "^9.0.0", "@nestjs/swagger": "^6.1.3", "@nestjs/typeorm": "^9.0.1", + "aws-sdk": "^2.1260.0", "class-transformer": "^0.5.1", "class-validator": "^0.13.2", "cookie-parser": "^1.4.6", "morgan": "^1.10.0", + "multer": "^1.4.5-lts.1", "mysql2": "^2.3.3", "reflect-metadata": "^0.1.13", "rimraf": "^3.0.2", @@ -35,8 +37,10 @@ "@types/cookie-parser": "^1.4.3", "@types/express": "^4.17.13", "@types/jest": "28.1.8", + "@types/multer": "^1.4.7", "@types/node": "^16.0.0", "@types/supertest": "^2.0.11", + "@types/uuid": "^8.3.4", "@typescript-eslint/eslint-plugin": "^5.0.0", "@typescript-eslint/parser": "^5.0.0", "eslint": "^8.0.1", @@ -1667,6 +1671,23 @@ "@nestjs/core": "^9.0.0" } }, + "node_modules/@nestjs/platform-express/node_modules/multer": { + "version": "1.4.4-lts.1", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.4-lts.1.tgz", + "integrity": "sha512-WeSGziVj6+Z2/MwQo3GvqzgR+9Uc+qt8SwHKh3gvNPiISKfsMfG4SvCOFYlxxgkXt7yIV2i1yczehm0EOKIxIg==", + "dependencies": { + "append-field": "^1.0.0", + "busboy": "^1.0.0", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.4", + "object-assign": "^4.1.1", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/@nestjs/schematics": { "version": "9.0.3", "resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-9.0.3.tgz", @@ -2143,6 +2164,15 @@ "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", "dev": true }, + "node_modules/@types/multer": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/@types/multer/-/multer-1.4.7.tgz", + "integrity": "sha512-/SNsDidUFCvqqcWDwxv2feww/yqhNeTRL5CVoL3jU4Goc4kKEL10T7Eye65ZqPNi4HRx8sAEX59pV1aEH7drNA==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, "node_modules/@types/node": { "version": "16.18.3", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", @@ -2213,6 +2243,12 @@ "@types/superagent": "*" } }, + "node_modules/@types/uuid": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", + "dev": true + }, "node_modules/@types/yargs": { "version": "17.0.13", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", @@ -2783,6 +2819,90 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sdk": { + "version": "2.1260.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1260.0.tgz", + "integrity": "sha512-iciXVukPbhmh44xcF+5/CO15jtESqRkXuEH54XaU8IpCzbYkAcPBaS29vLRN2SRuN1Dy2S3X7SaZZxFJWLAHrg==", + "dependencies": { + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.16.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "util": "^0.12.4", + "uuid": "8.0.0", + "xml2js": "0.4.19" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/aws-sdk/node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/aws-sdk/node_modules/events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/aws-sdk/node_modules/ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "node_modules/aws-sdk/node_modules/sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==" + }, + "node_modules/aws-sdk/node_modules/uuid": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", + "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/aws-sdk/node_modules/xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + } + }, + "node_modules/aws-sdk/node_modules/xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ==", + "engines": { + "node": ">=4.0" + } + }, "node_modules/babel-jest": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz", @@ -4494,6 +4614,14 @@ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dependencies": { + "is-callable": "^1.1.3" + } + }, "node_modules/fork-ts-checker-webpack-plugin": { "version": "7.2.13", "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-7.2.13.tgz", @@ -4776,6 +4904,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", @@ -4818,6 +4957,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/hexoid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", @@ -5037,6 +5190,21 @@ "node": ">= 0.10" } }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -5055,6 +5223,17 @@ "node": ">=8" } }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-core-module": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", @@ -5093,6 +5272,20 @@ "node": ">=6" } }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -5149,6 +5342,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", @@ -6062,6 +6273,14 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/jmespath": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", + "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==", + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/js-sdsl": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", @@ -6597,9 +6816,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/multer": { - "version": "1.4.4-lts.1", - "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.4-lts.1.tgz", - "integrity": "sha512-WeSGziVj6+Z2/MwQo3GvqzgR+9Uc+qt8SwHKh3gvNPiISKfsMfG4SvCOFYlxxgkXt7yIV2i1yczehm0EOKIxIg==", + "version": "1.4.5-lts.1", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.1.tgz", + "integrity": "sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==", "dependencies": { "append-field": "^1.0.0", "busboy": "^1.0.0", @@ -7295,6 +7514,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "engines": { + "node": ">=0.4.x" + } + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -8779,6 +9007,32 @@ "punycode": "^2.1.0" } }, + "node_modules/url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -8962,6 +9216,25 @@ "node": ">= 8" } }, + "node_modules/which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/windows-release": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz", @@ -10372,6 +10645,22 @@ "express": "4.18.2", "multer": "1.4.4-lts.1", "tslib": "2.4.1" + }, + "dependencies": { + "multer": { + "version": "1.4.4-lts.1", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.4-lts.1.tgz", + "integrity": "sha512-WeSGziVj6+Z2/MwQo3GvqzgR+9Uc+qt8SwHKh3gvNPiISKfsMfG4SvCOFYlxxgkXt7yIV2i1yczehm0EOKIxIg==", + "requires": { + "append-field": "^1.0.0", + "busboy": "^1.0.0", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.4", + "object-assign": "^4.1.1", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + } + } } }, "@nestjs/schematics": { @@ -10775,6 +11064,15 @@ "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", "dev": true }, + "@types/multer": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/@types/multer/-/multer-1.4.7.tgz", + "integrity": "sha512-/SNsDidUFCvqqcWDwxv2feww/yqhNeTRL5CVoL3jU4Goc4kKEL10T7Eye65ZqPNi4HRx8sAEX59pV1aEH7drNA==", + "dev": true, + "requires": { + "@types/express": "*" + } + }, "@types/node": { "version": "16.18.3", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", @@ -10845,6 +11143,12 @@ "@types/superagent": "*" } }, + "@types/uuid": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", + "dev": true + }, "@types/yargs": { "version": "17.0.13", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", @@ -11267,6 +11571,74 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" + }, + "aws-sdk": { + "version": "2.1260.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1260.0.tgz", + "integrity": "sha512-iciXVukPbhmh44xcF+5/CO15jtESqRkXuEH54XaU8IpCzbYkAcPBaS29vLRN2SRuN1Dy2S3X7SaZZxFJWLAHrg==", + "requires": { + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.16.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "util": "^0.12.4", + "uuid": "8.0.0", + "xml2js": "0.4.19" + }, + "dependencies": { + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==" + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==" + }, + "uuid": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", + "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==" + }, + "xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + } + }, + "xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ==" + } + } + }, "babel-jest": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz", @@ -12560,6 +12932,14 @@ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "requires": { + "is-callable": "^1.1.3" + } + }, "fork-ts-checker-webpack-plugin": { "version": "7.2.13", "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-7.2.13.tgz", @@ -12759,6 +13139,14 @@ "slash": "^3.0.0" } }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "requires": { + "get-intrinsic": "^1.1.3" + } + }, "graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", @@ -12789,6 +13177,14 @@ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "requires": { + "has-symbols": "^1.0.2" + } + }, "hexoid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", @@ -12942,6 +13338,15 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -12957,6 +13362,11 @@ "binary-extensions": "^2.0.0" } }, + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" + }, "is-core-module": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", @@ -12983,6 +13393,14 @@ "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -13021,6 +13439,18 @@ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true }, + "is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } + }, "is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", @@ -13718,6 +14148,11 @@ } } }, + "jmespath": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", + "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==" + }, "js-sdsl": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", @@ -14141,9 +14576,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "multer": { - "version": "1.4.4-lts.1", - "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.4-lts.1.tgz", - "integrity": "sha512-WeSGziVj6+Z2/MwQo3GvqzgR+9Uc+qt8SwHKh3gvNPiISKfsMfG4SvCOFYlxxgkXt7yIV2i1yczehm0EOKIxIg==", + "version": "1.4.5-lts.1", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.1.tgz", + "integrity": "sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==", "requires": { "append-field": "^1.0.0", "busboy": "^1.0.0", @@ -14666,6 +15101,11 @@ "side-channel": "^1.0.4" } }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==" + }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -15660,6 +16100,34 @@ "punycode": "^2.1.0" } }, + "url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", + "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": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" + } + } + }, + "util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -15798,6 +16266,19 @@ "isexe": "^2.0.0" } }, + "which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + } + }, "windows-release": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz", diff --git a/backend/package.json b/backend/package.json index 4504970b..9f96b627 100644 --- a/backend/package.json +++ b/backend/package.json @@ -33,10 +33,12 @@ "@nestjs/platform-express": "^9.0.0", "@nestjs/swagger": "^6.1.3", "@nestjs/typeorm": "^9.0.1", + "aws-sdk": "^2.1260.0", "class-transformer": "^0.5.1", "class-validator": "^0.13.2", "cookie-parser": "^1.4.6", "morgan": "^1.10.0", + "multer": "^1.4.5-lts.1", "mysql2": "^2.3.3", "reflect-metadata": "^0.1.13", "rimraf": "^3.0.2", @@ -51,8 +53,10 @@ "@types/cookie-parser": "^1.4.3", "@types/express": "^4.17.13", "@types/jest": "28.1.8", + "@types/multer": "^1.4.7", "@types/node": "^16.0.0", "@types/supertest": "^2.0.11", + "@types/uuid": "^8.3.4", "@typescript-eslint/eslint-plugin": "^5.0.0", "@typescript-eslint/parser": "^5.0.0", "eslint": "^8.0.1", diff --git a/backend/src/app.module.ts b/backend/src/app.module.ts index d431f106..97c39679 100644 --- a/backend/src/app.module.ts +++ b/backend/src/app.module.ts @@ -6,9 +6,10 @@ import { ApiSuccessLoggerMiddleware } from '@middleware/api-success-logger.middl import { ApiExceptionLoggerMiddleware } from '@middleware/api-exception-logger.middleware'; import { DatabaseModule } from '@config/database/database.module'; import { JwtTokenModule } from '@common/module/jwt-token/jwt-token.module'; +import { ImageModule } from './app/image/image.module'; @Module({ - imports: [AppConfigModule, DatabaseModule, JwtTokenModule], + imports: [AppConfigModule, DatabaseModule, JwtTokenModule, ImageModule], controllers: [AppController], providers: [AppService], }) diff --git a/backend/src/app/image/dto/images-upload-response.dto.ts b/backend/src/app/image/dto/images-upload-response.dto.ts new file mode 100644 index 00000000..4a0f5c75 --- /dev/null +++ b/backend/src/app/image/dto/images-upload-response.dto.ts @@ -0,0 +1,23 @@ +import { ApiProperty } from '@nestjs/swagger'; + +export class ImagesUploadResponse { + @ApiProperty({ + example: '1669276833875-64adca9c-94cd-4162-a53f-f75e951e39db', + description: '์ด๋ฏธ์ง€ key', + required: true, + }) + key: string; + + @ApiProperty({ + example: + 'https://kr.object.ncloudstorage.com/uploads/images/1669276833875-64adca9c-94cd-4162-a53f-f75e951e39db', + description: '๋ฒ„ํ‚ท ์ด๋ฏธ์ง€ url', + required: true, + }) + url: string; + + constructor(key: string, url: string) { + this.key = key; + this.url = url; + } +} diff --git a/backend/src/app/image/image.controller.ts b/backend/src/app/image/image.controller.ts new file mode 100644 index 00000000..95ee9d38 --- /dev/null +++ b/backend/src/app/image/image.controller.ts @@ -0,0 +1,30 @@ +import { + Controller, + HttpStatus, + Post, + UploadedFiles, + UseInterceptors, +} from '@nestjs/common'; +import { FilesInterceptor } from '@nestjs/platform-express'; +import { ApiErrorResponse } from '@src/common/decorator/api-error-response.decorator'; +import { ApiSuccessResponse } from '@src/common/decorator/api-success-resposne.decorator'; +import { ResponseEntity } from '@src/common/response-entity'; +import { ImagesUploadResponse } from './dto/images-upload-response.dto'; +import { ImageService } from './image.service'; + +@Controller('images') +export class ImageController { + constructor(private readonly imageService: ImageService) {} + + @Post('upload') + @UseInterceptors(FilesInterceptor('files')) + @ApiSuccessResponse(HttpStatus.CREATED, ImagesUploadResponse) + @ApiErrorResponse() + async uploadImage(@UploadedFiles() files: Array) { + const { keyList, urlList } = this.imageService.uploadImage(files); + const data = keyList.map( + (key, index) => new ImagesUploadResponse(key, urlList[index]), + ); + return ResponseEntity.CREATED_WITH_DATA(data); + } +} diff --git a/backend/src/app/image/image.module.ts b/backend/src/app/image/image.module.ts new file mode 100644 index 00000000..c27197bc --- /dev/null +++ b/backend/src/app/image/image.module.ts @@ -0,0 +1,11 @@ +import { Module } from '@nestjs/common'; +import { ImageController } from './image.controller'; +import { ImageService } from './image.service'; +import { S3ConfigModule } from '@src/common/config/s3/config.module'; + +@Module({ + imports: [S3ConfigModule], + controllers: [ImageController], + providers: [ImageService], +}) +export class ImageModule {} diff --git a/backend/src/app/image/image.service.ts b/backend/src/app/image/image.service.ts new file mode 100644 index 00000000..634aa089 --- /dev/null +++ b/backend/src/app/image/image.service.ts @@ -0,0 +1,85 @@ +import { Injectable, Logger } from '@nestjs/common'; +import { S3ConfigService } from '@src/common/config/s3/config.service'; +import { Endpoint, S3 } from 'aws-sdk'; +import * as path from 'path'; +import { v4 } from 'uuid'; + +@Injectable() +export class ImageService { + private readonly logger = new Logger(ImageService.name); + private readonly s3: S3; + + constructor(private readonly s3ConfigService: S3ConfigService) { + this.s3 = this.certificateS3(); + } + + uploadImage(files: Array) { + const keyList = this.pushImageAndGetKey(files); + const urlList = this.getStorageUrl(keyList); + return { keyList, urlList }; + } + + certificateS3() { + const endpoint = new Endpoint(this.s3ConfigService.endpoint); + const s3 = new S3({ + endpoint: endpoint, + region: this.s3ConfigService.region, + credentials: { + accessKeyId: this.s3ConfigService.accessKey, + secretAccessKey: this.s3ConfigService.secretKey, + }, + }); + + return s3; + } + + pushImageAndGetKey(files: Express.Multer.File[]) { + const keyList = []; + + files.forEach((file) => { + const extension = this.findImageExtension(file.originalname); + if (extension.length === 0) return; + + const key = path.join( + this.s3ConfigService.path, + `${new Date().getTime()}-${v4()}${extension}`, + ); + + this.uploadImageToS3(file, key); + keyList.push(key); + }); + + return keyList; + } + + findImageExtension(fileName: string) { + const regex = /(\.gif|\.jpg|\.jpeg|\.png)$/gi; + const result = fileName.match(regex); + return result === null ? '' : result[0]; + } + + uploadImageToS3(file: Express.Multer.File, key: string) { + return this.s3.upload( + { + Bucket: this.s3ConfigService.bucket, + Key: key, + Body: file.buffer, + ACL: 'public-read', + }, + + (err) => { + if (err) this.logger.error(err); + }, + ); + } + + getStorageUrl(keyList: string[]) { + return keyList.map((key) => { + return path.join( + this.s3ConfigService.endpoint, + this.s3ConfigService.bucket, + key, + ); + }); + } +} diff --git a/backend/src/common/config/s3/__test__/config.service.spec.ts b/backend/src/common/config/s3/__test__/config.service.spec.ts new file mode 100644 index 00000000..6b4b3c4b --- /dev/null +++ b/backend/src/common/config/s3/__test__/config.service.spec.ts @@ -0,0 +1,60 @@ +import { S3ConfigService } from '../config.service'; +import { Test } from '@nestjs/testing'; +import { S3ConfigModule } from '../config.module'; + +describe('App Config Service Test', () => { + let s3ConfigService: S3ConfigService; + + beforeEach(async () => { + const module = await Test.createTestingModule({ + imports: [S3ConfigModule], + }).compile(); + + s3ConfigService = module.get(S3ConfigService); + }); + + test('Storage Access Key๋ฅผ ์ž˜ ๊ฐ€์ ธ์˜ค๋Š”๊ฐ€', async () => { + // given + + // when + + // then + expect(s3ConfigService.accessKey).toEqual(process.env.STORAGE_ACCESSKEY); + }); + + test('Storage Secret Key๋ฅผ ์ž˜ ๊ฐ€์ ธ์˜ค๋Š”๊ฐ€', async () => { + // given + + // when + + // then + expect(s3ConfigService.secretKey).toEqual(process.env.STORAGE_SECRETKEY); + }); + + test('Storage Region๋ฅผ ์ž˜ ๊ฐ€์ ธ์˜ค๋Š”๊ฐ€', async () => { + // given + + // when + + // then + expect(s3ConfigService.region).toEqual(process.env.STORAGE_REGION); + }); + + test('Storage Endpoint๋ฅผ ์ž˜ ๊ฐ€์ ธ์˜ค๋Š”๊ฐ€', async () => { + // given + + // when + + // then + expect(s3ConfigService.endpoint).toEqual(process.env.STORAGE_ENDPOINT); + }); + + test('Storage Bucket๋ฅผ ์ž˜ ๊ฐ€์ ธ์˜ค๋Š”๊ฐ€', async () => { + // given + + // when + + // then + expect(s3ConfigService.bucket).toEqual(process.env.STORAGE_BUCKET); + }); +}); diff --git a/backend/src/common/config/s3/config.module.ts b/backend/src/common/config/s3/config.module.ts new file mode 100644 index 00000000..d2541ac5 --- /dev/null +++ b/backend/src/common/config/s3/config.module.ts @@ -0,0 +1,18 @@ +import { Module } from '@nestjs/common'; +import { S3ConfigService } from './config.service'; +import { ConfigModule } from '@nestjs/config'; +import { getEnvironmentFilePath, isIgnoreEnvFile } from '../config-option'; +import { validate } from './validate'; + +@Module({ + imports: [ + ConfigModule.forRoot({ + envFilePath: getEnvironmentFilePath(), + ignoreEnvFile: isIgnoreEnvFile(), + validate, + }), + ], + providers: [S3ConfigService], + exports: [S3ConfigService], +}) +export class S3ConfigModule {} diff --git a/backend/src/common/config/s3/config.service.ts b/backend/src/common/config/s3/config.service.ts new file mode 100644 index 00000000..e4cf5d6d --- /dev/null +++ b/backend/src/common/config/s3/config.service.ts @@ -0,0 +1,32 @@ +import { Injectable } from '@nestjs/common'; +import { ConfigService } from '@nestjs/config'; +import { S3Config } from './validate'; + +@Injectable() +export class S3ConfigService { + constructor(private readonly configService: ConfigService) {} + + get accessKey() { + return this.configService.get('STORAGE_ACCESSKEY', { infer: true }); + } + + get secretKey() { + return this.configService.get('STORAGE_SECRETKEY', { infer: true }); + } + + get region() { + return this.configService.get('STORAGE_REGION', { infer: true }); + } + + get endpoint() { + return this.configService.get('STORAGE_ENDPOINT', { infer: true }); + } + + get bucket() { + return this.configService.get('STORAGE_BUCKET', { infer: true }); + } + + get path() { + return this.configService.get('STORAGE_BUCKET_PATH', { infer: true }); + } +} diff --git a/backend/src/common/config/s3/validate.ts b/backend/src/common/config/s3/validate.ts new file mode 100644 index 00000000..4d83f4a5 --- /dev/null +++ b/backend/src/common/config/s3/validate.ts @@ -0,0 +1,46 @@ +import { IsString, IsUrl, validateSync } from 'class-validator'; +import { Expose, plainToClass } from 'class-transformer'; + +export class S3Config { + @IsString() + @Expose() + STORAGE_ACCESSKEY: string; + + @IsString() + @Expose() + STORAGE_SECRETKEY: string; + + @IsString() + @Expose() + STORAGE_REGION: string; + + @IsUrl() + @Expose() + STORAGE_ENDPOINT: string; + + @IsString() + @Expose() + STORAGE_BUCKET: string; + + @IsString() + @Expose() + STORAGE_BUCKET_PATH: string; +} + +export const validate = (config: Record) => { + const validatedConfig = plainToClass( + S3Config, + { ...config }, + { enableImplicitConversion: true, excludeExtraneousValues: true }, + ); + + const errors = validateSync(validatedConfig, { + skipMissingProperties: false, + }); + + if (errors.length > 0) { + throw new Error(errors.toString()); + } + + return validatedConfig; +}; diff --git a/backend/src/common/response-entity.ts b/backend/src/common/response-entity.ts index 355c27fe..ff464793 100644 --- a/backend/src/common/response-entity.ts +++ b/backend/src/common/response-entity.ts @@ -20,6 +20,10 @@ export class ResponseEntity { return new ResponseEntity('OK', '', data); } + static CREATED_WITH_DATA(data: T) { + return new ResponseEntity('CREATED', '', data); + } + static ERROR() { return new ResponseEntity( 'INTERNAL_SERVER_ERROR', From 13330d8dc71b3426048e014f315b36d72807c1a6 Mon Sep 17 00:00:00 2001 From: Kim Myeongil <67570061+username1103@users.noreply.github.com> Date: Sun, 27 Nov 2022 13:31:05 +0900 Subject: [PATCH 033/142] =?UTF-8?q?[Feature]=20=EA=B9=83=ED=97=88=EB=B8=8C?= =?UTF-8?q?=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20API=20=EC=B6=94=EA=B0=80=20(#6?= =?UTF-8?q?8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :sparkles: feature: auth module ์ถ”๊ฐ€ * :goal_net: chore: ์˜์กด์„ฑ ์„ค์น˜ - passport - passport-github - @types/passport-github ์„ค์น˜ * :sparkles: feature: Github ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ถ”๊ฐ€ - GithubConfigService ์ถ”๊ฐ€ - GITHUB_CLIENT_ID - GITHUB_CLIENT_SECRET - GITHUB_CALLBACK_URL ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ถ”๊ฐ€ * :sparkles: feature: Github ๋กœ๊ทธ์ธ ์ถ”๊ฐ€ - Github ๋กœ๊ทธ์ธ ์ถ”๊ฐ€ - @RequestGithubProfile ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ์ถ”๊ฐ€ * :sparkles: feature: UserRepository ์ถ”๊ฐ€ * :sparkles: feature: ๊นƒํ—™ ๋กœ๊ทธ์ธ์‹œ ์œ ์ € ์ƒ์„ฑ - ์‹ ๊ทœ ์œ ์ €์ธ ๊ฒฝ์šฐ ์œ ์ € ์ƒ์„ฑ - ์•„๋‹Œ ๊ฒฝ์šฐ ์œ ์ € ๊ธฐ์กด ์œ ์ € ์ •๋ณด ์ œ๊ณต * :sparkles: feature: ๊นƒํ—™ ๋กœ๊ทธ์ธ ํ›„ ํ† ํฐ ๋ฐœ๊ธ‰ ๋ฐ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์ถ”๊ฐ€ * :sparkles: feature: ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๋กœ๋“œ ๋กœ์ง ์ˆ˜์ • - env-cmd๋ฅผ ํ†ตํ•ด ์‹คํ–‰์‹œ .env ํŒŒ์ผ์„ ์ง€์ •ํ•˜๋„๋ก ์„ค์ • - partial registration ๋ฒ„๊ทธ ์ˆ˜์ • - ๊ธฐ์กด์— ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๋ณ€ํ™˜์ด ์ œ๋Œ€๋กœ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์•˜์Œ - registerAs๋ฅผ ์‚ฌ์šฉํ•ด namespaced ์ƒ์„ฑ ๋ฐ config module์— ์ถ”๊ฐ€ * :goal_net: chore: ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ถ”๊ฐ€์— ๋”ฐ๋ฅธ ๋ฐฐํฌ ๊ณผ์ • ์ˆ˜์ • - ํ™˜๊ฒฝ๋ณ€์ˆ˜ ํŒŒ์ผ ๋„ค์ž„ ์ˆ˜์ • ๋ฐ ํ•ด๋‹น ํŒŒ์ผ๋กœ docker compose๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ์ˆ˜์ • - npm run start:dev์—์„œ .env.development๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„ ์ปจํ…Œ์ด๋„ˆ์— ํŒŒ์ผ ํ•„์š” * :sparkles: feature: s3Config ์ˆ˜์ • - partial registration ๋˜๋„๋ก ์ˆ˜์ • --- backend/package-lock.json | 259 ++++++++++++++++++ backend/package.json | 17 +- backend/scripts/dev-deploy.sh | 6 +- backend/src/app.module.ts | 11 +- backend/src/app/auth/auth.controller.ts | 56 ++++ backend/src/app/auth/auth.module.ts | 15 + backend/src/app/auth/auth.service.ts | 36 +++ backend/src/app/auth/github-auth.guard.ts | 9 + .../src/app/auth/github-profile.decorator.ts | 9 + backend/src/app/auth/github.strategy.ts | 25 ++ backend/src/app/auth/type/github-profile.ts | 10 + backend/src/app/image/image.controller.ts | 2 - backend/src/app/user/__test__/user.fixture.ts | 16 ++ backend/src/app/user/user.entity.ts | 28 +- backend/src/app/user/user.module.ts | 8 + backend/src/app/user/user.repository.ts | 18 ++ .../src/common/config/app/config.module.ts | 11 +- .../src/common/config/app/config.service.ts | 15 +- .../src/common/config/app/configuration.ts | 25 ++ backend/src/common/config/app/validate.ts | 37 --- backend/src/common/config/config-option.ts | 7 - .../config/database/mysql/config.module.ts | 11 +- .../config/database/mysql/config.service.ts | 19 +- .../config/database/mysql/configuration.ts | 31 +++ .../common/config/database/mysql/validate.ts | 43 --- .../github/__test__/config.service.spec.ts | 45 +++ .../src/common/config/github/config.module.ts | 11 + .../common/config/github/config.service.ts | 27 ++ .../src/common/config/github/configuration.ts | 26 ++ .../src/common/config/jwt/config.module.ts | 11 +- .../src/common/config/jwt/config.service.ts | 21 +- .../src/common/config/jwt/configuration.ts | 24 ++ backend/src/common/config/jwt/validate.ts | 36 --- backend/src/common/config/s3/config.module.ts | 11 +- .../src/common/config/s3/config.service.ts | 23 +- backend/src/common/config/s3/configuration.ts | 32 +++ backend/src/common/config/s3/validate.ts | 46 ---- backend/src/common/config/validate.ts | 22 ++ backend/src/common/guard/jwt-auth.guard.ts | 2 +- backend/src/setSwagger.ts | 4 +- 40 files changed, 807 insertions(+), 258 deletions(-) create mode 100644 backend/src/app/auth/auth.controller.ts create mode 100644 backend/src/app/auth/auth.module.ts create mode 100644 backend/src/app/auth/auth.service.ts create mode 100644 backend/src/app/auth/github-auth.guard.ts create mode 100644 backend/src/app/auth/github-profile.decorator.ts create mode 100644 backend/src/app/auth/github.strategy.ts create mode 100644 backend/src/app/auth/type/github-profile.ts create mode 100644 backend/src/app/user/__test__/user.fixture.ts create mode 100644 backend/src/app/user/user.module.ts create mode 100644 backend/src/app/user/user.repository.ts create mode 100644 backend/src/common/config/app/configuration.ts delete mode 100644 backend/src/common/config/app/validate.ts delete mode 100644 backend/src/common/config/config-option.ts create mode 100644 backend/src/common/config/database/mysql/configuration.ts delete mode 100644 backend/src/common/config/database/mysql/validate.ts create mode 100644 backend/src/common/config/github/__test__/config.service.spec.ts create mode 100644 backend/src/common/config/github/config.module.ts create mode 100644 backend/src/common/config/github/config.service.ts create mode 100644 backend/src/common/config/github/configuration.ts create mode 100644 backend/src/common/config/jwt/configuration.ts delete mode 100644 backend/src/common/config/jwt/validate.ts create mode 100644 backend/src/common/config/s3/configuration.ts delete mode 100644 backend/src/common/config/s3/validate.ts create mode 100644 backend/src/common/config/validate.ts diff --git a/backend/package-lock.json b/backend/package-lock.json index d3752049..36ae8e64 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -14,6 +14,7 @@ "@nestjs/config": "^2.2.0", "@nestjs/core": "^9.0.0", "@nestjs/jwt": "^9.0.0", + "@nestjs/passport": "^9.0.0", "@nestjs/platform-express": "^9.0.0", "@nestjs/swagger": "^6.1.3", "@nestjs/typeorm": "^9.0.1", @@ -24,6 +25,8 @@ "morgan": "^1.10.0", "multer": "^1.4.5-lts.1", "mysql2": "^2.3.3", + "passport": "^0.6.0", + "passport-github": "^1.1.0", "reflect-metadata": "^0.1.13", "rimraf": "^3.0.2", "rxjs": "^7.2.0", @@ -39,10 +42,12 @@ "@types/jest": "28.1.8", "@types/multer": "^1.4.7", "@types/node": "^16.0.0", + "@types/passport-github": "^1.1.7", "@types/supertest": "^2.0.11", "@types/uuid": "^8.3.4", "@typescript-eslint/eslint-plugin": "^5.0.0", "@typescript-eslint/parser": "^5.0.0", + "env-cmd": "^10.1.0", "eslint": "^8.0.1", "eslint-config-prettier": "^8.3.0", "eslint-plugin-prettier": "^4.0.0", @@ -1651,6 +1656,15 @@ } } }, + "node_modules/@nestjs/passport": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@nestjs/passport/-/passport-9.0.0.tgz", + "integrity": "sha512-Gnh8n1wzFPOLSS/94X1sUP4IRAoXTgG4odl7/AO5h+uwscEGXxJFercrZfqdAwkWhqkKWbsntM3j5mRy/6ZQDA==", + "peerDependencies": { + "@nestjs/common": "^8.0.0 || ^9.0.0", + "passport": "^0.4.0 || ^0.5.0 || ^0.6.0" + } + }, "node_modules/@nestjs/platform-express": { "version": "9.2.0", "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-9.2.0.tgz", @@ -2178,12 +2192,52 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==" }, + "node_modules/@types/oauth": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@types/oauth/-/oauth-0.9.1.tgz", + "integrity": "sha512-a1iY62/a3yhZ7qH7cNUsxoI3U/0Fe9+RnuFrpTKr+0WVOzbKlSLojShCKe20aOD1Sppv+i8Zlq0pLDuTJnwS4A==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@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 }, + "node_modules/@types/passport": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@types/passport/-/passport-1.0.11.tgz", + "integrity": "sha512-pz1cx9ptZvozyGKKKIPLcVDVHwae4hrH5d6g5J+DkMRRjR3cVETb4jMabhXAUbg3Ov7T22nFHEgaK2jj+5CBpw==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/passport-github": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@types/passport-github/-/passport-github-1.1.7.tgz", + "integrity": "sha512-CCBwZyBRy3fLOd96Idn00TLHMDXZIzUGXq+gSvB70h8k4j61dkbZCI6m5ZauL+hLdyJur7Z94tdfd8DBjFA0og==", + "dev": true, + "dependencies": { + "@types/express": "*", + "@types/passport": "*", + "@types/passport-oauth2": "*" + } + }, + "node_modules/@types/passport-oauth2": { + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/@types/passport-oauth2/-/passport-oauth2-1.4.11.tgz", + "integrity": "sha512-KUNwmGhe/3xPbjkzkPwwcPmyFwfyiSgtV1qOrPBLaU4i4q9GSCdAOyCbkFG0gUxAyEmYwqo9OAF/rjPjJ6ImdA==", + "dev": true, + "dependencies": { + "@types/express": "*", + "@types/oauth": "*", + "@types/passport": "*" + } + }, "node_modules/@types/prettier": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz", @@ -3034,6 +3088,14 @@ } ] }, + "node_modules/base64url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/basic-auth": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", @@ -3960,6 +4022,22 @@ "node": ">=10.13.0" } }, + "node_modules/env-cmd": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/env-cmd/-/env-cmd-10.1.0.tgz", + "integrity": "sha512-mMdWTT9XKN7yNth/6N6g2GuKuJTsKMDHlQFUDacb/heQRRWOTIZ42t1rMHnQu4jYxU1ajdTeJM+9eEETlqToMA==", + "dev": true, + "dependencies": { + "commander": "^4.0.0", + "cross-spawn": "^7.0.0" + }, + "bin": { + "env-cmd": "bin/env-cmd.js" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -6995,6 +7073,11 @@ "node": ">=8" } }, + "node_modules/oauth": { + "version": "0.9.15", + "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz", + "integrity": "sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA==" + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -7237,6 +7320,61 @@ "node": ">= 0.8" } }, + "node_modules/passport": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/passport/-/passport-0.6.0.tgz", + "integrity": "sha512-0fe+p3ZnrWRW74fe8+SvCyf4a3Pb2/h7gFkQ8yTJpAO50gDzlfjZUZTO1k5Eg9kUct22OxHLqDZoKUWRHOh9ug==", + "dependencies": { + "passport-strategy": "1.x.x", + "pause": "0.0.1", + "utils-merge": "^1.0.1" + }, + "engines": { + "node": ">= 0.4.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/jaredhanson" + } + }, + "node_modules/passport-github": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/passport-github/-/passport-github-1.1.0.tgz", + "integrity": "sha512-XARXJycE6fFh/dxF+Uut8OjlwbFEXgbPVj/+V+K7cvriRK7VcAOm+NgBmbiLM9Qv3SSxEAV+V6fIk89nYHXa8A==", + "dependencies": { + "passport-oauth2": "1.x.x" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/passport-oauth2": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.6.1.tgz", + "integrity": "sha512-ZbV43Hq9d/SBSYQ22GOiglFsjsD1YY/qdiptA+8ej+9C1dL1TVB+mBE5kDH/D4AJo50+2i8f4bx0vg4/yDDZCQ==", + "dependencies": { + "base64url": "3.x.x", + "oauth": "0.9.x", + "passport-strategy": "1.x.x", + "uid2": "0.0.x", + "utils-merge": "1.x.x" + }, + "engines": { + "node": ">= 0.4.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/jaredhanson" + } + }, + "node_modules/passport-strategy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", + "integrity": "sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==", + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -7283,6 +7421,11 @@ "node": ">=8" } }, + "node_modules/pause": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", + "integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==" + }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -8955,6 +9098,11 @@ "node": ">=4.2.0" } }, + "node_modules/uid2": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz", + "integrity": "sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA==" + }, "node_modules/universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -10635,6 +10783,12 @@ "integrity": "sha512-NTFwPZkQWsArQH8QSyFWGZvJ08gR+R4TofglqZoihn/vU+ktHEJjMqsIsADwb7XD97DhiD+TVv5ac+jG33BHrg==", "requires": {} }, + "@nestjs/passport": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@nestjs/passport/-/passport-9.0.0.tgz", + "integrity": "sha512-Gnh8n1wzFPOLSS/94X1sUP4IRAoXTgG4odl7/AO5h+uwscEGXxJFercrZfqdAwkWhqkKWbsntM3j5mRy/6ZQDA==", + "requires": {} + }, "@nestjs/platform-express": { "version": "9.2.0", "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-9.2.0.tgz", @@ -11078,12 +11232,52 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==" }, + "@types/oauth": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@types/oauth/-/oauth-0.9.1.tgz", + "integrity": "sha512-a1iY62/a3yhZ7qH7cNUsxoI3U/0Fe9+RnuFrpTKr+0WVOzbKlSLojShCKe20aOD1Sppv+i8Zlq0pLDuTJnwS4A==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@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/passport": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@types/passport/-/passport-1.0.11.tgz", + "integrity": "sha512-pz1cx9ptZvozyGKKKIPLcVDVHwae4hrH5d6g5J+DkMRRjR3cVETb4jMabhXAUbg3Ov7T22nFHEgaK2jj+5CBpw==", + "dev": true, + "requires": { + "@types/express": "*" + } + }, + "@types/passport-github": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@types/passport-github/-/passport-github-1.1.7.tgz", + "integrity": "sha512-CCBwZyBRy3fLOd96Idn00TLHMDXZIzUGXq+gSvB70h8k4j61dkbZCI6m5ZauL+hLdyJur7Z94tdfd8DBjFA0og==", + "dev": true, + "requires": { + "@types/express": "*", + "@types/passport": "*", + "@types/passport-oauth2": "*" + } + }, + "@types/passport-oauth2": { + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/@types/passport-oauth2/-/passport-oauth2-1.4.11.tgz", + "integrity": "sha512-KUNwmGhe/3xPbjkzkPwwcPmyFwfyiSgtV1qOrPBLaU4i4q9GSCdAOyCbkFG0gUxAyEmYwqo9OAF/rjPjJ6ImdA==", + "dev": true, + "requires": { + "@types/express": "*", + "@types/oauth": "*", + "@types/passport": "*" + } + }, "@types/prettier": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz", @@ -11731,6 +11925,11 @@ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, + "base64url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==" + }, "basic-auth": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", @@ -12421,6 +12620,16 @@ "tapable": "^2.2.0" } }, + "env-cmd": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/env-cmd/-/env-cmd-10.1.0.tgz", + "integrity": "sha512-mMdWTT9XKN7yNth/6N6g2GuKuJTsKMDHlQFUDacb/heQRRWOTIZ42t1rMHnQu4jYxU1ajdTeJM+9eEETlqToMA==", + "dev": true, + "requires": { + "commander": "^4.0.0", + "cross-spawn": "^7.0.0" + } + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -14727,6 +14936,11 @@ "path-key": "^3.0.0" } }, + "oauth": { + "version": "0.9.15", + "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz", + "integrity": "sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA==" + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -14901,6 +15115,41 @@ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, + "passport": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/passport/-/passport-0.6.0.tgz", + "integrity": "sha512-0fe+p3ZnrWRW74fe8+SvCyf4a3Pb2/h7gFkQ8yTJpAO50gDzlfjZUZTO1k5Eg9kUct22OxHLqDZoKUWRHOh9ug==", + "requires": { + "passport-strategy": "1.x.x", + "pause": "0.0.1", + "utils-merge": "^1.0.1" + } + }, + "passport-github": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/passport-github/-/passport-github-1.1.0.tgz", + "integrity": "sha512-XARXJycE6fFh/dxF+Uut8OjlwbFEXgbPVj/+V+K7cvriRK7VcAOm+NgBmbiLM9Qv3SSxEAV+V6fIk89nYHXa8A==", + "requires": { + "passport-oauth2": "1.x.x" + } + }, + "passport-oauth2": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.6.1.tgz", + "integrity": "sha512-ZbV43Hq9d/SBSYQ22GOiglFsjsD1YY/qdiptA+8ej+9C1dL1TVB+mBE5kDH/D4AJo50+2i8f4bx0vg4/yDDZCQ==", + "requires": { + "base64url": "3.x.x", + "oauth": "0.9.x", + "passport-strategy": "1.x.x", + "uid2": "0.0.x", + "utils-merge": "1.x.x" + } + }, + "passport-strategy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", + "integrity": "sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==" + }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -14935,6 +15184,11 @@ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, + "pause": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", + "integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==" + }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -16070,6 +16324,11 @@ "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", "devOptional": true }, + "uid2": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz", + "integrity": "sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA==" + }, "universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", diff --git a/backend/package.json b/backend/package.json index 9f96b627..3fa6bf01 100644 --- a/backend/package.json +++ b/backend/package.json @@ -10,7 +10,7 @@ "build": "nest build", "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", "start": "nest start", - "start:dev": "nest start --watch", + "start:dev": "env-cmd -f .env.development nest start --watch", "start:debug": "nest start --debug --watch", "start:prod": "node dist/main", "start:local": "docker compose -f docker-compose.local.yml up -d --build", @@ -18,11 +18,11 @@ "reload:local": "docker compose -f docker-compose.local.yml up --force-recreate -d", "lint:fix": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", "lint": "eslint \"{src,apps,libs,test}/**/*.ts\"", - "test": "jest", - "test:watch": "jest --watch", - "test:cov": "jest --coverage", - "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", - "test:e2e": "jest --config ./test/jest-e2e.json" + "test": "env-cmd -f .env.test jest", + "test:watch": "env-cmd -f .env.test jest --watch", + "test:cov": "env-cmd -f .env.test jest --coverage", + "test:debug": "env-cmd -f .env.test node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", + "test:e2e": "env-cmd -f .env.test jest --config ./test/jest-e2e.json" }, "dependencies": { "@js-joda/core": "^5.4.2", @@ -30,6 +30,7 @@ "@nestjs/config": "^2.2.0", "@nestjs/core": "^9.0.0", "@nestjs/jwt": "^9.0.0", + "@nestjs/passport": "^9.0.0", "@nestjs/platform-express": "^9.0.0", "@nestjs/swagger": "^6.1.3", "@nestjs/typeorm": "^9.0.1", @@ -40,6 +41,8 @@ "morgan": "^1.10.0", "multer": "^1.4.5-lts.1", "mysql2": "^2.3.3", + "passport": "^0.6.0", + "passport-github": "^1.1.0", "reflect-metadata": "^0.1.13", "rimraf": "^3.0.2", "rxjs": "^7.2.0", @@ -55,10 +58,12 @@ "@types/jest": "28.1.8", "@types/multer": "^1.4.7", "@types/node": "^16.0.0", + "@types/passport-github": "^1.1.7", "@types/supertest": "^2.0.11", "@types/uuid": "^8.3.4", "@typescript-eslint/eslint-plugin": "^5.0.0", "@typescript-eslint/parser": "^5.0.0", + "env-cmd": "^10.1.0", "eslint": "^8.0.1", "eslint-config-prettier": "^8.3.0", "eslint-plugin-prettier": "^4.0.0", diff --git a/backend/scripts/dev-deploy.sh b/backend/scripts/dev-deploy.sh index 16d8a048..df2ec567 100644 --- a/backend/scripts/dev-deploy.sh +++ b/backend/scripts/dev-deploy.sh @@ -6,9 +6,9 @@ echo "docker logined" cd backend -touch .env +touch .env.development -echo -e $4 > .env +echo -e $4 > .env.development # docker down docker compose down @@ -19,4 +19,4 @@ docker rm `docker ps -a -q` # ๋„์ปค ์ด๋ฏธ์ง€ ์ „์ฒด ์‚ญ์ œ docker rmi `docker images -q` -docker compose up -d --build \ No newline at end of file +docker compose --env-file .env.development up -d --build \ No newline at end of file diff --git a/backend/src/app.module.ts b/backend/src/app.module.ts index 97c39679..2a593f29 100644 --- a/backend/src/app.module.ts +++ b/backend/src/app.module.ts @@ -6,10 +6,17 @@ import { ApiSuccessLoggerMiddleware } from '@middleware/api-success-logger.middl import { ApiExceptionLoggerMiddleware } from '@middleware/api-exception-logger.middleware'; import { DatabaseModule } from '@config/database/database.module'; import { JwtTokenModule } from '@common/module/jwt-token/jwt-token.module'; -import { ImageModule } from './app/image/image.module'; +import { AuthModule } from '@app/auth/auth.module'; +import { ImageModule } from '@app/image/image.module'; @Module({ - imports: [AppConfigModule, DatabaseModule, JwtTokenModule, ImageModule], + imports: [ + AppConfigModule, + DatabaseModule, + JwtTokenModule, + AuthModule, + ImageModule, + ], controllers: [AppController], providers: [AppService], }) diff --git a/backend/src/app/auth/auth.controller.ts b/backend/src/app/auth/auth.controller.ts new file mode 100644 index 00000000..7ebe2a28 --- /dev/null +++ b/backend/src/app/auth/auth.controller.ts @@ -0,0 +1,56 @@ +import { Controller, Get, Res, UseGuards } from '@nestjs/common'; +import { ApiTags } from '@nestjs/swagger'; +import { Response } from 'express'; +import { GithubAuthGuard } from '@app/auth/github-auth.guard'; +import { RequestGithubProfile } from '@app/auth/github-profile.decorator'; +import { GithubProfile } from '@app/auth/type/github-profile'; +import { AuthService } from '@app/auth/auth.service'; +import { JwtTokenService } from '@common/module/jwt-token/jwt-token.service'; +import { GithubConfigService } from '@config/github/config.service'; + +@Controller('/auth') +@ApiTags('Auth') +export class AuthController { + constructor( + private readonly authService: AuthService, + private readonly jwtTokenService: JwtTokenService, + private readonly githubConfigService: GithubConfigService, + ) {} + + @Get('/github/login') + @UseGuards(GithubAuthGuard) + githubLogin() { + return; + } + + @Get('/github/callback') + @UseGuards(GithubAuthGuard) + async githubCallback( + @RequestGithubProfile() githubProfile: GithubProfile, + @Res() response: Response, + ) { + const user = await this.authService.socialLogin({ + id: githubProfile.id, + profileImage: githubProfile._json.avatar_url, + blogUrl: githubProfile._json.blog, + githubUrl: githubProfile.profileUrl, + socialType: 'GITHUB', + }); + + const { accessToken, accessTokenExpires } = + this.jwtTokenService.generateAccessToken(user); + const { refreshToken, refreshTokenExpires } = + this.jwtTokenService.generateRefreshToken(user); + + response.cookie('access_token', accessToken, { + httpOnly: true, + expires: new Date(accessTokenExpires * 1000), + }); + response.cookie('refresh_token', refreshToken, { + httpOnly: true, + expires: new Date(refreshTokenExpires * 1000), + }); + + response.redirect(this.githubConfigService.redirectUrl); + } +} diff --git a/backend/src/app/auth/auth.module.ts b/backend/src/app/auth/auth.module.ts new file mode 100644 index 00000000..278e3427 --- /dev/null +++ b/backend/src/app/auth/auth.module.ts @@ -0,0 +1,15 @@ +import { Module } from '@nestjs/common'; +import { AuthController } from '@app/auth/auth.controller'; +import { AuthService } from '@app/auth/auth.service'; +import { PassportModule } from '@nestjs/passport'; +import { GithubConfigModule } from '@config/github/config.module'; +import { GithubStrategy } from '@app/auth/github.strategy'; +import { UserModule } from '@app/user/user.module'; +import { JwtTokenModule } from '@common/module/jwt-token/jwt-token.module'; + +@Module({ + imports: [UserModule, JwtTokenModule, PassportModule, GithubConfigModule], + controllers: [AuthController], + providers: [AuthService, GithubStrategy], +}) +export class AuthModule {} diff --git a/backend/src/app/auth/auth.service.ts b/backend/src/app/auth/auth.service.ts new file mode 100644 index 00000000..062d2b60 --- /dev/null +++ b/backend/src/app/auth/auth.service.ts @@ -0,0 +1,36 @@ +import { Injectable } from '@nestjs/common'; +import { UserRepository } from '@app/user/user.repository'; +import { User } from '@app/user/user.entity'; + +@Injectable() +export class AuthService { + constructor(private readonly userRepository: UserRepository) {} + + async socialLogin({ + id, + githubUrl, + profileImage, + blogUrl, + socialType, + }: { + id: string; + githubUrl: string; + profileImage: string; + blogUrl: string; + socialType: string; + }) { + const user = await this.userRepository.findBySocial(id, socialType); + if (!user) { + const newUser = User.signup({ + socialId: id, + githubUrl, + profileImage, + blogUrl, + socialType, + }); + await this.userRepository.save(newUser); + return newUser; + } + return user; + } +} diff --git a/backend/src/app/auth/github-auth.guard.ts b/backend/src/app/auth/github-auth.guard.ts new file mode 100644 index 00000000..90d66d60 --- /dev/null +++ b/backend/src/app/auth/github-auth.guard.ts @@ -0,0 +1,9 @@ +import { AuthGuard } from '@nestjs/passport'; +import { ExecutionContext, Injectable } from '@nestjs/common'; + +@Injectable() +export class GithubAuthGuard extends AuthGuard('github') { + canActivate(context: ExecutionContext) { + return super.canActivate(context); + } +} diff --git a/backend/src/app/auth/github-profile.decorator.ts b/backend/src/app/auth/github-profile.decorator.ts new file mode 100644 index 00000000..21b9636e --- /dev/null +++ b/backend/src/app/auth/github-profile.decorator.ts @@ -0,0 +1,9 @@ +import { createParamDecorator, ExecutionContext } from '@nestjs/common'; +import { GithubProfile } from '@app/auth/type/github-profile'; + +export const RequestGithubProfile = createParamDecorator( + (data, ctx: ExecutionContext): GithubProfile => { + const req = ctx.switchToHttp().getRequest(); + return req.user; + }, +); diff --git a/backend/src/app/auth/github.strategy.ts b/backend/src/app/auth/github.strategy.ts new file mode 100644 index 00000000..38d57cc0 --- /dev/null +++ b/backend/src/app/auth/github.strategy.ts @@ -0,0 +1,25 @@ +import { PassportStrategy } from '@nestjs/passport'; +import { Injectable } from '@nestjs/common'; +import { Strategy } from 'passport-github'; +import { VerifyCallback } from 'passport-oauth2'; +import { GithubConfigService } from '@config/github/config.service'; + +@Injectable() +export class GithubStrategy extends PassportStrategy(Strategy, 'github') { + constructor(githubConfigService: GithubConfigService) { + super({ + clientID: githubConfigService.clientId, + clientSecret: githubConfigService.clientSecret, + callbackURL: githubConfigService.callbackUrl, + }); + } + + validate( + accessToken: string, + refreshToken: string, + profile: any, + done: VerifyCallback, + ) { + done(null, profile); + } +} diff --git a/backend/src/app/auth/type/github-profile.ts b/backend/src/app/auth/type/github-profile.ts new file mode 100644 index 00000000..dae518c7 --- /dev/null +++ b/backend/src/app/auth/type/github-profile.ts @@ -0,0 +1,10 @@ +export interface GithubProfile { + id: string; + + profileUrl: string; + + _json: { + avatar_url: string; + blog: string; + }; +} diff --git a/backend/src/app/image/image.controller.ts b/backend/src/app/image/image.controller.ts index 95ee9d38..ba122df9 100644 --- a/backend/src/app/image/image.controller.ts +++ b/backend/src/app/image/image.controller.ts @@ -6,7 +6,6 @@ import { UseInterceptors, } from '@nestjs/common'; import { FilesInterceptor } from '@nestjs/platform-express'; -import { ApiErrorResponse } from '@src/common/decorator/api-error-response.decorator'; import { ApiSuccessResponse } from '@src/common/decorator/api-success-resposne.decorator'; import { ResponseEntity } from '@src/common/response-entity'; import { ImagesUploadResponse } from './dto/images-upload-response.dto'; @@ -19,7 +18,6 @@ export class ImageController { @Post('upload') @UseInterceptors(FilesInterceptor('files')) @ApiSuccessResponse(HttpStatus.CREATED, ImagesUploadResponse) - @ApiErrorResponse() async uploadImage(@UploadedFiles() files: Array) { const { keyList, urlList } = this.imageService.uploadImage(files); const data = keyList.map( diff --git a/backend/src/app/user/__test__/user.fixture.ts b/backend/src/app/user/__test__/user.fixture.ts new file mode 100644 index 00000000..3f685114 --- /dev/null +++ b/backend/src/app/user/__test__/user.fixture.ts @@ -0,0 +1,16 @@ +import { User } from '@app/user/user.entity'; + +export const getUserFixture = (user: Partial) => { + const fixture = new User(); + fixture.id = user.id || 1; + fixture.username = user.username || 'tester001'; + fixture.githubUrl = user.githubUrl || ''; + fixture.blogUrl = user.blogUrl || ''; + fixture.description = user.description || ''; + fixture.profileImage = user.profileImage || ''; + fixture.socialId = user.socialId || '123'; + fixture.socialType = user.socialType || 'GITHUB'; + fixture.createdAt = new Date(); + fixture.updatedAt = new Date(); + return fixture; +}; diff --git a/backend/src/app/user/user.entity.ts b/backend/src/app/user/user.entity.ts index 125fb7fa..4adb32b6 100644 --- a/backend/src/app/user/user.entity.ts +++ b/backend/src/app/user/user.entity.ts @@ -5,13 +5,14 @@ import { PrimaryGeneratedColumn, UpdateDateColumn, } from 'typeorm'; +import { randomUUID } from 'crypto'; @Entity({ name: 'user' }) export class User { - @PrimaryGeneratedColumn() + @PrimaryGeneratedColumn({ unsigned: true }) id: number; - @Column({ type: 'varchar', length: 30 }) + @Column({ type: 'varchar', length: 100 }) username: string; @Column({ type: 'varchar', length: 400, default: '' }) @@ -37,4 +38,27 @@ export class User { @UpdateDateColumn({ type: 'timestamp' }) updatedAt: Date; + + static signup({ + socialId, + socialType, + blogUrl, + githubUrl, + profileImage, + }: { + socialId: string; + socialType: string; + blogUrl: string; + githubUrl: string; + profileImage: string; + }) { + const user = new User(); + user.socialId = socialId; + user.githubUrl = githubUrl; + user.blogUrl = blogUrl; + user.socialType = socialType; + user.profileImage = profileImage; + user.username = randomUUID(); + return user; + } } diff --git a/backend/src/app/user/user.module.ts b/backend/src/app/user/user.module.ts new file mode 100644 index 00000000..c8d2eb09 --- /dev/null +++ b/backend/src/app/user/user.module.ts @@ -0,0 +1,8 @@ +import { Module } from '@nestjs/common'; +import { UserRepository } from '@app/user/user.repository'; + +@Module({ + providers: [UserRepository], + exports: [UserRepository], +}) +export class UserModule {} diff --git a/backend/src/app/user/user.repository.ts b/backend/src/app/user/user.repository.ts new file mode 100644 index 00000000..0993a667 --- /dev/null +++ b/backend/src/app/user/user.repository.ts @@ -0,0 +1,18 @@ +import { DataSource, Repository } from 'typeorm'; +import { User } from '@app/user/user.entity'; +import { Injectable } from '@nestjs/common'; + +@Injectable() +export class UserRepository extends Repository { + constructor(private readonly dataSource: DataSource) { + super( + User, + dataSource.createEntityManager(), + dataSource.createQueryRunner(), + ); + } + + findBySocial(socialId: string, socialType: string) { + return this.findOneBy({ socialId, socialType }); + } +} diff --git a/backend/src/common/config/app/config.module.ts b/backend/src/common/config/app/config.module.ts index 0fcafdcc..f54b681f 100644 --- a/backend/src/common/config/app/config.module.ts +++ b/backend/src/common/config/app/config.module.ts @@ -1,17 +1,10 @@ import { Module } from '@nestjs/common'; import { AppConfigService } from './config.service'; import { ConfigModule } from '@nestjs/config'; -import { getEnvironmentFilePath, isIgnoreEnvFile } from '../config-option'; -import { validate } from './validate'; +import { appConfig } from '@config/app/configuration'; @Module({ - imports: [ - ConfigModule.forRoot({ - envFilePath: getEnvironmentFilePath(), - ignoreEnvFile: isIgnoreEnvFile(), - validate, - }), - ], + imports: [ConfigModule.forFeature(appConfig)], providers: [AppConfigService], exports: [AppConfigService], }) diff --git a/backend/src/common/config/app/config.service.ts b/backend/src/common/config/app/config.service.ts index 7dae8fc6..cc196fd3 100644 --- a/backend/src/common/config/app/config.service.ts +++ b/backend/src/common/config/app/config.service.ts @@ -1,17 +1,20 @@ -import { Injectable } from '@nestjs/common'; -import { ConfigService } from '@nestjs/config'; -import { AppConfig, NodeEnv } from './validate'; +import { Inject, Injectable } from '@nestjs/common'; +import { ConfigType } from '@nestjs/config'; +import { appConfig, NodeEnv } from '@config/app/configuration'; @Injectable() export class AppConfigService { - constructor(private readonly configService: ConfigService) {} + constructor( + @Inject(appConfig.KEY) + private readonly appConfiguration: ConfigType, + ) {} get port() { - return this.configService.get('PORT', { infer: true }); + return this.appConfiguration.PORT; } get env() { - return this.configService.get('NODE_ENV', { infer: true }); + return this.appConfiguration.NODE_ENV; } isDevelopment() { diff --git a/backend/src/common/config/app/configuration.ts b/backend/src/common/config/app/configuration.ts new file mode 100644 index 00000000..dc0a60b2 --- /dev/null +++ b/backend/src/common/config/app/configuration.ts @@ -0,0 +1,25 @@ +import { validate } from '@config/validate'; +import { IsEnum, IsNumber } from 'class-validator'; +import { Expose, Type } from 'class-transformer'; +import { registerAs } from '@nestjs/config'; + +export enum NodeEnv { + DEVELOPMENT = 'development', + TEST = 'test', + PRODUCTION = 'production', +} + +export class AppConfig { + @IsNumber() + @Type(() => Number) + @Expose() + PORT: number; + + @IsEnum(NodeEnv) + @Expose() + NODE_ENV: NodeEnv; +} + +export const appConfig = registerAs('APP', () => + validate(process.env, AppConfig), +); diff --git a/backend/src/common/config/app/validate.ts b/backend/src/common/config/app/validate.ts deleted file mode 100644 index f000e243..00000000 --- a/backend/src/common/config/app/validate.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { IsEnum, IsNumber, validateSync } from 'class-validator'; -import { Expose, plainToClass, Type } from 'class-transformer'; - -export enum NodeEnv { - DEVELOPMENT = 'development', - TEST = 'test', - PRODUCTION = 'production', -} - -export class AppConfig { - @IsNumber() - @Type(() => Number) - @Expose() - PORT: number; - - @IsEnum(NodeEnv) - @Expose() - NODE_ENV: NodeEnv; -} - -export const validate = (config: Record) => { - const validatedConfig = plainToClass( - AppConfig, - { ...config }, - { enableImplicitConversion: true, excludeExtraneousValues: true }, - ); - - const errors = validateSync(validatedConfig, { - skipMissingProperties: false, - }); - - if (errors.length > 0) { - throw new Error(errors.toString()); - } - - return validatedConfig; -}; diff --git a/backend/src/common/config/config-option.ts b/backend/src/common/config/config-option.ts deleted file mode 100644 index 0a66440b..00000000 --- a/backend/src/common/config/config-option.ts +++ /dev/null @@ -1,7 +0,0 @@ -export const getEnvironmentFilePath = (): string => { - return process.env.NODE_ENV === 'test' ? '.env.test' : '.env.development'; -}; - -export const isIgnoreEnvFile = () => { - return process.env.NODE_ENV === 'production'; -}; diff --git a/backend/src/common/config/database/mysql/config.module.ts b/backend/src/common/config/database/mysql/config.module.ts index 9663c9f2..acc1b9a4 100644 --- a/backend/src/common/config/database/mysql/config.module.ts +++ b/backend/src/common/config/database/mysql/config.module.ts @@ -1,17 +1,10 @@ import { Module } from '@nestjs/common'; import { ConfigModule } from '@nestjs/config'; -import { getEnvironmentFilePath, isIgnoreEnvFile } from '@config/config-option'; import { MysqlConfigService } from '@config/database/mysql/config.service'; -import { validate } from '@config/database/mysql/validate'; +import { mysqlConfig } from '@config/database/mysql/configuration'; @Module({ - imports: [ - ConfigModule.forRoot({ - envFilePath: getEnvironmentFilePath(), - ignoreEnvFile: isIgnoreEnvFile(), - validate, - }), - ], + imports: [ConfigModule.forFeature(mysqlConfig)], providers: [MysqlConfigService], exports: [MysqlConfigService], }) diff --git a/backend/src/common/config/database/mysql/config.service.ts b/backend/src/common/config/database/mysql/config.service.ts index ac0cb6a7..e117e2d2 100644 --- a/backend/src/common/config/database/mysql/config.service.ts +++ b/backend/src/common/config/database/mysql/config.service.ts @@ -1,30 +1,31 @@ -import { ConfigService } from '@nestjs/config'; -import { Injectable } from '@nestjs/common'; -import { MysqlConfig } from '@config/database/mysql/validate'; +import { ConfigType } from '@nestjs/config'; +import { Inject, Injectable } from '@nestjs/common'; +import { mysqlConfig } from '@config/database/mysql/configuration'; @Injectable() export class MysqlConfigService { constructor( - private readonly configService: ConfigService, + @Inject(mysqlConfig.KEY) + private readonly mysqlConfiguration: ConfigType, ) {} get port() { - return this.configService.get('MYSQL_PORT', { infer: true }); + return this.mysqlConfiguration.MYSQL_PORT; } get hostname() { - return this.configService.get('MYSQL_HOST', { infer: true }); + return this.mysqlConfiguration.MYSQL_HOST; } get username() { - return this.configService.get('MYSQL_USER', { infer: true }); + return this.mysqlConfiguration.MYSQL_USER; } get password() { - return this.configService.get('MYSQL_PASSWORD', { infer: true }); + return this.mysqlConfiguration.MYSQL_PASSWORD; } get database() { - return this.configService.get('MYSQL_DATABASE', { infer: true }); + return this.mysqlConfiguration.MYSQL_DATABASE; } } diff --git a/backend/src/common/config/database/mysql/configuration.ts b/backend/src/common/config/database/mysql/configuration.ts new file mode 100644 index 00000000..ae65f82d --- /dev/null +++ b/backend/src/common/config/database/mysql/configuration.ts @@ -0,0 +1,31 @@ +import { IsNumber, IsString } from 'class-validator'; +import { Expose, Type } from 'class-transformer'; +import { validate } from '@config/validate'; +import { registerAs } from '@nestjs/config'; + +export class MysqlConfig { + @IsString() + @Expose() + MYSQL_HOST: string; + + @IsString() + @Expose() + MYSQL_DATABASE: string; + + @IsString() + @Expose() + MYSQL_USER: string; + + @IsString() + @Expose() + MYSQL_PASSWORD: string; + + @IsNumber() + @Type(() => Number) + @Expose() + MYSQL_PORT: number; +} + +export const mysqlConfig = registerAs('MYSQL', () => + validate(process.env, MysqlConfig), +); diff --git a/backend/src/common/config/database/mysql/validate.ts b/backend/src/common/config/database/mysql/validate.ts deleted file mode 100644 index 4c67fc77..00000000 --- a/backend/src/common/config/database/mysql/validate.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { IsNumber, IsString, validateSync } from 'class-validator'; -import { Expose, plainToClass, Type } from 'class-transformer'; - -export class MysqlConfig { - @IsString() - @Expose() - MYSQL_HOST: string; - - @IsString() - @Expose() - MYSQL_DATABASE: string; - - @IsString() - @Expose() - MYSQL_USER: string; - - @IsString() - @Expose() - MYSQL_PASSWORD: string; - - @IsNumber() - @Type(() => Number) - @Expose() - MYSQL_PORT: number; -} - -export const validate = (config: Record) => { - const validatedConfig = plainToClass( - MysqlConfig, - { ...config }, - { enableImplicitConversion: true, excludeExtraneousValues: true }, - ); - - const errors = validateSync(validatedConfig, { - skipMissingProperties: false, - }); - - if (errors.length > 0) { - throw new Error(errors.toString()); - } - - return validatedConfig; -}; diff --git a/backend/src/common/config/github/__test__/config.service.spec.ts b/backend/src/common/config/github/__test__/config.service.spec.ts new file mode 100644 index 00000000..49dd24b2 --- /dev/null +++ b/backend/src/common/config/github/__test__/config.service.spec.ts @@ -0,0 +1,45 @@ +import { Test } from '@nestjs/testing'; +import { GithubConfigModule } from '@config/github/config.module'; +import { GithubConfigService } from '@config/github/config.service'; + +describe('GithubConfigService Test', () => { + let githubConfigService: GithubConfigService; + + beforeEach(async () => { + const module = await Test.createTestingModule({ + imports: [GithubConfigModule], + }).compile(); + + githubConfigService = module.get(GithubConfigService); + }); + + test('clientId๋ฅผ ์ž˜ ๊ฐ€์ ธ์˜ค๋Š”๊ฐ€', async () => { + // given + const clientId = process.env.GITHUB_CLIENT_ID; + + // when + + // then + expect(githubConfigService.clientId).toEqual(clientId); + }); + + test('clientSecret์„ ์ž˜ ๊ฐ€์ ธ์˜ค๋Š”๊ฐ€', async () => { + // given + const clientSecret = process.env.GITHUB_CLIENT_SECRET; + + // when + + // then + expect(githubConfigService.clientSecret).toEqual(clientSecret); + }); + + test('callbackUrl์„ ์ž˜ ๊ฐ€์ ธ์˜ค๋Š”๊ฐ€', async () => { + // given + const callbackUrl = process.env.GITHUB_CALLBACK_URL; + + // when + + // then + expect(githubConfigService.callbackUrl).toEqual(callbackUrl); + }); +}); diff --git a/backend/src/common/config/github/config.module.ts b/backend/src/common/config/github/config.module.ts new file mode 100644 index 00000000..68f395b7 --- /dev/null +++ b/backend/src/common/config/github/config.module.ts @@ -0,0 +1,11 @@ +import { Module } from '@nestjs/common'; +import { ConfigModule } from '@nestjs/config'; +import { GithubConfigService } from '@config/github/config.service'; +import { githubConfig } from '@config/github/configuration'; + +@Module({ + imports: [ConfigModule.forFeature(githubConfig)], + providers: [GithubConfigService], + exports: [GithubConfigService], +}) +export class GithubConfigModule {} diff --git a/backend/src/common/config/github/config.service.ts b/backend/src/common/config/github/config.service.ts new file mode 100644 index 00000000..0d538d18 --- /dev/null +++ b/backend/src/common/config/github/config.service.ts @@ -0,0 +1,27 @@ +import { Inject, Injectable } from '@nestjs/common'; +import { ConfigType } from '@nestjs/config'; +import { githubConfig } from '@config/github/configuration'; + +@Injectable() +export class GithubConfigService { + constructor( + @Inject(githubConfig.KEY) + private readonly githubConfiguration: ConfigType, + ) {} + + get clientId() { + return this.githubConfiguration.GITHUB_CLIENT_ID; + } + + get clientSecret() { + return this.githubConfiguration.GITHUB_CLIENT_SECRET; + } + + get callbackUrl() { + return this.githubConfiguration.GITHUB_CALLBACK_URL; + } + + get redirectUrl() { + return this.githubConfiguration.GITHUB_REDIRECT_URL; + } +} diff --git a/backend/src/common/config/github/configuration.ts b/backend/src/common/config/github/configuration.ts new file mode 100644 index 00000000..6105ef38 --- /dev/null +++ b/backend/src/common/config/github/configuration.ts @@ -0,0 +1,26 @@ +import { IsString } from 'class-validator'; +import { Expose } from 'class-transformer'; +import { validate } from '@config/validate'; +import { registerAs } from '@nestjs/config'; + +export class GithubConfig { + @IsString() + @Expose() + GITHUB_CLIENT_ID: string; + + @IsString() + @Expose() + GITHUB_CLIENT_SECRET: string; + + @IsString() + @Expose() + GITHUB_CALLBACK_URL: string; + + @IsString() + @Expose() + GITHUB_REDIRECT_URL: string; +} + +export const githubConfig = registerAs('GITHUB', () => + validate(process.env, GithubConfig), +); diff --git a/backend/src/common/config/jwt/config.module.ts b/backend/src/common/config/jwt/config.module.ts index 6c4c4d8c..67629082 100644 --- a/backend/src/common/config/jwt/config.module.ts +++ b/backend/src/common/config/jwt/config.module.ts @@ -1,17 +1,10 @@ import { Module } from '@nestjs/common'; import { ConfigModule } from '@nestjs/config'; -import { getEnvironmentFilePath, isIgnoreEnvFile } from '@config/config-option'; -import { validate } from '@config/jwt/validate'; import { JwtConfigService } from '@config/jwt/config.service'; +import { jwtConfig } from '@config/jwt/configuration'; @Module({ - imports: [ - ConfigModule.forRoot({ - envFilePath: getEnvironmentFilePath(), - ignoreEnvFile: isIgnoreEnvFile(), - validate, - }), - ], + imports: [ConfigModule.forFeature(jwtConfig)], providers: [JwtConfigService], exports: [JwtConfigService], }) diff --git a/backend/src/common/config/jwt/config.service.ts b/backend/src/common/config/jwt/config.service.ts index fbed940d..b2f0d8cf 100644 --- a/backend/src/common/config/jwt/config.service.ts +++ b/backend/src/common/config/jwt/config.service.ts @@ -1,24 +1,23 @@ -import { ConfigService } from '@nestjs/config'; -import { JwtConfig } from '@config/jwt/validate'; -import { Injectable } from '@nestjs/common'; +import { ConfigType } from '@nestjs/config'; +import { Inject, Injectable } from '@nestjs/common'; +import { jwtConfig } from '@config/jwt/configuration'; @Injectable() export class JwtConfigService { - constructor(private readonly configService: ConfigService) {} + constructor( + @Inject(jwtConfig.KEY) + private readonly jwtConfiguration: ConfigType, + ) {} get secret() { - return this.configService.get('JWT_SECRET', { infer: true }); + return this.jwtConfiguration.JWT_SECRET; } get accessTokenExpirationMinutes() { - return this.configService.get('JWT_ACCESS_TOKEN_EXPIRATION_MINUTES', { - infer: true, - }); + return this.jwtConfiguration.JWT_ACCESS_TOKEN_EXPIRATION_MINUTES; } get refreshTokenExpirationDays() { - return this.configService.get('JWT_REFRESH_TOKEN_EXPIRATION_DAYS', { - infer: true, - }); + return this.jwtConfiguration.JWT_REFRESH_TOKEN_EXPIRATION_DAYS; } } diff --git a/backend/src/common/config/jwt/configuration.ts b/backend/src/common/config/jwt/configuration.ts new file mode 100644 index 00000000..efad0280 --- /dev/null +++ b/backend/src/common/config/jwt/configuration.ts @@ -0,0 +1,24 @@ +import { IsNumber, IsString } from 'class-validator'; +import { Expose, Type } from 'class-transformer'; +import { validate } from '@config/validate'; +import { registerAs } from '@nestjs/config'; + +export class JwtConfig { + @IsString() + @Expose() + JWT_SECRET: string; + + @IsNumber() + @Type(() => Number) + @Expose() + JWT_ACCESS_TOKEN_EXPIRATION_MINUTES: number; + + @IsNumber() + @Type(() => Number) + @Expose() + JWT_REFRESH_TOKEN_EXPIRATION_DAYS: number; +} + +export const jwtConfig = registerAs('JWT', () => + validate(process.env, JwtConfig), +); diff --git a/backend/src/common/config/jwt/validate.ts b/backend/src/common/config/jwt/validate.ts deleted file mode 100644 index a5a069de..00000000 --- a/backend/src/common/config/jwt/validate.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { IsNumber, IsString, validateSync } from 'class-validator'; -import { Expose, plainToClass, Type } from 'class-transformer'; - -export class JwtConfig { - @IsString() - @Expose() - JWT_SECRET: string; - - @IsNumber() - @Type(() => Number) - @Expose() - JWT_ACCESS_TOKEN_EXPIRATION_MINUTES: number; - - @IsNumber() - @Type(() => Number) - @Expose() - JWT_REFRESH_TOKEN_EXPIRATION_DAYS: number; -} - -export const validate = (config: Record) => { - const validatedConfig = plainToClass( - JwtConfig, - { ...config }, - { enableImplicitConversion: true, excludeExtraneousValues: true }, - ); - - const errors = validateSync(validatedConfig, { - skipMissingProperties: false, - }); - - if (errors.length > 0) { - throw new Error(errors.toString()); - } - - return validatedConfig; -}; diff --git a/backend/src/common/config/s3/config.module.ts b/backend/src/common/config/s3/config.module.ts index d2541ac5..1c98cf4d 100644 --- a/backend/src/common/config/s3/config.module.ts +++ b/backend/src/common/config/s3/config.module.ts @@ -1,17 +1,10 @@ import { Module } from '@nestjs/common'; import { S3ConfigService } from './config.service'; import { ConfigModule } from '@nestjs/config'; -import { getEnvironmentFilePath, isIgnoreEnvFile } from '../config-option'; -import { validate } from './validate'; +import { s3Config } from './configuration'; @Module({ - imports: [ - ConfigModule.forRoot({ - envFilePath: getEnvironmentFilePath(), - ignoreEnvFile: isIgnoreEnvFile(), - validate, - }), - ], + imports: [ConfigModule.forFeature(s3Config)], providers: [S3ConfigService], exports: [S3ConfigService], }) diff --git a/backend/src/common/config/s3/config.service.ts b/backend/src/common/config/s3/config.service.ts index e4cf5d6d..8b130740 100644 --- a/backend/src/common/config/s3/config.service.ts +++ b/backend/src/common/config/s3/config.service.ts @@ -1,32 +1,35 @@ -import { Injectable } from '@nestjs/common'; -import { ConfigService } from '@nestjs/config'; -import { S3Config } from './validate'; +import { Inject, Injectable } from '@nestjs/common'; +import { ConfigType } from '@nestjs/config'; +import { s3Config } from './configuration'; @Injectable() export class S3ConfigService { - constructor(private readonly configService: ConfigService) {} + constructor( + @Inject(s3Config.KEY) + private readonly s3Configuration: ConfigType, + ) {} get accessKey() { - return this.configService.get('STORAGE_ACCESSKEY', { infer: true }); + return this.s3Configuration.STORAGE_ACCESSKEY; } get secretKey() { - return this.configService.get('STORAGE_SECRETKEY', { infer: true }); + return this.s3Configuration.STORAGE_SECRETKEY; } get region() { - return this.configService.get('STORAGE_REGION', { infer: true }); + return this.s3Configuration.STORAGE_REGION; } get endpoint() { - return this.configService.get('STORAGE_ENDPOINT', { infer: true }); + return this.s3Configuration.STORAGE_ENDPOINT; } get bucket() { - return this.configService.get('STORAGE_BUCKET', { infer: true }); + return this.s3Configuration.STORAGE_BUCKET; } get path() { - return this.configService.get('STORAGE_BUCKET_PATH', { infer: true }); + return this.s3Configuration.STORAGE_BUCKET_PATH; } } diff --git a/backend/src/common/config/s3/configuration.ts b/backend/src/common/config/s3/configuration.ts new file mode 100644 index 00000000..5e5b85eb --- /dev/null +++ b/backend/src/common/config/s3/configuration.ts @@ -0,0 +1,32 @@ +import { IsString, IsUrl } from 'class-validator'; +import { Expose } from 'class-transformer'; +import { registerAs } from '@nestjs/config'; +import { validate } from '@config/validate'; + +export class S3Config { + @IsString() + @Expose() + STORAGE_ACCESSKEY: string; + + @IsString() + @Expose() + STORAGE_SECRETKEY: string; + + @IsString() + @Expose() + STORAGE_REGION: string; + + @IsUrl() + @Expose() + STORAGE_ENDPOINT: string; + + @IsString() + @Expose() + STORAGE_BUCKET: string; + + @IsString() + @Expose() + STORAGE_BUCKET_PATH: string; +} + +export const s3Config = registerAs('S3', () => validate(process.env, S3Config)); diff --git a/backend/src/common/config/s3/validate.ts b/backend/src/common/config/s3/validate.ts deleted file mode 100644 index 4d83f4a5..00000000 --- a/backend/src/common/config/s3/validate.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { IsString, IsUrl, validateSync } from 'class-validator'; -import { Expose, plainToClass } from 'class-transformer'; - -export class S3Config { - @IsString() - @Expose() - STORAGE_ACCESSKEY: string; - - @IsString() - @Expose() - STORAGE_SECRETKEY: string; - - @IsString() - @Expose() - STORAGE_REGION: string; - - @IsUrl() - @Expose() - STORAGE_ENDPOINT: string; - - @IsString() - @Expose() - STORAGE_BUCKET: string; - - @IsString() - @Expose() - STORAGE_BUCKET_PATH: string; -} - -export const validate = (config: Record) => { - const validatedConfig = plainToClass( - S3Config, - { ...config }, - { enableImplicitConversion: true, excludeExtraneousValues: true }, - ); - - const errors = validateSync(validatedConfig, { - skipMissingProperties: false, - }); - - if (errors.length > 0) { - throw new Error(errors.toString()); - } - - return validatedConfig; -}; diff --git a/backend/src/common/config/validate.ts b/backend/src/common/config/validate.ts new file mode 100644 index 00000000..10369805 --- /dev/null +++ b/backend/src/common/config/validate.ts @@ -0,0 +1,22 @@ +import { plainToClass, ClassConstructor } from 'class-transformer'; +import { validateSync } from 'class-validator'; + +export const validate = ( + config: Record, + envClass: ClassConstructor, +): T => { + const validatedConfig = plainToClass(envClass, config, { + enableImplicitConversion: true, + excludeExtraneousValues: true, + }); + + const errors = validateSync(validatedConfig, { + skipMissingProperties: false, + }); + + if (errors.length > 0) { + throw new Error(errors.toString()); + } + + return validatedConfig; +}; diff --git a/backend/src/common/guard/jwt-auth.guard.ts b/backend/src/common/guard/jwt-auth.guard.ts index b3ae8b50..1c9cea37 100644 --- a/backend/src/common/guard/jwt-auth.guard.ts +++ b/backend/src/common/guard/jwt-auth.guard.ts @@ -57,7 +57,7 @@ export class JwtAuthGuard implements CanActivate { response.cookie('access_token', accessToken, { httpOnly: true, - expires: new Date(accessTokenExpires), + expires: new Date(accessTokenExpires * 1000), }); return true; diff --git a/backend/src/setSwagger.ts b/backend/src/setSwagger.ts index ad15cf6b..3cbbc03f 100644 --- a/backend/src/setSwagger.ts +++ b/backend/src/setSwagger.ts @@ -1,6 +1,8 @@ import { INestApplication } from '@nestjs/common'; import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger'; import { ResponseEntity } from '@common/response-entity'; +import { AuthModule } from '@app/auth/auth.module'; +import { ImageModule } from '@app/image/image.module'; export const setSwagger = (app: INestApplication) => { const config = new DocumentBuilder() @@ -15,7 +17,7 @@ export const setSwagger = (app: INestApplication) => { .build(); const document = SwaggerModule.createDocument(app, config, { - include: [], + include: [AuthModule, ImageModule], extraModels: [ResponseEntity], }); From 45b13db3509e3e490cf2bde03dd1679316fdce92 Mon Sep 17 00:00:00 2001 From: yangseungchan Date: Sun, 27 Nov 2022 13:41:08 +0900 Subject: [PATCH 034/142] =?UTF-8?q?[Feature]=20import=20=EC=A0=95=EB=A0=AC?= =?UTF-8?q?=20=EA=B7=9C=EC=B9=99=20=EC=A0=81=EC=9A=A9=20(#88)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * โœจ feature: eslint import order ์„ค์ • ์ถ”๊ฐ€ * ๐Ÿฅ… chore: ๋ชจ๋“  ํŒŒ์ผ์— ์ ์šฉ๋œ Lint ์˜ต์…˜ ์ ์šฉ * ๐Ÿฅ… chore: Joiner ์Šคํ† ๋ฆฌ ์˜คํƒ€ ์ˆ˜์ • --- frontend/.eslintrc.json | 40 +- frontend/package-lock.json | 420 ++++++++++++++++-- frontend/package.json | 7 +- .../src/apis/test/getTestGroupArticles.ts | 1 + .../ArticleEditor/ArticleEditor.stories.tsx | 3 +- .../article/ArticleEditor/index.tsx | 3 +- .../article/Comment/Comment.stories.tsx | 3 +- .../src/components/article/Comment/index.tsx | 12 +- .../CommentInput/CommentInput.stories.tsx | 7 +- .../components/article/CommentInput/index.tsx | 6 +- .../ImageThumbnail/ImageThumbnail.stories.tsx | 3 +- .../article/ImageThumbnail/index.tsx | 3 +- .../ParticipantItem.stories.tsx | 4 +- .../ParticipantItem/index.tsx | 5 +- .../ParticipantsModal.stories.tsx | 4 +- .../article/ParticipantsModal/index.tsx | 5 +- .../common/ArticleTag/ArticleTag.stories.tsx | 1 + .../components/common/ArticleTag/index.tsx | 2 +- .../common/DropDown/DropDown.stories.tsx | 4 +- .../EmptyMessage/EmptyMessage.stories.tsx | 1 + .../components/common/EmptyMessage/index.tsx | 2 +- .../FloatingButton/FloatingButton.stories.tsx | 7 +- .../common/FloatingButton/index.tsx | 3 +- .../common/FloatingButton/styles.tsx | 3 +- .../FloatingUtilButton.stories.tsx | 7 +- .../common/FloatingUtilButton/index.tsx | 4 +- .../GroupArticleCard.stories.tsx | 6 +- .../common/GroupArticleCard/index.tsx | 11 +- .../DetailTitle/DetailTitle.stories.tsx | 3 +- .../common/Header/DetailTitle/index.tsx | 7 +- .../common/Header/Header.stories.tsx | 14 +- .../LoginButton/LoginButton.stories.tsx | 3 +- .../common/Header/LoginButton/index.tsx | 1 + .../Header/RootTitle/RootTitle.stories.tsx | 3 +- .../common/Header/RootTitle/index.tsx | 3 +- .../common/Header/UserLoginItem/index.tsx | 3 +- .../Header/UtilButton/UtilButton.stories.tsx | 4 +- .../common/Header/UtilButton/index.tsx | 3 +- .../src/components/common/Header/index.tsx | 1 + ...Jointer.stories.tsx => Joiner.stories.tsx} | 1 + .../src/components/common/Joiner/index.tsx | 1 + .../NavigationTab/NavigationTab.stories.tsx | 1 + .../components/common/NavigationTab/index.tsx | 7 +- .../common/PageLayout/PageLayout.stories.tsx | 8 +- .../components/common/PageLayout/index.tsx | 4 +- .../components/common/RouterTransition.tsx | 7 +- .../common/RouterTransition/index.tsx | 7 +- .../StatCounter/StatCounter.stories.tsx | 1 + .../components/common/StatCounter/index.tsx | 4 +- .../common/TextInput/TextInput.stories.tsx | 3 +- .../GitLoginButton/GitLoginButton.stories.tsx | 1 + .../components/login/GitLoginButton/index.tsx | 4 +- frontend/src/constants/dummy.ts | 4 +- frontend/src/constants/location.ts | 2 + .../hooks/queries/useFetchGroupArticles.ts | 3 +- .../src/hooks/queries/useFetchTestData.ts | 3 +- frontend/src/mocks/browser.ts | 1 + frontend/src/mocks/handlers.ts | 4 +- frontend/src/mocks/server.ts | 1 + frontend/src/pages/_app.tsx | 10 +- frontend/src/pages/_document.tsx | 3 +- frontend/src/pages/article/[id].tsx | 16 +- frontend/src/pages/article/write/index.tsx | 17 +- frontend/src/pages/index.tsx | 28 +- frontend/src/pages/login.tsx | 7 +- frontend/src/pages/my.tsx | 2 +- frontend/src/pages/notification.tsx | 2 +- frontend/src/styles/CommonStyles.tsx | 4 +- frontend/src/typings/types.ts | 2 +- frontend/src/utils/colors.ts | 2 +- frontend/src/utils/dateTime.ts | 2 +- 71 files changed, 636 insertions(+), 148 deletions(-) rename frontend/src/components/common/Joiner/{Jointer.stories.tsx => Joiner.stories.tsx} (99%) diff --git a/frontend/.eslintrc.json b/frontend/.eslintrc.json index 10ecfd85..7c884eeb 100644 --- a/frontend/.eslintrc.json +++ b/frontend/.eslintrc.json @@ -7,7 +7,9 @@ "plugin:react/recommended", "standard-with-typescript", "next/core-web-vitals", - "prettier" + "prettier", + "plugin:import/recommended", + "plugin:import/typescript" ], "parser": "@typescript-eslint/parser", "overrides": [ @@ -36,6 +38,37 @@ "allowTemplateLiterals": true } ], // ๋ฌธ์ž์—ด ๋“ค์„ ์Œ๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ธ๋„๋ก ๊ฐ•์ œ, + "import/order": [ + "error", + { + "groups": ["builtin", "external", "internal"], + "pathGroups": [ + // react, next ๋ชจ๋“ˆ์€ ์™ธ๋ถ€ ๋ชจ๋“ˆ ์ค‘ ์ตœ์ƒ๋‹จ์— ๋‘๋„๋ก + { + "pattern": "{react,next/*}", + "group": "builtin", + "position": "after" + }, + // styling, ์•„์ด์ฝ˜ ์™ธ๋ถ€ ๋ชจ๋“ˆ๋“ค์„ ํ•œ ๊ทธ๋ฃน์œผ๋กœ ์ƒ์„ฑ + { + "pattern": "{@emotion/*,@mantine/*,@tabler/*}", + "group": "external", + "position": "after" + } + ], + "pathGroupsExcludedImportTypes": [], + "newlines-between": "always", // ๊ทธ๋ฃน๊ฐ„ ๋นˆ์ค„ ์ƒ์„ฑ + "alphabetize": { + "order": "asc" // ๊ทธ๋ฃน ๋‚ด์—์„œ๋„ ์•ŒํŒŒ๋ฒณ ์ˆœ์„œ๋กœ ์ •๋ ฌ + } + } + ], + "sort-imports": [ + "error", + { + "ignoreDeclarationSort": true + } + ], "@typescript-eslint/explicit-function-return-type": "off", "@typescript-eslint/semi": "off", "@typescript-eslint/space-before-function-paren": "off", @@ -44,5 +77,10 @@ "@typescript-eslint/no-floating-promises": "warn", "@typescript-eslint/return-await": "off", "@typescript-eslint/promise-function-async": "off" + }, + "settings": { + "import/resolver": { + "typescript": true + } } } diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 1226d874..b7d18671 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -41,12 +41,14 @@ "@types/react": "^18.0.25", "@types/react-dom": "^18.0.9", "@typescript-eslint/eslint-plugin": "^5.43.0", + "@typescript-eslint/parser": "^5.44.0", "babel-loader": "^8.3.0", "chromatic": "^6.11.4", "eslint": "8.22.0", "eslint-config-next": "^13.0.3", "eslint-config-prettier": "^8.5.0", "eslint-config-standard-with-typescript": "^23.0.0", + "eslint-import-resolver-typescript": "^3.5.2", "eslint-plugin-import": "^2.26.0", "eslint-plugin-n": "^15.5.1", "eslint-plugin-prettier": "^4.2.1", @@ -3370,6 +3372,32 @@ "integrity": "sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q==", "dev": true }, + "node_modules/@pkgr/utils": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.3.1.tgz", + "integrity": "sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "is-glob": "^4.0.3", + "open": "^8.4.0", + "picocolors": "^1.0.0", + "tiny-glob": "^0.2.9", + "tslib": "^2.4.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@pkgr/utils/node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, "node_modules/@pmmmwh/react-refresh-webpack-plugin": { "version": "0.5.9", "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.9.tgz", @@ -10735,14 +10763,14 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.43.0.tgz", - "integrity": "sha512-2iHUK2Lh7PwNUlhFxxLI2haSDNyXvebBO9izhjhMoDC+S3XI9qt2DGFUsiJ89m2k7gGYch2aEpYqV5F/+nwZug==", + "version": "5.44.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.44.0.tgz", + "integrity": "sha512-H7LCqbZnKqkkgQHaKLGC6KUjt3pjJDx8ETDqmwncyb6PuoigYajyAwBGz08VU/l86dZWZgI4zm5k2VaKqayYyA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.43.0", - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/typescript-estree": "5.43.0", + "@typescript-eslint/scope-manager": "5.44.0", + "@typescript-eslint/types": "5.44.0", + "@typescript-eslint/typescript-estree": "5.44.0", "debug": "^4.3.4" }, "engines": { @@ -10761,6 +10789,95 @@ } } }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { + "version": "5.44.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.44.0.tgz", + "integrity": "sha512-2pKml57KusI0LAhgLKae9kwWeITZ7IsZs77YxyNyIVOwQ1kToyXRaJLl+uDEXzMN5hnobKUOo2gKntK9H1YL8g==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.44.0", + "@typescript-eslint/visitor-keys": "5.44.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { + "version": "5.44.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.44.0.tgz", + "integrity": "sha512-Tp+zDnHmGk4qKR1l+Y1rBvpjpm5tGXX339eAlRBDg+kgZkz9Bw+pqi4dyseOZMsGuSH69fYfPJCBKBrbPCxYFQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.44.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.44.0.tgz", + "integrity": "sha512-M6Jr+RM7M5zeRj2maSfsZK2660HKAJawv4Ud0xT+yauyvgrsHu276VtXlKDFnEmhG+nVEd0fYZNXGoAgxwDWJw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.44.0", + "@typescript-eslint/visitor-keys": "5.44.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.44.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.44.0.tgz", + "integrity": "sha512-a48tLG8/4m62gPFbJ27FxwCOqPKxsb8KC3HkmYoq2As/4YyjQl1jDbRr1s63+g4FS/iIehjmN3L5UjmKva1HzQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.44.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@typescript-eslint/scope-manager": { "version": "5.43.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.43.0.tgz", @@ -15318,6 +15435,26 @@ } } }, + "node_modules/eslint-config-next/node_modules/eslint-import-resolver-typescript": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz", + "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "glob": "^7.2.0", + "is-glob": "^4.0.3", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*" + } + }, "node_modules/eslint-config-prettier": { "version": "8.5.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", @@ -15394,25 +15531,61 @@ } }, "node_modules/eslint-import-resolver-typescript": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz", - "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.2.tgz", + "integrity": "sha512-zX4ebnnyXiykjhcBvKIf5TNvt8K7yX6bllTRZ14MiurKPjDpCAZujlszTdB8pcNXhZcOf+god4s9SjQa5GnytQ==", "dev": true, "dependencies": { "debug": "^4.3.4", - "glob": "^7.2.0", + "enhanced-resolve": "^5.10.0", + "get-tsconfig": "^4.2.0", + "globby": "^13.1.2", + "is-core-module": "^2.10.0", "is-glob": "^4.0.3", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" + "synckit": "^0.8.4" }, "engines": { - "node": ">=4" + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" }, "peerDependencies": { "eslint": "*", "eslint-plugin-import": "*" } }, + "node_modules/eslint-import-resolver-typescript/node_modules/globby": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.2.tgz", + "integrity": "sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==", + "dev": true, + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-import-resolver-typescript/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/eslint-module-utils": { "version": "2.7.4", "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", @@ -17435,6 +17608,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-tsconfig": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.2.0.tgz", + "integrity": "sha512-X8u8fREiYOE6S8hLbq99PeykTDoLVnxvF4DjWKJmz9xy2nNRdUcV8ZN9tniJFeKyTU3qnC9lL8n4Chd6LmVKHg==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, "node_modules/get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -17537,6 +17719,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/globalyzer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", + "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", + "dev": true + }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -17557,6 +17745,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true + }, "node_modules/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", @@ -26316,6 +26510,22 @@ "integrity": "sha512-qImOD23aDfnIDNqlG1NOehdB9IYsn1V9oByPjKY1nakv2MQYCEMyX033/q+aEtYCpmYK1cv2+NTmlH+ra6GA5A==", "dev": true }, + "node_modules/synckit": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.4.tgz", + "integrity": "sha512-Dn2ZkzMdSX827QbowGbU/4yjWuvNaCoScLLoMo/yKbu+P4GBR6cRGKZH27k6a9bRzdqcyd1DE96pQtQ6uNkmyw==", + "dev": true, + "dependencies": { + "@pkgr/utils": "^2.3.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, "node_modules/tapable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", @@ -26542,6 +26752,16 @@ "node": ">=0.6.0" } }, + "node_modules/tiny-glob": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", + "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", + "dev": true, + "dependencies": { + "globalyzer": "0.1.0", + "globrex": "^0.1.2" + } + }, "node_modules/tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -30728,6 +30948,28 @@ "integrity": "sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q==", "dev": true }, + "@pkgr/utils": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.3.1.tgz", + "integrity": "sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "is-glob": "^4.0.3", + "open": "^8.4.0", + "picocolors": "^1.0.0", + "tiny-glob": "^0.2.9", + "tslib": "^2.4.0" + }, + "dependencies": { + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + } + } + }, "@pmmmwh/react-refresh-webpack-plugin": { "version": "0.5.9", "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.9.tgz", @@ -36374,15 +36616,67 @@ } }, "@typescript-eslint/parser": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.43.0.tgz", - "integrity": "sha512-2iHUK2Lh7PwNUlhFxxLI2haSDNyXvebBO9izhjhMoDC+S3XI9qt2DGFUsiJ89m2k7gGYch2aEpYqV5F/+nwZug==", + "version": "5.44.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.44.0.tgz", + "integrity": "sha512-H7LCqbZnKqkkgQHaKLGC6KUjt3pjJDx8ETDqmwncyb6PuoigYajyAwBGz08VU/l86dZWZgI4zm5k2VaKqayYyA==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.43.0", - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/typescript-estree": "5.43.0", + "@typescript-eslint/scope-manager": "5.44.0", + "@typescript-eslint/types": "5.44.0", + "@typescript-eslint/typescript-estree": "5.44.0", "debug": "^4.3.4" + }, + "dependencies": { + "@typescript-eslint/scope-manager": { + "version": "5.44.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.44.0.tgz", + "integrity": "sha512-2pKml57KusI0LAhgLKae9kwWeITZ7IsZs77YxyNyIVOwQ1kToyXRaJLl+uDEXzMN5hnobKUOo2gKntK9H1YL8g==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.44.0", + "@typescript-eslint/visitor-keys": "5.44.0" + } + }, + "@typescript-eslint/types": { + "version": "5.44.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.44.0.tgz", + "integrity": "sha512-Tp+zDnHmGk4qKR1l+Y1rBvpjpm5tGXX339eAlRBDg+kgZkz9Bw+pqi4dyseOZMsGuSH69fYfPJCBKBrbPCxYFQ==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.44.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.44.0.tgz", + "integrity": "sha512-M6Jr+RM7M5zeRj2maSfsZK2660HKAJawv4Ud0xT+yauyvgrsHu276VtXlKDFnEmhG+nVEd0fYZNXGoAgxwDWJw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.44.0", + "@typescript-eslint/visitor-keys": "5.44.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.44.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.44.0.tgz", + "integrity": "sha512-a48tLG8/4m62gPFbJ27FxwCOqPKxsb8KC3HkmYoq2As/4YyjQl1jDbRr1s63+g4FS/iIehjmN3L5UjmKva1HzQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.44.0", + "eslint-visitor-keys": "^3.3.0" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } } }, "@typescript-eslint/scope-manager": { @@ -40067,6 +40361,21 @@ "eslint-plugin-jsx-a11y": "^6.5.1", "eslint-plugin-react": "^7.31.7", "eslint-plugin-react-hooks": "^4.5.0" + }, + "dependencies": { + "eslint-import-resolver-typescript": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz", + "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==", + "dev": true, + "requires": { + "debug": "^4.3.4", + "glob": "^7.2.0", + "is-glob": "^4.0.3", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + } + } } }, "eslint-config-prettier": { @@ -40113,16 +40422,39 @@ } }, "eslint-import-resolver-typescript": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz", - "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.2.tgz", + "integrity": "sha512-zX4ebnnyXiykjhcBvKIf5TNvt8K7yX6bllTRZ14MiurKPjDpCAZujlszTdB8pcNXhZcOf+god4s9SjQa5GnytQ==", "dev": true, "requires": { "debug": "^4.3.4", - "glob": "^7.2.0", + "enhanced-resolve": "^5.10.0", + "get-tsconfig": "^4.2.0", + "globby": "^13.1.2", + "is-core-module": "^2.10.0", "is-glob": "^4.0.3", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" + "synckit": "^0.8.4" + }, + "dependencies": { + "globby": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.2.tgz", + "integrity": "sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==", + "dev": true, + "requires": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + } + }, + "slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true + } } }, "eslint-module-utils": { @@ -41583,6 +41915,12 @@ "get-intrinsic": "^1.1.1" } }, + "get-tsconfig": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.2.0.tgz", + "integrity": "sha512-X8u8fREiYOE6S8hLbq99PeykTDoLVnxvF4DjWKJmz9xy2nNRdUcV8ZN9tniJFeKyTU3qnC9lL8n4Chd6LmVKHg==", + "dev": true + }, "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -41658,6 +41996,12 @@ "define-properties": "^1.1.3" } }, + "globalyzer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", + "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", + "dev": true + }, "globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -41672,6 +42016,12 @@ "slash": "^3.0.0" } }, + "globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true + }, "gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", @@ -48355,6 +48705,16 @@ "integrity": "sha512-qImOD23aDfnIDNqlG1NOehdB9IYsn1V9oByPjKY1nakv2MQYCEMyX033/q+aEtYCpmYK1cv2+NTmlH+ra6GA5A==", "dev": true }, + "synckit": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.4.tgz", + "integrity": "sha512-Dn2ZkzMdSX827QbowGbU/4yjWuvNaCoScLLoMo/yKbu+P4GBR6cRGKZH27k6a9bRzdqcyd1DE96pQtQ6uNkmyw==", + "dev": true, + "requires": { + "@pkgr/utils": "^2.3.1", + "tslib": "^2.4.0" + } + }, "tapable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", @@ -48526,6 +48886,16 @@ "setimmediate": "^1.0.4" } }, + "tiny-glob": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", + "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", + "dev": true, + "requires": { + "globalyzer": "0.1.0", + "globrex": "^0.1.2" + } + }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", diff --git a/frontend/package.json b/frontend/package.json index e255dc23..3b9f7020 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -11,8 +11,9 @@ "prepare": "cd .. && husky install frontend/.husky", "check-types": "tsc --pretty --noEmit", "check-format": "prettier --check .", - "check-lint": "eslint . --ext ts --ext tsx --ext js", + "check-lint": "eslint . --ext .js,.ts,.tsx", "format": "prettier --write .", + "fix-lint": "eslint . --ext .ts,.tsx,.js --fix", "test-all": "npm run check-format && npm run check-lint && npm run check-types && npm run build", "storybook": "start-storybook -p 6006 -c .storybook", "build-storybook": "build-storybook", @@ -21,7 +22,7 @@ "lint-staged": { "./src/**/*.{js,jsx,ts,tsx}": [ "npm run format", - "npm run check-lint" + "npm run fix-lint" ] }, "dependencies": { @@ -58,12 +59,14 @@ "@types/react": "^18.0.25", "@types/react-dom": "^18.0.9", "@typescript-eslint/eslint-plugin": "^5.43.0", + "@typescript-eslint/parser": "^5.44.0", "babel-loader": "^8.3.0", "chromatic": "^6.11.4", "eslint": "8.22.0", "eslint-config-next": "^13.0.3", "eslint-config-prettier": "^8.5.0", "eslint-config-standard-with-typescript": "^23.0.0", + "eslint-import-resolver-typescript": "^3.5.2", "eslint-plugin-import": "^2.26.0", "eslint-plugin-n": "^15.5.1", "eslint-plugin-prettier": "^4.2.1", diff --git a/frontend/src/apis/test/getTestGroupArticles.ts b/frontend/src/apis/test/getTestGroupArticles.ts index d9bee72d..86bdc5ae 100644 --- a/frontend/src/apis/test/getTestGroupArticles.ts +++ b/frontend/src/apis/test/getTestGroupArticles.ts @@ -1,4 +1,5 @@ import axios from 'axios'; + import { Category } from '@constants/category'; import { Location } from '@constants/location'; diff --git a/frontend/src/components/article/ArticleEditor/ArticleEditor.stories.tsx b/frontend/src/components/article/ArticleEditor/ArticleEditor.stories.tsx index 6c564013..03e46023 100644 --- a/frontend/src/components/article/ArticleEditor/ArticleEditor.stories.tsx +++ b/frontend/src/components/article/ArticleEditor/ArticleEditor.stories.tsx @@ -1,6 +1,7 @@ -import ArticleEditor from '.'; import { ComponentMeta, ComponentStory } from '@storybook/react'; +import ArticleEditor from '.'; + export default { title: 'Component/ArticleEditor', component: ArticleEditor, diff --git a/frontend/src/components/article/ArticleEditor/index.tsx b/frontend/src/components/article/ArticleEditor/index.tsx index c91a0291..42c34902 100644 --- a/frontend/src/components/article/ArticleEditor/index.tsx +++ b/frontend/src/components/article/ArticleEditor/index.tsx @@ -1,6 +1,7 @@ import dynamic from 'next/dynamic'; + import styled from '@emotion/styled'; -import { Text, LoadingOverlay } from '@mantine/core'; +import { LoadingOverlay, Text } from '@mantine/core'; import { RichTextEditorProps } from '@mantine/rte'; const RichTextEditor = dynamic(() => import('@mantine/rte'), { diff --git a/frontend/src/components/article/Comment/Comment.stories.tsx b/frontend/src/components/article/Comment/Comment.stories.tsx index 1b94a054..f6cc04dd 100644 --- a/frontend/src/components/article/Comment/Comment.stories.tsx +++ b/frontend/src/components/article/Comment/Comment.stories.tsx @@ -1,6 +1,7 @@ -import Comment from '.'; import { ComponentMeta, ComponentStory } from '@storybook/react'; +import Comment from '.'; + export default { title: 'Component/Comment', component: Comment, diff --git a/frontend/src/components/article/Comment/index.tsx b/frontend/src/components/article/Comment/index.tsx index 0a3ffbd4..e74734d1 100644 --- a/frontend/src/components/article/Comment/index.tsx +++ b/frontend/src/components/article/Comment/index.tsx @@ -1,13 +1,15 @@ import { Avatar, Text } from '@mantine/core'; -import dateTimeFormat from '@utils/dateTime'; + import { CommentType as CommentItem } from '@typings/types'; +import dateTimeFormat from '@utils/dateTime'; + import { - CommentWrapper, - CommentHeader, CommentAuthor, - CommentUtils, - CommentUtilItem, CommentContent, + CommentHeader, + CommentUtilItem, + CommentUtils, + CommentWrapper, } from './styles'; /** diff --git a/frontend/src/components/article/CommentInput/CommentInput.stories.tsx b/frontend/src/components/article/CommentInput/CommentInput.stories.tsx index 6f23f349..36f9cc0a 100644 --- a/frontend/src/components/article/CommentInput/CommentInput.stories.tsx +++ b/frontend/src/components/article/CommentInput/CommentInput.stories.tsx @@ -1,9 +1,10 @@ -import CommentInput from '.'; -import PageLayout from '@components/common/PageLayout'; +import { ComponentMeta, ComponentStory } from '@storybook/react'; + import Header from '@components/common/Header'; import RootTitle from '@components/common/Header/RootTitle'; +import PageLayout from '@components/common/PageLayout'; -import { ComponentMeta, ComponentStory } from '@storybook/react'; +import CommentInput from '.'; export default { title: 'Component/CommentInput', diff --git a/frontend/src/components/article/CommentInput/index.tsx b/frontend/src/components/article/CommentInput/index.tsx index d5d7b057..1c66c35c 100644 --- a/frontend/src/components/article/CommentInput/index.tsx +++ b/frontend/src/components/article/CommentInput/index.tsx @@ -1,8 +1,10 @@ import { useRef } from 'react'; -import { CommentInputWrapper } from './styles'; -import { TextInput, ActionIcon } from '@mantine/core'; + +import { ActionIcon, TextInput } from '@mantine/core'; import { IconSend } from '@tabler/icons'; +import { CommentInputWrapper } from './styles'; + const CommentInput = () => { const inputRef = useRef(null); /** diff --git a/frontend/src/components/article/ImageThumbnail/ImageThumbnail.stories.tsx b/frontend/src/components/article/ImageThumbnail/ImageThumbnail.stories.tsx index 105ea66c..b9d2d925 100644 --- a/frontend/src/components/article/ImageThumbnail/ImageThumbnail.stories.tsx +++ b/frontend/src/components/article/ImageThumbnail/ImageThumbnail.stories.tsx @@ -1,6 +1,7 @@ -import ImageThumbnail from '.'; import { ComponentMeta, ComponentStory } from '@storybook/react'; +import ImageThumbnail from '.'; + export default { title: 'Component/ImageThumbnail', component: ImageThumbnail, diff --git a/frontend/src/components/article/ImageThumbnail/index.tsx b/frontend/src/components/article/ImageThumbnail/index.tsx index a935e847..f3c3360d 100644 --- a/frontend/src/components/article/ImageThumbnail/index.tsx +++ b/frontend/src/components/article/ImageThumbnail/index.tsx @@ -1,6 +1,7 @@ -import styled from '@emotion/styled'; import Image from 'next/image'; + import { useTheme } from '@emotion/react'; +import styled from '@emotion/styled'; import { IconPhoto } from '@tabler/icons'; interface Props { diff --git a/frontend/src/components/article/ParticipantsModal/ParticipantItem/ParticipantItem.stories.tsx b/frontend/src/components/article/ParticipantsModal/ParticipantItem/ParticipantItem.stories.tsx index a7de4f83..09e1c8d0 100644 --- a/frontend/src/components/article/ParticipantsModal/ParticipantItem/ParticipantItem.stories.tsx +++ b/frontend/src/components/article/ParticipantsModal/ParticipantItem/ParticipantItem.stories.tsx @@ -1,7 +1,9 @@ -import ParticipantItem from '.'; import { ComponentMeta, ComponentStory } from '@storybook/react'; + import { dummyParticipants } from '@constants/dummy'; +import ParticipantItem from '.'; + export default { title: 'Component/ParticipantItem', component: ParticipantItem, diff --git a/frontend/src/components/article/ParticipantsModal/ParticipantItem/index.tsx b/frontend/src/components/article/ParticipantsModal/ParticipantItem/index.tsx index 9e2e7aca..b7059238 100644 --- a/frontend/src/components/article/ParticipantsModal/ParticipantItem/index.tsx +++ b/frontend/src/components/article/ParticipantsModal/ParticipantItem/index.tsx @@ -1,7 +1,8 @@ -import { Avatar } from '@mantine/core'; -import styled from '@emotion/styled'; import { useTheme } from '@emotion/react'; +import styled from '@emotion/styled'; +import { Avatar } from '@mantine/core'; import { IconExternalLink } from '@tabler/icons'; + import { UserType } from '@typings/types'; interface Props { diff --git a/frontend/src/components/article/ParticipantsModal/ParticipantsModal.stories.tsx b/frontend/src/components/article/ParticipantsModal/ParticipantsModal.stories.tsx index 87bc7a59..a36a7e3e 100644 --- a/frontend/src/components/article/ParticipantsModal/ParticipantsModal.stories.tsx +++ b/frontend/src/components/article/ParticipantsModal/ParticipantsModal.stories.tsx @@ -1,7 +1,9 @@ -import ParticipantsModal from '.'; import { ComponentMeta, ComponentStory } from '@storybook/react'; + import { dummyParticipants } from '@constants/dummy'; +import ParticipantsModal from '.'; + export default { title: 'Component/ParticipantsModal', component: ParticipantsModal, diff --git a/frontend/src/components/article/ParticipantsModal/index.tsx b/frontend/src/components/article/ParticipantsModal/index.tsx index 0130d290..a33f68bd 100644 --- a/frontend/src/components/article/ParticipantsModal/index.tsx +++ b/frontend/src/components/article/ParticipantsModal/index.tsx @@ -1,9 +1,10 @@ -import { Modal } from '@mantine/core'; import styled from '@emotion/styled'; +import { Modal } from '@mantine/core'; + import ParticipantItem from '@components/article/ParticipantsModal/ParticipantItem'; +import EmptyMessage from '@components/common/EmptyMessage'; import Joiner from '@components/common/Joiner'; import { UserType } from '@typings/types'; -import EmptyMessage from '@components/common/EmptyMessage'; interface Props { participants: Array>; diff --git a/frontend/src/components/common/ArticleTag/ArticleTag.stories.tsx b/frontend/src/components/common/ArticleTag/ArticleTag.stories.tsx index 1d7bcccb..5dbcf008 100644 --- a/frontend/src/components/common/ArticleTag/ArticleTag.stories.tsx +++ b/frontend/src/components/common/ArticleTag/ArticleTag.stories.tsx @@ -1,4 +1,5 @@ import { ComponentMeta, ComponentStory } from '@storybook/react'; + import ArticleTag from '.'; export default { diff --git a/frontend/src/components/common/ArticleTag/index.tsx b/frontend/src/components/common/ArticleTag/index.tsx index ab498164..abbb26cc 100644 --- a/frontend/src/components/common/ArticleTag/index.tsx +++ b/frontend/src/components/common/ArticleTag/index.tsx @@ -1,5 +1,5 @@ -import { Badge } from '@mantine/core'; import styled from '@emotion/styled'; +import { Badge } from '@mantine/core'; interface Props { /** diff --git a/frontend/src/components/common/DropDown/DropDown.stories.tsx b/frontend/src/components/common/DropDown/DropDown.stories.tsx index 14d86487..4acb03ce 100644 --- a/frontend/src/components/common/DropDown/DropDown.stories.tsx +++ b/frontend/src/components/common/DropDown/DropDown.stories.tsx @@ -1,7 +1,9 @@ import { ComponentMeta, ComponentStory } from '@storybook/react'; -import DropDown from '.'; + import { CategoryKr } from '@constants/category'; +import DropDown from '.'; + export default { title: 'Component/DropDown', component: DropDown, diff --git a/frontend/src/components/common/EmptyMessage/EmptyMessage.stories.tsx b/frontend/src/components/common/EmptyMessage/EmptyMessage.stories.tsx index 58081bcb..7c1b7034 100644 --- a/frontend/src/components/common/EmptyMessage/EmptyMessage.stories.tsx +++ b/frontend/src/components/common/EmptyMessage/EmptyMessage.stories.tsx @@ -1,4 +1,5 @@ import { ComponentMeta, ComponentStory } from '@storybook/react'; + import EmptyMessage from '.'; export default { diff --git a/frontend/src/components/common/EmptyMessage/index.tsx b/frontend/src/components/common/EmptyMessage/index.tsx index 92e3c291..75748079 100644 --- a/frontend/src/components/common/EmptyMessage/index.tsx +++ b/frontend/src/components/common/EmptyMessage/index.tsx @@ -1,6 +1,6 @@ +import { useTheme } from '@emotion/react'; import styled from '@emotion/styled'; import { IconMoodEmpty } from '@tabler/icons'; -import { useTheme } from '@emotion/react'; interface Props { target: 'article' | 'participant'; diff --git a/frontend/src/components/common/FloatingButton/FloatingButton.stories.tsx b/frontend/src/components/common/FloatingButton/FloatingButton.stories.tsx index 4b0e9e5d..813317a8 100644 --- a/frontend/src/components/common/FloatingButton/FloatingButton.stories.tsx +++ b/frontend/src/components/common/FloatingButton/FloatingButton.stories.tsx @@ -1,11 +1,12 @@ import { ComponentMeta, ComponentStory } from '@storybook/react'; import { userEvent, within } from '@storybook/testing-library'; -import FloatingButton from '.'; -import PageLayout from '@components/common/PageLayout'; import Header from '@components/common/Header'; -import NavigationTab from '@components/common/NavigationTab'; import DetailTitle from '@components/common/Header/DetailTitle'; +import NavigationTab from '@components/common/NavigationTab'; +import PageLayout from '@components/common/PageLayout'; + +import FloatingButton from '.'; export default { title: 'Component/FloatingButton', diff --git a/frontend/src/components/common/FloatingButton/index.tsx b/frontend/src/components/common/FloatingButton/index.tsx index 37615cda..72dca57a 100644 --- a/frontend/src/components/common/FloatingButton/index.tsx +++ b/frontend/src/components/common/FloatingButton/index.tsx @@ -1,4 +1,5 @@ -import { useState, ReactNode } from 'react'; +import { ReactNode, useState } from 'react'; + import { Menu } from '@mantine/core'; import { useClickOutside } from '@mantine/hooks'; diff --git a/frontend/src/components/common/FloatingButton/styles.tsx b/frontend/src/components/common/FloatingButton/styles.tsx index 6329c3b9..2337f4e2 100644 --- a/frontend/src/components/common/FloatingButton/styles.tsx +++ b/frontend/src/components/common/FloatingButton/styles.tsx @@ -1,6 +1,7 @@ -import { IconPlus } from '@tabler/icons'; import styled from '@emotion/styled'; import { ActionIcon, ActionIconProps, createPolymorphicComponent } from '@mantine/core'; +import { IconPlus } from '@tabler/icons'; + import { transientOptions } from '@styles/utils'; // https://mantine.dev/styles/styled/#polymorphic-components diff --git a/frontend/src/components/common/FloatingUtilButton/FloatingUtilButton.stories.tsx b/frontend/src/components/common/FloatingUtilButton/FloatingUtilButton.stories.tsx index 12065285..96dc4683 100644 --- a/frontend/src/components/common/FloatingUtilButton/FloatingUtilButton.stories.tsx +++ b/frontend/src/components/common/FloatingUtilButton/FloatingUtilButton.stories.tsx @@ -1,11 +1,12 @@ import { ComponentMeta, ComponentStory } from '@storybook/react'; import { userEvent, within } from '@storybook/testing-library'; -import FloatingUtilButton from '.'; -import PageLayout from '@components/common/PageLayout'; import Header from '@components/common/Header'; -import NavigationTab from '@components/common/NavigationTab'; import DetailTitle from '@components/common/Header/DetailTitle'; +import NavigationTab from '@components/common/NavigationTab'; +import PageLayout from '@components/common/PageLayout'; + +import FloatingUtilButton from '.'; export default { title: 'Component/FloatingUtilButton', diff --git a/frontend/src/components/common/FloatingUtilButton/index.tsx b/frontend/src/components/common/FloatingUtilButton/index.tsx index b51e1c3a..04698564 100644 --- a/frontend/src/components/common/FloatingUtilButton/index.tsx +++ b/frontend/src/components/common/FloatingUtilButton/index.tsx @@ -1,6 +1,8 @@ +import Link from 'next/link'; + import { Menu, Text } from '@mantine/core'; import { IconArrowAutofitUp, IconPencil } from '@tabler/icons'; -import Link from 'next/link'; + import FloatingButton from '@components/common/FloatingButton'; /** diff --git a/frontend/src/components/common/GroupArticleCard/GroupArticleCard.stories.tsx b/frontend/src/components/common/GroupArticleCard/GroupArticleCard.stories.tsx index 26a9c843..a175eb8f 100644 --- a/frontend/src/components/common/GroupArticleCard/GroupArticleCard.stories.tsx +++ b/frontend/src/components/common/GroupArticleCard/GroupArticleCard.stories.tsx @@ -1,7 +1,9 @@ import { ComponentMeta, ComponentStory } from '@storybook/react'; -import GroupArticleCard from '.'; -import { dummyArticlePreview } from '@constants/dummy'; + import { ArticleStatus } from '@constants/article'; +import { dummyArticlePreview } from '@constants/dummy'; + +import GroupArticleCard from '.'; export default { title: 'Component/GroupArticleCard', diff --git a/frontend/src/components/common/GroupArticleCard/index.tsx b/frontend/src/components/common/GroupArticleCard/index.tsx index 7a928471..98d975e9 100644 --- a/frontend/src/components/common/GroupArticleCard/index.tsx +++ b/frontend/src/components/common/GroupArticleCard/index.tsx @@ -1,20 +1,21 @@ import { Image } from '@mantine/core'; -import { ArticlePreviewType } from '@typings/types'; + import ArticleTag from '@components/common/ArticleTag'; -import StatCounter from '@components/common/StatCounter'; -import { ArticleStatus, ArticleStatusKr } from '@constants/article'; import { CapacityText, CardWrapper, + ClosedText, DimmedBox, InfoWrapper, TagWrapper, TitleText, - ClosedText, } from '@components/common/GroupArticleCard/styles'; -import { getCommonBadgeColor, getStatusBadgeColor } from '@utils/colors'; +import StatCounter from '@components/common/StatCounter'; +import { ArticleStatus, ArticleStatusKr } from '@constants/article'; import { CategoryKr } from '@constants/category'; import { LocationKr } from '@constants/location'; +import { ArticlePreviewType } from '@typings/types'; +import { getCommonBadgeColor, getStatusBadgeColor } from '@utils/colors'; interface Props { article: ArticlePreviewType; diff --git a/frontend/src/components/common/Header/DetailTitle/DetailTitle.stories.tsx b/frontend/src/components/common/Header/DetailTitle/DetailTitle.stories.tsx index a29a06e2..b08bd783 100644 --- a/frontend/src/components/common/Header/DetailTitle/DetailTitle.stories.tsx +++ b/frontend/src/components/common/Header/DetailTitle/DetailTitle.stories.tsx @@ -1,6 +1,7 @@ -import DetailTitle from '.'; import { ComponentMeta, ComponentStory } from '@storybook/react'; +import DetailTitle from '.'; + export default { title: 'Component/Layout/Header/HeaderItems/DetailTitle', component: DetailTitle, diff --git a/frontend/src/components/common/Header/DetailTitle/index.tsx b/frontend/src/components/common/Header/DetailTitle/index.tsx index e8e6cdb1..989229d7 100644 --- a/frontend/src/components/common/Header/DetailTitle/index.tsx +++ b/frontend/src/components/common/Header/DetailTitle/index.tsx @@ -1,8 +1,9 @@ +import { useRouter } from 'next/router'; + +import { ActionIcon, Text, Title } from '@mantine/core'; import { IconChevronLeft } from '@tabler/icons'; -import { ActionIcon, Title, Text } from '@mantine/core'; -import { DetailTitleWrapper, DetailTitleTextWrapper } from './styles'; -import { useRouter } from 'next/router'; +import { DetailTitleTextWrapper, DetailTitleWrapper } from './styles'; interface Props { title: string; diff --git a/frontend/src/components/common/Header/Header.stories.tsx b/frontend/src/components/common/Header/Header.stories.tsx index 8bbab603..bc6690f3 100644 --- a/frontend/src/components/common/Header/Header.stories.tsx +++ b/frontend/src/components/common/Header/Header.stories.tsx @@ -1,13 +1,15 @@ -import { Menu, Text } from '@mantine/core'; import { ComponentMeta, ComponentStory } from '@storybook/react'; -import { within, userEvent } from '@storybook/testing-library'; +import { userEvent, within } from '@storybook/testing-library'; + +import { Menu, Text } from '@mantine/core'; -import Header from '.'; -import UserLoginItem from '@components/common/Header/UserLoginItem'; -import Logo from '@public/icons/logo-md.svg'; -import RootTitle from '@components/common/Header/RootTitle'; import DetailTitle from '@components/common/Header/DetailTitle'; +import RootTitle from '@components/common/Header/RootTitle'; +import UserLoginItem from '@components/common/Header/UserLoginItem'; import UtilButton from '@components/common/Header/UtilButton'; +import Logo from '@public/icons/logo-md.svg'; + +import Header from '.'; export default { title: 'Component/Layout/Header', diff --git a/frontend/src/components/common/Header/LoginButton/LoginButton.stories.tsx b/frontend/src/components/common/Header/LoginButton/LoginButton.stories.tsx index b882ec95..1fa0bb5f 100644 --- a/frontend/src/components/common/Header/LoginButton/LoginButton.stories.tsx +++ b/frontend/src/components/common/Header/LoginButton/LoginButton.stories.tsx @@ -1,6 +1,7 @@ -import LoginButton from '.'; import { ComponentMeta, ComponentStory } from '@storybook/react'; +import LoginButton from '.'; + export default { title: 'Component/Layout/Header/HeaderItems/LoginButton', component: LoginButton, diff --git a/frontend/src/components/common/Header/LoginButton/index.tsx b/frontend/src/components/common/Header/LoginButton/index.tsx index 61081abf..ffd241f6 100644 --- a/frontend/src/components/common/Header/LoginButton/index.tsx +++ b/frontend/src/components/common/Header/LoginButton/index.tsx @@ -1,4 +1,5 @@ import Link from 'next/link'; + import { Button } from '@mantine/core'; const LoginButton = () => { diff --git a/frontend/src/components/common/Header/RootTitle/RootTitle.stories.tsx b/frontend/src/components/common/Header/RootTitle/RootTitle.stories.tsx index 161fb736..7ebb017a 100644 --- a/frontend/src/components/common/Header/RootTitle/RootTitle.stories.tsx +++ b/frontend/src/components/common/Header/RootTitle/RootTitle.stories.tsx @@ -1,6 +1,7 @@ -import RootTitle from '.'; import { ComponentMeta, ComponentStory } from '@storybook/react'; +import RootTitle from '.'; + export default { title: 'Component/Layout/Header/HeaderItems/RootTitle', component: RootTitle, diff --git a/frontend/src/components/common/Header/RootTitle/index.tsx b/frontend/src/components/common/Header/RootTitle/index.tsx index 8e549c5f..862cd9a8 100644 --- a/frontend/src/components/common/Header/RootTitle/index.tsx +++ b/frontend/src/components/common/Header/RootTitle/index.tsx @@ -1,4 +1,5 @@ -import { Title, Text } from '@mantine/core'; +import { Text, Title } from '@mantine/core'; + import { RootTitleWrapper } from '@components/common/Header/RootTitle/styles'; interface Props { diff --git a/frontend/src/components/common/Header/UserLoginItem/index.tsx b/frontend/src/components/common/Header/UserLoginItem/index.tsx index 45390a0d..e6aeec3c 100644 --- a/frontend/src/components/common/Header/UserLoginItem/index.tsx +++ b/frontend/src/components/common/Header/UserLoginItem/index.tsx @@ -1,6 +1,7 @@ -import LoginButton from '@components/common/Header/LoginButton'; import { Avatar } from '@mantine/core'; +import LoginButton from '@components/common/Header/LoginButton'; + /** * ๋กœ๊ทธ์ธ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜์—ฌ * ์•„๋ฐ”ํƒ€๋ฅผ ๋ Œ๋”๋งํ•˜๊ฑฐ๋‚˜ ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์„ ๋ Œ๋”๋ง diff --git a/frontend/src/components/common/Header/UtilButton/UtilButton.stories.tsx b/frontend/src/components/common/Header/UtilButton/UtilButton.stories.tsx index fb63f0d3..8ce2befd 100644 --- a/frontend/src/components/common/Header/UtilButton/UtilButton.stories.tsx +++ b/frontend/src/components/common/Header/UtilButton/UtilButton.stories.tsx @@ -1,7 +1,9 @@ -import UtilButton from '.'; import { ComponentMeta, ComponentStory } from '@storybook/react'; + import { Menu, Text } from '@mantine/core'; +import UtilButton from '.'; + export default { title: 'Component/Layout/Header/HeaderItems/UtilButton', component: UtilButton, diff --git a/frontend/src/components/common/Header/UtilButton/index.tsx b/frontend/src/components/common/Header/UtilButton/index.tsx index f5796cf2..55309720 100644 --- a/frontend/src/components/common/Header/UtilButton/index.tsx +++ b/frontend/src/components/common/Header/UtilButton/index.tsx @@ -1,6 +1,7 @@ +import { ReactNode } from 'react'; + import { ActionIcon, Menu } from '@mantine/core'; import { IconDotsVertical } from '@tabler/icons'; -import { ReactNode } from 'react'; interface Props { /** diff --git a/frontend/src/components/common/Header/index.tsx b/frontend/src/components/common/Header/index.tsx index e2183cd7..1532b87f 100644 --- a/frontend/src/components/common/Header/index.tsx +++ b/frontend/src/components/common/Header/index.tsx @@ -1,4 +1,5 @@ import { ReactNode } from 'react'; + import { HeaderWrapper } from '@components/common/Header/styles'; interface Props { diff --git a/frontend/src/components/common/Joiner/Jointer.stories.tsx b/frontend/src/components/common/Joiner/Joiner.stories.tsx similarity index 99% rename from frontend/src/components/common/Joiner/Jointer.stories.tsx rename to frontend/src/components/common/Joiner/Joiner.stories.tsx index 1629beb5..27581d00 100644 --- a/frontend/src/components/common/Joiner/Jointer.stories.tsx +++ b/frontend/src/components/common/Joiner/Joiner.stories.tsx @@ -1,4 +1,5 @@ import { ComponentMeta, ComponentStory } from '@storybook/react'; + import Joiner from '.'; export default { diff --git a/frontend/src/components/common/Joiner/index.tsx b/frontend/src/components/common/Joiner/index.tsx index ec45245d..d3c71ddd 100644 --- a/frontend/src/components/common/Joiner/index.tsx +++ b/frontend/src/components/common/Joiner/index.tsx @@ -1,4 +1,5 @@ import { Fragment, ReactNode } from 'react'; + import styled from '@emotion/styled'; interface JoinerProps { diff --git a/frontend/src/components/common/NavigationTab/NavigationTab.stories.tsx b/frontend/src/components/common/NavigationTab/NavigationTab.stories.tsx index 88669677..db5cd600 100644 --- a/frontend/src/components/common/NavigationTab/NavigationTab.stories.tsx +++ b/frontend/src/components/common/NavigationTab/NavigationTab.stories.tsx @@ -1,4 +1,5 @@ import { ComponentMeta, ComponentStory } from '@storybook/react'; + import NavigationTab from '.'; export default { diff --git a/frontend/src/components/common/NavigationTab/index.tsx b/frontend/src/components/common/NavigationTab/index.tsx index b86d5fff..54e391e6 100644 --- a/frontend/src/components/common/NavigationTab/index.tsx +++ b/frontend/src/components/common/NavigationTab/index.tsx @@ -1,9 +1,10 @@ -import styled from '@emotion/styled'; -import { IconBell, IconHome2, IconUser } from '@tabler/icons'; -import { useTheme } from '@emotion/react'; import Link from 'next/link'; import { useRouter } from 'next/router'; +import { useTheme } from '@emotion/react'; +import styled from '@emotion/styled'; +import { IconBell, IconHome2, IconUser } from '@tabler/icons'; + const NavigationTab = () => { const { colors: { indigo, gray }, diff --git a/frontend/src/components/common/PageLayout/PageLayout.stories.tsx b/frontend/src/components/common/PageLayout/PageLayout.stories.tsx index 4501844c..5c16e5ad 100644 --- a/frontend/src/components/common/PageLayout/PageLayout.stories.tsx +++ b/frontend/src/components/common/PageLayout/PageLayout.stories.tsx @@ -1,13 +1,15 @@ import { ComponentMeta, ComponentStory } from '@storybook/react'; + import { Menu, Text } from '@mantine/core'; -import PageLayout from '.'; import Header from '@components/common/Header'; -import NavigationTab from '@components/common/NavigationTab'; +import DetailTitle from '@components/common/Header/DetailTitle'; import RootTitle from '@components/common/Header/RootTitle'; import UserLoginItem from '@components/common/Header/UserLoginItem'; -import DetailTitle from '@components/common/Header/DetailTitle'; import UtilButton from '@components/common/Header/UtilButton'; +import NavigationTab from '@components/common/NavigationTab'; + +import PageLayout from '.'; export default { title: 'Component/Layout/PageLayout', diff --git a/frontend/src/components/common/PageLayout/index.tsx b/frontend/src/components/common/PageLayout/index.tsx index d984d04e..8868a124 100644 --- a/frontend/src/components/common/PageLayout/index.tsx +++ b/frontend/src/components/common/PageLayout/index.tsx @@ -1,5 +1,7 @@ -import { ReactNode, PropsWithChildren } from 'react'; +import { PropsWithChildren, ReactNode } from 'react'; + import styled from '@emotion/styled'; + import FloatingUtilButton from '@components/common/FloatingUtilButton'; interface Props extends PropsWithChildren { diff --git a/frontend/src/components/common/RouterTransition.tsx b/frontend/src/components/common/RouterTransition.tsx index 76352b37..0940bee3 100644 --- a/frontend/src/components/common/RouterTransition.tsx +++ b/frontend/src/components/common/RouterTransition.tsx @@ -1,9 +1,10 @@ -import { useEffect } from 'react'; import { useRouter } from 'next/router'; +import { useEffect } from 'react'; + import { - startNavigationProgress, - completeNavigationProgress, NavigationProgress, + completeNavigationProgress, + startNavigationProgress, } from '@mantine/nprogress'; const RouterTransition = () => { diff --git a/frontend/src/components/common/RouterTransition/index.tsx b/frontend/src/components/common/RouterTransition/index.tsx index 76352b37..0940bee3 100644 --- a/frontend/src/components/common/RouterTransition/index.tsx +++ b/frontend/src/components/common/RouterTransition/index.tsx @@ -1,9 +1,10 @@ -import { useEffect } from 'react'; import { useRouter } from 'next/router'; +import { useEffect } from 'react'; + import { - startNavigationProgress, - completeNavigationProgress, NavigationProgress, + completeNavigationProgress, + startNavigationProgress, } from '@mantine/nprogress'; const RouterTransition = () => { diff --git a/frontend/src/components/common/StatCounter/StatCounter.stories.tsx b/frontend/src/components/common/StatCounter/StatCounter.stories.tsx index 1bd2da74..a81c2d1b 100644 --- a/frontend/src/components/common/StatCounter/StatCounter.stories.tsx +++ b/frontend/src/components/common/StatCounter/StatCounter.stories.tsx @@ -1,4 +1,5 @@ import { ComponentMeta, ComponentStory } from '@storybook/react'; + import StatCounter from '.'; export default { diff --git a/frontend/src/components/common/StatCounter/index.tsx b/frontend/src/components/common/StatCounter/index.tsx index 3599a651..8dbe31b0 100644 --- a/frontend/src/components/common/StatCounter/index.tsx +++ b/frontend/src/components/common/StatCounter/index.tsx @@ -1,7 +1,7 @@ -import styled from '@emotion/styled'; import { useTheme } from '@emotion/react'; -import { IconHeart, IconBookmark, IconMessageCircle2 } from '@tabler/icons'; +import styled from '@emotion/styled'; import { Text } from '@mantine/core'; +import { IconBookmark, IconHeart, IconMessageCircle2 } from '@tabler/icons'; interface Props { /** diff --git a/frontend/src/components/common/TextInput/TextInput.stories.tsx b/frontend/src/components/common/TextInput/TextInput.stories.tsx index 60fb0912..a0aa7ed9 100644 --- a/frontend/src/components/common/TextInput/TextInput.stories.tsx +++ b/frontend/src/components/common/TextInput/TextInput.stories.tsx @@ -1,6 +1,7 @@ -import TextInput from '.'; import { ComponentMeta, ComponentStory } from '@storybook/react'; +import TextInput from '.'; + export default { title: 'Component/TextInput', component: TextInput, diff --git a/frontend/src/components/login/GitLoginButton/GitLoginButton.stories.tsx b/frontend/src/components/login/GitLoginButton/GitLoginButton.stories.tsx index a6fb3b54..55e22674 100644 --- a/frontend/src/components/login/GitLoginButton/GitLoginButton.stories.tsx +++ b/frontend/src/components/login/GitLoginButton/GitLoginButton.stories.tsx @@ -1,4 +1,5 @@ import { ComponentMeta, ComponentStory } from '@storybook/react'; + import GitLoginButton from '.'; export default { diff --git a/frontend/src/components/login/GitLoginButton/index.tsx b/frontend/src/components/login/GitLoginButton/index.tsx index 4f004617..031a73e2 100644 --- a/frontend/src/components/login/GitLoginButton/index.tsx +++ b/frontend/src/components/login/GitLoginButton/index.tsx @@ -1,6 +1,6 @@ -import { IconBrandGithub } from '@tabler/icons'; -import styled from '@emotion/styled'; import { useTheme } from '@emotion/react'; +import styled from '@emotion/styled'; +import { IconBrandGithub } from '@tabler/icons'; const GitLoginButton = () => { const { white } = useTheme(); diff --git a/frontend/src/constants/dummy.ts b/frontend/src/constants/dummy.ts index 33835f1d..2c3e5d19 100644 --- a/frontend/src/constants/dummy.ts +++ b/frontend/src/constants/dummy.ts @@ -1,7 +1,7 @@ -import { ArticlePreviewType, ArticleType, UserType } from '@typings/types'; -import { Location } from '@constants/location'; import { ArticleStatus } from '@constants/article'; import { Category } from '@constants/category'; +import { Location } from '@constants/location'; +import { ArticlePreviewType, ArticleType, UserType } from '@typings/types'; // TODO ๊ฐœ๋ฐœ์šฉ dummy data, ์ถ”ํ›„ ์‚ญ์ œ const dummyArticlePreview: ArticlePreviewType = { diff --git a/frontend/src/constants/location.ts b/frontend/src/constants/location.ts index ee865324..0d304820 100644 --- a/frontend/src/constants/location.ts +++ b/frontend/src/constants/location.ts @@ -1,4 +1,5 @@ enum Location { + ONLINE = 'ONLINE', SEOUL = 'SEOUL', INCHEON = 'INCHEON', BUSAN = 'BUSAN', @@ -19,6 +20,7 @@ enum Location { } enum LocationKr { + ONLINE = '์˜จ๋ผ์ธ', SEOUL = '์„œ์šธ', INCHEON = '์ธ์ฒœ', BUSAN = '๋ถ€์‚ฐ', diff --git a/frontend/src/hooks/queries/useFetchGroupArticles.ts b/frontend/src/hooks/queries/useFetchGroupArticles.ts index c32ef5b5..4b4e5ce3 100644 --- a/frontend/src/hooks/queries/useFetchGroupArticles.ts +++ b/frontend/src/hooks/queries/useFetchGroupArticles.ts @@ -1,9 +1,10 @@ import { useInfiniteQuery } from '@tanstack/react-query'; import { AxiosResponse } from 'axios'; -import { ArticleType } from '@typings/types'; + import getTestGroupArticles from '@apis/test/getTestGroupArticles'; import { Category } from '@constants/category'; import { Location } from '@constants/location'; +import { ArticleType } from '@typings/types'; interface ArticleResponseType { articles: ArticleType[]; diff --git a/frontend/src/hooks/queries/useFetchTestData.ts b/frontend/src/hooks/queries/useFetchTestData.ts index f73ac138..cdc2a857 100644 --- a/frontend/src/hooks/queries/useFetchTestData.ts +++ b/frontend/src/hooks/queries/useFetchTestData.ts @@ -1,6 +1,7 @@ import { useInfiniteQuery } from '@tanstack/react-query'; -import getTestData from '@apis/test/getTestData'; import { AxiosResponse } from 'axios'; + +import getTestData from '@apis/test/getTestData'; import { TestResponseType } from '@typings/types'; const useFetchTestData = () => { diff --git a/frontend/src/mocks/browser.ts b/frontend/src/mocks/browser.ts index 750e031c..9c10cad9 100644 --- a/frontend/src/mocks/browser.ts +++ b/frontend/src/mocks/browser.ts @@ -1,4 +1,5 @@ import { setupWorker } from 'msw'; + import { handlers } from './handlers'; export const worker = setupWorker(...handlers); diff --git a/frontend/src/mocks/handlers.ts b/frontend/src/mocks/handlers.ts index d4c4b18b..dd4b222e 100644 --- a/frontend/src/mocks/handlers.ts +++ b/frontend/src/mocks/handlers.ts @@ -1,7 +1,9 @@ import { rest } from 'msw'; -import { getTest } from './resolvers/test'; + import { getGroupArticles } from '@mocks/resolvers/getGroupArticles'; +import { getTest } from './resolvers/test'; + export const handlers = [ rest.get('http://testServer/test', getTest), rest.get('http://testServer/group-articles', getGroupArticles), diff --git a/frontend/src/mocks/server.ts b/frontend/src/mocks/server.ts index e52fee0a..5ac9204f 100644 --- a/frontend/src/mocks/server.ts +++ b/frontend/src/mocks/server.ts @@ -1,4 +1,5 @@ import { setupServer } from 'msw/node'; + import { handlers } from './handlers'; export const server = setupServer(...handlers); diff --git a/frontend/src/pages/_app.tsx b/frontend/src/pages/_app.tsx index 2f22631e..12084e49 100644 --- a/frontend/src/pages/_app.tsx +++ b/frontend/src/pages/_app.tsx @@ -1,11 +1,13 @@ -import Head from 'next/head'; import { AppProps } from 'next/app'; -import { QueryClientProvider, QueryClient } from '@tanstack/react-query'; +import Head from 'next/head'; +import { useEffect, useState } from 'react'; + +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; + import RouterTransition from '@components/common/RouterTransition'; -import CommonStyles from '@styles/CommonStyles'; import initMockApi from '@mocks/.'; -import { useEffect, useState } from 'react'; +import CommonStyles from '@styles/CommonStyles'; const queryClient = new QueryClient(); diff --git a/frontend/src/pages/_document.tsx b/frontend/src/pages/_document.tsx index 6c633fbf..a33511ad 100644 --- a/frontend/src/pages/_document.tsx +++ b/frontend/src/pages/_document.tsx @@ -1,6 +1,7 @@ -import { createGetInitialProps } from '@mantine/next'; import Document, { Head, Html, Main, NextScript } from 'next/document'; +import { createGetInitialProps } from '@mantine/next'; + const getInitialProps = createGetInitialProps(); export default class _Document extends Document { diff --git a/frontend/src/pages/article/[id].tsx b/frontend/src/pages/article/[id].tsx index 809682d2..319901eb 100644 --- a/frontend/src/pages/article/[id].tsx +++ b/frontend/src/pages/article/[id].tsx @@ -1,20 +1,22 @@ import { useState } from 'react'; + import { useTheme } from '@emotion/react'; import styled from '@emotion/styled'; import { Avatar, Progress, TypographyStylesProvider } from '@mantine/core'; import { IconList } from '@tabler/icons'; -import { dummyArticle, dummyParticipants } from '@constants/dummy'; + +import ParticipantsModal from '@components/article/ParticipantsModal'; import ArticleTag from '@components/common/ArticleTag'; -import { getCommonBadgeColor, getStatusBadgeColor } from '@utils/colors'; +import Header from '@components/common/Header'; +import DetailTitle from '@components/common/Header/DetailTitle'; +import PageLayout from '@components/common/PageLayout'; +import StatCounter from '@components/common/StatCounter'; import { ArticleStatusKr } from '@constants/article'; import { CategoryKr } from '@constants/category'; +import { dummyArticle, dummyParticipants } from '@constants/dummy'; import { LocationKr } from '@constants/location'; -import PageLayout from '@components/common/PageLayout'; -import StatCounter from '@components/common/StatCounter'; -import Header from '@components/common/Header'; -import DetailTitle from '@components/common/Header/DetailTitle'; import { PAGE_TITLE } from '@constants/pageTitle'; -import ParticipantsModal from '@components/article/ParticipantsModal'; +import { getCommonBadgeColor, getStatusBadgeColor } from '@utils/colors'; const ArticleDetail = () => { const { diff --git a/frontend/src/pages/article/write/index.tsx b/frontend/src/pages/article/write/index.tsx index 1f9ba7f1..c6ec6845 100644 --- a/frontend/src/pages/article/write/index.tsx +++ b/frontend/src/pages/article/write/index.tsx @@ -1,18 +1,19 @@ -import { useState } from 'react'; import Head from 'next/head'; +import { useState } from 'react'; + import styled from '@emotion/styled'; -import { Slider, Text, FileInput, ActionIcon } from '@mantine/core'; -import { IconCheck, IconUser, IconUpload } from '@tabler/icons'; +import { ActionIcon, FileInput, Slider, Text } from '@mantine/core'; +import { IconCheck, IconUpload, IconUser } from '@tabler/icons'; -import PageLayout from '@components/common/PageLayout'; +import ArticleEditor from '@components/article/ArticleEditor'; +import ImageThumbnail from '@components/article/ImageThumbnail'; +import DropDown from '@components/common/DropDown'; import Header from '@components/common/Header'; -import TextInput from '@components/common/TextInput'; import DetailTitle from '@components/common/Header/DetailTitle'; -import DropDown from '@components/common/DropDown'; +import PageLayout from '@components/common/PageLayout'; +import TextInput from '@components/common/TextInput'; import { Category, CategoryKr } from '@constants/category'; import { Location, LocationKr } from '@constants/location'; -import ArticleEditor from '@components/article/ArticleEditor'; -import ImageThumbnail from '@components/article/ImageThumbnail'; /** * Todo diff --git a/frontend/src/pages/index.tsx b/frontend/src/pages/index.tsx index 3584d187..8ee519bc 100644 --- a/frontend/src/pages/index.tsx +++ b/frontend/src/pages/index.tsx @@ -1,21 +1,24 @@ import Link from 'next/link'; import { useMemo, useState } from 'react'; -import { Checkbox, Select } from '@mantine/core'; -import styled from '@emotion/styled'; -import { useTheme } from '@emotion/react'; + import { useQueryClient } from '@tanstack/react-query'; + +import { useTheme } from '@emotion/react'; +import styled from '@emotion/styled'; +import { Checkbox, Select } from '@mantine/core'; import { IconRefresh } from '@tabler/icons'; -import PageLayout from '@components/common/PageLayout'; + +import EmptyMessage from '@components/common/EmptyMessage'; +import GroupArticleCard from '@components/common/GroupArticleCard'; import Header from '@components/common/Header'; -import NavigationTab from '@components/common/NavigationTab'; import RootTitle from '@components/common/Header/RootTitle'; +import NavigationTab from '@components/common/NavigationTab'; +import PageLayout from '@components/common/PageLayout'; import { Category, CategoryKr } from '@constants/category'; import { Location, LocationKr } from '@constants/location'; -import GroupArticleCard from '@components/common/GroupArticleCard'; -import useIntersect from '@hooks/useIntersect'; -import useFetchGroupArticles from '@hooks/queries/useFetchGroupArticles'; import { PAGE_TITLE } from '@constants/pageTitle'; -import EmptyMessage from '@components/common/EmptyMessage'; +import useFetchGroupArticles from '@hooks/queries/useFetchGroupArticles'; +import useIntersect from '@hooks/useIntersect'; const Main = () => { const { @@ -128,11 +131,12 @@ const StyledSelect = styled(Select)` & .mantine-Select-item { padding: 1.2rem 1.6rem; &[data-selected] { - &, &:hover { + &, + &:hover { background-color: ${({ theme }) => theme.colors.indigo[0]}; color: ${({ theme }) => theme.colors.indigo[7]}; - }, - }, + } + } } `; diff --git a/frontend/src/pages/login.tsx b/frontend/src/pages/login.tsx index 4990e1d6..b702b540 100644 --- a/frontend/src/pages/login.tsx +++ b/frontend/src/pages/login.tsx @@ -1,9 +1,10 @@ import styled from '@emotion/styled'; -import LogoIcon from '@public/icons/logo-lg.svg'; -import PageLayout from '@components/common/PageLayout'; -import GitLoginButton from '@components/login/GitLoginButton'; + import Header from '@components/common/Header'; import DetailTitle from '@components/common/Header/DetailTitle'; +import PageLayout from '@components/common/PageLayout'; +import GitLoginButton from '@components/login/GitLoginButton'; +import LogoIcon from '@public/icons/logo-lg.svg'; const Login = () => { return ( diff --git a/frontend/src/pages/my.tsx b/frontend/src/pages/my.tsx index 50f187e6..724aeb3a 100644 --- a/frontend/src/pages/my.tsx +++ b/frontend/src/pages/my.tsx @@ -1,5 +1,5 @@ -import PageLayout from '@components/common/PageLayout'; import NavigationTab from '@components/common/NavigationTab'; +import PageLayout from '@components/common/PageLayout'; const My = () => { return }>my page; diff --git a/frontend/src/pages/notification.tsx b/frontend/src/pages/notification.tsx index 3f540d04..7be1bfb5 100644 --- a/frontend/src/pages/notification.tsx +++ b/frontend/src/pages/notification.tsx @@ -1,5 +1,5 @@ -import PageLayout from '@components/common/PageLayout'; import NavigationTab from '@components/common/NavigationTab'; +import PageLayout from '@components/common/PageLayout'; const Notification = () => { return }>notification page; diff --git a/frontend/src/styles/CommonStyles.tsx b/frontend/src/styles/CommonStyles.tsx index ea6b09a8..f625d2b5 100644 --- a/frontend/src/styles/CommonStyles.tsx +++ b/frontend/src/styles/CommonStyles.tsx @@ -1,8 +1,10 @@ import { ReactNode } from 'react'; + import { MantineProvider } from '@mantine/core'; -import theme from '@styles/theme'; + import CustomFonts from '@styles/CustomFont'; import GlobalStyles from '@styles/GlobalStyles'; +import theme from '@styles/theme'; interface Props { children: ReactNode; diff --git a/frontend/src/typings/types.ts b/frontend/src/typings/types.ts index 711a5413..28a41e6a 100644 --- a/frontend/src/typings/types.ts +++ b/frontend/src/typings/types.ts @@ -1,6 +1,6 @@ -import { Location } from '@constants/location'; import { ArticleStatus } from '@constants/article'; import { Category } from '@constants/category'; +import { Location } from '@constants/location'; interface ArticlePreviewType { id: number; diff --git a/frontend/src/utils/colors.ts b/frontend/src/utils/colors.ts index 332df2e3..c352287a 100644 --- a/frontend/src/utils/colors.ts +++ b/frontend/src/utils/colors.ts @@ -1,5 +1,5 @@ -import { BADGE_COLORS, STATUS_COLOR } from '@constants/color'; import { ArticleStatus } from '@constants/article'; +import { BADGE_COLORS, STATUS_COLOR } from '@constants/color'; const getCommonBadgeColor = (id: number) => { const colorCount = BADGE_COLORS.length; diff --git a/frontend/src/utils/dateTime.ts b/frontend/src/utils/dateTime.ts index 81e64930..29c262ce 100644 --- a/frontend/src/utils/dateTime.ts +++ b/frontend/src/utils/dateTime.ts @@ -1,4 +1,4 @@ -import { register, format } from 'timeago.js'; +import { format, register } from 'timeago.js'; import ko from 'timeago.js/lib/lang/ko'; register('ko', ko); From e7ae56a6fd9325df8ca0be34b69b8aaa9a25f86c Mon Sep 17 00:00:00 2001 From: Kim Myeongil <67570061+username1103@users.noreply.github.com> Date: Sun, 27 Nov 2022 22:20:07 +0900 Subject: [PATCH 035/142] =?UTF-8?q?[FIX]=20=EB=B0=B1=EC=97=94=EB=93=9C=20C?= =?UTF-8?q?D=20=EC=88=98=EC=A0=95=20(#91)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :goal_net: chore: ๋ฐฑ์—”๋“œ cd ์•ˆ์“ฐ๋Š” ์„ค์ • ์ œ๊ฑฐ * :goal_net: chore: ๋ฐฑ์—”๋“œ cd ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ธํŒ… * :goal_net: chore: ๊ฐœ๋ฐœ์šฉ ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ • - docker compose down env file ์„ค์ • - ์ปจํ…Œ์ด๋„ˆ ์ „์ฒด ์‚ญ์ œ ์Šคํฌ๋ฆฝํŠธ ์ œ๊ฑฐ * :goal_net: chore: env file ์„ค์ • ๋ฌธ๋ฒ• ์ˆ˜์ • * :goal_net: chore: docker compose down ์ˆ˜์ • * :goal_net: chore: nginx ssl ์˜ต์…˜ ๋„๊ธฐ * :goal_net: chore: ๋ฐฑ์—”๋“œ cd script ์ˆ˜์ • --- .github/workflows/backend-dev-cd.yml | 11 ++++--- backend/.dockerignore | 1 - backend/dev/nginx/nginx.conf | 45 +++++++++++++++------------- backend/scripts/dev-deploy.sh | 19 +++++------- 4 files changed, 37 insertions(+), 39 deletions(-) diff --git a/.github/workflows/backend-dev-cd.yml b/.github/workflows/backend-dev-cd.yml index 34a5ccca..76b7145f 100644 --- a/.github/workflows/backend-dev-cd.yml +++ b/.github/workflows/backend-dev-cd.yml @@ -23,8 +23,8 @@ jobs: - name: backend environment setting run: | - touch .env - echo -e ${{ secrets.BACKEND_DEVELOPMENT_ENVIRONMENT }} > .env + touch .env.development + echo -e ${{ secrets.BACKEND_DEVELOPMENT_ENVIRONMENT }} > .env.development - name: Set up QEMU uses: docker/setup-qemu-action@v2 @@ -54,7 +54,7 @@ jobs: run: echo ${{ steps.docker_build.outputs.digest }} CD: - needs: [Register-Docker-Image] + needs: [ Register-Docker-Image ] runs-on: ubuntu-latest defaults: run: @@ -69,7 +69,6 @@ jobs: username: ${{secrets.BACKEND_DEV_REMOTE_SSH_ID}} password: ${{secrets.BACKEND_DEV_REMOTE_ADMIN_KEY}} port: ${{secrets.BACKEND_DEV_REMOTE_SSH_PORT}} - envs: DOCKER_SERVER_IMAGE script: | rm -rf web13-moyeomoyeo @@ -78,13 +77,13 @@ jobs: cd web13-moyeomoyeo git checkout -t origin/develop - + sudo chmod +x ./backend/scripts/dev-deploy.sh ./backend/scripts/dev-deploy.sh ${{ secrets.NCP_ACCESS_KEY }} ${{ secrets.NCP_SECRET_KEY }} ${{ secrets.NCP_DOCKER_REGISTRY }} ${{ secrets.BACKEND_DEVELOPMENT_ENVIRONMENT }} slack-notifications: - needs: [Register-Docker-Image, CD] + needs: [ Register-Docker-Image, CD ] if: ${{ always() }} uses: ./.github/workflows/slack-notification.yml with: diff --git a/backend/.dockerignore b/backend/.dockerignore index cbd3fdd9..0d649640 100644 --- a/backend/.dockerignore +++ b/backend/.dockerignore @@ -1,6 +1,5 @@ **/.classpath **/.dockerignore -**/.env **/.git **/.gitignore **/.project diff --git a/backend/dev/nginx/nginx.conf b/backend/dev/nginx/nginx.conf index f5dd449c..47863e37 100644 --- a/backend/dev/nginx/nginx.conf +++ b/backend/dev/nginx/nginx.conf @@ -1,6 +1,6 @@ upstream backend-server { - server 101.101.219.219:3000; + server moyeo-server:3000; } server { @@ -9,29 +9,32 @@ server { server_tokens off; # certbot์ด ๋ฐœ๊ธ‰ํ•œ challenge ํŒŒ์ผ์„ nginx๊ฐ€ ์„œ๋น™ - location /.well-known/acme-challenge/ { - allow all; - root /var/www/certbot; - } +# location /.well-known/acme-challenge/ { +# allow all; +# root /var/www/certbot; +# } # ๋ชจ๋“  http(80ํฌํŠธ) ์š”์ฒญ์„ https๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŒ… +# location / { +# return 301 https://$host$request_uri; +# } location / { - return 301 https://$host$request_uri; + proxy_pass http://backend-server; } } -server { - listen 443 ssl; - server_name api.moyeomoyeo.com; - server_tokens off; - - ssl_certificate /etc/letsencrypt/live/api.moyeomoyeo.com/fullchain.pem; - ssl_certificate_key /etc/letsencrypt/live/api.moyeomoyeo.com/privkey.pem; - include /etc/letsencrypt/options-ssl-nginx.conf; - ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; - - location / { - proxy_pass http://backend-server; - proxy_http_version 1.1; - } -} \ No newline at end of file +# server { +# listen 443 ssl; +# server_name api.moyeomoyeo.com; +# server_tokens off; +# +# ssl_certificate /etc/letsencrypt/live/api.moyeomoyeo.com/fullchain.pem; +# ssl_certificate_key /etc/letsencrypt/live/api.moyeomoyeo.com/privkey.pem; +# include /etc/letsencrypt/options-ssl-nginx.conf; +# ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; +# +# location / { +# proxy_pass http://backend-server; +# proxy_http_version 1.1; +# } +# } \ No newline at end of file diff --git a/backend/scripts/dev-deploy.sh b/backend/scripts/dev-deploy.sh index df2ec567..30d80795 100644 --- a/backend/scripts/dev-deploy.sh +++ b/backend/scripts/dev-deploy.sh @@ -4,19 +4,16 @@ echo $2 | docker login -u $1 $3 --password-stdin echo "docker logined" -cd backend +cd backend || exit 1 -touch .env.development +touch .env -echo -e $4 > .env.development +echo -e $4 > .env -# docker down -docker compose down - -# ๋„์ปค ์ปจํ…Œ์ด๋„ˆ ์ „์ฒด ์‚ญ์ œ -docker rm `docker ps -a -q` +echo "create .env" -# ๋„์ปค ์ด๋ฏธ์ง€ ์ „์ฒด ์‚ญ์ œ -docker rmi `docker images -q` +# docker down +docker compose down --rmi --remove-orphans -docker compose --env-file .env.development up -d --build \ No newline at end of file +# docker up +docker compose up -d --build \ No newline at end of file From 7e9c25d9fa787a072dd82b41aec046db6f1e11da Mon Sep 17 00:00:00 2001 From: Kim Myeongil <67570061+username1103@users.noreply.github.com> Date: Sun, 27 Nov 2022 23:55:55 +0900 Subject: [PATCH 036/142] =?UTF-8?q?[Feature]=20TypeORM=20=EC=97=94?= =?UTF-8?q?=ED=8B=B0=ED=8B=B0=20=EC=84=A4=EA=B3=84=20(#92)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :sparkles: feature: Notification, UserNotification ์—”ํ‹ฐํ‹ฐ ์ƒ์„ฑ - UserNotification์— User, Notification๊ณผ ๋‹ค๋Œ€์ผ ์—ฐ๊ด€๊ด€๊ณ„ ์„ค์ • - ํ•ด๋‹น ์—ฐ๊ด€๊ด€๊ณ„ lazy๋กœ๋”ฉ ์„ค์ • * :sparkles: feature: NotificationSetting์—”ํ‹ฐํ‹ฐ ์ถ”๊ฐ€ - NotificationSetting์— User์™€ ๋‹ค๋Œ€์ผ ์—ฐ๊ด€๊ด€๊ณ„ ์„ค์ • * :sparkles: feature: group category ์ถ”๊ฐ€ * :sparkles: feature: article, grouparticle, group ์—”ํ‹ฐํ‹ฐ ์ถ”๊ฐ€ * :sparkles: feature: group application ์—”ํ‹ฐํ‹ฐ ์ถ”๊ฐ€ * :sparkles: feature: comment ์—”ํ‹ฐํ‹ฐ ์ถ”๊ฐ€ * :sparkles: feature: scrap ์—”ํ‹ฐํ‹ฐ ์ถ”๊ฐ€ * :recycle: refactor: entity๋ฅผ ๊ฐ ๋„๋ฉ”์ธ๋„ค entity ํด๋”๋กœ ์ด๋™ --- backend/src/app/auth/auth.service.ts | 2 +- .../src/app/comment/entity/comment.entity.ts | 43 ++++++++++++++++ .../entity/group-application.entity.ts | 50 +++++++++++++++++++ .../group-article/entity/article.entity.ts | 36 +++++++++++++ .../entity/group-article.entity.ts | 9 ++++ .../entity/group-category.entity.ts | 25 ++++++++++ .../app/group-article/entity/group.entity.ts | 47 +++++++++++++++++ .../entity/notification-setting.entity.ts | 35 +++++++++++++ .../entity/notification.entity.ts | 21 ++++++++ .../entity/user-notification.entity.ts | 40 +++++++++++++++ backend/src/app/scrap/entity/scrap.entity.ts | 39 +++++++++++++++ backend/src/app/user/__test__/user.fixture.ts | 2 +- .../src/app/user/{ => entity}/user.entity.ts | 3 ++ backend/src/app/user/user.repository.ts | 2 +- backend/src/common/guard/jwt-auth.guard.ts | 2 +- .../module/jwt-token/jwt-token.service.ts | 2 +- 16 files changed, 353 insertions(+), 5 deletions(-) create mode 100644 backend/src/app/comment/entity/comment.entity.ts create mode 100644 backend/src/app/group-application/entity/group-application.entity.ts create mode 100644 backend/src/app/group-article/entity/article.entity.ts create mode 100644 backend/src/app/group-article/entity/group-article.entity.ts create mode 100644 backend/src/app/group-article/entity/group-category.entity.ts create mode 100644 backend/src/app/group-article/entity/group.entity.ts create mode 100644 backend/src/app/notification/entity/notification-setting.entity.ts create mode 100644 backend/src/app/notification/entity/notification.entity.ts create mode 100644 backend/src/app/notification/entity/user-notification.entity.ts create mode 100644 backend/src/app/scrap/entity/scrap.entity.ts rename backend/src/app/user/{ => entity}/user.entity.ts (95%) diff --git a/backend/src/app/auth/auth.service.ts b/backend/src/app/auth/auth.service.ts index 062d2b60..cdbd1d4c 100644 --- a/backend/src/app/auth/auth.service.ts +++ b/backend/src/app/auth/auth.service.ts @@ -1,6 +1,6 @@ import { Injectable } from '@nestjs/common'; import { UserRepository } from '@app/user/user.repository'; -import { User } from '@app/user/user.entity'; +import { User } from '@app/user/entity/user.entity'; @Injectable() export class AuthService { diff --git a/backend/src/app/comment/entity/comment.entity.ts b/backend/src/app/comment/entity/comment.entity.ts new file mode 100644 index 00000000..8b223474 --- /dev/null +++ b/backend/src/app/comment/entity/comment.entity.ts @@ -0,0 +1,43 @@ +import { + Column, + CreateDateColumn, + Entity, + JoinColumn, + ManyToOne, + PrimaryGeneratedColumn, + UpdateDateColumn, +} from 'typeorm'; +import { User } from '@app/user/entity/user.entity'; +import { Article } from '@app/group-article/entity/article.entity'; + +@Entity() +export class Comment { + @PrimaryGeneratedColumn({ unsigned: true }) + id: number; + + @Column({ unsigned: true }) + userId: number; + + @ManyToOne(() => User, { lazy: true }) + @JoinColumn({ referencedColumnName: 'id', name: 'user_id' }) + user: Promise; + + @Column({ unsigned: true }) + articleId: number; + + @ManyToOne(() => Article, { lazy: true }) + @JoinColumn({ referencedColumnName: 'id', name: 'article_id' }) + article: Promise
    ; + + @Column({ type: 'varchar', length: 10000 }) + contents: string; + + @CreateDateColumn({ type: 'timestamp' }) + createdAt: Date; + + @UpdateDateColumn({ type: 'timestamp' }) + updatedAt: Date; + + @Column({ type: 'timestamp' }) + deletedAt: Date | null; +} diff --git a/backend/src/app/group-application/entity/group-application.entity.ts b/backend/src/app/group-application/entity/group-application.entity.ts new file mode 100644 index 00000000..7c753719 --- /dev/null +++ b/backend/src/app/group-application/entity/group-application.entity.ts @@ -0,0 +1,50 @@ +import { + Column, + CreateDateColumn, + Entity, + JoinColumn, + ManyToOne, + PrimaryGeneratedColumn, + Unique, + UpdateDateColumn, +} from 'typeorm'; +import { Group } from '@app/group-article/entity/group.entity'; +import { User } from '@app/user/entity/user.entity'; + +@Entity() +@Unique('UNIQUE_USER_ID_GROUP_ID_STATUS', ['userId', 'groupId', 'status']) +export class GroupApplication { + @PrimaryGeneratedColumn({ unsigned: true }) + id: number; + + @Column({ unsigned: true }) + userId: number; + + @ManyToOne(() => User, { lazy: true, createForeignKeyConstraints: false }) + @JoinColumn({ referencedColumnName: 'id', name: 'user_id' }) + user: Promise; + + @Column({ unsigned: true }) + groupId: number; + + @ManyToOne(() => Group, { lazy: true }) + @JoinColumn({ referencedColumnName: 'id', name: 'group_id' }) + group: Promise; + + @Column({ + type: 'tinyint', + precision: 1, + nullable: true, + comment: '์‚ญ์ œ๋˜์—ˆ์œผ๋ฉด NULL ์•„๋‹ˆ๋ฉด 1', + }) + status: number | null; + + @CreateDateColumn({ type: 'timestamp' }) + createdAt: Date; + + @UpdateDateColumn({ type: 'timestamp' }) + updatedAt: Date; + + @Column({ type: 'timestamp', nullable: true }) + deletedAt: Date | null; +} diff --git a/backend/src/app/group-article/entity/article.entity.ts b/backend/src/app/group-article/entity/article.entity.ts new file mode 100644 index 00000000..7339c246 --- /dev/null +++ b/backend/src/app/group-article/entity/article.entity.ts @@ -0,0 +1,36 @@ +import { + Column, + CreateDateColumn, + Entity, + PrimaryGeneratedColumn, + TableInheritance, + UpdateDateColumn, +} from 'typeorm'; + +@Entity() +@TableInheritance({ pattern: 'STI', column: { type: 'varchar', name: 'type' } }) +export abstract class Article { + @PrimaryGeneratedColumn({ unsigned: true }) + id: number; + + @Column({ type: 'varchar', length: 300 }) + thumbnail: string; + + @Column({ type: 'varchar', length: 100 }) + title: string; + + @Column({ type: 'text' }) + contents: string; + + @Column({ type: 'varchar', length: 30 }) + type: string; + + @CreateDateColumn({ type: 'timestamp' }) + createdAt: Date; + + @UpdateDateColumn({ type: 'timestamp' }) + updatedAt: Date; + + @Column({ type: 'timestamp', nullable: true }) + deletedAt: Date | null; +} diff --git a/backend/src/app/group-article/entity/group-article.entity.ts b/backend/src/app/group-article/entity/group-article.entity.ts new file mode 100644 index 00000000..62e83403 --- /dev/null +++ b/backend/src/app/group-article/entity/group-article.entity.ts @@ -0,0 +1,9 @@ +import { ChildEntity, OneToOne } from 'typeorm'; +import { Article } from '@app/group-article/entity/article.entity'; +import { Group } from '@app/group-article/entity/group.entity'; + +@ChildEntity('GROUP') +export class GroupArticle extends Article { + @OneToOne(() => Group, (group) => group.article, { eager: true }) + group: Group; +} diff --git a/backend/src/app/group-article/entity/group-category.entity.ts b/backend/src/app/group-article/entity/group-category.entity.ts new file mode 100644 index 00000000..82292e25 --- /dev/null +++ b/backend/src/app/group-article/entity/group-category.entity.ts @@ -0,0 +1,25 @@ +import { + Column, + CreateDateColumn, + Entity, + PrimaryGeneratedColumn, + UpdateDateColumn, +} from 'typeorm'; + +@Entity() +export class GroupCategory { + @PrimaryGeneratedColumn({ unsigned: true }) + id: number; + + @Column({ type: 'varchar', length: 30 }) + name: string; + + @CreateDateColumn() + createdAt: Date; + + @UpdateDateColumn() + updatedAt: Date; + + @Column({ type: 'timestamp', nullable: true }) + deletedAt: Date | null; +} diff --git a/backend/src/app/group-article/entity/group.entity.ts b/backend/src/app/group-article/entity/group.entity.ts new file mode 100644 index 00000000..dbc92747 --- /dev/null +++ b/backend/src/app/group-article/entity/group.entity.ts @@ -0,0 +1,47 @@ +import { + Column, + CreateDateColumn, + Entity, + JoinColumn, + ManyToOne, + OneToOne, + PrimaryGeneratedColumn, + UpdateDateColumn, +} from 'typeorm'; +import { GroupArticle } from '@app/group-article/entity/group-article.entity'; +import { GroupCategory } from '@app/group-article/entity/group-category.entity'; + +@Entity() +export class Group { + @PrimaryGeneratedColumn({ unsigned: true }) + id: number; + + @Column({ unsigned: true }) + articleId: number; + + @OneToOne(() => GroupArticle, { lazy: true }) + @JoinColumn({ referencedColumnName: 'id', name: 'article_id' }) + article: Promise; + + @ManyToOne(() => GroupCategory, { eager: true }) + @JoinColumn({ referencedColumnName: 'id', name: 'category_id' }) + category: GroupCategory; + + @Column() + location: string; + + @Column() + maxCapacity: number; + + @Column() + status: string; + + @Column() + chatUrl: string; + + @CreateDateColumn() + createdAt: Date; + + @UpdateDateColumn() + updatedAt: Date; +} diff --git a/backend/src/app/notification/entity/notification-setting.entity.ts b/backend/src/app/notification/entity/notification-setting.entity.ts new file mode 100644 index 00000000..ca1a6296 --- /dev/null +++ b/backend/src/app/notification/entity/notification-setting.entity.ts @@ -0,0 +1,35 @@ +import { + Column, + CreateDateColumn, + Entity, + JoinColumn, + ManyToOne, + PrimaryGeneratedColumn, + UpdateDateColumn, +} from 'typeorm'; +import { User } from '@app/user/entity/user.entity'; + +@Entity({ name: 'notification_setting' }) +export class NotificationSetting { + @PrimaryGeneratedColumn({ unsigned: true }) + id: number; + + @Column({ unsigned: true }) + userId: number; + + @ManyToOne(() => User, { lazy: true }) + @JoinColumn({ referencedColumnName: 'id', name: 'user_id' }) + user: Promise; + + @Column({ type: 'varchar', length: 200 }) + type: string; + + @Column({ type: 'tinyint', precision: 1 }) + status: number; + + @CreateDateColumn({ type: 'timestamp' }) + createdAt: Date; + + @UpdateDateColumn({ type: 'timestamp' }) + updatedAt: Date; +} diff --git a/backend/src/app/notification/entity/notification.entity.ts b/backend/src/app/notification/entity/notification.entity.ts new file mode 100644 index 00000000..9500ca56 --- /dev/null +++ b/backend/src/app/notification/entity/notification.entity.ts @@ -0,0 +1,21 @@ +import { + Column, + CreateDateColumn, + Entity, + PrimaryGeneratedColumn, +} from 'typeorm'; + +@Entity() +export class Notification { + @PrimaryGeneratedColumn({ unsigned: true }) + id: number; + + @Column({ type: 'varchar', length: 200 }) + type: string; + + @Column({ type: 'json' }) + contents: any; + + @CreateDateColumn({ type: 'timestamp' }) + createdAt: Date; +} diff --git a/backend/src/app/notification/entity/user-notification.entity.ts b/backend/src/app/notification/entity/user-notification.entity.ts new file mode 100644 index 00000000..d5ad79ac --- /dev/null +++ b/backend/src/app/notification/entity/user-notification.entity.ts @@ -0,0 +1,40 @@ +import { + Column, + CreateDateColumn, + Entity, + JoinColumn, + ManyToOne, + PrimaryGeneratedColumn, + UpdateDateColumn, +} from 'typeorm'; +import { User } from '@app/user/entity/user.entity'; +import { Notification } from '@app/notification/entity/notification.entity'; + +@Entity({ name: 'user_notification' }) +export class UserNotification { + @PrimaryGeneratedColumn({ unsigned: true }) + id: number; + + @Column({ unsigned: true }) + notificationId: number; + + @Column({ unsigned: true }) + userId: number; + + @ManyToOne(() => User, { lazy: true }) + @JoinColumn({ referencedColumnName: 'id', name: 'user_id' }) + user: Promise; + + @ManyToOne(() => Notification, { lazy: true }) + @JoinColumn({ referencedColumnName: 'id', name: 'notification_id' }) + notification: Promise; + + @CreateDateColumn({ type: 'timestamp' }) + createdAt: Date; + + @UpdateDateColumn({ type: 'timestamp' }) + updatedAt: Date; + + @Column({ type: 'timestamp', nullable: true }) + deletedAt: Date | null; +} diff --git a/backend/src/app/scrap/entity/scrap.entity.ts b/backend/src/app/scrap/entity/scrap.entity.ts new file mode 100644 index 00000000..d4071942 --- /dev/null +++ b/backend/src/app/scrap/entity/scrap.entity.ts @@ -0,0 +1,39 @@ +import { + Column, + CreateDateColumn, + Entity, + JoinColumn, + ManyToOne, + PrimaryGeneratedColumn, + Unique, + UpdateDateColumn, +} from 'typeorm'; +import { User } from '@app/user/entity/user.entity'; +import { Article } from '@app/group-article/entity/article.entity'; + +@Entity() +@Unique('UNIQUE_USER_ID_ARTICLE_ID', ['userId', 'articleId']) +export class Scrap { + @PrimaryGeneratedColumn({ unsigned: true }) + id: number; + + @Column({ unsigned: true }) + userId: number; + + @ManyToOne(() => User, { lazy: true, createForeignKeyConstraints: false }) + @JoinColumn({ referencedColumnName: 'id', name: 'user_id' }) + user: Promise; + + @Column({ unsigned: true }) + articleId: number; + + @ManyToOne(() => Article, { lazy: true }) + @JoinColumn({ referencedColumnName: 'id', name: 'article_id' }) + article: Promise
    ; + + @CreateDateColumn({ type: 'timestamp' }) + createdAt: Date; + + @UpdateDateColumn({ type: 'timestamp' }) + updatedAt: Date; +} diff --git a/backend/src/app/user/__test__/user.fixture.ts b/backend/src/app/user/__test__/user.fixture.ts index 3f685114..d95b3c2b 100644 --- a/backend/src/app/user/__test__/user.fixture.ts +++ b/backend/src/app/user/__test__/user.fixture.ts @@ -1,4 +1,4 @@ -import { User } from '@app/user/user.entity'; +import { User } from '@app/user/entity/user.entity'; export const getUserFixture = (user: Partial) => { const fixture = new User(); diff --git a/backend/src/app/user/user.entity.ts b/backend/src/app/user/entity/user.entity.ts similarity index 95% rename from backend/src/app/user/user.entity.ts rename to backend/src/app/user/entity/user.entity.ts index 4adb32b6..040eb58d 100644 --- a/backend/src/app/user/user.entity.ts +++ b/backend/src/app/user/entity/user.entity.ts @@ -39,6 +39,9 @@ export class User { @UpdateDateColumn({ type: 'timestamp' }) updatedAt: Date; + @Column({ type: 'timestamp', nullable: true }) + deletedAt: Date; + static signup({ socialId, socialType, diff --git a/backend/src/app/user/user.repository.ts b/backend/src/app/user/user.repository.ts index 0993a667..15a0c29b 100644 --- a/backend/src/app/user/user.repository.ts +++ b/backend/src/app/user/user.repository.ts @@ -1,5 +1,5 @@ import { DataSource, Repository } from 'typeorm'; -import { User } from '@app/user/user.entity'; +import { User } from '@app/user/entity/user.entity'; import { Injectable } from '@nestjs/common'; @Injectable() diff --git a/backend/src/common/guard/jwt-auth.guard.ts b/backend/src/common/guard/jwt-auth.guard.ts index 1c9cea37..bf612680 100644 --- a/backend/src/common/guard/jwt-auth.guard.ts +++ b/backend/src/common/guard/jwt-auth.guard.ts @@ -2,7 +2,7 @@ import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common'; import { JwtTokenService } from '@common/module/jwt-token/jwt-token.service'; import { TokenType } from '@common/module/jwt-token/type/token-type'; import { DataSource } from 'typeorm'; -import { User } from '@app/user/user.entity'; +import { User } from '@app/user/entity/user.entity'; import { InvalidTokenException } from '@exception/invalid-token.exception'; @Injectable() diff --git a/backend/src/common/module/jwt-token/jwt-token.service.ts b/backend/src/common/module/jwt-token/jwt-token.service.ts index 02290f19..a6d9363b 100644 --- a/backend/src/common/module/jwt-token/jwt-token.service.ts +++ b/backend/src/common/module/jwt-token/jwt-token.service.ts @@ -6,7 +6,7 @@ import { validateSync } from 'class-validator'; import { JwtConfigService } from '@config/jwt/config.service'; import { TokenType } from '@common/module/jwt-token/type/token-type'; import { toLocalDateTime } from '@common/util/date-time'; -import { User } from '@app/user/user.entity'; +import { User } from '@app/user/entity/user.entity'; import { AuthTokenPayload } from '@common/module/jwt-token/type/auth-token-payload'; @Injectable() From 63d9d1c3ebad9441a3fb1826b93b2c105aa68924 Mon Sep 17 00:00:00 2001 From: MinGyeong Park <37508296+kong430@users.noreply.github.com> Date: Mon, 28 Nov 2022 13:38:07 +0900 Subject: [PATCH 037/142] =?UTF-8?q?[Feature]=20=EB=AA=A8=EC=A7=91=20?= =?UTF-8?q?=EA=B2=8C=EC=8B=9C=EA=B8=80=20=ED=95=98=EB=8B=A8=20=EB=B2=84?= =?UTF-8?q?=ED=8A=BC=20(#93)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :sparkles: feature: copyToClipboard ํ•จ์ˆ˜ ์ •์˜ * :sparkles: feature: ๋ชจ์ง‘ ์ƒ์„ธํŽ˜์ด์ง€ ํ•˜๋‹จ ๋ฒ„ํŠผ ์ƒ์„ฑ * :sparkles: feature: useClipboard hook ์ •์˜ * :sparkles: feature: AlertModal ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ * :goal_net: chore: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” copyToClipboard ํ•จ์ˆ˜ ์ œ๊ฑฐ * :recycle: refactor: ๋ฒ„ํŠผ ๊ธฐ๋Šฅ๋งˆ๋‹ค ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ * :sparkles: feature: AlertModal content text-align center ์ ์šฉ * :recycle: refactor: catch๋ฌธ ์ œ๊ฑฐ & void ์ถ”๊ฐ€ * :pencil2: fix: modal ์ปดํฌ๋„ŒํŠธ stories ์ฝ”๋“œ์˜ args์— onClose ์ถ”๊ฐ€ onClose ํ•จ์ˆ˜๊ฐ€ ์ •์˜๋˜์ง€ ์•Š์•„, storybook ์ƒ์—์„œ modal ์™ธ ์˜์—ญ์„ ํด๋ฆฌํ–ˆ์„ ๋•Œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ * :recycle: refactor: custom Modal์—์„œ onClose๋ฅผ required๋กœ ๋ฐ›๋„๋ก ์ˆ˜์ • --- .../ParticipantsModal.stories.tsx | 2 + .../article/ParticipantsModal/index.tsx | 2 +- .../ParticipateButton/ApplyButton/index.tsx | 29 ++++++++++++ .../ParticipateButton/CancelButton/index.tsx | 31 ++++++++++++ .../ChatLinkButton/index.tsx | 29 ++++++++++++ .../ParticipateButton.stories.tsx | 34 ++++++++++++++ .../article/ParticipateButton/index.tsx | 28 +++++++++++ .../common/AlertModal/AlertModal.stories.tsx | 17 +++++++ .../components/common/AlertModal/index.tsx | 47 +++++++++++++++++++ frontend/src/constants/participateButton.ts | 8 ++++ frontend/src/hooks/useClipboard.ts | 15 ++++++ frontend/src/pages/article/[id].tsx | 5 +- 12 files changed, 245 insertions(+), 2 deletions(-) create mode 100644 frontend/src/components/article/ParticipateButton/ApplyButton/index.tsx create mode 100644 frontend/src/components/article/ParticipateButton/CancelButton/index.tsx create mode 100644 frontend/src/components/article/ParticipateButton/ChatLinkButton/index.tsx create mode 100644 frontend/src/components/article/ParticipateButton/ParticipateButton.stories.tsx create mode 100644 frontend/src/components/article/ParticipateButton/index.tsx create mode 100644 frontend/src/components/common/AlertModal/AlertModal.stories.tsx create mode 100644 frontend/src/components/common/AlertModal/index.tsx create mode 100644 frontend/src/constants/participateButton.ts create mode 100644 frontend/src/hooks/useClipboard.ts diff --git a/frontend/src/components/article/ParticipantsModal/ParticipantsModal.stories.tsx b/frontend/src/components/article/ParticipantsModal/ParticipantsModal.stories.tsx index a36a7e3e..eaa22914 100644 --- a/frontend/src/components/article/ParticipantsModal/ParticipantsModal.stories.tsx +++ b/frontend/src/components/article/ParticipantsModal/ParticipantsModal.stories.tsx @@ -17,10 +17,12 @@ export const Default = Template.bind({}); Default.args = { participants: dummyParticipants, open: true, + onClose: () => {}, }; export const NoParticipants = Template.bind({}); NoParticipants.args = { participants: [], open: true, + onClose: () => {}, }; diff --git a/frontend/src/components/article/ParticipantsModal/index.tsx b/frontend/src/components/article/ParticipantsModal/index.tsx index a33f68bd..d5b2157f 100644 --- a/frontend/src/components/article/ParticipantsModal/index.tsx +++ b/frontend/src/components/article/ParticipantsModal/index.tsx @@ -9,7 +9,7 @@ import { UserType } from '@typings/types'; interface Props { participants: Array>; open: boolean; - onClose?: () => void; + onClose: () => void; } const ParticipantsModal = ({ participants, open, onClose }: Props) => { diff --git a/frontend/src/components/article/ParticipateButton/ApplyButton/index.tsx b/frontend/src/components/article/ParticipateButton/ApplyButton/index.tsx new file mode 100644 index 00000000..10a0158a --- /dev/null +++ b/frontend/src/components/article/ParticipateButton/ApplyButton/index.tsx @@ -0,0 +1,29 @@ +import { useState } from 'react'; + +import { Button } from '@mantine/core'; + +import AlertModal from '@components/common/AlertModal'; + +const ApplyButton = () => { + const [modalOpen, setModalOpen] = useState(false); + const [resultMessage, setResultMessage] = useState(''); + + // TODO API ํ˜ธ์ถœ ๋ฐ ์„ฑ๊ณต ์—ฌ๋ถ€์— ๋”ฐ๋ฅธ message + const applyForRecruitment = () => { + setResultMessage('์ฐธ๊ฐ€ ์‹ ์ฒญ์ด ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค'); + setModalOpen(true); + }; + + return ( + <> + + {modalOpen && ( + setModalOpen(false)} /> + )} + + ); +}; + +export default ApplyButton; diff --git a/frontend/src/components/article/ParticipateButton/CancelButton/index.tsx b/frontend/src/components/article/ParticipateButton/CancelButton/index.tsx new file mode 100644 index 00000000..b7a11bd1 --- /dev/null +++ b/frontend/src/components/article/ParticipateButton/CancelButton/index.tsx @@ -0,0 +1,31 @@ +import { useState } from 'react'; + +import { Button } from '@mantine/core'; + +import AlertModal from '@components/common/AlertModal'; + +const CancelButton = () => { + const [modalOpen, setModalOpen] = useState(false); + + const cancelApplication = () => { + // TODO API ํ˜ธ์ถœ + setModalOpen(true); + }; + + return ( + <> + + {modalOpen && ( + setModalOpen(false)} + /> + )} + + ); +}; + +export default CancelButton; diff --git a/frontend/src/components/article/ParticipateButton/ChatLinkButton/index.tsx b/frontend/src/components/article/ParticipateButton/ChatLinkButton/index.tsx new file mode 100644 index 00000000..484eb625 --- /dev/null +++ b/frontend/src/components/article/ParticipateButton/ChatLinkButton/index.tsx @@ -0,0 +1,29 @@ +import { Button } from '@mantine/core'; + +import AlertModal from '@components/common/AlertModal'; +import useClipboard from '@hooks/useClipboard'; + +interface Props { + chatLink: string; +} + +const ChatLinkButton = ({ chatLink }: Props) => { + const { isCopied, setIsCopied, doCopy } = useClipboard(); + + return ( + <> + + {isCopied && ( + setIsCopied(false)} + /> + )} + + ); +}; + +export default ChatLinkButton; diff --git a/frontend/src/components/article/ParticipateButton/ParticipateButton.stories.tsx b/frontend/src/components/article/ParticipateButton/ParticipateButton.stories.tsx new file mode 100644 index 00000000..0f3b8535 --- /dev/null +++ b/frontend/src/components/article/ParticipateButton/ParticipateButton.stories.tsx @@ -0,0 +1,34 @@ +import { ComponentMeta, ComponentStory } from '@storybook/react'; + +import { ParticipateButtonStatus } from '@constants/participateButton'; + +import ParticipateButton from '.'; + +export default { + title: 'Component/ParticipateButton', + component: ParticipateButton, +} as ComponentMeta; + +const Template: ComponentStory = (args) => ( + +); + +export const ApplyButton = Template.bind({}); +ApplyButton.args = { + status: ParticipateButtonStatus.APPLY, +}; + +export const CancelButton = Template.bind({}); +CancelButton.args = { + status: ParticipateButtonStatus.CANCEL, +}; + +export const ClosedButton = Template.bind({}); +ClosedButton.args = { + status: ParticipateButtonStatus.CLOSED, +}; + +export const LinkButton = Template.bind({}); +LinkButton.args = { + status: ParticipateButtonStatus.LINK, +}; diff --git a/frontend/src/components/article/ParticipateButton/index.tsx b/frontend/src/components/article/ParticipateButton/index.tsx new file mode 100644 index 00000000..78dc97b5 --- /dev/null +++ b/frontend/src/components/article/ParticipateButton/index.tsx @@ -0,0 +1,28 @@ +import { Button } from '@mantine/core'; + +import ApplyButton from '@components/article/ParticipateButton/ApplyButton'; +import CancelButton from '@components/article/ParticipateButton/CancelButton'; +import ChatLinkButton from '@components/article/ParticipateButton/ChatLinkButton'; +import { ParticipateButtonStatus } from '@constants/participateButton'; + +interface Props { + status: ParticipateButtonStatus; + chatRoomLink?: string; +} + +const ParticipateButton = ({ status, chatRoomLink = '' }: Props) => { + return ( + <> + {status === ParticipateButtonStatus.APPLY && } + {status === ParticipateButtonStatus.CANCEL && } + {status === ParticipateButtonStatus.CLOSED && ( + + )} + {status === ParticipateButtonStatus.LINK && } + + ); +}; + +export default ParticipateButton; diff --git a/frontend/src/components/common/AlertModal/AlertModal.stories.tsx b/frontend/src/components/common/AlertModal/AlertModal.stories.tsx new file mode 100644 index 00000000..b7bd0562 --- /dev/null +++ b/frontend/src/components/common/AlertModal/AlertModal.stories.tsx @@ -0,0 +1,17 @@ +import { ComponentMeta, ComponentStory } from '@storybook/react'; + +import AlertModal from '.'; + +export default { + title: 'Component/AlertModal', + component: AlertModal, +} as ComponentMeta; + +const Template: ComponentStory = (args) => ; + +export const _AlertModal = Template.bind({}); +_AlertModal.args = { + open: true, + onClose: () => {}, + message: 'ํ…Œ์ŠคํŠธ ๋ฌธ๊ตฌ์ž…๋‹ˆ๋‹ค', +}; diff --git a/frontend/src/components/common/AlertModal/index.tsx b/frontend/src/components/common/AlertModal/index.tsx new file mode 100644 index 00000000..de63e0b0 --- /dev/null +++ b/frontend/src/components/common/AlertModal/index.tsx @@ -0,0 +1,47 @@ +import styled from '@emotion/styled'; +import { Modal } from '@mantine/core'; + +interface Props { + message: string; + open: boolean; + onClose: () => void; +} + +const AlertModal = ({ message, open, onClose }: Props) => { + return ( + <> + {open && ( + + {message} + ํ™•์ธ + + )} + + ); +}; + +export default AlertModal; + +const StyledModal = styled(Modal)` + & .mantine-Modal-body { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + } +`; + +const ModalContent = styled.div` + padding: 1.6rem; + text-align: center; +`; + +const OkButton = styled.div` + padding: 1.6rem; + color: ${({ theme }) => theme.colors.indigo[7]}; + background-color: ${({ theme }) => theme.white}; + border: none; + &:hover { + cursor: pointer; + } +`; diff --git a/frontend/src/constants/participateButton.ts b/frontend/src/constants/participateButton.ts new file mode 100644 index 00000000..37099be5 --- /dev/null +++ b/frontend/src/constants/participateButton.ts @@ -0,0 +1,8 @@ +enum ParticipateButtonStatus { + 'APPLY' = 'APPLY', + 'CANCEL' = 'CANCEL', + 'CLOSED' = 'CLOSED', + 'LINK' = 'LINK', +} + +export { ParticipateButtonStatus }; diff --git a/frontend/src/hooks/useClipboard.ts b/frontend/src/hooks/useClipboard.ts new file mode 100644 index 00000000..0d874e48 --- /dev/null +++ b/frontend/src/hooks/useClipboard.ts @@ -0,0 +1,15 @@ +import { useState } from 'react'; + +const useClipboard = () => { + const [isCopied, setIsCopied] = useState(false); + + const doCopy = (text: string) => { + void navigator.clipboard.writeText(text).then(() => { + setIsCopied(true); + }); + }; + + return { isCopied, setIsCopied, doCopy }; +}; + +export default useClipboard; diff --git a/frontend/src/pages/article/[id].tsx b/frontend/src/pages/article/[id].tsx index 319901eb..70d41ee5 100644 --- a/frontend/src/pages/article/[id].tsx +++ b/frontend/src/pages/article/[id].tsx @@ -6,6 +6,7 @@ import { Avatar, Progress, TypographyStylesProvider } from '@mantine/core'; import { IconList } from '@tabler/icons'; import ParticipantsModal from '@components/article/ParticipantsModal'; +import ParticipateButton from '@components/article/ParticipateButton'; import ArticleTag from '@components/common/ArticleTag'; import Header from '@components/common/Header'; import DetailTitle from '@components/common/Header/DetailTitle'; @@ -16,6 +17,7 @@ import { CategoryKr } from '@constants/category'; import { dummyArticle, dummyParticipants } from '@constants/dummy'; import { LocationKr } from '@constants/location'; import { PAGE_TITLE } from '@constants/pageTitle'; +import { ParticipateButtonStatus } from '@constants/participateButton'; import { getCommonBadgeColor, getStatusBadgeColor } from '@utils/colors'; const ArticleDetail = () => { @@ -97,7 +99,8 @@ const ArticleDetail = () => { - + {/* TODO ๋ชจ์ง‘์ƒํƒœ์™€ ์œ ์ € ์ฐธ๊ฐ€ ์ƒํƒœ์— ๋”ฐ๋ผ ๋ Œ๋”๋ง */} + From fdb4859911e777c414c7561a63d0ff9564385dea Mon Sep 17 00:00:00 2001 From: Gakko <90585081+pythonstrup@users.noreply.github.com> Date: Mon, 28 Nov 2022 15:11:40 +0900 Subject: [PATCH 038/142] =?UTF-8?q?[Feature]=20=EB=AA=A8=EC=A7=91=20?= =?UTF-8?q?=EA=B2=8C=EC=8B=9C=EA=B8=80=20=EB=93=B1=EB=A1=9D=20API=20(#100)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * โœจ feature: ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€ ๋“ฑ๋ก Enum ์ง€์ • * โœจ feature: Group entity ์„ค๊ณ„ * โœจ feature: Group Category entity ์„ค๊ณ„ * โœจ feature: Article entity ์„ค๊ณ„ * โœจ feature: Group Application entity ์„ค๊ณ„ * โœจ feature: ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€ ๋“ฑ๋ก DTO ์ž‘์„ฑ * โœจ feature: group article response & request dto ์ž‘์„ฑ * โœจ feature: group article ๋„๋ฉ”์ธ repository ์„ค๊ณ„ * โœจ feature: ์นดํ…Œ๊ณ ๋ฆฌ not found exception ์ž‘์„ฑ * โœจ feature: group-article service ์ž‘์„ฑ * โœจ feature: group-article controller ์ž‘์„ฑ * โœจ feature: group-article module ์ž‘์„ฑ * โœจ feature: group-article ๊ฒŒ์‹œ๊ธ€ ๋“ฑ๋ก Body dto ์ž‘์„ฑ * โœจ feature: group-article app module์— ์ ์šฉ * ๐Ÿฅ… chore: ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋ฐ˜์˜ --- backend/.gitignore | 1 + backend/package.json | 3 +- backend/sql/category.sql | 7 ++ backend/src/app.controller.ts | 2 +- backend/src/app.module.ts | 2 + .../constants/group-article.constants.ts | 46 +++++++++++++ .../dto/group-article-register-request.dto.ts | 67 +++++++++++++++++++ .../group-article-register-response.dto.ts | 17 +++++ .../group-article/entity/article.entity.ts | 2 +- .../entity/group-article.entity.ts | 44 +++++++++++- .../entity/group-category.entity.ts | 4 +- .../app/group-article/entity/group.entity.ts | 27 ++++++-- .../exception/group-category-not-found.ts | 7 ++ .../group-article/group-article.controller.ts | 32 +++++++++ .../app/group-article/group-article.module.ts | 19 ++++++ .../group-article/group-article.service.ts | 41 ++++++++++++ .../repository/article.repository.ts | 14 ++++ .../repository/group-category.repository.ts | 25 +++++++ .../repository/group.repository.ts | 14 ++++ backend/src/app/image/image.controller.ts | 6 +- backend/src/app/image/image.module.ts | 4 +- backend/src/app/image/image.service.ts | 2 +- .../config/s3/__test__/config.service.spec.ts | 4 +- backend/src/common/config/s3/config.module.ts | 4 +- .../src/common/config/s3/config.service.ts | 2 +- .../src/common/filter/all-exception.filter.ts | 6 +- backend/src/main.ts | 9 ++- backend/src/setSwagger.ts | 3 +- 28 files changed, 384 insertions(+), 30 deletions(-) create mode 100644 backend/sql/category.sql create mode 100644 backend/src/app/group-article/constants/group-article.constants.ts create mode 100644 backend/src/app/group-article/dto/group-article-register-request.dto.ts create mode 100644 backend/src/app/group-article/dto/group-article-register-response.dto.ts create mode 100644 backend/src/app/group-article/exception/group-category-not-found.ts create mode 100644 backend/src/app/group-article/group-article.controller.ts create mode 100644 backend/src/app/group-article/group-article.module.ts create mode 100644 backend/src/app/group-article/group-article.service.ts create mode 100644 backend/src/app/group-article/repository/article.repository.ts create mode 100644 backend/src/app/group-article/repository/group-category.repository.ts create mode 100644 backend/src/app/group-article/repository/group.repository.ts diff --git a/backend/.gitignore b/backend/.gitignore index 5f018094..dd0176b0 100644 --- a/backend/.gitignore +++ b/backend/.gitignore @@ -1,6 +1,7 @@ node_modules .DS.Store +.DS_Store dist diff --git a/backend/package.json b/backend/package.json index 3fa6bf01..a40533c8 100644 --- a/backend/package.json +++ b/backend/package.json @@ -84,7 +84,8 @@ "^@config/(.*)$": "/common/config/$1", "^@decorator/(.*)$": "/common/decorator/$1", "^@exception/(.*)$": "/common/exception/$1", - "^@app/(.*)$": "/app/$1" + "^@app/(.*)$": "/app/$1", + "^@src/(.*)$": "/$1" }, "moduleFileExtensions": [ "js", diff --git a/backend/sql/category.sql b/backend/sql/category.sql new file mode 100644 index 00000000..3815f4a5 --- /dev/null +++ b/backend/sql/category.sql @@ -0,0 +1,7 @@ +INSERT INTO group_category (name) +VALUES + ('์‹์‚ฌ'), + ('์Šคํ„ฐ๋””'), + ('๊ธฐํƒ€'), + ('๊ณต๋ชจ์ „'), + ('ํ”„๋กœ์ ํŠธ'); \ No newline at end of file diff --git a/backend/src/app.controller.ts b/backend/src/app.controller.ts index aac523aa..e54f4255 100644 --- a/backend/src/app.controller.ts +++ b/backend/src/app.controller.ts @@ -7,8 +7,8 @@ import { ApiSuccessResponse } from '@decorator/api-success-resposne.decorator'; import { ApiErrorResponse } from '@decorator/api-error-response.decorator'; import { BadParameterException } from '@exception/bad-parameter.exception'; import { ApiNotFoundException } from '@exception/api-not-found.exception'; -import { AppService } from './app.service'; import { JwtAuth } from '@decorator/jwt-auth.decorator'; +import { AppService } from '@src/app.service'; export class ExampleDto { @IsNumber() diff --git a/backend/src/app.module.ts b/backend/src/app.module.ts index 2a593f29..97618d93 100644 --- a/backend/src/app.module.ts +++ b/backend/src/app.module.ts @@ -8,6 +8,7 @@ import { DatabaseModule } from '@config/database/database.module'; import { JwtTokenModule } from '@common/module/jwt-token/jwt-token.module'; import { AuthModule } from '@app/auth/auth.module'; import { ImageModule } from '@app/image/image.module'; +import { GroupArticleModule } from '@app/group-article/group-article.module'; @Module({ imports: [ @@ -16,6 +17,7 @@ import { ImageModule } from '@app/image/image.module'; JwtTokenModule, AuthModule, ImageModule, + GroupArticleModule, ], controllers: [AppController], providers: [AppService], diff --git a/backend/src/app/group-article/constants/group-article.constants.ts b/backend/src/app/group-article/constants/group-article.constants.ts new file mode 100644 index 00000000..066292f9 --- /dev/null +++ b/backend/src/app/group-article/constants/group-article.constants.ts @@ -0,0 +1,46 @@ +export enum CATEGORY { + MEAL = '์‹์‚ฌ', + STUDY = '์Šคํ„ฐ๋””', + ETC = '๊ธฐํƒ€', + COMPITITION = '๊ณต๋ชจ์ „', + PROJECT = 'ํ”„๋กœ์ ํŠธ', +} + +export enum LOCATION { + ONLINE = '์˜จ๋ผ์ธ', + SEOUL = '์„œ์šธ', + INCHEON = '์ธ์ฒœ', + BUSAN = '๋ถ€์‚ฐ', + DAEGU = '๋Œ€๊ตฌ', + GWANGJU = '๊ด‘์ฃผ', + DAEJEON = '๋Œ€์ „', + ULSAN = '์šธ์‚ฐ', + SEJONG = '์„ธ์ข…', + GYEONGGI = '๊ฒฝ๊ธฐ', + GANGWON = '๊ฐ•์›', + CHUNGBUK = '์ถฉ๋ถ', + CHUNGNAM = '์ถฉ๋‚จ', + JEONBUK = '์ „๋ถ', + JEONNAM = '์ „๋‚จ', + GYEONGBUK = '๊ฒฝ๋ถ', + GYEONGNAM = '๊ฒฝ๋‚จ', + JEJU = '์ œ์ฃผ', +} + +export enum GROUP_APPLICATION_STATUS { + REGISTER, + CANCEL, +} + +export enum GROUP_STATUS { + PROGRESS = '๋ชจ์ง‘์ค‘', + SUCCEED = '๋ชจ์ง‘์™„๋ฃŒ', + FAIL = '๋ชจ์ง‘์ค‘๋‹จ', +} + +export enum ARTICLE { + GROUP = 'GROUP', + FREE = 'FREE', + QUESTION = 'QUESTION', + PROJECT = 'PROJECT', +} diff --git a/backend/src/app/group-article/dto/group-article-register-request.dto.ts b/backend/src/app/group-article/dto/group-article-register-request.dto.ts new file mode 100644 index 00000000..73e0d231 --- /dev/null +++ b/backend/src/app/group-article/dto/group-article-register-request.dto.ts @@ -0,0 +1,67 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { IsEnum, IsString } from 'class-validator'; +import { + CATEGORY, + LOCATION, +} from '@app/group-article/constants/group-article.constants'; + +export class GroupArticleRegisterResquest { + @ApiProperty({ + example: 'CS ์Šคํ„ฐ๋”” ๋ชจ์ง‘', + description: '๋ชจ์ง‘๊ฒŒ์‹œ๊ธ€ ์ œ๋ชฉ', + required: true, + }) + @IsString() + title: string; + + @ApiProperty({ + example: ` + ์•ˆ๋…•ํ•˜์„ธ์š”. ์„œ์šธ ์ง€์—ญ CS ์Šคํ„ฐ๋””์›๋“ค์„ ๋ชจ์ง‘ํ•ฉ๋‹ˆ๋‹ค! + ์„œ์šธ ์ง€์—ญ CS ๋ชจ์ง‘ ์‚ฌ์ง„์ž๋ฃŒ + `, + description: '๋งˆํฌ๋‹ค์šด ํ˜•์‹์˜ ๊ฒŒ์‹œ๊ธ€ ๋‚ด์šฉ', + required: true, + }) + @IsString() + contents: string; + + @ApiProperty({ + example: CATEGORY.STUDY, + description: 'Enum ํ˜•ํƒœ์˜ ์ž๋ฃŒํ˜• - ์นดํ…Œ๊ณ ๋ฆฌ', + required: true, + }) + @IsEnum(CATEGORY) + category: CATEGORY; + + @ApiProperty({ + example: LOCATION.ONLINE, + description: 'Enum ํ˜•ํƒœ์˜ ์ž๋ฃŒํ˜• - ์ง€์—ญ', + required: true, + }) + @IsEnum(LOCATION) + location: LOCATION; + + @ApiProperty({ + example: 10, + description: '๋ชจ์ž„์˜ ์ตœ๋Œ€ ์ธ์›์„ ๋ช‡ ๋ช…์œผ๋กœ ํ•  ๊ฒƒ์ธ์ง€ ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.', + required: true, + }) + maxCapacity: number; + + @ApiProperty({ + example: + 'https://kr.object.ncloudstorage.com/moyeo-images/uploads/images/1669282011949-761671c7-cc43-4cee-bcb5-4bf3fea9478b.png', + description: '์ธ๋„ค์ผ ์ด๋ฏธ์ง€๊ฐ€ ์ €์žฅ๋˜์–ด์žˆ๋Š” ์ฃผ์†Œ', + required: true, + }) + @IsString() + thumbnail: string; + + @ApiProperty({ + example: 'https://open.kakao.com/์˜คํ”ˆ์ฑ„ํŒ…๋ฐฉpath', + description: '์นด์นด์˜คํ†ก๊ณผ ๊ธฐํƒ€ ์ฑ„ํŒ…์„œ๋น„์Šค์˜ ์ฃผ์†Œ๋ฅผ ๋‹ด์•„๋†“์„ ์ˆ˜ ์žˆ๋‹ค.', + required: false, + }) + @IsString() + chatUrl: string; +} diff --git a/backend/src/app/group-article/dto/group-article-register-response.dto.ts b/backend/src/app/group-article/dto/group-article-register-response.dto.ts new file mode 100644 index 00000000..d663973b --- /dev/null +++ b/backend/src/app/group-article/dto/group-article-register-response.dto.ts @@ -0,0 +1,17 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { GroupArticle } from '@app/group-article/entity/group-article.entity'; + +export class GroupArticleRegisterResponse { + @ApiProperty({ + example: 1, + description: '๋ชจ์ง‘๊ฒŒ์‹œ๊ธ€ ID', + required: true, + }) + id: number; + + static from(groupArticle: GroupArticle) { + const response = new GroupArticleRegisterResponse(); + response.id = groupArticle.id; + return response; + } +} diff --git a/backend/src/app/group-article/entity/article.entity.ts b/backend/src/app/group-article/entity/article.entity.ts index 7339c246..702cfa0a 100644 --- a/backend/src/app/group-article/entity/article.entity.ts +++ b/backend/src/app/group-article/entity/article.entity.ts @@ -7,7 +7,7 @@ import { UpdateDateColumn, } from 'typeorm'; -@Entity() +@Entity({ name: 'article' }) @TableInheritance({ pattern: 'STI', column: { type: 'varchar', name: 'type' } }) export abstract class Article { @PrimaryGeneratedColumn({ unsigned: true }) diff --git a/backend/src/app/group-article/entity/group-article.entity.ts b/backend/src/app/group-article/entity/group-article.entity.ts index 62e83403..6ea665d6 100644 --- a/backend/src/app/group-article/entity/group-article.entity.ts +++ b/backend/src/app/group-article/entity/group-article.entity.ts @@ -1,9 +1,49 @@ import { ChildEntity, OneToOne } from 'typeorm'; import { Article } from '@app/group-article/entity/article.entity'; import { Group } from '@app/group-article/entity/group.entity'; +import { GroupCategory } from '@app/group-article/entity/group-category.entity'; +import { ARTICLE } from '@app/group-article/constants/group-article.constants'; -@ChildEntity('GROUP') +@ChildEntity(ARTICLE.GROUP) export class GroupArticle extends Article { - @OneToOne(() => Group, (group) => group.article, { eager: true }) + @OneToOne(() => Group, (group) => group.article, { + eager: true, + cascade: ['insert'], + }) group: Group; + + static register({ + title, + contents, + thumbnail, + location, + chatUrl, + maxCapacity, + category, + }: { + title: string; + contents: string; + thumbnail: string; + location: string; + chatUrl: string; + maxCapacity: number; + category: GroupCategory; + }) { + const article = new GroupArticle(); + article.title = title; + article.contents = contents; + article.type = ARTICLE.GROUP; + article.thumbnail = thumbnail; + article.group = Group.register({ + location, + chatUrl, + maxCapacity, + category, + }); + return article; + } + + delete() { + this.deletedAt = new Date(); + } } diff --git a/backend/src/app/group-article/entity/group-category.entity.ts b/backend/src/app/group-article/entity/group-category.entity.ts index 82292e25..aebd3b98 100644 --- a/backend/src/app/group-article/entity/group-category.entity.ts +++ b/backend/src/app/group-article/entity/group-category.entity.ts @@ -6,12 +6,12 @@ import { UpdateDateColumn, } from 'typeorm'; -@Entity() +@Entity({ name: 'group_category' }) export class GroupCategory { @PrimaryGeneratedColumn({ unsigned: true }) id: number; - @Column({ type: 'varchar', length: 30 }) + @Column({ type: 'varchar', length: 30, unique: true }) name: string; @CreateDateColumn() diff --git a/backend/src/app/group-article/entity/group.entity.ts b/backend/src/app/group-article/entity/group.entity.ts index dbc92747..70011958 100644 --- a/backend/src/app/group-article/entity/group.entity.ts +++ b/backend/src/app/group-article/entity/group.entity.ts @@ -8,17 +8,15 @@ import { PrimaryGeneratedColumn, UpdateDateColumn, } from 'typeorm'; +import { GROUP_STATUS } from '@app/group-article/constants/group-article.constants'; import { GroupArticle } from '@app/group-article/entity/group-article.entity'; import { GroupCategory } from '@app/group-article/entity/group-category.entity'; -@Entity() +@Entity({ name: 'group' }) export class Group { @PrimaryGeneratedColumn({ unsigned: true }) id: number; - @Column({ unsigned: true }) - articleId: number; - @OneToOne(() => GroupArticle, { lazy: true }) @JoinColumn({ referencedColumnName: 'id', name: 'article_id' }) article: Promise; @@ -44,4 +42,25 @@ export class Group { @UpdateDateColumn() updatedAt: Date; + + static register({ + location, + chatUrl, + maxCapacity, + category, + }: { + location: string; + chatUrl: string; + maxCapacity: number; + category: GroupCategory; + }) { + const group = new Group(); + group.location = location; + group.status = GROUP_STATUS.PROGRESS; + group.chatUrl = chatUrl; + group.maxCapacity = maxCapacity; + group.category = category; + + return group; + } } diff --git a/backend/src/app/group-article/exception/group-category-not-found.ts b/backend/src/app/group-article/exception/group-category-not-found.ts new file mode 100644 index 00000000..254d032c --- /dev/null +++ b/backend/src/app/group-article/exception/group-category-not-found.ts @@ -0,0 +1,7 @@ +import { NotFoundException } from '@nestjs/common'; + +export class GroupCategoryNotFound extends NotFoundException { + constructor(message = 'ํ•ด๋‹น ์นดํ…Œ๊ณ ๋ฆฌ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.') { + super({ status: 'GROUP_CATEGORY_NOT_FOUND', message }); + } +} diff --git a/backend/src/app/group-article/group-article.controller.ts b/backend/src/app/group-article/group-article.controller.ts new file mode 100644 index 00000000..35437cf2 --- /dev/null +++ b/backend/src/app/group-article/group-article.controller.ts @@ -0,0 +1,32 @@ +import { Body, Controller, HttpStatus, Post } from '@nestjs/common'; +import { ApiTags } from '@nestjs/swagger'; +import { ApiErrorResponse } from '@src/common/decorator/api-error-response.decorator'; +import { ApiSuccessResponse } from '@src/common/decorator/api-success-resposne.decorator'; +import { JwtAuth } from '@src/common/decorator/jwt-auth.decorator'; +import { ResponseEntity } from '@src/common/response-entity'; +import { ARTICLE } from '@app/group-article/constants/group-article.constants'; +import { GroupArticleRegisterResquest } from '@app/group-article/dto/group-article-register-request.dto'; +import { GroupArticleRegisterResponse } from '@app/group-article/dto/group-article-register-response.dto'; +import { GroupCategoryNotFound } from '@app/group-article/exception/group-category-not-found'; +import { GroupArticleService } from '@app/group-article/group-article.service'; + +@Controller('group-articles') +@ApiTags('Group-Article') +export class GroupArticleController { + constructor(private readonly groupArticleService: GroupArticleService) {} + + @Post() + // @JwtAuth() + @ApiSuccessResponse(HttpStatus.CREATED, GroupArticleRegisterResponse) + @ApiErrorResponse(GroupCategoryNotFound) + async registerBoard( + @Body() groupArticleRegisterResquest: GroupArticleRegisterResquest, + ) { + const article = await this.groupArticleService.registerGroupArticle( + groupArticleRegisterResquest, + ); + const data = GroupArticleRegisterResponse.from(article); + + return ResponseEntity.CREATED_WITH_DATA(data); + } +} diff --git a/backend/src/app/group-article/group-article.module.ts b/backend/src/app/group-article/group-article.module.ts new file mode 100644 index 00000000..d480af87 --- /dev/null +++ b/backend/src/app/group-article/group-article.module.ts @@ -0,0 +1,19 @@ +import { Module } from '@nestjs/common'; +import { JwtTokenModule } from '@src/common/module/jwt-token/jwt-token.module'; +import { GroupArticleController } from '@app/group-article/group-article.controller'; +import { GroupArticleService } from '@app/group-article/group-article.service'; +import { GroupArticleRepository } from '@app/group-article/repository/article.repository'; +import { GroupCategoryRepository } from '@app/group-article/repository/group-category.repository'; +import { GroupRepository } from '@app/group-article/repository/group.repository'; + +@Module({ + imports: [JwtTokenModule], + controllers: [GroupArticleController], + providers: [ + GroupArticleService, + GroupRepository, + GroupArticleRepository, + GroupCategoryRepository, + ], +}) +export class GroupArticleModule {} diff --git a/backend/src/app/group-article/group-article.service.ts b/backend/src/app/group-article/group-article.service.ts new file mode 100644 index 00000000..f184d769 --- /dev/null +++ b/backend/src/app/group-article/group-article.service.ts @@ -0,0 +1,41 @@ +import { Injectable, Logger } from '@nestjs/common'; +import { ARTICLE } from '@app/group-article/constants/group-article.constants'; +import { GroupArticleRegisterResquest } from '@app/group-article/dto/group-article-register-request.dto'; +import { GroupArticle } from '@app/group-article/entity/group-article.entity'; +import { GroupCategoryNotFound } from '@app/group-article/exception/group-category-not-found'; +import { GroupArticleRepository } from '@app/group-article/repository/article.repository'; +import { GroupCategoryRepository } from '@app/group-article/repository/group-category.repository'; +import { GroupRepository } from '@app/group-article/repository/group.repository'; + +@Injectable() +export class GroupArticleService { + private readonly logger = new Logger(GroupArticleService.name); + + constructor( + private readonly groupRepository: GroupRepository, + private readonly groupArticleRepository: GroupArticleRepository, + private readonly groupCategoryRepository: GroupCategoryRepository, + ) {} + + async registerGroupArticle( + groupArticleRegisterResquest: GroupArticleRegisterResquest, + ) { + const category = await this.groupCategoryRepository.findByCategoryName( + groupArticleRegisterResquest.category, + ); + if (!category) { + throw new GroupCategoryNotFound(); + } + + const groupArticle = GroupArticle.register({ + title: groupArticleRegisterResquest.title, + contents: groupArticleRegisterResquest.contents, + thumbnail: groupArticleRegisterResquest.thumbnail, + location: groupArticleRegisterResquest.location, + maxCapacity: groupArticleRegisterResquest.maxCapacity, + chatUrl: groupArticleRegisterResquest.chatUrl, + category: category, + }); + return this.groupArticleRepository.save(groupArticle); + } +} diff --git a/backend/src/app/group-article/repository/article.repository.ts b/backend/src/app/group-article/repository/article.repository.ts new file mode 100644 index 00000000..1d150ab1 --- /dev/null +++ b/backend/src/app/group-article/repository/article.repository.ts @@ -0,0 +1,14 @@ +import { DataSource, Repository } from 'typeorm'; +import { Injectable } from '@nestjs/common'; +import { GroupArticle } from '@app/group-article/entity/group-article.entity'; + +@Injectable() +export class GroupArticleRepository extends Repository { + constructor(private readonly dataSource: DataSource) { + super( + GroupArticle, + dataSource.createEntityManager(), + dataSource.createQueryRunner(), + ); + } +} diff --git a/backend/src/app/group-article/repository/group-category.repository.ts b/backend/src/app/group-article/repository/group-category.repository.ts new file mode 100644 index 00000000..4c018cd1 --- /dev/null +++ b/backend/src/app/group-article/repository/group-category.repository.ts @@ -0,0 +1,25 @@ +import { DataSource, Repository } from 'typeorm'; +import { Injectable } from '@nestjs/common'; +import { GroupCategory } from '@app/group-article/entity/group-category.entity'; + +@Injectable() +export class GroupCategoryRepository extends Repository { + constructor(private readonly dataSource: DataSource) { + super( + GroupCategory, + dataSource.createEntityManager(), + dataSource.createQueryRunner(), + ); + } + + findByCategoryName(categoryName: string) { + return this.findOne({ + select: { + id: true, + }, + where: { + name: categoryName, + }, + }); + } +} diff --git a/backend/src/app/group-article/repository/group.repository.ts b/backend/src/app/group-article/repository/group.repository.ts new file mode 100644 index 00000000..a759f35e --- /dev/null +++ b/backend/src/app/group-article/repository/group.repository.ts @@ -0,0 +1,14 @@ +import { DataSource, Repository } from 'typeorm'; +import { Injectable } from '@nestjs/common'; +import { Group } from '@app/group-article/entity/group.entity'; + +@Injectable() +export class GroupRepository extends Repository { + constructor(private readonly dataSource: DataSource) { + super( + Group, + dataSource.createEntityManager(), + dataSource.createQueryRunner(), + ); + } +} diff --git a/backend/src/app/image/image.controller.ts b/backend/src/app/image/image.controller.ts index ba122df9..f51ec527 100644 --- a/backend/src/app/image/image.controller.ts +++ b/backend/src/app/image/image.controller.ts @@ -6,12 +6,14 @@ import { UseInterceptors, } from '@nestjs/common'; import { FilesInterceptor } from '@nestjs/platform-express'; +import { ApiTags } from '@nestjs/swagger'; import { ApiSuccessResponse } from '@src/common/decorator/api-success-resposne.decorator'; import { ResponseEntity } from '@src/common/response-entity'; -import { ImagesUploadResponse } from './dto/images-upload-response.dto'; -import { ImageService } from './image.service'; +import { ImagesUploadResponse } from '@app/image/dto/images-upload-response.dto'; +import { ImageService } from '@app/image/image.service'; @Controller('images') +@ApiTags('Image') export class ImageController { constructor(private readonly imageService: ImageService) {} diff --git a/backend/src/app/image/image.module.ts b/backend/src/app/image/image.module.ts index c27197bc..8652f806 100644 --- a/backend/src/app/image/image.module.ts +++ b/backend/src/app/image/image.module.ts @@ -1,6 +1,6 @@ import { Module } from '@nestjs/common'; -import { ImageController } from './image.controller'; -import { ImageService } from './image.service'; +import { ImageController } from '@app/image/image.controller'; +import { ImageService } from '@app/image/image.service'; import { S3ConfigModule } from '@src/common/config/s3/config.module'; @Module({ diff --git a/backend/src/app/image/image.service.ts b/backend/src/app/image/image.service.ts index 634aa089..7fb12f6d 100644 --- a/backend/src/app/image/image.service.ts +++ b/backend/src/app/image/image.service.ts @@ -53,7 +53,7 @@ export class ImageService { } findImageExtension(fileName: string) { - const regex = /(\.gif|\.jpg|\.jpeg|\.png)$/gi; + const regex = /(\.gif|\.jpg|\.jpeg|\.png|\.webp)$/gi; const result = fileName.match(regex); return result === null ? '' : result[0]; } diff --git a/backend/src/common/config/s3/__test__/config.service.spec.ts b/backend/src/common/config/s3/__test__/config.service.spec.ts index 6b4b3c4b..abde7578 100644 --- a/backend/src/common/config/s3/__test__/config.service.spec.ts +++ b/backend/src/common/config/s3/__test__/config.service.spec.ts @@ -1,6 +1,6 @@ -import { S3ConfigService } from '../config.service'; +import { S3ConfigService } from '@config/s3/config.service'; import { Test } from '@nestjs/testing'; -import { S3ConfigModule } from '../config.module'; +import { S3ConfigModule } from '@config/s3/config.module'; describe('App Config Service Test', () => { let s3ConfigService: S3ConfigService; diff --git a/backend/src/common/config/s3/config.module.ts b/backend/src/common/config/s3/config.module.ts index 1c98cf4d..30dfe611 100644 --- a/backend/src/common/config/s3/config.module.ts +++ b/backend/src/common/config/s3/config.module.ts @@ -1,7 +1,7 @@ import { Module } from '@nestjs/common'; -import { S3ConfigService } from './config.service'; +import { S3ConfigService } from '@config/s3/config.service'; import { ConfigModule } from '@nestjs/config'; -import { s3Config } from './configuration'; +import { s3Config } from '@config/s3/configuration'; @Module({ imports: [ConfigModule.forFeature(s3Config)], diff --git a/backend/src/common/config/s3/config.service.ts b/backend/src/common/config/s3/config.service.ts index 8b130740..496ab18b 100644 --- a/backend/src/common/config/s3/config.service.ts +++ b/backend/src/common/config/s3/config.service.ts @@ -1,6 +1,6 @@ import { Inject, Injectable } from '@nestjs/common'; import { ConfigType } from '@nestjs/config'; -import { s3Config } from './configuration'; +import { s3Config } from '@config/s3/configuration'; @Injectable() export class S3ConfigService { diff --git a/backend/src/common/filter/all-exception.filter.ts b/backend/src/common/filter/all-exception.filter.ts index 1fedbb30..b792f581 100644 --- a/backend/src/common/filter/all-exception.filter.ts +++ b/backend/src/common/filter/all-exception.filter.ts @@ -10,9 +10,9 @@ import { } from '@nestjs/common'; import { HttpAdapterHost } from '@nestjs/core'; import { instanceToPlain } from 'class-transformer'; -import { ApiNotFoundException } from '../exception/api-not-found.exception'; -import { BadParameterException } from '../exception/bad-parameter.exception'; -import { ResponseEntity } from '../response-entity'; +import { ApiNotFoundException } from '@exception/api-not-found.exception'; +import { BadParameterException } from '@exception/bad-parameter.exception'; +import { ResponseEntity } from '@common/response-entity'; @Catch() export class AllExceptionFilter implements ExceptionFilter { diff --git a/backend/src/main.ts b/backend/src/main.ts index dec4300e..fee6658d 100644 --- a/backend/src/main.ts +++ b/backend/src/main.ts @@ -1,9 +1,8 @@ import { NestFactory } from '@nestjs/core'; -import { AppModule } from './app.module'; -import { AppConfigService } from './common/config/app/config.service'; - -import { setNestApp } from './setNestApp'; -import { setSwagger } from './setSwagger'; +import { AppModule } from '@src/app.module'; +import { AppConfigService } from '@src/common/config/app/config.service'; +import { setNestApp } from '@src/setNestApp'; +import { setSwagger } from '@src/setSwagger'; async function bootstrap() { const app = await NestFactory.create(AppModule); diff --git a/backend/src/setSwagger.ts b/backend/src/setSwagger.ts index 3cbbc03f..fdf906a0 100644 --- a/backend/src/setSwagger.ts +++ b/backend/src/setSwagger.ts @@ -3,6 +3,7 @@ import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger'; import { ResponseEntity } from '@common/response-entity'; import { AuthModule } from '@app/auth/auth.module'; import { ImageModule } from '@app/image/image.module'; +import { GroupArticleModule } from '@app/group-article/group-article.module'; export const setSwagger = (app: INestApplication) => { const config = new DocumentBuilder() @@ -17,7 +18,7 @@ export const setSwagger = (app: INestApplication) => { .build(); const document = SwaggerModule.createDocument(app, config, { - include: [AuthModule, ImageModule], + include: [AuthModule, ImageModule, GroupArticleModule], extraModels: [ResponseEntity], }); From f3d8602230565e8861d7df72b65de75824ba4f3e Mon Sep 17 00:00:00 2001 From: Kim Myeongil <67570061+username1103@users.noreply.github.com> Date: Mon, 28 Nov 2022 15:24:30 +0900 Subject: [PATCH 039/142] =?UTF-8?q?[Feature]=20=EB=AA=A8=EC=A7=91=20?= =?UTF-8?q?=EA=B2=8C=EC=8B=9C=EA=B8=80=20=EC=B9=B4=ED=85=8C=EA=B3=A0?= =?UTF-8?q?=EB=A6=AC=20=EC=A1=B0=ED=9A=8C=20API=20(#101)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :sparkles: feature: ์นดํ…Œ๊ณ ๋ฆฌ ๋ชฉ๋ก ์กฐํšŒ API ์ถ”๊ฐ€ * :recycle: refactor: repository ํด๋”๋กœ GroupCategoryRepositoy ์ด๋™ * :goal_net: chore: dev-deploy ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ • --- backend/scripts/dev-deploy.sh | 2 +- .../src/app/comment/entity/comment.entity.ts | 2 +- .../dto/get-cateogories-response.dto.ts | 17 +++++++++++++ .../group-article/group-article.controller.ts | 24 +++++++++++++++---- .../group-article/group-article.service.ts | 5 +--- 5 files changed, 40 insertions(+), 10 deletions(-) create mode 100644 backend/src/app/group-article/dto/get-cateogories-response.dto.ts diff --git a/backend/scripts/dev-deploy.sh b/backend/scripts/dev-deploy.sh index 30d80795..7a17aeff 100644 --- a/backend/scripts/dev-deploy.sh +++ b/backend/scripts/dev-deploy.sh @@ -13,7 +13,7 @@ echo -e $4 > .env echo "create .env" # docker down -docker compose down --rmi --remove-orphans +docker compose down --rmi all --remove-orphans # docker up docker compose up -d --build \ No newline at end of file diff --git a/backend/src/app/comment/entity/comment.entity.ts b/backend/src/app/comment/entity/comment.entity.ts index 8b223474..28b3d1de 100644 --- a/backend/src/app/comment/entity/comment.entity.ts +++ b/backend/src/app/comment/entity/comment.entity.ts @@ -38,6 +38,6 @@ export class Comment { @UpdateDateColumn({ type: 'timestamp' }) updatedAt: Date; - @Column({ type: 'timestamp' }) + @Column({ type: 'timestamp', nullable: true }) deletedAt: Date | null; } diff --git a/backend/src/app/group-article/dto/get-cateogories-response.dto.ts b/backend/src/app/group-article/dto/get-cateogories-response.dto.ts new file mode 100644 index 00000000..76f361bc --- /dev/null +++ b/backend/src/app/group-article/dto/get-cateogories-response.dto.ts @@ -0,0 +1,17 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { GroupCategory } from '@app/group-article/entity/group-category.entity'; + +export class GroupCategoryResponse { + @ApiProperty({ example: 1 }) + id: number; + + @ApiProperty({ example: '์Šคํ„ฐ๋””' }) + name: string; + + static from(groupCategory: GroupCategory) { + const dto = new GroupCategoryResponse(); + dto.id = groupCategory.id; + dto.name = groupCategory.name; + return dto; + } +} diff --git a/backend/src/app/group-article/group-article.controller.ts b/backend/src/app/group-article/group-article.controller.ts index 35437cf2..8359802a 100644 --- a/backend/src/app/group-article/group-article.controller.ts +++ b/backend/src/app/group-article/group-article.controller.ts @@ -1,22 +1,38 @@ -import { Body, Controller, HttpStatus, Post } from '@nestjs/common'; +import { Body, Controller, Get, HttpStatus, Post } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; import { ApiErrorResponse } from '@src/common/decorator/api-error-response.decorator'; import { ApiSuccessResponse } from '@src/common/decorator/api-success-resposne.decorator'; import { JwtAuth } from '@src/common/decorator/jwt-auth.decorator'; import { ResponseEntity } from '@src/common/response-entity'; -import { ARTICLE } from '@app/group-article/constants/group-article.constants'; import { GroupArticleRegisterResquest } from '@app/group-article/dto/group-article-register-request.dto'; import { GroupArticleRegisterResponse } from '@app/group-article/dto/group-article-register-response.dto'; import { GroupCategoryNotFound } from '@app/group-article/exception/group-category-not-found'; import { GroupArticleService } from '@app/group-article/group-article.service'; +import { GroupCategoryRepository } from '@app/group-article/repository/group-category.repository'; +import { GroupCategoryResponse } from '@app/group-article/dto/get-cateogories-response.dto'; @Controller('group-articles') @ApiTags('Group-Article') export class GroupArticleController { - constructor(private readonly groupArticleService: GroupArticleService) {} + constructor( + private readonly groupArticleService: GroupArticleService, + private readonly groupCategoryRepository: GroupCategoryRepository, + ) {} + + @Get('/categories') + @ApiSuccessResponse(HttpStatus.OK, GroupCategoryResponse, { isArray: true }) + async getCategories() { + const categories = await this.groupCategoryRepository.find({ + where: { deletedAt: null }, + }); + + return ResponseEntity.OK_WITH_DATA( + categories.map((category) => GroupCategoryResponse.from(category)), + ); + } @Post() - // @JwtAuth() + @JwtAuth() @ApiSuccessResponse(HttpStatus.CREATED, GroupArticleRegisterResponse) @ApiErrorResponse(GroupCategoryNotFound) async registerBoard( diff --git a/backend/src/app/group-article/group-article.service.ts b/backend/src/app/group-article/group-article.service.ts index f184d769..164f6d48 100644 --- a/backend/src/app/group-article/group-article.service.ts +++ b/backend/src/app/group-article/group-article.service.ts @@ -1,5 +1,4 @@ -import { Injectable, Logger } from '@nestjs/common'; -import { ARTICLE } from '@app/group-article/constants/group-article.constants'; +import { Injectable } from '@nestjs/common'; import { GroupArticleRegisterResquest } from '@app/group-article/dto/group-article-register-request.dto'; import { GroupArticle } from '@app/group-article/entity/group-article.entity'; import { GroupCategoryNotFound } from '@app/group-article/exception/group-category-not-found'; @@ -9,8 +8,6 @@ import { GroupRepository } from '@app/group-article/repository/group.repository' @Injectable() export class GroupArticleService { - private readonly logger = new Logger(GroupArticleService.name); - constructor( private readonly groupRepository: GroupRepository, private readonly groupArticleRepository: GroupArticleRepository, From fe050ce7da144ca1e2a5e85ce9f55532d4ad211b Mon Sep 17 00:00:00 2001 From: MinGyeong Park <37508296+kong430@users.noreply.github.com> Date: Tue, 29 Nov 2022 10:04:18 +0900 Subject: [PATCH 040/142] =?UTF-8?q?[Feature]=20=ED=94=84=EB=A1=9C=ED=95=84?= =?UTF-8?q?=20=ED=8E=98=EC=9D=B4=EC=A7=80=20=EB=A7=88=ED=81=AC=EC=97=85=20?= =?UTF-8?q?(#104)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :sparkles: feature: Profile ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ * :sparkles: feature: user ํŽ˜์ด์ง€ ๋งˆํฌ์—… * :sparkles: feature: ๋งˆ์ดํŽ˜์ด์ง€ ๋งˆํฌ์—… * :recycle: refactor: subTitle ์˜คํƒ€ ์ˆ˜์ • * :sparkles: feature: ํ”„๋กœํ•„ url ๋ฐ‘์ค„ ์—†์•ฐ --- .../common/Profile/Profile.stories.tsx | 15 +++ .../src/components/common/Profile/index.tsx | 96 +++++++++++++++ frontend/src/constants/dummy.ts | 11 +- frontend/src/constants/pageTitle.ts | 6 +- frontend/src/pages/my.tsx | 111 +++++++++++++++++- frontend/src/pages/user/[id].tsx | 40 +++++++ 6 files changed, 276 insertions(+), 3 deletions(-) create mode 100644 frontend/src/components/common/Profile/Profile.stories.tsx create mode 100644 frontend/src/components/common/Profile/index.tsx create mode 100644 frontend/src/pages/user/[id].tsx diff --git a/frontend/src/components/common/Profile/Profile.stories.tsx b/frontend/src/components/common/Profile/Profile.stories.tsx new file mode 100644 index 00000000..00cf9909 --- /dev/null +++ b/frontend/src/components/common/Profile/Profile.stories.tsx @@ -0,0 +1,15 @@ +import { ComponentMeta, ComponentStory } from '@storybook/react'; + +import { dummyUser } from '@constants/dummy'; + +import Profile from '.'; + +export default { + title: 'Component/Profile ', + component: Profile, +} as ComponentMeta; + +const Template: ComponentStory = (args) => ; + +export const _Profile = Template.bind({}); +_Profile.args = { user: dummyUser }; diff --git a/frontend/src/components/common/Profile/index.tsx b/frontend/src/components/common/Profile/index.tsx new file mode 100644 index 00000000..56629ca0 --- /dev/null +++ b/frontend/src/components/common/Profile/index.tsx @@ -0,0 +1,96 @@ +import { useTheme } from '@emotion/react'; +import styled from '@emotion/styled'; +import { Avatar, AvatarProps } from '@mantine/core'; +import { IconBrandGithub, IconLink } from '@tabler/icons'; + +import { UserType } from '@typings/types'; + +interface Props { + user: UserType; +} + +const Profile = ({ user }: Props) => { + const { + colors: { gray }, + } = useTheme(); + + const { userName, profileImage, description, githubUrl, blogUrl } = user; + + return ( + + + + {userName} + {description} + + + + + {githubUrl} + + + + {blogUrl} + + + + ); +}; +export default Profile; + +const ProfileWrapper = styled.div` + display: flex; + flex-direction: column; + gap: 1.6rem; + align-items: center; + width: 100%; +`; + +const StyledAvatar = styled(Avatar)` + width: 8.4rem; + height: 8.4rem; + border-radius: 4.2rem; +`; + +const UserWrapper = styled.div` + display: flex; + flex-direction: column; + gap: 0.8rem; + align-items: center; +`; + +const UserName = styled.span` + font-size: 2rem; + font-weight: 700; +`; + +const Description = styled.span` + font-size: 1.4rem; + font-weight: 500; + color: ${({ theme }) => theme.colors.gray[6]}; + max-width: 30rem; + text-align: center; +`; + +const UrlWrapper = styled.div` + display: flex; + flex-direction: column; + gap: 0.8rem; + align-items: center; +`; + +const UrlIconWrapper = styled.div` + display: flex; + gap: 0.4rem; + align-items: center; +`; + +const Url = styled.a` + font-size: 1.2rem; + text-decoration: none; + color: ${({ theme }) => theme.colors.gray[6]}; + max-width: 20rem; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +`; diff --git a/frontend/src/constants/dummy.ts b/frontend/src/constants/dummy.ts index 2c3e5d19..a51d0400 100644 --- a/frontend/src/constants/dummy.ts +++ b/frontend/src/constants/dummy.ts @@ -105,4 +105,13 @@ const dummyParticipants: Array> = [ }, ]; -export { dummyArticlePreview, dummyArticle, dummyParticipants }; +const dummyUser: UserType = { + id: 1, + userName: 'ํ…Œ์ŠคํŠธ์œ ์ €1', + description: 'ํ…Œ์ŠคํŠธ์œ ์ €1์ž…๋‹ˆ๋‹ค', + profileImage: 'https://avatars.githubusercontent.com/u/90585081?v=4', + githubUrl: 'https://github.com/pythonstrup', + blogUrl: 'https://myvelop.tistory.com/', +}; + +export { dummyArticlePreview, dummyArticle, dummyParticipants, dummyUser }; diff --git a/frontend/src/constants/pageTitle.ts b/frontend/src/constants/pageTitle.ts index a4123061..7ba1f203 100644 --- a/frontend/src/constants/pageTitle.ts +++ b/frontend/src/constants/pageTitle.ts @@ -21,7 +21,11 @@ const PAGE_TITLE = { }, OWN_GROUP: { title: '๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ๋ชจ์ž„', - subTItle: '๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ๋ชจ์ž„๋“ค์„ ํ™•์ธํ•ด๋ณด์„ธ์š”', + subTitle: '๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ๋ชจ์ž„๋“ค์„ ํ™•์ธํ•ด๋ณด์„ธ์š”', + }, + USER: { + title: 'ํ”„๋กœํ•„', + subTitle: 'ํ”„๋กœํ•„ ํŽ˜์ด์ง€', }, }; diff --git a/frontend/src/pages/my.tsx b/frontend/src/pages/my.tsx index 724aeb3a..03e0ae70 100644 --- a/frontend/src/pages/my.tsx +++ b/frontend/src/pages/my.tsx @@ -1,8 +1,117 @@ +import { useTheme } from '@emotion/react'; +import styled from '@emotion/styled'; +import { Button } from '@mantine/core'; +import { IconFlag, IconPencil } from '@tabler/icons'; + +import Header from '@components/common/Header'; +import RootTitle from '@components/common/Header/RootTitle'; import NavigationTab from '@components/common/NavigationTab'; import PageLayout from '@components/common/PageLayout'; +import Profile from '@components/common/Profile'; +import { dummyUser } from '@constants/dummy'; +import { PAGE_TITLE } from '@constants/pageTitle'; const My = () => { - return }>my page; + const { + colors: { red, cyan }, + } = useTheme(); + + return ( + } + /> + } + footer={} + > + + + + + + + + + + + ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ๋ชจ์ž„ + + + + + + + ๋‚ด๊ฐ€ ์ฐธ์—ฌํ•œ ๋ชจ์ž„ + + + + + ); }; export default My; + +const ContentWrapper = styled.div` + display: flex; + flex-direction: column; + gap: 1.6rem; + padding: 1.6rem; +`; + +const ProfileWrapper = styled.div` + display: flex; + flex-direction: column; + gap: 2.4rem; + width: 100%; + padding: 1.6rem; + border: 0.1rem solid ${({ theme }) => theme.colors.gray[2]}; + border-radius: 1.2rem; +`; + +const LinkButtonWrapper = styled.div` + border: 0.1rem solid ${({ theme }) => theme.colors.gray[2]}; + border-radius: 1.2rem; + overflow: hidden; +`; + +const LinkButton = styled.div` + display: flex; + gap: 2rem; + padding: 1.6rem; + align-items: center; + &:hover { + cursor: pointer; + background-color: ${({ theme }) => theme.colors.gray[1]}; + } +`; + +const ButtonTitle = styled.div` + font-size: 1.4rem; + font-weight: 500; +`; + +const WroteIcon = styled.div` + width: 2.6rem; + height: 2.6rem; + padding: 0.6rem; + background-color: ${({ theme }) => theme.colors.red[0]}; + border-radius: 0.4rem; +`; + +const ParticipatedIcon = styled.div` + width: 2.6rem; + height: 2.6rem; + padding: 0.6rem; + background-color: ${({ theme }) => theme.colors.cyan[0]}; + border-radius: 0.4rem; +`; + +const Divider = styled.div` + width: 100%; + height: 0.05rem; + background-color: ${({ theme }) => theme.colors.gray[2]}; +`; diff --git a/frontend/src/pages/user/[id].tsx b/frontend/src/pages/user/[id].tsx new file mode 100644 index 00000000..cd284407 --- /dev/null +++ b/frontend/src/pages/user/[id].tsx @@ -0,0 +1,40 @@ +import styled from '@emotion/styled'; + +import Header from '@components/common/Header'; +import DetailTitle from '@components/common/Header/DetailTitle'; +import PageLayout from '@components/common/PageLayout'; +import Profile from '@components/common/Profile'; +import { dummyUser } from '@constants/dummy'; +import { PAGE_TITLE } from '@constants/pageTitle'; + +const UserProfile = () => { + return ( + } + /> + } + > + + + + + + + ); +}; + +export default UserProfile; + +const ContentWrapper = styled.div` + display: flex; + padding: 1.6rem; +`; + +const ProfileWrapper = styled.div` + width: 100%; + padding: 1.6rem; + border: 0.1rem solid ${({ theme }) => theme.colors.gray[2]}; + border-radius: 1.2rem; +`; From dba8d77dfb57153de9a09c004dd908bd4dec770d Mon Sep 17 00:00:00 2001 From: MinGyeong Park <37508296+kong430@users.noreply.github.com> Date: Tue, 29 Nov 2022 10:06:50 +0900 Subject: [PATCH 041/142] =?UTF-8?q?[Feature]=20404,=20500=20=EC=97=90?= =?UTF-8?q?=EB=9F=AC=20=ED=8E=98=EC=9D=B4=EC=A7=80=20(#107)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :sparkles: feature: ErrorMessage ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ ๋ฐ 404 500 ํŽ˜์ด์ง€ ์ƒ์„ฑ * :recycle: refactor: error message ์ƒ์ˆ˜ ์ •์˜ --- .../ErrorMessage/ErrorMessage.stories.tsx | 28 ++++++ .../components/common/ErrorMessage/index.tsx | 85 +++++++++++++++++++ frontend/src/constants/error.ts | 14 +++ frontend/src/pages/404.tsx | 17 ++++ frontend/src/pages/500.tsx | 17 ++++ 5 files changed, 161 insertions(+) create mode 100644 frontend/src/components/common/ErrorMessage/ErrorMessage.stories.tsx create mode 100644 frontend/src/components/common/ErrorMessage/index.tsx create mode 100644 frontend/src/constants/error.ts create mode 100644 frontend/src/pages/404.tsx create mode 100644 frontend/src/pages/500.tsx diff --git a/frontend/src/components/common/ErrorMessage/ErrorMessage.stories.tsx b/frontend/src/components/common/ErrorMessage/ErrorMessage.stories.tsx new file mode 100644 index 00000000..a74b2960 --- /dev/null +++ b/frontend/src/components/common/ErrorMessage/ErrorMessage.stories.tsx @@ -0,0 +1,28 @@ +import { ComponentMeta, ComponentStory } from '@storybook/react'; + +import { ERROR_MESSAGE } from '@constants/error'; + +import ErrorMessage from '.'; + +export default { + title: 'Component/ErrorMessage', + component: ErrorMessage, +} as ComponentMeta; + +const Template: ComponentStory = (args) => ; + +export const _404 = Template.bind({}); +_404.args = { + errorCode: 404, + title: ERROR_MESSAGE['404'].title, + description: ERROR_MESSAGE['404'].description, + subDescription: ERROR_MESSAGE['404'].subDescription, +}; + +export const _500 = Template.bind({}); +_500.args = { + errorCode: 500, + title: ERROR_MESSAGE['500'].title, + description: ERROR_MESSAGE['500'].description, + subDescription: ERROR_MESSAGE['500'].subDescription, +}; diff --git a/frontend/src/components/common/ErrorMessage/index.tsx b/frontend/src/components/common/ErrorMessage/index.tsx new file mode 100644 index 00000000..69accb87 --- /dev/null +++ b/frontend/src/components/common/ErrorMessage/index.tsx @@ -0,0 +1,85 @@ +import Link from 'next/link'; + +import { useTheme } from '@emotion/react'; +import styled from '@emotion/styled'; +import { IconZoomExclamation } from '@tabler/icons'; + +interface Props { + errorCode: number; + title?: string; + description?: string; + subDescription?: string; +} + +const ErrorMessage = ({ errorCode, title, description, subDescription }: Props) => { + const { + colors: { gray }, + } = useTheme(); + + return ( + + + {errorCode} + {title} + {description} + {subDescription} + + + ํ™ˆํŽ˜์ด์ง€๋กœ ๋Œ์•„๊ฐ€๊ธฐ + + + + ); +}; + +export default ErrorMessage; + +const MessageWrapper = styled.div` + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 100vh; +`; + +const ErrorCode = styled.div` + font-size: 6.4rem; + font-weight: 900; + color: ${({ theme }) => theme.colors.gray[4]}; + margin-top: 0.8rem; +`; + +const Title = styled.div` + font-size: 2.4rem; + font-weight: 900; + margin-top: 2.4rem; + text-align: center; +`; + +const Description = styled.div` + font-size: 1.6rem; + font-weight: 900; + margin-top: 3.6rem; + text-align: center; +`; + +const SubDescription = styled.div` + font-size: 1.6rem; + font-weight: 900; + text-align: center; +`; + +const BackHomeButton = styled.div` + margin-top: 3.6rem; + background-color: ${({ theme }) => theme.white}; + border: none; +`; + +const BackHomeText = styled.span` + font-size: 1.6rem; + font-weight: 900; + color: ${({ theme }) => theme.colors.indigo[7]}; + &:hover { + cursor: pointer; + } +`; diff --git a/frontend/src/constants/error.ts b/frontend/src/constants/error.ts new file mode 100644 index 00000000..252980f2 --- /dev/null +++ b/frontend/src/constants/error.ts @@ -0,0 +1,14 @@ +const ERROR_MESSAGE = { + 404: { + title: '์ €ํฌ์˜ ๋นˆํ‹ˆ์„ ์ฐพ์œผ์…จ๊ตฐ์š”', + description: '์—ฌ๊ธฐ๋Š” ๊ทธ์ € ๋นˆ ํŽ˜์ด์ง€ ์ž…๋‹ˆ๋‹ค.', + subDescription: 'ํ™ˆ ํŽ˜์ด์ง€๋กœ ๋Œ๋ ค๋ณด๋‚ด๋“œ๋ฆด๊ฒŒ์š”.', + }, + 500: { + title: '์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์–ด์š”', + description: '์ €ํฌ๊ฐ€ ๋ญ˜ ์ž˜๋ชป ๋งŒ๋“ค์—ˆ๋‚˜๋ด์š”.', + subDescription: '๊ธˆ๋ฐฉ ํ•ด๊ฒฐํ•ด๋“œ๋ฆด๊ฒŒ์š”.', + }, +}; + +export { ERROR_MESSAGE }; diff --git a/frontend/src/pages/404.tsx b/frontend/src/pages/404.tsx new file mode 100644 index 00000000..74f1c429 --- /dev/null +++ b/frontend/src/pages/404.tsx @@ -0,0 +1,17 @@ +import ErrorMessage from '@components/common/ErrorMessage'; +import { ERROR_MESSAGE } from '@constants/error'; + +const Custom404 = () => { + const { title, description, subDescription } = ERROR_MESSAGE['404']; + + return ( + + ); +}; + +export default Custom404; diff --git a/frontend/src/pages/500.tsx b/frontend/src/pages/500.tsx new file mode 100644 index 00000000..9dcddebb --- /dev/null +++ b/frontend/src/pages/500.tsx @@ -0,0 +1,17 @@ +import ErrorMessage from '@components/common/ErrorMessage'; +import { ERROR_MESSAGE } from '@constants/error'; + +const Custom500 = () => { + const { title, description, subDescription } = ERROR_MESSAGE['500']; + + return ( + + ); +}; + +export default Custom500; From 69277cc2f28dd9ff80b31004a6fff721f18273c1 Mon Sep 17 00:00:00 2001 From: Gakko <90585081+pythonstrup@users.noreply.github.com> Date: Tue, 29 Nov 2022 10:38:57 +0900 Subject: [PATCH 042/142] =?UTF-8?q?[Feature]=20=EB=82=B4=20=EC=A0=95?= =?UTF-8?q?=EB=B3=B4=20=EC=A1=B0=ED=9A=8C=20API=20(#109)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * โœจ feature: cookies request dto ์ž‘์„ฑ * โœจ feature: myinfo get response dto ์ž‘์„ฑ * โœจ feature: cookie custom decorator ์ž‘์„ฑ * โœจ feature: myinfo service ์ž‘์„ฑ * ๐Ÿฅ… chore: myinfo get response dto from ๋ฉ”์†Œ๋“œ ์ˆ˜์ • * โœจ feature: myinfo controller ์ž‘์„ฑ * โœจ feature: myinfo module ์ž‘์„ฑ * โœจ feature: myinfo module์„ app์— ์ ์šฉ * โœจ feature: myinfo swagger ์ ์šฉ * ๐Ÿฅ… chore: exception ํŒŒ์ผ ์ด๋ฆ„ ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: ๋ถˆํ•„์š”ํ•œ ํŒŒ์ผ ์ œ๊ฑฐ ๋ฐ ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ ์šฉ * ๐Ÿฅ… chore: Exception ํด๋ž˜์Šค ์ด๋ฆ„ ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ ์šฉ * ๐Ÿฅ… chore: ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ๋ฐฉ์‹ ๋ณ€๊ฒฝ * โœจ feature: get myinfo Exception ์ž‘์„ฑ * ๐Ÿฅ… chore: user ์œ ํšจ์„ฑ ๊ฒ€์ฆ ๋ฐ api error response ๋“ฑ๋ก * ๐Ÿฅ… chore: app e2e test ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋‚ด์šฉ ๋ฐ˜์˜ --- backend/src/app.controller.ts | 2 +- backend/src/app.module.ts | 2 + ... => group-category-not-found.exception.ts} | 2 +- .../group-article/group-article.controller.ts | 4 +- .../group-article/group-article.service.ts | 6 +- .../app/myinfo/dto/myinfo-get-response.dto.ts | 58 +++++++++++++++++++ backend/src/app/myinfo/myinfo.controller.ts | 28 +++++++++ backend/src/app/myinfo/myinfo.module.ts | 12 ++++ backend/src/app/myinfo/myinfo.service.ts | 7 +++ backend/src/app/user/user.repository.ts | 4 ++ .../decorator/current-user.decorator.ts | 8 +++ backend/src/setSwagger.ts | 3 +- backend/test/app.e2e-spec.ts | 4 +- 13 files changed, 129 insertions(+), 11 deletions(-) rename backend/src/app/group-article/exception/{group-category-not-found.ts => group-category-not-found.exception.ts} (73%) create mode 100644 backend/src/app/myinfo/dto/myinfo-get-response.dto.ts create mode 100644 backend/src/app/myinfo/myinfo.controller.ts create mode 100644 backend/src/app/myinfo/myinfo.module.ts create mode 100644 backend/src/app/myinfo/myinfo.service.ts create mode 100644 backend/src/common/decorator/current-user.decorator.ts diff --git a/backend/src/app.controller.ts b/backend/src/app.controller.ts index e54f4255..8cc65927 100644 --- a/backend/src/app.controller.ts +++ b/backend/src/app.controller.ts @@ -17,7 +17,7 @@ export class ExampleDto { id: number; } -@Controller() +@Controller('test') @ApiTags('example') export class AppController { constructor(private readonly appService: AppService) {} diff --git a/backend/src/app.module.ts b/backend/src/app.module.ts index 97618d93..f3911a48 100644 --- a/backend/src/app.module.ts +++ b/backend/src/app.module.ts @@ -9,6 +9,7 @@ import { JwtTokenModule } from '@common/module/jwt-token/jwt-token.module'; import { AuthModule } from '@app/auth/auth.module'; import { ImageModule } from '@app/image/image.module'; import { GroupArticleModule } from '@app/group-article/group-article.module'; +import { MyInfoModule } from '@app/myinfo/myinfo.module'; @Module({ imports: [ @@ -18,6 +19,7 @@ import { GroupArticleModule } from '@app/group-article/group-article.module'; AuthModule, ImageModule, GroupArticleModule, + MyInfoModule, ], controllers: [AppController], providers: [AppService], diff --git a/backend/src/app/group-article/exception/group-category-not-found.ts b/backend/src/app/group-article/exception/group-category-not-found.exception.ts similarity index 73% rename from backend/src/app/group-article/exception/group-category-not-found.ts rename to backend/src/app/group-article/exception/group-category-not-found.exception.ts index 254d032c..df7e1011 100644 --- a/backend/src/app/group-article/exception/group-category-not-found.ts +++ b/backend/src/app/group-article/exception/group-category-not-found.exception.ts @@ -1,6 +1,6 @@ import { NotFoundException } from '@nestjs/common'; -export class GroupCategoryNotFound extends NotFoundException { +export class GroupCategoryNotFoundException extends NotFoundException { constructor(message = 'ํ•ด๋‹น ์นดํ…Œ๊ณ ๋ฆฌ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.') { super({ status: 'GROUP_CATEGORY_NOT_FOUND', message }); } diff --git a/backend/src/app/group-article/group-article.controller.ts b/backend/src/app/group-article/group-article.controller.ts index 8359802a..cce221fa 100644 --- a/backend/src/app/group-article/group-article.controller.ts +++ b/backend/src/app/group-article/group-article.controller.ts @@ -6,7 +6,7 @@ import { JwtAuth } from '@src/common/decorator/jwt-auth.decorator'; import { ResponseEntity } from '@src/common/response-entity'; import { GroupArticleRegisterResquest } from '@app/group-article/dto/group-article-register-request.dto'; import { GroupArticleRegisterResponse } from '@app/group-article/dto/group-article-register-response.dto'; -import { GroupCategoryNotFound } from '@app/group-article/exception/group-category-not-found'; +import { GroupCategoryNotFoundException } from '@app/group-article/exception/group-category-not-found.exception'; import { GroupArticleService } from '@app/group-article/group-article.service'; import { GroupCategoryRepository } from '@app/group-article/repository/group-category.repository'; import { GroupCategoryResponse } from '@app/group-article/dto/get-cateogories-response.dto'; @@ -34,7 +34,7 @@ export class GroupArticleController { @Post() @JwtAuth() @ApiSuccessResponse(HttpStatus.CREATED, GroupArticleRegisterResponse) - @ApiErrorResponse(GroupCategoryNotFound) + @ApiErrorResponse(GroupCategoryNotFoundException) async registerBoard( @Body() groupArticleRegisterResquest: GroupArticleRegisterResquest, ) { diff --git a/backend/src/app/group-article/group-article.service.ts b/backend/src/app/group-article/group-article.service.ts index 164f6d48..0ca92d95 100644 --- a/backend/src/app/group-article/group-article.service.ts +++ b/backend/src/app/group-article/group-article.service.ts @@ -1,15 +1,13 @@ import { Injectable } from '@nestjs/common'; import { GroupArticleRegisterResquest } from '@app/group-article/dto/group-article-register-request.dto'; import { GroupArticle } from '@app/group-article/entity/group-article.entity'; -import { GroupCategoryNotFound } from '@app/group-article/exception/group-category-not-found'; +import { GroupCategoryNotFoundException } from '@src/app/group-article/exception/group-category-not-found.exception'; import { GroupArticleRepository } from '@app/group-article/repository/article.repository'; import { GroupCategoryRepository } from '@app/group-article/repository/group-category.repository'; -import { GroupRepository } from '@app/group-article/repository/group.repository'; @Injectable() export class GroupArticleService { constructor( - private readonly groupRepository: GroupRepository, private readonly groupArticleRepository: GroupArticleRepository, private readonly groupCategoryRepository: GroupCategoryRepository, ) {} @@ -21,7 +19,7 @@ export class GroupArticleService { groupArticleRegisterResquest.category, ); if (!category) { - throw new GroupCategoryNotFound(); + throw new GroupCategoryNotFoundException(); } const groupArticle = GroupArticle.register({ diff --git a/backend/src/app/myinfo/dto/myinfo-get-response.dto.ts b/backend/src/app/myinfo/dto/myinfo-get-response.dto.ts new file mode 100644 index 00000000..c4cee0f5 --- /dev/null +++ b/backend/src/app/myinfo/dto/myinfo-get-response.dto.ts @@ -0,0 +1,58 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { User } from '@src/app/user/entity/user.entity'; + +export class MyInfoGetResponse { + @ApiProperty({ + example: 1, + description: 'user id', + required: true, + }) + id: number; + + @ApiProperty({ + example: 'pythonstrup', + description: 'username', + required: true, + }) + username: string; + + @ApiProperty({ + example: + 'https://kr.object.ncloudstorage.com/uploads/images/1669276833875-64adca9c-94cd-4162-a53f-f75e951e39db', + description: 'ํ”„๋กœํ•„ ์ด๋ฏธ์ง€', + required: true, + }) + profileImage: string; + + @ApiProperty({ + example: '์•ˆ๋…•ํ•˜์„ธ์š” ์›นํ’€์Šคํƒ ๊ฐœ๋ฐœ์ž pythonstrup์ž…๋‹ˆ๋‹ค!', + description: '๊ฐ„๋‹จํ•œ ์ž๊ธฐ์†Œ๊ฐœ', + required: true, + }) + description: string; + + @ApiProperty({ + example: 'https://github.com/pythonstrup', + description: '๊นƒํ—ˆ๋ธŒ ์ฃผ์†Œ', + required: true, + }) + githubUrl: string; + + @ApiProperty({ + example: 'https://myvelop.tistory.com/', + description: '๋ธ”๋กœ๊ทธ ์ฃผ์†Œ', + required: true, + }) + blogUrl: string; + + static from(user: User) { + const response = new User(); + response.id = user.id; + response.username = user.username; + response.profileImage = user.profileImage; + response.description = user.description; + response.githubUrl = user.githubUrl; + response.blogUrl = user.blogUrl; + return response; + } +} diff --git a/backend/src/app/myinfo/myinfo.controller.ts b/backend/src/app/myinfo/myinfo.controller.ts new file mode 100644 index 00000000..f8cce5e0 --- /dev/null +++ b/backend/src/app/myinfo/myinfo.controller.ts @@ -0,0 +1,28 @@ +import { Controller, Get, HttpStatus, Put } from '@nestjs/common'; +import { JwtAuth } from '@src/common/decorator/jwt-auth.decorator'; +import { MyInfoService } from '@app/myinfo/myinfo.service'; +import { ApiTags } from '@nestjs/swagger'; +import { ApiSuccessResponse } from '@src/common/decorator/api-success-resposne.decorator'; +import { MyInfoGetResponse } from '@app/myinfo/dto/myinfo-get-response.dto'; +import { ResponseEntity } from '@src/common/response-entity'; +import { CurrentUser } from '@src/common/decorator/current-user.decorator'; +import { User } from '@app/user/entity/user.entity'; + +@Controller('/my-info') +@JwtAuth() +@ApiTags('MyInfo') +export class MyInfoController { + constructor(private readonly myInfoService: MyInfoService) {} + + @Get() + @ApiSuccessResponse(HttpStatus.OK, MyInfoGetResponse) + async getMyInfo(@CurrentUser() user: User) { + const data = MyInfoGetResponse.from(user); + return ResponseEntity.OK_WITH_DATA(data); + } + + @Put() + modifyMyInfo() { + return ''; + } +} diff --git a/backend/src/app/myinfo/myinfo.module.ts b/backend/src/app/myinfo/myinfo.module.ts new file mode 100644 index 00000000..548cf267 --- /dev/null +++ b/backend/src/app/myinfo/myinfo.module.ts @@ -0,0 +1,12 @@ +import { Module } from '@nestjs/common'; +import { UserRepository } from '@app/user/user.repository'; +import { MyInfoController } from '@app/myinfo/myinfo.controller'; +import { MyInfoService } from '@app/myinfo/myinfo.service'; +import { JwtTokenModule } from '@src/common/module/jwt-token/jwt-token.module'; + +@Module({ + imports: [JwtTokenModule], + controllers: [MyInfoController], + providers: [UserRepository, MyInfoService], +}) +export class MyInfoModule {} diff --git a/backend/src/app/myinfo/myinfo.service.ts b/backend/src/app/myinfo/myinfo.service.ts new file mode 100644 index 00000000..a8973280 --- /dev/null +++ b/backend/src/app/myinfo/myinfo.service.ts @@ -0,0 +1,7 @@ +import { Injectable } from '@nestjs/common'; +import { UserRepository } from '@app/user/user.repository'; + +@Injectable() +export class MyInfoService { + constructor(private readonly userRepository: UserRepository) {} +} diff --git a/backend/src/app/user/user.repository.ts b/backend/src/app/user/user.repository.ts index 15a0c29b..1347846e 100644 --- a/backend/src/app/user/user.repository.ts +++ b/backend/src/app/user/user.repository.ts @@ -15,4 +15,8 @@ export class UserRepository extends Repository { findBySocial(socialId: string, socialType: string) { return this.findOneBy({ socialId, socialType }); } + + async findById(id: number) { + return this.findOneBy({ id }); + } } diff --git a/backend/src/common/decorator/current-user.decorator.ts b/backend/src/common/decorator/current-user.decorator.ts new file mode 100644 index 00000000..873d7f3c --- /dev/null +++ b/backend/src/common/decorator/current-user.decorator.ts @@ -0,0 +1,8 @@ +import { createParamDecorator, ExecutionContext } from '@nestjs/common'; + +export const CurrentUser = createParamDecorator( + (data: unknown, context: ExecutionContext) => { + const request = context.switchToHttp().getRequest(); + return request.user; + }, +); diff --git a/backend/src/setSwagger.ts b/backend/src/setSwagger.ts index fdf906a0..15171a40 100644 --- a/backend/src/setSwagger.ts +++ b/backend/src/setSwagger.ts @@ -4,6 +4,7 @@ import { ResponseEntity } from '@common/response-entity'; import { AuthModule } from '@app/auth/auth.module'; import { ImageModule } from '@app/image/image.module'; import { GroupArticleModule } from '@app/group-article/group-article.module'; +import { MyInfoModule } from './app/myinfo/myinfo.module'; export const setSwagger = (app: INestApplication) => { const config = new DocumentBuilder() @@ -18,7 +19,7 @@ export const setSwagger = (app: INestApplication) => { .build(); const document = SwaggerModule.createDocument(app, config, { - include: [AuthModule, ImageModule, GroupArticleModule], + include: [AuthModule, ImageModule, GroupArticleModule, MyInfoModule], extraModels: [ResponseEntity], }); diff --git a/backend/test/app.e2e-spec.ts b/backend/test/app.e2e-spec.ts index 2c2ee0aa..032894da 100644 --- a/backend/test/app.e2e-spec.ts +++ b/backend/test/app.e2e-spec.ts @@ -27,8 +27,8 @@ describe('AppController (e2e)', () => { await dataSource.destroy(); }); - describe('GET /v1/:id', () => { - const url = (id) => `/v1/${id}`; + describe('GET /v1/test/:id', () => { + const url = (id) => `/v1/test/${id}`; test('example test', async () => { // given From fe0567b5bc3cfdfed9674840bdc0e3a954fdefa2 Mon Sep 17 00:00:00 2001 From: yangseungchan Date: Tue, 29 Nov 2022 10:45:12 +0900 Subject: [PATCH 043/142] =?UTF-8?q?[Feature]=20=ED=94=84=EB=A1=9C=ED=95=84?= =?UTF-8?q?=20=EC=88=98=EC=A0=95=20=ED=8E=98=EC=9D=B4=EC=A7=80=20=EB=A7=88?= =?UTF-8?q?=ED=81=AC=EC=97=85=20(#106)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ๐Ÿฅ… chore: ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ alert๋ฅผ ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ๋กœ ๊ต์ฒด * ๐Ÿฅ… chore: github์— ํ˜ธ์ŠคํŒ…๋œ ์ด๋ฏธ์ง€๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ์„ค์ • * โœจ feature: user data๋ฅผ fetch ํ•˜๋Š” react-query hook ์ƒ์„ฑ * ๐Ÿฅ… chore: ์ „์ฒด ํŽ˜์ด์ง€ ์ œ๋ชฉ ์„ค์ • * โœจ feature: ํ”„๋กœํ•„ ์ˆ˜์ • ํŽ˜์ด์ง€ ๋งˆํฌ์—…๋งŒ ์ถ”๊ฐ€ * ๐Ÿฅ… chore: ๋‹‰๋„ค์ž„๊ณผ ์†Œ๊ฐœ๋ž€์— ๊ธ€์ž์ˆ˜ ์ œํ•œ ๋ช…์‹œ * ๐Ÿฅ… chore: ํŽ˜์ด์ง€ ํ•˜๋‹จ ํŒจ๋”ฉ ์ถ”๊ฐ€ * โ™ป๏ธ refactor: PR ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ˜์˜ํ•˜๋Š” ๋ฆฌํŒฉํ† ๋ง --- frontend/next.config.js | 3 + frontend/src/apis/test/getTestMyData.ts | 7 + frontend/src/hooks/queries/useFetchMyData.ts | 19 +++ frontend/src/mocks/handlers.ts | 2 + frontend/src/mocks/resolvers/getMyInfo.ts | 5 + frontend/src/pages/_app.tsx | 2 +- frontend/src/pages/article/write/index.tsx | 15 ++- frontend/src/pages/my/edit.tsx | 128 +++++++++++++++++++ 8 files changed, 179 insertions(+), 2 deletions(-) create mode 100644 frontend/src/apis/test/getTestMyData.ts create mode 100644 frontend/src/hooks/queries/useFetchMyData.ts create mode 100644 frontend/src/mocks/resolvers/getMyInfo.ts create mode 100644 frontend/src/pages/my/edit.tsx diff --git a/frontend/next.config.js b/frontend/next.config.js index c6a36b11..89f46b88 100644 --- a/frontend/next.config.js +++ b/frontend/next.config.js @@ -13,6 +13,9 @@ const nextConfig = { } return config; }, + images: { + domains: ["avatars.githubusercontent.com"], + } } module.exports = nextConfig diff --git a/frontend/src/apis/test/getTestMyData.ts b/frontend/src/apis/test/getTestMyData.ts new file mode 100644 index 00000000..f4802c97 --- /dev/null +++ b/frontend/src/apis/test/getTestMyData.ts @@ -0,0 +1,7 @@ +import axios from 'axios'; + +const getTestUserData = async () => { + return axios.get(`http://testServer/my-info`); +}; + +export default getTestUserData; diff --git a/frontend/src/hooks/queries/useFetchMyData.ts b/frontend/src/hooks/queries/useFetchMyData.ts new file mode 100644 index 00000000..51d0c706 --- /dev/null +++ b/frontend/src/hooks/queries/useFetchMyData.ts @@ -0,0 +1,19 @@ +import { useQuery } from '@tanstack/react-query'; +import { AxiosError, AxiosResponse } from 'axios'; + +import getTestMyData from '@apis/test/getTestMyData'; +import { UserType } from '@typings/types'; + +const useFetchMyData = () => { + const { data, isLoading } = useQuery, AxiosError, UserType>( + ['myinfo'], + getTestMyData, + { + select: (data) => data.data, + } + ); + + return { data, isLoading }; +}; + +export default useFetchMyData; diff --git a/frontend/src/mocks/handlers.ts b/frontend/src/mocks/handlers.ts index dd4b222e..16ab30de 100644 --- a/frontend/src/mocks/handlers.ts +++ b/frontend/src/mocks/handlers.ts @@ -2,9 +2,11 @@ import { rest } from 'msw'; import { getGroupArticles } from '@mocks/resolvers/getGroupArticles'; +import { getMyInfo } from './resolvers/getMyInfo'; import { getTest } from './resolvers/test'; export const handlers = [ rest.get('http://testServer/test', getTest), rest.get('http://testServer/group-articles', getGroupArticles), + rest.get('http://testServer/my-info', getMyInfo), ]; diff --git a/frontend/src/mocks/resolvers/getMyInfo.ts b/frontend/src/mocks/resolvers/getMyInfo.ts new file mode 100644 index 00000000..3f7bef9d --- /dev/null +++ b/frontend/src/mocks/resolvers/getMyInfo.ts @@ -0,0 +1,5 @@ +import { dummyUser } from '@constants/dummy'; + +export const getMyInfo = (req: any, res: any, ctx: any) => { + return res(ctx.status(200), ctx.json({ ...dummyUser })); +}; diff --git a/frontend/src/pages/_app.tsx b/frontend/src/pages/_app.tsx index 12084e49..5056a086 100644 --- a/frontend/src/pages/_app.tsx +++ b/frontend/src/pages/_app.tsx @@ -27,7 +27,7 @@ export default function App({ Component, pageProps }: AppProps) { return ( <> - Page title + ๋ชจ์—ฌ๋ชจ์—ฌ - ๊ฐœ๋ฐœ์ž ์†Œ๋ชจ์ž„ ์ปค๋ฎค๋‹ˆํ‹ฐ diff --git a/frontend/src/pages/article/write/index.tsx b/frontend/src/pages/article/write/index.tsx index c6ec6845..50a4d1ad 100644 --- a/frontend/src/pages/article/write/index.tsx +++ b/frontend/src/pages/article/write/index.tsx @@ -7,6 +7,7 @@ import { IconCheck, IconUpload, IconUser } from '@tabler/icons'; import ArticleEditor from '@components/article/ArticleEditor'; import ImageThumbnail from '@components/article/ImageThumbnail'; +import AlertModal from '@components/common/AlertModal'; import DropDown from '@components/common/DropDown'; import Header from '@components/common/Header'; import DetailTitle from '@components/common/Header/DetailTitle'; @@ -22,6 +23,7 @@ import { Location, LocationKr } from '@constants/location'; */ const WritePage = () => { + const [confirmModalOpen, setConfirmModalOpen] = useState(false); const [category, setCategory] = useState(null); const [location, setLocation] = useState(null); const [maxCapacity, setmaxCapacity] = useState(5); @@ -39,6 +41,12 @@ const WritePage = () => { chatLink.length > 0 && uploadedImage; + const handleSubmit = () => { + if (!possibleToSubmit) return; + // TODO API ํ˜ธ์ถœ + setConfirmModalOpen(true); + }; + return ( <> @@ -52,7 +60,7 @@ const WritePage = () => { alert('๊ฒŒ์‹œ๊ธ€ ๋“ฑ๋ก!')} + onClick={handleSubmit} > @@ -60,6 +68,11 @@ const WritePage = () => { /> } > + setConfirmModalOpen(false)} + /> { + const { data: myData, isLoading } = useFetchMyData(); + + const [userDataInput, setUserDataInput] = useState>({ + userName: '', + profileImage: '', + description: '', + githubUrl: '', + blogUrl: '', + }); + + useEffect(() => { + if (!isLoading) { + const { id, ...rest } = myData; + setUserDataInput({ ...rest }); + } + }, [isLoading, myData]); + + const handleUserDataChange = (e: ChangeEvent) => { + const { name, value } = e.target; + setUserDataInput((prev) => ({ ...prev, [name]: value })); + }; + + return ( + +
    } + rightNode={ + alert('๊ฒŒ์‹œ๊ธ€ ๋“ฑ๋ก!')}> + + + } + /> + + {isLoading ? ( + + ) : ( + + )} + + + } + styles={{ label: { paddingBottom: '0.4rem' } }} + /> + + + + + + + ); +}; + +export default MyEditPage; + +const ProfileImageSection = styled.div` + display: flex; + justify-content: center; + width: 100%; + margin-top: 2.4rem; + margin-bottom: 1.6rem; +`; + +const ProfileImage = styled(Image)` + border-radius: 50%; +`; + +const InputsSections = styled.div` + display: flex; + flex-direction: column; + gap: 2.4rem; + width: 100%; + padding-left: 1.6rem; + padding-right: 1.6rem; + padding-bottom: 1.6rem; +`; From 5966e363c3d1b14f39da587bc0dc94fb9f833424 Mon Sep 17 00:00:00 2001 From: Kim Myeongil <67570061+username1103@users.noreply.github.com> Date: Tue, 29 Nov 2022 10:52:55 +0900 Subject: [PATCH 044/142] =?UTF-8?q?[Feature]=20=EB=AA=A8=EC=A7=91=20?= =?UTF-8?q?=EA=B2=8C=EC=8B=9C=EA=B8=80=20=EC=A1=B0=ED=9A=8C=20API=20?= =?UTF-8?q?=EC=A0=9C=EC=9E=91=20=20(#111)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :sparkles: feature: group article ๋ชจ๋“ˆ ์ถ”๊ฐ€ * :sparkles: feature: groupArticle ๊ฒ€์ƒ‰ ์ฟผ๋ฆฌ ์ถ”๊ฐ€ * :sparkles: feature: NoOffsetPageRequest ์ถ”๊ฐ€ * :sparkles: feature: ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€ ๊ฒ€์ƒ‰ ์ฟผ๋ฆฌ ์ถ”๊ฐ€ * :sparkles: feature: pagination์„ ์œ„ํ•œ ์š”์ฒญ/๊ฒฐ๊ณผ ๊ฐ์ฒด ์ถ”๊ฐ€ * :sparkles: feature: ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก ์กฐํšŒ API ์ถ”๊ฐ€ * :recycle: refactor: PageResult, PageRequest util ํด๋”๋กœ ์ด๋™ * :goal_net: chore: pageResult ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ * :sparkles: feature: ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€ ์กฐํšŒ ํŽ˜์ด์ง• ๊ฒฐ๊ณผ์— thumbnail url ์ถ”๊ฐ€ * :sparkles: feature: ๋น ๋ฅธ ๊ฐœ๋ฐœ์„ ์œ„ํ•ด ์šฐ์„  CORS ๊ฐœ๋ฐฉ * :sparkles: feature: group entity enum ์ œ๊ฑฐ * :sparkles: feature: image response dto ์ถ”๊ฐ€ --- .../dto/group-article-search-result.dto.ts | 72 +++++++++++++++ .../group-article-search-result.interface.ts | 30 +++++++ .../dto/search-group-articles-request.dto.ts | 29 +++++++ .../dto/search-group-articles-response.dto.ts | 12 +++ .../group-article/entity/article.entity.ts | 3 - .../entity/group-article.entity.ts | 9 +- .../app/group-article/entity/group.entity.ts | 21 +++-- .../group-article/group-article.controller.ts | 27 +++++- .../app/group-article/group-article.module.ts | 7 +- .../group-article/group-article.service.ts | 2 +- .../repository/article.repository.ts | 14 --- .../repository/group-article.repository.ts | 87 +++++++++++++++++++ backend/src/app/image/image.module.ts | 1 + .../config/database/typeorm/config.service.ts | 1 + backend/src/common/dto/image-response.dto.ts | 18 ++++ .../common/util/__test__/page-result.spec.ts | 27 ++++++ backend/src/common/util/page-request.ts | 36 ++++++++ backend/src/common/util/page-result.ts | 41 +++++++++ backend/src/setNestApp.ts | 3 + backend/src/setSwagger.ts | 3 +- 20 files changed, 411 insertions(+), 32 deletions(-) create mode 100644 backend/src/app/group-article/dto/group-article-search-result.dto.ts create mode 100644 backend/src/app/group-article/dto/group-article-search-result.interface.ts create mode 100644 backend/src/app/group-article/dto/search-group-articles-request.dto.ts create mode 100644 backend/src/app/group-article/dto/search-group-articles-response.dto.ts delete mode 100644 backend/src/app/group-article/repository/article.repository.ts create mode 100644 backend/src/app/group-article/repository/group-article.repository.ts create mode 100644 backend/src/common/dto/image-response.dto.ts create mode 100644 backend/src/common/util/__test__/page-result.spec.ts create mode 100644 backend/src/common/util/page-request.ts create mode 100644 backend/src/common/util/page-result.ts diff --git a/backend/src/app/group-article/dto/group-article-search-result.dto.ts b/backend/src/app/group-article/dto/group-article-search-result.dto.ts new file mode 100644 index 00000000..4efb3b4c --- /dev/null +++ b/backend/src/app/group-article/dto/group-article-search-result.dto.ts @@ -0,0 +1,72 @@ +import { + GROUP_STATUS, + LOCATION, +} from '@app/group-article/constants/group-article.constants'; +import { ApiProperty } from '@nestjs/swagger'; +import { GroupCategoryResponse } from '@app/group-article/dto/get-cateogories-response.dto'; +import { IGroupArticleSearchResult } from '@app/group-article/dto/group-article-search-result.interface'; +import { ImageService } from '@app/image/image.service'; +import { IamgeResponse } from '@common/dto/image-response.dto'; + +export class GroupArticleSearchResult { + @ApiProperty({ example: 1, description: '๊ฒŒ์‹œ๊ธ€ ์•„์ด๋””' }) + id: number; + + @ApiProperty({ example: 'test001', description: '๊ฒŒ์‹œ๊ธ€ ์ œ๋ชฉ' }) + title: string; + + @ApiProperty({ type: IamgeResponse }) + thumbnail: IamgeResponse; + + @ApiProperty({ + example: GROUP_STATUS.PROGRESS, + description: '๋ชจ์ง‘ ์ƒํƒœ', + }) + status: GROUP_STATUS; + + @ApiProperty({ example: LOCATION.BUSAN, description: '๋ชจ์ง‘ ์žฅ์†Œ' }) + location: LOCATION; + + @ApiProperty({ type: GroupCategoryResponse }) + category: GroupCategoryResponse; + + @ApiProperty({ example: 10, description: '๋ชจ์ง‘ ์ตœ๋Œ€ ์ธ์› ์ˆ˜' }) + maxCapacity: number; + + @ApiProperty({ example: 3, description: 'ํ˜„์žฌ ์‹ ์ฒญ์ž ์ˆ˜' }) + currentCapacity: number; + + @ApiProperty({ example: 0, description: '์Šคํฌ๋žฉ ์ˆ˜' }) + scrapCount: number; + + @ApiProperty({ example: 1, description: '๋Œ“๊ธ€ ์ˆ˜' }) + commentCount: number; + + @ApiProperty({ + example: '2022-11-27T16:19:51.706Z', + description: '๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ์ผ', + }) + createdAt: Date; + + static from(row: IGroupArticleSearchResult, imageService: ImageService) { + const res = new GroupArticleSearchResult(); + res.id = row.id; + res.title = row.title; + res.thumbnail = { + key: row.thumbnail, + url: imageService.getStorageUrl([row.thumbnail])[0], + }; + res.category = { + id: row.groupCategoryId, + name: row.groupCategoryName, + }; + res.location = row.location; + res.status = row.status; + res.maxCapacity = row.maxCapacity; + res.currentCapacity = row.currentCapacity; + res.commentCount = row.commentCount; + res.scrapCount = row.scrapCount; + res.createdAt = row.createdAt; + return res; + } +} diff --git a/backend/src/app/group-article/dto/group-article-search-result.interface.ts b/backend/src/app/group-article/dto/group-article-search-result.interface.ts new file mode 100644 index 00000000..6592257d --- /dev/null +++ b/backend/src/app/group-article/dto/group-article-search-result.interface.ts @@ -0,0 +1,30 @@ +import { + GROUP_STATUS, + LOCATION, +} from '@app/group-article/constants/group-article.constants'; + +export interface IGroupArticleSearchResult { + id: number; + + title: string; + + thumbnail: string; + + status: GROUP_STATUS; + + location: LOCATION; + + groupCategoryId: number; + + groupCategoryName: string; + + maxCapacity: number; + + currentCapacity: number; + + scrapCount: number; + + commentCount: number; + + createdAt: Date; +} diff --git a/backend/src/app/group-article/dto/search-group-articles-request.dto.ts b/backend/src/app/group-article/dto/search-group-articles-request.dto.ts new file mode 100644 index 00000000..ffed73bf --- /dev/null +++ b/backend/src/app/group-article/dto/search-group-articles-request.dto.ts @@ -0,0 +1,29 @@ +import { PageRequest } from '@common/util/page-request'; +import { + CATEGORY, + GROUP_STATUS, + LOCATION, +} from '@app/group-article/constants/group-article.constants'; +import { IsEnum, IsOptional } from 'class-validator'; +import { ApiProperty } from '@nestjs/swagger'; + +export class SearchGroupArticlesRequest extends PageRequest { + @IsOptional() + @IsEnum(CATEGORY) + @ApiProperty({ example: CATEGORY.STUDY, enum: CATEGORY, required: false }) + category?: CATEGORY; + + @IsOptional() + @IsEnum(LOCATION) + @ApiProperty({ example: LOCATION.ONLINE, enum: LOCATION, required: false }) + location?: LOCATION; + + @IsOptional() + @IsEnum(GROUP_STATUS) + @ApiProperty({ + example: GROUP_STATUS.PROGRESS, + enum: GROUP_STATUS, + required: false, + }) + status?: GROUP_STATUS; +} diff --git a/backend/src/app/group-article/dto/search-group-articles-response.dto.ts b/backend/src/app/group-article/dto/search-group-articles-response.dto.ts new file mode 100644 index 00000000..df6074c9 --- /dev/null +++ b/backend/src/app/group-article/dto/search-group-articles-response.dto.ts @@ -0,0 +1,12 @@ +import { Expose } from 'class-transformer'; +import { PageResult } from '@common/util/page-result'; +import { ApiProperty } from '@nestjs/swagger'; +import { GroupArticleSearchResult } from '@app/group-article/dto/group-article-search-result.dto'; + +export class SearchGroupArticleResponse extends PageResult { + @Expose() + @ApiProperty({ type: GroupArticleSearchResult, isArray: true }) + get data() { + return this._data; + } +} diff --git a/backend/src/app/group-article/entity/article.entity.ts b/backend/src/app/group-article/entity/article.entity.ts index 702cfa0a..fea40784 100644 --- a/backend/src/app/group-article/entity/article.entity.ts +++ b/backend/src/app/group-article/entity/article.entity.ts @@ -13,9 +13,6 @@ export abstract class Article { @PrimaryGeneratedColumn({ unsigned: true }) id: number; - @Column({ type: 'varchar', length: 300 }) - thumbnail: string; - @Column({ type: 'varchar', length: 100 }) title: string; diff --git a/backend/src/app/group-article/entity/group-article.entity.ts b/backend/src/app/group-article/entity/group-article.entity.ts index 6ea665d6..7a903a80 100644 --- a/backend/src/app/group-article/entity/group-article.entity.ts +++ b/backend/src/app/group-article/entity/group-article.entity.ts @@ -2,7 +2,10 @@ import { ChildEntity, OneToOne } from 'typeorm'; import { Article } from '@app/group-article/entity/article.entity'; import { Group } from '@app/group-article/entity/group.entity'; import { GroupCategory } from '@app/group-article/entity/group-category.entity'; -import { ARTICLE } from '@app/group-article/constants/group-article.constants'; +import { + ARTICLE, + LOCATION, +} from '@app/group-article/constants/group-article.constants'; @ChildEntity(ARTICLE.GROUP) export class GroupArticle extends Article { @@ -24,7 +27,7 @@ export class GroupArticle extends Article { title: string; contents: string; thumbnail: string; - location: string; + location: LOCATION; chatUrl: string; maxCapacity: number; category: GroupCategory; @@ -33,12 +36,12 @@ export class GroupArticle extends Article { article.title = title; article.contents = contents; article.type = ARTICLE.GROUP; - article.thumbnail = thumbnail; article.group = Group.register({ location, chatUrl, maxCapacity, category, + thumbnail, }); return article; } diff --git a/backend/src/app/group-article/entity/group.entity.ts b/backend/src/app/group-article/entity/group.entity.ts index 70011958..39f5d0b3 100644 --- a/backend/src/app/group-article/entity/group.entity.ts +++ b/backend/src/app/group-article/entity/group.entity.ts @@ -8,7 +8,10 @@ import { PrimaryGeneratedColumn, UpdateDateColumn, } from 'typeorm'; -import { GROUP_STATUS } from '@app/group-article/constants/group-article.constants'; +import { + GROUP_STATUS, + LOCATION, +} from '@app/group-article/constants/group-article.constants'; import { GroupArticle } from '@app/group-article/entity/group-article.entity'; import { GroupCategory } from '@app/group-article/entity/group-category.entity'; @@ -25,18 +28,21 @@ export class Group { @JoinColumn({ referencedColumnName: 'id', name: 'category_id' }) category: GroupCategory; - @Column() - location: string; + @Column({ type: 'varchar', length: 30 }) + location: LOCATION; @Column() maxCapacity: number; - @Column() - status: string; + @Column({ type: 'varchar', length: 30 }) + status: GROUP_STATUS; @Column() chatUrl: string; + @Column({ type: 'varchar', length: 300 }) + thumbnail: string; + @CreateDateColumn() createdAt: Date; @@ -48,11 +54,13 @@ export class Group { chatUrl, maxCapacity, category, + thumbnail, }: { - location: string; + location: LOCATION; chatUrl: string; maxCapacity: number; category: GroupCategory; + thumbnail: string; }) { const group = new Group(); group.location = location; @@ -60,6 +68,7 @@ export class Group { group.chatUrl = chatUrl; group.maxCapacity = maxCapacity; group.category = category; + group.thumbnail = thumbnail; return group; } diff --git a/backend/src/app/group-article/group-article.controller.ts b/backend/src/app/group-article/group-article.controller.ts index cce221fa..b9e51c6a 100644 --- a/backend/src/app/group-article/group-article.controller.ts +++ b/backend/src/app/group-article/group-article.controller.ts @@ -1,4 +1,4 @@ -import { Body, Controller, Get, HttpStatus, Post } from '@nestjs/common'; +import { Body, Controller, Get, HttpStatus, Post, Query } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; import { ApiErrorResponse } from '@src/common/decorator/api-error-response.decorator'; import { ApiSuccessResponse } from '@src/common/decorator/api-success-resposne.decorator'; @@ -10,6 +10,11 @@ import { GroupCategoryNotFoundException } from '@app/group-article/exception/gro import { GroupArticleService } from '@app/group-article/group-article.service'; import { GroupCategoryRepository } from '@app/group-article/repository/group-category.repository'; import { GroupCategoryResponse } from '@app/group-article/dto/get-cateogories-response.dto'; +import { GroupArticleRepository } from '@app/group-article/repository/group-article.repository'; +import { SearchGroupArticlesRequest } from '@app/group-article/dto/search-group-articles-request.dto'; +import { SearchGroupArticleResponse } from '@app/group-article/dto/search-group-articles-response.dto'; +import { GroupArticleSearchResult } from '@app/group-article/dto/group-article-search-result.dto'; +import { ImageService } from '@app/image/image.service'; @Controller('group-articles') @ApiTags('Group-Article') @@ -17,6 +22,8 @@ export class GroupArticleController { constructor( private readonly groupArticleService: GroupArticleService, private readonly groupCategoryRepository: GroupCategoryRepository, + private readonly groupArticleRepository: GroupArticleRepository, + private readonly imageService: ImageService, ) {} @Get('/categories') @@ -45,4 +52,22 @@ export class GroupArticleController { return ResponseEntity.CREATED_WITH_DATA(data); } + + @Get('/search') + @JwtAuth() + @ApiSuccessResponse(HttpStatus.OK, SearchGroupArticleResponse) + async search(@Query() query: SearchGroupArticlesRequest) { + const result = await this.groupArticleRepository.search(query); + + return ResponseEntity.OK_WITH_DATA( + new SearchGroupArticleResponse( + result[1], + query.currentPage, + query.countPerPage, + result[0].map((row) => + GroupArticleSearchResult.from(row, this.imageService), + ), + ), + ); + } } diff --git a/backend/src/app/group-article/group-article.module.ts b/backend/src/app/group-article/group-article.module.ts index d480af87..085ee1c9 100644 --- a/backend/src/app/group-article/group-article.module.ts +++ b/backend/src/app/group-article/group-article.module.ts @@ -2,18 +2,19 @@ import { Module } from '@nestjs/common'; import { JwtTokenModule } from '@src/common/module/jwt-token/jwt-token.module'; import { GroupArticleController } from '@app/group-article/group-article.controller'; import { GroupArticleService } from '@app/group-article/group-article.service'; -import { GroupArticleRepository } from '@app/group-article/repository/article.repository'; import { GroupCategoryRepository } from '@app/group-article/repository/group-category.repository'; import { GroupRepository } from '@app/group-article/repository/group.repository'; +import { GroupArticleRepository } from '@app/group-article/repository/group-article.repository'; +import { ImageModule } from '@app/image/image.module'; @Module({ - imports: [JwtTokenModule], + imports: [JwtTokenModule, ImageModule], controllers: [GroupArticleController], providers: [ GroupArticleService, GroupRepository, - GroupArticleRepository, GroupCategoryRepository, + GroupArticleRepository, ], }) export class GroupArticleModule {} diff --git a/backend/src/app/group-article/group-article.service.ts b/backend/src/app/group-article/group-article.service.ts index 0ca92d95..8de1679d 100644 --- a/backend/src/app/group-article/group-article.service.ts +++ b/backend/src/app/group-article/group-article.service.ts @@ -2,8 +2,8 @@ import { Injectable } from '@nestjs/common'; import { GroupArticleRegisterResquest } from '@app/group-article/dto/group-article-register-request.dto'; import { GroupArticle } from '@app/group-article/entity/group-article.entity'; import { GroupCategoryNotFoundException } from '@src/app/group-article/exception/group-category-not-found.exception'; -import { GroupArticleRepository } from '@app/group-article/repository/article.repository'; import { GroupCategoryRepository } from '@app/group-article/repository/group-category.repository'; +import { GroupArticleRepository } from '@app/group-article/repository/group-article.repository'; @Injectable() export class GroupArticleService { diff --git a/backend/src/app/group-article/repository/article.repository.ts b/backend/src/app/group-article/repository/article.repository.ts deleted file mode 100644 index 1d150ab1..00000000 --- a/backend/src/app/group-article/repository/article.repository.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { DataSource, Repository } from 'typeorm'; -import { Injectable } from '@nestjs/common'; -import { GroupArticle } from '@app/group-article/entity/group-article.entity'; - -@Injectable() -export class GroupArticleRepository extends Repository { - constructor(private readonly dataSource: DataSource) { - super( - GroupArticle, - dataSource.createEntityManager(), - dataSource.createQueryRunner(), - ); - } -} diff --git a/backend/src/app/group-article/repository/group-article.repository.ts b/backend/src/app/group-article/repository/group-article.repository.ts new file mode 100644 index 00000000..f917f5c7 --- /dev/null +++ b/backend/src/app/group-article/repository/group-article.repository.ts @@ -0,0 +1,87 @@ +import { Injectable } from '@nestjs/common'; +import { DataSource, Repository } from 'typeorm'; +import { GroupArticle } from '@app/group-article/entity/group-article.entity'; +import { Group } from '@app/group-article/entity/group.entity'; +import { GroupCategory } from '@app/group-article/entity/group-category.entity'; +import { GroupApplication } from '@app/group-application/entity/group-application.entity'; +import { Scrap } from '@app/scrap/entity/scrap.entity'; +import { Comment } from '@app/comment/entity/comment.entity'; +import { SearchGroupArticlesRequest } from '@app/group-article/dto/search-group-articles-request.dto'; +import { IGroupArticleSearchResult } from '@app/group-article/dto/group-article-search-result.interface'; + +@Injectable() +export class GroupArticleRepository extends Repository { + constructor(private readonly dataSource: DataSource) { + super( + GroupArticle, + dataSource.createEntityManager(), + dataSource.createQueryRunner(), + ); + } + + async search( + searchRequest: SearchGroupArticlesRequest, + ): Promise<[IGroupArticleSearchResult[], number]> { + const query = this.createQueryBuilder('groupArticle') + .select([ + 'groupArticle.id as id', + 'groupArticle.title as title', + 'groupArticle.createdAt as createdAt', + 'group.maxCapacity as maxCapacity', + 'group.thumbnail as thumbnail', + 'group.status as status', + 'group.location as location', + 'groupCategory.id as groupCategoryId', + 'groupCategory.name as groupCategoryName', + 'COUNT(DISTINCT groupApplication.id) as currentCapacity', + 'COUNT(DISTINCT scrap.id) as scrapCount', + 'COUNT(DISTINCT comment.id) as commentCount', + ]) + .leftJoin(Group, 'group', 'groupArticle.id = group.article_id') + .leftJoin( + GroupCategory, + 'groupCategory', + 'groupCategory.id = group.category.id AND groupCategory.deletedAt IS NULL', + ) + .leftJoin( + GroupApplication, + 'groupApplication', + 'group.id = groupApplication.groupId AND groupApplication.deletedAt IS NULL', + ) + .leftJoin( + Comment, + 'comment', + 'groupArticle.id = comment.articleId AND comment.deletedAt IS NULL', + ) + .leftJoin(Scrap, 'scrap', 'groupArticle.id = scrap.articleId') + .where('groupArticle.deletedAt IS NULL') + .groupBy('groupArticle.id') + .orderBy('groupArticle.id', 'DESC'); + + if (searchRequest.location) { + query.andWhere('group.location = :location', { + location: searchRequest.location, + }); + } + + if (searchRequest.category) { + query.andWhere('groupCategory.name = :categoryName', { + categoryName: searchRequest.category, + }); + } + + if (searchRequest.status) { + query.andWhere('group.status = :status', { + status: searchRequest.status, + }); + } + + const count = await query.clone().getCount(); + const result = await query + .limit(searchRequest.getLimit()) + .offset(searchRequest.getOffset()) + .getRawMany(); + + return [result, count]; + } +} diff --git a/backend/src/app/image/image.module.ts b/backend/src/app/image/image.module.ts index 8652f806..0e4e6f9d 100644 --- a/backend/src/app/image/image.module.ts +++ b/backend/src/app/image/image.module.ts @@ -7,5 +7,6 @@ import { S3ConfigModule } from '@src/common/config/s3/config.module'; imports: [S3ConfigModule], controllers: [ImageController], providers: [ImageService], + exports: [ImageService], }) export class ImageModule {} diff --git a/backend/src/common/config/database/typeorm/config.service.ts b/backend/src/common/config/database/typeorm/config.service.ts index cb936e6b..5406f997 100644 --- a/backend/src/common/config/database/typeorm/config.service.ts +++ b/backend/src/common/config/database/typeorm/config.service.ts @@ -33,6 +33,7 @@ export class TypeOrmConfigService implements TypeOrmOptionsFactory { entities: [entityPath], dropSchema: this.appConfigServce.isTest(), namingStrategy: new SnakeNamingStrategy(), + timezone: 'Z', }; } } diff --git a/backend/src/common/dto/image-response.dto.ts b/backend/src/common/dto/image-response.dto.ts new file mode 100644 index 00000000..bda7685f --- /dev/null +++ b/backend/src/common/dto/image-response.dto.ts @@ -0,0 +1,18 @@ +import { ApiProperty } from '@nestjs/swagger'; + +export class IamgeResponse { + @ApiProperty({ + example: '1669276833875-64adca9c-94cd-4162-a53f-f75e951e39db', + description: '์ด๋ฏธ์ง€ key', + required: true, + }) + key: string; + + @ApiProperty({ + example: + 'https://kr.object.ncloudstorage.com/uploads/images/1669276833875-64adca9c-94cd-4162-a53f-f75e951e39db', + description: '๋ฒ„ํ‚ท ์ด๋ฏธ์ง€ url', + required: true, + }) + url: string; +} diff --git a/backend/src/common/util/__test__/page-result.spec.ts b/backend/src/common/util/__test__/page-result.spec.ts new file mode 100644 index 00000000..ccab1851 --- /dev/null +++ b/backend/src/common/util/__test__/page-result.spec.ts @@ -0,0 +1,27 @@ +import { PageResult } from '@common/util/page-result'; + +describe('Paging Result Test', () => { + test.each([ + { currentPage: 1, countPerPage: 20, totalCount: 40, totalPage: 2 }, + { currentPage: 1, countPerPage: 7, totalCount: 40, totalPage: 6 }, + { currentPage: 1, countPerPage: 50, totalCount: 40, totalPage: 1 }, + { currentPage: 1, countPerPage: 12, totalCount: 40, totalPage: 4 }, + ])( + 'currentPage=$currentPage, countPerPage=$countPerPAge, totalCount=$totalCount ์ด๋ฉด totalPage=$totalPage', + async ({ countPerPage, currentPage, totalCount, totalPage }) => { + // given + const Test = class extends PageResult { + get data() { + return this._data; + } + }; + // when + const result = new Test(totalCount, currentPage, countPerPage, []); + + // then + expect(result.totalPage).toEqual(totalPage); + expect(result.currentPage).toEqual(currentPage); + expect(result.countPerPage).toEqual(countPerPage); + }, + ); +}); diff --git a/backend/src/common/util/page-request.ts b/backend/src/common/util/page-request.ts new file mode 100644 index 00000000..38c39d6f --- /dev/null +++ b/backend/src/common/util/page-request.ts @@ -0,0 +1,36 @@ +import { IsNumber, IsOptional, Min } from 'class-validator'; +import { ApiProperty } from '@nestjs/swagger'; +import { Type } from 'class-transformer'; + +export class PageRequest { + @IsOptional() + @IsNumber() + @Type(() => Number) + @Min(1) + @ApiProperty({ + type: Number, + example: 1, + description: 'ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ', + required: false, + }) + currentPage = 1; + + @IsOptional() + @IsNumber() + @Type(() => Number) + @ApiProperty({ + type: Number, + example: 10, + description: 'ํŽ˜์ด์ง€๋‹น ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜', + required: false, + }) + countPerPage = 10; + + getLimit() { + return this.countPerPage; + } + + getOffset() { + return this.countPerPage * (this.currentPage - 1); + } +} diff --git a/backend/src/common/util/page-result.ts b/backend/src/common/util/page-result.ts new file mode 100644 index 00000000..77995dd3 --- /dev/null +++ b/backend/src/common/util/page-result.ts @@ -0,0 +1,41 @@ +import { Exclude, Expose } from 'class-transformer'; +import { ApiProperty } from '@nestjs/swagger'; + +export abstract class PageResult { + @Exclude() protected readonly _totalCount: number; + @Exclude() protected readonly _currentPage: number; + @Exclude() protected readonly _countPerPage: number; + @Exclude() protected readonly _data: T[]; + + constructor( + totalCount: number, + currentPage: number, + countPerPage: number, + data: T[], + ) { + this._totalCount = totalCount; + this._currentPage = currentPage; + this._countPerPage = countPerPage; + this._data = data; + } + + @Expose() + @ApiProperty({ example: 100, description: '์ „์ฒด ํŽ˜์ด์ง€์ˆ˜' }) + get totalPage() { + return Math.ceil(this._totalCount / this._countPerPage); + } + + @Expose() + @ApiProperty({ example: 1, description: 'ํ˜„์žฌ ํŽ˜์ด์ง€' }) + get currentPage() { + return this._currentPage; + } + + @Expose() + @ApiProperty({ example: 20, description: 'ํŽ˜์ด์ง€ ๋‹น ๊ฐœ์ˆ˜' }) + get countPerPage() { + return this._countPerPage; + } + + abstract get data(): T[]; +} diff --git a/backend/src/setNestApp.ts b/backend/src/setNestApp.ts index 2e0a8508..d0c7c93c 100644 --- a/backend/src/setNestApp.ts +++ b/backend/src/setNestApp.ts @@ -13,6 +13,9 @@ import { AllExceptionFilter } from '@filter/all-exception.filter'; export const setNestApp = (app: INestApplication) => { app.use(cookieParser()); + // TODO: cors ์„ค์ •์„ nginx๋กœ ์˜ฎ๊ธฐ๊ฑฐ๋‚˜ ์ ์ ˆํ•œ ์„ค์ • ํ•„์š” + app.enableCors(); + app.enableVersioning({ type: VersioningType.URI, defaultVersion: '1', diff --git a/backend/src/setSwagger.ts b/backend/src/setSwagger.ts index 15171a40..ceacbed5 100644 --- a/backend/src/setSwagger.ts +++ b/backend/src/setSwagger.ts @@ -4,13 +4,14 @@ import { ResponseEntity } from '@common/response-entity'; import { AuthModule } from '@app/auth/auth.module'; import { ImageModule } from '@app/image/image.module'; import { GroupArticleModule } from '@app/group-article/group-article.module'; -import { MyInfoModule } from './app/myinfo/myinfo.module'; +import { MyInfoModule } from '@app/myinfo/myinfo.module'; export const setSwagger = (app: INestApplication) => { const config = new DocumentBuilder() .setTitle('MoyeoMoyeo REST API Specification') .setVersion('1.0.0') .addServer(`http://localhost`) + .addServer('http://api.moyeomoyeo.com') .addCookieAuth( 'access_token', { type: 'apiKey', in: 'cookie' }, From c95243e5d77baa11b2d81bfe4259cac9207c97a8 Mon Sep 17 00:00:00 2001 From: Gakko <90585081+pythonstrup@users.noreply.github.com> Date: Tue, 29 Nov 2022 11:02:36 +0900 Subject: [PATCH 045/142] =?UTF-8?q?[Feature]=20=EB=8B=89=EB=84=A4=EC=9E=84?= =?UTF-8?q?=20Unique=20=EC=B2=B4=ED=81=AC=20API=20(#113)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * โœจ feature: UserRepository findByUsername ๋ฉ”์†Œ๋“œ ์ž‘์„ฑ * โœจ feature: userService ์ž‘์„ฑ - ๋‹‰๋„ค์ž„์ด ๊ณ ์œ ํ•œ์ง€ ํ™•์ธ * โœจ feature: userController ์ž‘์„ฑ - ๋‹‰๋„ค์ž„ ์œ ๋‹ˆํฌ API - ์Šค์›จ๊ฑฐ ์ ์šฉ * โœจ feature: nickname unique dto ์ž‘์„ฑ * โœจ feature: ๋ชจ๋“ˆ ๋ฐ ์Šค์›จ๊ฑฐ ์ ์šฉ * ๐Ÿฅ… chore: prettier ์ ์šฉ * ๐Ÿฅ… chore: ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋ฐ˜์˜ --- backend/src/app.module.ts | 2 ++ .../user/dto/nickname-unique-request.dto.ts | 12 +++++++ .../user/dto/nickname-unique-response.dto.ts | 16 ++++++++++ backend/src/app/user/user.controller.ts | 31 +++++++++++++++++++ backend/src/app/user/user.module.ts | 7 ++++- backend/src/app/user/user.repository.ts | 4 +-- backend/src/app/user/user.service.ts | 11 +++++++ backend/src/setSwagger.ts | 9 +++++- 8 files changed, 88 insertions(+), 4 deletions(-) create mode 100644 backend/src/app/user/dto/nickname-unique-request.dto.ts create mode 100644 backend/src/app/user/dto/nickname-unique-response.dto.ts create mode 100644 backend/src/app/user/user.controller.ts create mode 100644 backend/src/app/user/user.service.ts diff --git a/backend/src/app.module.ts b/backend/src/app.module.ts index f3911a48..a68228b2 100644 --- a/backend/src/app.module.ts +++ b/backend/src/app.module.ts @@ -9,6 +9,7 @@ import { JwtTokenModule } from '@common/module/jwt-token/jwt-token.module'; import { AuthModule } from '@app/auth/auth.module'; import { ImageModule } from '@app/image/image.module'; import { GroupArticleModule } from '@app/group-article/group-article.module'; +import { UserModule } from '@app/user/user.module'; import { MyInfoModule } from '@app/myinfo/myinfo.module'; @Module({ @@ -19,6 +20,7 @@ import { MyInfoModule } from '@app/myinfo/myinfo.module'; AuthModule, ImageModule, GroupArticleModule, + UserModule, MyInfoModule, ], controllers: [AppController], diff --git a/backend/src/app/user/dto/nickname-unique-request.dto.ts b/backend/src/app/user/dto/nickname-unique-request.dto.ts new file mode 100644 index 00000000..3fbead1d --- /dev/null +++ b/backend/src/app/user/dto/nickname-unique-request.dto.ts @@ -0,0 +1,12 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { IsString } from 'class-validator'; + +export class NicknameUniqueRequest { + @ApiProperty({ + example: 'pythonstrup', + description: '์œ ์ € ์ด๋ฆ„', + required: true, + }) + @IsString() + username: string; +} diff --git a/backend/src/app/user/dto/nickname-unique-response.dto.ts b/backend/src/app/user/dto/nickname-unique-response.dto.ts new file mode 100644 index 00000000..9f6123d9 --- /dev/null +++ b/backend/src/app/user/dto/nickname-unique-response.dto.ts @@ -0,0 +1,16 @@ +import { ApiProperty } from '@nestjs/swagger'; + +export class NicknameUniqueResponse { + @ApiProperty({ + example: true, + description: '์ด๋ฏธ ์ ์œ ๋œ ๋‹‰๋„ค์ž„์ธ์ง€ ๋ถˆ๋ฆฌ์–ธ ๊ฐ’์œผ๋กœ ์•Œ๋ ค์คŒ', + required: true, + }) + isOccupied: boolean; + + static from(isOccupied: boolean) { + const response = new NicknameUniqueResponse(); + response.isOccupied = isOccupied; + return response; + } +} diff --git a/backend/src/app/user/user.controller.ts b/backend/src/app/user/user.controller.ts new file mode 100644 index 00000000..de4b3ce7 --- /dev/null +++ b/backend/src/app/user/user.controller.ts @@ -0,0 +1,31 @@ +import { Body, Controller, Get, HttpStatus, Post } from '@nestjs/common'; +import { UserService } from '@app/user/user.service'; +import { ApiTags } from '@nestjs/swagger'; +import { JwtAuth } from '@src/common/decorator/jwt-auth.decorator'; +import { ApiSuccessResponse } from '@src/common/decorator/api-success-resposne.decorator'; +import { NicknameUniqueRequest } from '@app/user//dto/nickname-unique-request.dto'; +import { NicknameUniqueResponse } from '@app/user/dto/nickname-unique-response.dto'; +import { ResponseEntity } from '@src/common/response-entity'; + +@Controller('users') +@ApiTags('User') +export class UserController { + constructor(private readonly userService: UserService) {} + + @Get() + @JwtAuth() + getUserInfo() { + return ''; + } + + @Post('nickname/is-occupied') + @JwtAuth() + @ApiSuccessResponse(HttpStatus.OK, NicknameUniqueResponse) + checkUsernameUnique(@Body() nicknameUniqueRequest: NicknameUniqueRequest) { + const result = this.userService.checkUsernameUnique( + nicknameUniqueRequest.username, + ); + const data = NicknameUniqueResponse.from(result); + return ResponseEntity.OK_WITH_DATA(data); + } +} diff --git a/backend/src/app/user/user.module.ts b/backend/src/app/user/user.module.ts index c8d2eb09..647ce484 100644 --- a/backend/src/app/user/user.module.ts +++ b/backend/src/app/user/user.module.ts @@ -1,8 +1,13 @@ import { Module } from '@nestjs/common'; import { UserRepository } from '@app/user/user.repository'; +import { UserService } from '@app/user/user.service'; +import { UserController } from '@app/user/user.controller'; +import { JwtTokenModule } from '@src/common/module/jwt-token/jwt-token.module'; @Module({ - providers: [UserRepository], + imports: [JwtTokenModule], + controllers: [UserController], + providers: [UserService, UserRepository], exports: [UserRepository], }) export class UserModule {} diff --git a/backend/src/app/user/user.repository.ts b/backend/src/app/user/user.repository.ts index 1347846e..e61eefb1 100644 --- a/backend/src/app/user/user.repository.ts +++ b/backend/src/app/user/user.repository.ts @@ -16,7 +16,7 @@ export class UserRepository extends Repository { return this.findOneBy({ socialId, socialType }); } - async findById(id: number) { - return this.findOneBy({ id }); + findByUsername(username: string) { + return this.findOneBy({ username }); } } diff --git a/backend/src/app/user/user.service.ts b/backend/src/app/user/user.service.ts new file mode 100644 index 00000000..77cd110c --- /dev/null +++ b/backend/src/app/user/user.service.ts @@ -0,0 +1,11 @@ +import { Injectable } from '@nestjs/common'; +import { UserRepository } from '@app/user/user.repository'; + +@Injectable() +export class UserService { + constructor(private readonly userRepository: UserRepository) {} + + checkUsernameUnique(username: string) { + return this.userRepository.findByUsername(username) ? false : true; + } +} diff --git a/backend/src/setSwagger.ts b/backend/src/setSwagger.ts index ceacbed5..d7a9b875 100644 --- a/backend/src/setSwagger.ts +++ b/backend/src/setSwagger.ts @@ -4,6 +4,7 @@ import { ResponseEntity } from '@common/response-entity'; import { AuthModule } from '@app/auth/auth.module'; import { ImageModule } from '@app/image/image.module'; import { GroupArticleModule } from '@app/group-article/group-article.module'; +import { UserModule } from '@app/user/user.module'; import { MyInfoModule } from '@app/myinfo/myinfo.module'; export const setSwagger = (app: INestApplication) => { @@ -20,7 +21,13 @@ export const setSwagger = (app: INestApplication) => { .build(); const document = SwaggerModule.createDocument(app, config, { - include: [AuthModule, ImageModule, GroupArticleModule, MyInfoModule], + include: [ + AuthModule, + ImageModule, + GroupArticleModule, + UserModule, + MyInfoModule, + ], extraModels: [ResponseEntity], }); From ff61ff75a5d93f00e76bfc67f19fb49da9aae421 Mon Sep 17 00:00:00 2001 From: Gakko <90585081+pythonstrup@users.noreply.github.com> Date: Tue, 29 Nov 2022 13:18:45 +0900 Subject: [PATCH 046/142] =?UTF-8?q?[BugFix]=20=ED=94=84=EB=A1=A0=ED=8A=B8?= =?UTF-8?q?=EC=97=94=EB=93=9C=20HTTPS=20=EB=B0=B0=ED=8F=AC=20(#121)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ๐Ÿ› : test๋ฅผ ์œ„ํ•œ cd * ๐Ÿ› : ํ”„๋ก ํŠธ https bugfix ์™„๋ฃŒ --- .github/workflows/frontend-cd.yml | 1 + frontend/docker-compose.yml | 1 + frontend/scripts/dev-deploy.sh | 8 +------- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/.github/workflows/frontend-cd.yml b/.github/workflows/frontend-cd.yml index 159a9d29..a55f3503 100644 --- a/.github/workflows/frontend-cd.yml +++ b/.github/workflows/frontend-cd.yml @@ -71,6 +71,7 @@ jobs: cd web13-moyeomoyeo + git checkout -t origin/develop sudo chmod +x ./frontend/scripts/dev-deploy.sh diff --git a/frontend/docker-compose.yml b/frontend/docker-compose.yml index 370cee0e..298958bd 100644 --- a/frontend/docker-compose.yml +++ b/frontend/docker-compose.yml @@ -19,6 +19,7 @@ services: - 80:80 - 443:443 volumes: + - ./dev/default/nginx.conf:/etc/nginx/nginx.conf - ./dev/nginx:/etc/nginx/conf.d - /letsencrypt/certbot/conf:/etc/letsencrypt - /letsencrypt/certbot/www:/var/www/certbot diff --git a/frontend/scripts/dev-deploy.sh b/frontend/scripts/dev-deploy.sh index ad46900f..ab7c1749 100644 --- a/frontend/scripts/dev-deploy.sh +++ b/frontend/scripts/dev-deploy.sh @@ -11,12 +11,6 @@ touch .env echo $4 > .env # docker down -docker compose down - -# ๋„์ปค ์ปจํ…Œ์ด๋„ˆ ์ „์ฒด ์‚ญ์ œ -docker rm `docker ps -a -q` - -# ๋„์ปค ์ด๋ฏธ์ง€ ์ „์ฒด ์‚ญ์ œ -docker rmi `docker images -q` +docker compose down --rmi all --remove-orphans docker compose up -d --build \ No newline at end of file From a4774138b4656ee7fdb86e0db8439c460855ca55 Mon Sep 17 00:00:00 2001 From: yangseungchan Date: Tue, 29 Nov 2022 13:54:17 +0900 Subject: [PATCH 047/142] =?UTF-8?q?[Feature]=20=EB=82=B4=EA=B0=80=20?= =?UTF-8?q?=EC=B0=B8=EC=97=AC=ED=95=9C=20=EA=B7=B8=EB=A3=B9=20=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20=EC=B6=94=EA=B0=80=20(#114)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :sparkles: feature: Profile ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ * :sparkles: feature: user ํŽ˜์ด์ง€ ๋งˆํฌ์—… * :sparkles: feature: ๋งˆ์ดํŽ˜์ด์ง€ ๋งˆํฌ์—… * :recycle: refactor: subTitle ์˜คํƒ€ ์ˆ˜์ • * [Feature] ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€ ๋“ฑ๋ก API (#100) * โœจ feature: ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€ ๋“ฑ๋ก Enum ์ง€์ • * โœจ feature: Group entity ์„ค๊ณ„ * โœจ feature: Group Category entity ์„ค๊ณ„ * โœจ feature: Article entity ์„ค๊ณ„ * โœจ feature: Group Application entity ์„ค๊ณ„ * โœจ feature: ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€ ๋“ฑ๋ก DTO ์ž‘์„ฑ * โœจ feature: group article response & request dto ์ž‘์„ฑ * โœจ feature: group article ๋„๋ฉ”์ธ repository ์„ค๊ณ„ * โœจ feature: ์นดํ…Œ๊ณ ๋ฆฌ not found exception ์ž‘์„ฑ * โœจ feature: group-article service ์ž‘์„ฑ * โœจ feature: group-article controller ์ž‘์„ฑ * โœจ feature: group-article module ์ž‘์„ฑ * โœจ feature: group-article ๊ฒŒ์‹œ๊ธ€ ๋“ฑ๋ก Body dto ์ž‘์„ฑ * โœจ feature: group-article app module์— ์ ์šฉ * ๐Ÿฅ… chore: ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋ฐ˜์˜ * [Feature] ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€ ์นดํ…Œ๊ณ ๋ฆฌ ์กฐํšŒ API (#101) * :sparkles: feature: ์นดํ…Œ๊ณ ๋ฆฌ ๋ชฉ๋ก ์กฐํšŒ API ์ถ”๊ฐ€ * :recycle: refactor: repository ํด๋”๋กœ GroupCategoryRepositoy ์ด๋™ * :goal_net: chore: dev-deploy ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ • * โ™ป๏ธ refactor: ํŽ˜์ด์ง€ ์ปจํ…์ธ  ๋ถ€๋ถ„์ด ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์„ ๊ฝ‰์ฑ„์šฐ๋„๋ก ์ˆ˜์ • * ๐Ÿฅ… chore: ๋งˆ์ด ํŽ˜์ด์ง€ ๊ฒฝ๋กœ ๋ณ€๊ฒฝ * โœจ feature: ๋‚ด๊ฐ€ ์ฐธ์—ฌํ•œ ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€ ํŽ˜์ด์ง€ ๊ตฌ์„ฑ * ๐Ÿฅ… chore: ๋งˆ์ดํŽ˜์ด์ง€ ๋‚ด ์ž‘์„ฑํ•œ ๋ชจ์ž„ ๋งํฌ ์—ฐ๊ฒฐ Co-authored-by: kong430 Co-authored-by: Gakko <90585081+pythonstrup@users.noreply.github.com> Co-authored-by: Kim Myeongil <67570061+username1103@users.noreply.github.com> --- .../src/apis/test/getTestMyGroupArticles.ts | 9 +++ .../components/common/EmptyMessage/index.tsx | 1 + .../components/common/PageLayout/index.tsx | 2 + .../src/hooks/queries/useFetchMyArticles.ts | 26 +++++++ frontend/src/mocks/handlers.ts | 1 + frontend/src/pages/index.tsx | 1 + frontend/src/pages/{my.tsx => my/index.tsx} | 30 ++++---- frontend/src/pages/my/participate.tsx | 71 +++++++++++++++++++ 8 files changed, 129 insertions(+), 12 deletions(-) create mode 100644 frontend/src/apis/test/getTestMyGroupArticles.ts create mode 100644 frontend/src/hooks/queries/useFetchMyArticles.ts rename frontend/src/pages/{my.tsx => my/index.tsx} (79%) create mode 100644 frontend/src/pages/my/participate.tsx diff --git a/frontend/src/apis/test/getTestMyGroupArticles.ts b/frontend/src/apis/test/getTestMyGroupArticles.ts new file mode 100644 index 00000000..0fcf3706 --- /dev/null +++ b/frontend/src/apis/test/getTestMyGroupArticles.ts @@ -0,0 +1,9 @@ +import axios from 'axios'; + +const getTestMyGroupArticles = async (nextId: number) => { + return axios.get('http://testServer/group-articles/me', { + params: { nextId, limit: 5 }, + }); +}; + +export default getTestMyGroupArticles; diff --git a/frontend/src/components/common/EmptyMessage/index.tsx b/frontend/src/components/common/EmptyMessage/index.tsx index 75748079..213df9f1 100644 --- a/frontend/src/components/common/EmptyMessage/index.tsx +++ b/frontend/src/components/common/EmptyMessage/index.tsx @@ -28,6 +28,7 @@ const EmptyMessage = ({ target, large }: Props) => { export default EmptyMessage; const MessageWrapper = styled.div` + flex: 1; display: flex; flex-direction: column; gap: 1.6rem; diff --git a/frontend/src/components/common/PageLayout/index.tsx b/frontend/src/components/common/PageLayout/index.tsx index 8868a124..eb1f6bef 100644 --- a/frontend/src/components/common/PageLayout/index.tsx +++ b/frontend/src/components/common/PageLayout/index.tsx @@ -36,6 +36,8 @@ const ContentWrapper = styled.div` width: 100%; height: 100%; flex: 1; + display: flex; + flex-direction: column; `; const HeaderWrapper = styled.div` diff --git a/frontend/src/hooks/queries/useFetchMyArticles.ts b/frontend/src/hooks/queries/useFetchMyArticles.ts new file mode 100644 index 00000000..068178e5 --- /dev/null +++ b/frontend/src/hooks/queries/useFetchMyArticles.ts @@ -0,0 +1,26 @@ +import { useInfiniteQuery } from '@tanstack/react-query'; +import { AxiosResponse } from 'axios'; + +import getTestMyGroupArticles from '@apis/test/getTestMyGroupArticles'; +import { ArticleType } from '@typings/types'; + +interface ArticleResponseType { + articles: ArticleType[]; + isLast: boolean; + currentId: number; +} + +const useFetchMyArticles = () => { + const { data, fetchNextPage, hasNextPage, isFetching, isError } = useInfiniteQuery( + ['articles', 'myparticipate'], + ({ pageParam = 0 }) => getTestMyGroupArticles(pageParam), + { + getNextPageParam: (lastPage: AxiosResponse) => + lastPage.data.isLast ? undefined : lastPage.data.currentId + 1, + } + ); + + return { data, fetchNextPage, hasNextPage, isFetching, isError }; +}; + +export default useFetchMyArticles; diff --git a/frontend/src/mocks/handlers.ts b/frontend/src/mocks/handlers.ts index 16ab30de..1ce67cf8 100644 --- a/frontend/src/mocks/handlers.ts +++ b/frontend/src/mocks/handlers.ts @@ -8,5 +8,6 @@ import { getTest } from './resolvers/test'; export const handlers = [ rest.get('http://testServer/test', getTest), rest.get('http://testServer/group-articles', getGroupArticles), + rest.get('http://testServer/group-articles/me', getGroupArticles), rest.get('http://testServer/my-info', getMyInfo), ]; diff --git a/frontend/src/pages/index.tsx b/frontend/src/pages/index.tsx index 8ee519bc..4aa737df 100644 --- a/frontend/src/pages/index.tsx +++ b/frontend/src/pages/index.tsx @@ -141,6 +141,7 @@ const StyledSelect = styled(Select)` `; const ContentWrapper = styled.div` + flex: 1; display: flex; flex-direction: column; gap: 1.2rem; diff --git a/frontend/src/pages/my.tsx b/frontend/src/pages/my/index.tsx similarity index 79% rename from frontend/src/pages/my.tsx rename to frontend/src/pages/my/index.tsx index 03e0ae70..d97091f7 100644 --- a/frontend/src/pages/my.tsx +++ b/frontend/src/pages/my/index.tsx @@ -1,3 +1,5 @@ +import Link from 'next/link'; + import { useTheme } from '@emotion/react'; import styled from '@emotion/styled'; import { Button } from '@mantine/core'; @@ -34,19 +36,23 @@ const My = () => { - - - - - ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ๋ชจ์ž„ - + + + + + + ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ๋ชจ์ž„ + + - - - - - ๋‚ด๊ฐ€ ์ฐธ์—ฌํ•œ ๋ชจ์ž„ - + + + + + + ๋‚ด๊ฐ€ ์ฐธ์—ฌํ•œ ๋ชจ์ž„ + + diff --git a/frontend/src/pages/my/participate.tsx b/frontend/src/pages/my/participate.tsx new file mode 100644 index 00000000..e8359082 --- /dev/null +++ b/frontend/src/pages/my/participate.tsx @@ -0,0 +1,71 @@ +import Link from 'next/link'; +import { useMemo } from 'react'; + +import styled from '@emotion/styled'; + +import EmptyMessage from '@components/common/EmptyMessage'; +import GroupArticleCard from '@components/common/GroupArticleCard'; +import Header from '@components/common/Header'; +import DetailTitle from '@components/common/Header/DetailTitle'; +import PageLayout from '@components/common/PageLayout'; +import useFetchMyArticles from '@hooks/queries/useFetchMyArticles'; +import useIntersect from '@hooks/useIntersect'; + +const MyParcipatePage = () => { + const { data, fetchNextPage, hasNextPage, isFetching } = useFetchMyArticles(); + + const ref = useIntersect((entry, observer) => { + observer.unobserve(entry.target); + if (hasNextPage && !isFetching) { + void fetchNextPage(); + } + }); + + const articles = useMemo( + () => (data ? data.pages.flatMap(({ data }) => data.articles) : []), + [data] + ); + return ( + + } + /> + } + > + + {articles.length ? ( + + {articles.map((article) => ( + +
    + +
    + + ))} +
    +
    + ) : ( + + )} +
    +
    + ); +}; + +const PageContentWrapper = styled.div` + padding: 1.6rem; + flex: 1; + display: flex; + flex-direction: column; +`; + +const ArticleList = styled.div` + display: grid; + grid-template-columns: repeat(2, 1fr); + grid-gap: 1.3rem; +`; + +export default MyParcipatePage; From b1c16225eae8e9c64f94b2e529d39e0c41e635e0 Mon Sep 17 00:00:00 2001 From: Gakko <90585081+pythonstrup@users.noreply.github.com> Date: Tue, 29 Nov 2022 14:15:48 +0900 Subject: [PATCH 048/142] =?UTF-8?q?[BugFix]=20=EB=B0=B1=EC=97=94=EB=93=9C?= =?UTF-8?q?=20HTTPS=20=EB=B0=B0=ED=8F=AC=20(#124)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ๐Ÿ› fix: test๋ฅผ ์œ„ํ•œ cd * ๐Ÿ› fix: https ๋ฐฐํฌ ์™„๋ฃŒ --- .github/workflows/backend-dev-cd.yml | 6 ++-- backend/dev/nginx/nginx.conf | 44 +++++++++++++--------------- frontend/dev/nginx/nginx.conf | 2 +- 3 files changed, 25 insertions(+), 27 deletions(-) diff --git a/.github/workflows/backend-dev-cd.yml b/.github/workflows/backend-dev-cd.yml index 76b7145f..b426d558 100644 --- a/.github/workflows/backend-dev-cd.yml +++ b/.github/workflows/backend-dev-cd.yml @@ -54,7 +54,7 @@ jobs: run: echo ${{ steps.docker_build.outputs.digest }} CD: - needs: [ Register-Docker-Image ] + needs: [Register-Docker-Image] runs-on: ubuntu-latest defaults: run: @@ -77,13 +77,13 @@ jobs: cd web13-moyeomoyeo git checkout -t origin/develop - + sudo chmod +x ./backend/scripts/dev-deploy.sh ./backend/scripts/dev-deploy.sh ${{ secrets.NCP_ACCESS_KEY }} ${{ secrets.NCP_SECRET_KEY }} ${{ secrets.NCP_DOCKER_REGISTRY }} ${{ secrets.BACKEND_DEVELOPMENT_ENVIRONMENT }} slack-notifications: - needs: [ Register-Docker-Image, CD ] + needs: [Register-Docker-Image, CD] if: ${{ always() }} uses: ./.github/workflows/slack-notification.yml with: diff --git a/backend/dev/nginx/nginx.conf b/backend/dev/nginx/nginx.conf index 47863e37..a79ce5d1 100644 --- a/backend/dev/nginx/nginx.conf +++ b/backend/dev/nginx/nginx.conf @@ -9,32 +9,30 @@ server { server_tokens off; # certbot์ด ๋ฐœ๊ธ‰ํ•œ challenge ํŒŒ์ผ์„ nginx๊ฐ€ ์„œ๋น™ -# location /.well-known/acme-challenge/ { -# allow all; -# root /var/www/certbot; -# } + location /.well-known/acme-challenge/ { + allow all; + root /var/www/certbot; + } # ๋ชจ๋“  http(80ํฌํŠธ) ์š”์ฒญ์„ https๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŒ… -# location / { -# return 301 https://$host$request_uri; -# } location / { - proxy_pass http://backend-server; + return 301 https://$host$request_uri; } + } -# server { -# listen 443 ssl; -# server_name api.moyeomoyeo.com; -# server_tokens off; -# -# ssl_certificate /etc/letsencrypt/live/api.moyeomoyeo.com/fullchain.pem; -# ssl_certificate_key /etc/letsencrypt/live/api.moyeomoyeo.com/privkey.pem; -# include /etc/letsencrypt/options-ssl-nginx.conf; -# ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; -# -# location / { -# proxy_pass http://backend-server; -# proxy_http_version 1.1; -# } -# } \ No newline at end of file +server { + listen 443 ssl; + server_name api.moyeomoyeo.com; + server_tokens off; + + ssl_certificate /etc/letsencrypt/live/api.moyeomoyeo.com/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/api.moyeomoyeo.com/privkey.pem; + include /etc/letsencrypt/options-ssl-nginx.conf; + ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; + + location / { + proxy_pass http://backend-server; + proxy_http_version 1.1; + } +} \ No newline at end of file diff --git a/frontend/dev/nginx/nginx.conf b/frontend/dev/nginx/nginx.conf index e4299221..9c0993b9 100644 --- a/frontend/dev/nginx/nginx.conf +++ b/frontend/dev/nginx/nginx.conf @@ -1,5 +1,5 @@ upstream nextjs_upstream { - server 118.67.143.56:3000; + server moyeo-client:3000; } server { From 0d556fc731dc637900b9603ca205d3753f7d38bf Mon Sep 17 00:00:00 2001 From: Kim Myeongil <67570061+username1103@users.noreply.github.com> Date: Tue, 29 Nov 2022 14:52:20 +0900 Subject: [PATCH 049/142] =?UTF-8?q?[Feature]=20=EC=BF=A0=ED=82=A4=20?= =?UTF-8?q?=EC=98=B5=EC=85=98=20=EC=84=A4=EC=A0=95=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?(#127)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :sparkles: feature: cookie config module ์ถ”๊ฐ€ * :sparkles: feature: ์ฟ ํ‚ค ์„ค์ • ๋ฐ˜์˜ ๋ฐ JwtAuthGuard์‚ฌ์šฉ์„ ์œ„ํ•ด JwtTokenModule, CookieConfigModule ๊ธ€๋กœ๋ฒŒ๋กœ ์„ค์ • * :sparkles: feature: ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก ์กฐํšŒ API ์ธ์ฆ ์ œ๊ฑฐ --- backend/src/app.module.ts | 2 ++ backend/src/app/auth/auth.controller.ts | 6 ++++++ backend/src/app/auth/auth.module.ts | 3 +-- .../group-article/group-article.controller.ts | 1 - .../app/group-article/group-article.module.ts | 3 +-- backend/src/app/myinfo/myinfo.module.ts | 2 -- backend/src/app/user/user.module.ts | 2 -- .../src/common/config/cookie/config.module.ts | 12 +++++++++++ .../common/config/cookie/config.service.ts | 21 +++++++++++++++++++ .../src/common/config/cookie/configuration.ts | 15 +++++++++++++ backend/src/common/guard/jwt-auth.guard.ts | 6 +++++- .../module/jwt-token/jwt-token.module.ts | 3 ++- 12 files changed, 65 insertions(+), 11 deletions(-) create mode 100644 backend/src/common/config/cookie/config.module.ts create mode 100644 backend/src/common/config/cookie/config.service.ts create mode 100644 backend/src/common/config/cookie/configuration.ts diff --git a/backend/src/app.module.ts b/backend/src/app.module.ts index a68228b2..e854fb6e 100644 --- a/backend/src/app.module.ts +++ b/backend/src/app.module.ts @@ -11,10 +11,12 @@ import { ImageModule } from '@app/image/image.module'; import { GroupArticleModule } from '@app/group-article/group-article.module'; import { UserModule } from '@app/user/user.module'; import { MyInfoModule } from '@app/myinfo/myinfo.module'; +import { CookieConfigModule } from '@config/cookie/config.module'; @Module({ imports: [ AppConfigModule, + CookieConfigModule, DatabaseModule, JwtTokenModule, AuthModule, diff --git a/backend/src/app/auth/auth.controller.ts b/backend/src/app/auth/auth.controller.ts index 7ebe2a28..6a51a5e6 100644 --- a/backend/src/app/auth/auth.controller.ts +++ b/backend/src/app/auth/auth.controller.ts @@ -7,6 +7,7 @@ import { GithubProfile } from '@app/auth/type/github-profile'; import { AuthService } from '@app/auth/auth.service'; import { JwtTokenService } from '@common/module/jwt-token/jwt-token.service'; import { GithubConfigService } from '@config/github/config.service'; +import { CookieConfigService } from '@config/cookie/config.service'; @Controller('/auth') @ApiTags('Auth') @@ -15,6 +16,7 @@ export class AuthController { private readonly authService: AuthService, private readonly jwtTokenService: JwtTokenService, private readonly githubConfigService: GithubConfigService, + private readonly cookieConfigService: CookieConfigService, ) {} @Get('/github/login') @@ -45,10 +47,14 @@ export class AuthController { response.cookie('access_token', accessToken, { httpOnly: true, expires: new Date(accessTokenExpires * 1000), + secure: this.cookieConfigService.secure, + sameSite: this.cookieConfigService.sameSite, }); response.cookie('refresh_token', refreshToken, { httpOnly: true, expires: new Date(refreshTokenExpires * 1000), + secure: this.cookieConfigService.secure, + sameSite: this.cookieConfigService.sameSite, }); response.redirect(this.githubConfigService.redirectUrl); diff --git a/backend/src/app/auth/auth.module.ts b/backend/src/app/auth/auth.module.ts index 278e3427..ef1b0f21 100644 --- a/backend/src/app/auth/auth.module.ts +++ b/backend/src/app/auth/auth.module.ts @@ -5,10 +5,9 @@ import { PassportModule } from '@nestjs/passport'; import { GithubConfigModule } from '@config/github/config.module'; import { GithubStrategy } from '@app/auth/github.strategy'; import { UserModule } from '@app/user/user.module'; -import { JwtTokenModule } from '@common/module/jwt-token/jwt-token.module'; @Module({ - imports: [UserModule, JwtTokenModule, PassportModule, GithubConfigModule], + imports: [UserModule, PassportModule, GithubConfigModule], controllers: [AuthController], providers: [AuthService, GithubStrategy], }) diff --git a/backend/src/app/group-article/group-article.controller.ts b/backend/src/app/group-article/group-article.controller.ts index b9e51c6a..cefd80f5 100644 --- a/backend/src/app/group-article/group-article.controller.ts +++ b/backend/src/app/group-article/group-article.controller.ts @@ -54,7 +54,6 @@ export class GroupArticleController { } @Get('/search') - @JwtAuth() @ApiSuccessResponse(HttpStatus.OK, SearchGroupArticleResponse) async search(@Query() query: SearchGroupArticlesRequest) { const result = await this.groupArticleRepository.search(query); diff --git a/backend/src/app/group-article/group-article.module.ts b/backend/src/app/group-article/group-article.module.ts index 085ee1c9..32d362a0 100644 --- a/backend/src/app/group-article/group-article.module.ts +++ b/backend/src/app/group-article/group-article.module.ts @@ -1,5 +1,4 @@ import { Module } from '@nestjs/common'; -import { JwtTokenModule } from '@src/common/module/jwt-token/jwt-token.module'; import { GroupArticleController } from '@app/group-article/group-article.controller'; import { GroupArticleService } from '@app/group-article/group-article.service'; import { GroupCategoryRepository } from '@app/group-article/repository/group-category.repository'; @@ -8,7 +7,7 @@ import { GroupArticleRepository } from '@app/group-article/repository/group-arti import { ImageModule } from '@app/image/image.module'; @Module({ - imports: [JwtTokenModule, ImageModule], + imports: [ImageModule], controllers: [GroupArticleController], providers: [ GroupArticleService, diff --git a/backend/src/app/myinfo/myinfo.module.ts b/backend/src/app/myinfo/myinfo.module.ts index 548cf267..649b3db8 100644 --- a/backend/src/app/myinfo/myinfo.module.ts +++ b/backend/src/app/myinfo/myinfo.module.ts @@ -2,10 +2,8 @@ import { Module } from '@nestjs/common'; import { UserRepository } from '@app/user/user.repository'; import { MyInfoController } from '@app/myinfo/myinfo.controller'; import { MyInfoService } from '@app/myinfo/myinfo.service'; -import { JwtTokenModule } from '@src/common/module/jwt-token/jwt-token.module'; @Module({ - imports: [JwtTokenModule], controllers: [MyInfoController], providers: [UserRepository, MyInfoService], }) diff --git a/backend/src/app/user/user.module.ts b/backend/src/app/user/user.module.ts index 647ce484..13f80db9 100644 --- a/backend/src/app/user/user.module.ts +++ b/backend/src/app/user/user.module.ts @@ -2,10 +2,8 @@ import { Module } from '@nestjs/common'; import { UserRepository } from '@app/user/user.repository'; import { UserService } from '@app/user/user.service'; import { UserController } from '@app/user/user.controller'; -import { JwtTokenModule } from '@src/common/module/jwt-token/jwt-token.module'; @Module({ - imports: [JwtTokenModule], controllers: [UserController], providers: [UserService, UserRepository], exports: [UserRepository], diff --git a/backend/src/common/config/cookie/config.module.ts b/backend/src/common/config/cookie/config.module.ts new file mode 100644 index 00000000..befbdd88 --- /dev/null +++ b/backend/src/common/config/cookie/config.module.ts @@ -0,0 +1,12 @@ +import { Global, Module } from '@nestjs/common'; +import { CookieConfigService } from '@config/cookie/config.service'; +import { ConfigModule } from '@nestjs/config'; +import { cookieConfig } from '@config/cookie/configuration'; + +@Global() +@Module({ + imports: [ConfigModule.forFeature(cookieConfig)], + providers: [CookieConfigService], + exports: [CookieConfigService], +}) +export class CookieConfigModule {} diff --git a/backend/src/common/config/cookie/config.service.ts b/backend/src/common/config/cookie/config.service.ts new file mode 100644 index 00000000..660efbcb --- /dev/null +++ b/backend/src/common/config/cookie/config.service.ts @@ -0,0 +1,21 @@ +import { Inject, Injectable } from '@nestjs/common'; +import { cookieConfig } from '@config/cookie/configuration'; +import { ConfigType } from '@nestjs/config'; + +@Injectable() +export class CookieConfigService { + constructor( + @Inject(cookieConfig.KEY) + private readonly cookieConfiguration: ConfigType, + ) {} + + get secure() { + return this.cookieConfiguration.SECURE; + } + + get sameSite() { + if (this.cookieConfiguration.SECURE) return 'none'; + + return 'lax'; + } +} diff --git a/backend/src/common/config/cookie/configuration.ts b/backend/src/common/config/cookie/configuration.ts new file mode 100644 index 00000000..7eb32061 --- /dev/null +++ b/backend/src/common/config/cookie/configuration.ts @@ -0,0 +1,15 @@ +import { registerAs } from '@nestjs/config'; +import { IsBoolean } from 'class-validator'; +import { validate } from '@config/validate'; +import { Expose } from 'class-transformer'; + +export class CookieConfig { + @Expose() + @IsBoolean() + SECURE: boolean; +} + +export const cookieConfig = registerAs('Cookie', () => { + const { SECURE } = process.env; + return validate({ SECURE: SECURE === 'true' }, CookieConfig); +}); diff --git a/backend/src/common/guard/jwt-auth.guard.ts b/backend/src/common/guard/jwt-auth.guard.ts index bf612680..36164fa5 100644 --- a/backend/src/common/guard/jwt-auth.guard.ts +++ b/backend/src/common/guard/jwt-auth.guard.ts @@ -1,15 +1,17 @@ import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common'; +import { DataSource } from 'typeorm'; import { JwtTokenService } from '@common/module/jwt-token/jwt-token.service'; import { TokenType } from '@common/module/jwt-token/type/token-type'; -import { DataSource } from 'typeorm'; import { User } from '@app/user/entity/user.entity'; import { InvalidTokenException } from '@exception/invalid-token.exception'; +import { CookieConfigService } from '@config/cookie/config.service'; @Injectable() export class JwtAuthGuard implements CanActivate { constructor( private readonly jwtTokenService: JwtTokenService, private readonly dataSource: DataSource, + private readonly cookieConfigService: CookieConfigService, ) {} async canActivate(context: ExecutionContext) { @@ -58,6 +60,8 @@ export class JwtAuthGuard implements CanActivate { response.cookie('access_token', accessToken, { httpOnly: true, expires: new Date(accessTokenExpires * 1000), + secure: this.cookieConfigService.secure, + sameSite: this.cookieConfigService.sameSite, }); return true; diff --git a/backend/src/common/module/jwt-token/jwt-token.module.ts b/backend/src/common/module/jwt-token/jwt-token.module.ts index 6c832f06..f30a0c37 100644 --- a/backend/src/common/module/jwt-token/jwt-token.module.ts +++ b/backend/src/common/module/jwt-token/jwt-token.module.ts @@ -1,9 +1,10 @@ -import { Module } from '@nestjs/common'; +import { Global, Module } from '@nestjs/common'; import { JwtModule } from '@nestjs/jwt'; import { JwtConfigModule } from '@config/jwt/config.module'; import { JwtConfigService } from '@config/jwt/config.service'; import { JwtTokenService } from '@common/module/jwt-token/jwt-token.service'; +@Global() @Module({ imports: [ JwtConfigModule, From 13dfb0bf9a68ee034a1eae845f8d4bc7a55d8797 Mon Sep 17 00:00:00 2001 From: Gakko <90585081+pythonstrup@users.noreply.github.com> Date: Tue, 29 Nov 2022 15:49:40 +0900 Subject: [PATCH 050/142] =?UTF-8?q?[Feature]=20=EB=8B=A4=EB=A5=B8=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=EC=9E=90=20=EC=A0=95=EB=B3=B4=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=ED=95=98=EA=B8=B0=20API=20(#131)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * โœจ feature: user not found exception ์ž‘์„ฑ * โœจ feature: user info response dto ์ž‘์„ฑ * โœจ feature: user info get api ์ž‘์„ฑ * โ™ป๏ธ refactor: ์ฝ”๋“œ์™€ API ๋ช…์„ธ์˜ userName ๋Œ€์†Œ๋ฌธ์ž ํ†ต์ผ * โ™ป๏ธ refactor: ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ ์™„๋ฃŒ - @Param pipe ์„ค์ • - nickname=>userName์œผ๋กœ ๋ณ€๊ฒฝ --- .../app/myinfo/dto/myinfo-get-response.dto.ts | 6 +- backend/src/app/user/__test__/user.fixture.ts | 2 +- .../app/user/dto/user-info-response.dto.ts | 58 +++++++++++++++++++ ....dto.ts => username-unique-request.dto.ts} | 4 +- ...dto.ts => username-unique-response.dto.ts} | 4 +- backend/src/app/user/entity/user.entity.ts | 4 +- .../exception/user-not-found.exception.ts | 7 +++ backend/src/app/user/user.controller.ts | 37 ++++++++---- backend/src/app/user/user.repository.ts | 8 ++- backend/src/app/user/user.service.ts | 13 ++++- 10 files changed, 118 insertions(+), 25 deletions(-) create mode 100644 backend/src/app/user/dto/user-info-response.dto.ts rename backend/src/app/user/dto/{nickname-unique-request.dto.ts => username-unique-request.dto.ts} (78%) rename backend/src/app/user/dto/{nickname-unique-response.dto.ts => username-unique-response.dto.ts} (78%) create mode 100644 backend/src/app/user/exception/user-not-found.exception.ts diff --git a/backend/src/app/myinfo/dto/myinfo-get-response.dto.ts b/backend/src/app/myinfo/dto/myinfo-get-response.dto.ts index c4cee0f5..b508805f 100644 --- a/backend/src/app/myinfo/dto/myinfo-get-response.dto.ts +++ b/backend/src/app/myinfo/dto/myinfo-get-response.dto.ts @@ -11,10 +11,10 @@ export class MyInfoGetResponse { @ApiProperty({ example: 'pythonstrup', - description: 'username', + description: 'userName', required: true, }) - username: string; + userName: string; @ApiProperty({ example: @@ -48,7 +48,7 @@ export class MyInfoGetResponse { static from(user: User) { const response = new User(); response.id = user.id; - response.username = user.username; + response.userName = user.userName; response.profileImage = user.profileImage; response.description = user.description; response.githubUrl = user.githubUrl; diff --git a/backend/src/app/user/__test__/user.fixture.ts b/backend/src/app/user/__test__/user.fixture.ts index d95b3c2b..0489d4ff 100644 --- a/backend/src/app/user/__test__/user.fixture.ts +++ b/backend/src/app/user/__test__/user.fixture.ts @@ -3,7 +3,7 @@ import { User } from '@app/user/entity/user.entity'; export const getUserFixture = (user: Partial) => { const fixture = new User(); fixture.id = user.id || 1; - fixture.username = user.username || 'tester001'; + fixture.userName = user.userName || 'tester001'; fixture.githubUrl = user.githubUrl || ''; fixture.blogUrl = user.blogUrl || ''; fixture.description = user.description || ''; diff --git a/backend/src/app/user/dto/user-info-response.dto.ts b/backend/src/app/user/dto/user-info-response.dto.ts new file mode 100644 index 00000000..3e5004e7 --- /dev/null +++ b/backend/src/app/user/dto/user-info-response.dto.ts @@ -0,0 +1,58 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { User } from '@app/user/entity/user.entity'; + +export class UserInfoResopnse { + @ApiProperty({ + example: 1, + description: 'user id', + required: true, + }) + id: number; + + @ApiProperty({ + example: 'pythonstrup', + description: 'userName', + required: true, + }) + userName: string; + + @ApiProperty({ + example: + 'https://kr.object.ncloudstorage.com/uploads/images/1669276833875-64adca9c-94cd-4162-a53f-f75e951e39db', + description: 'ํ”„๋กœํ•„ ์ด๋ฏธ์ง€', + required: true, + }) + profileImage: string; + + @ApiProperty({ + example: '์•ˆ๋…•ํ•˜์„ธ์š” ์›นํ’€์Šคํƒ ๊ฐœ๋ฐœ์ž pythonstrup์ž…๋‹ˆ๋‹ค!', + description: '๊ฐ„๋‹จํ•œ ์ž๊ธฐ์†Œ๊ฐœ', + required: true, + }) + description: string; + + @ApiProperty({ + example: 'https://github.com/pythonstrup', + description: '๊นƒํ—ˆ๋ธŒ ์ฃผ์†Œ', + required: true, + }) + githubUrl: string; + + @ApiProperty({ + example: 'https://myvelop.tistory.com/', + description: '๋ธ”๋กœ๊ทธ ์ฃผ์†Œ', + required: true, + }) + blogUrl: string; + + static from(user: User) { + const response = new User(); + response.id = user.id; + response.userName = user.userName; + response.profileImage = user.profileImage; + response.description = user.description; + response.githubUrl = user.githubUrl; + response.blogUrl = user.blogUrl; + return response; + } +} diff --git a/backend/src/app/user/dto/nickname-unique-request.dto.ts b/backend/src/app/user/dto/username-unique-request.dto.ts similarity index 78% rename from backend/src/app/user/dto/nickname-unique-request.dto.ts rename to backend/src/app/user/dto/username-unique-request.dto.ts index 3fbead1d..406ac6be 100644 --- a/backend/src/app/user/dto/nickname-unique-request.dto.ts +++ b/backend/src/app/user/dto/username-unique-request.dto.ts @@ -1,12 +1,12 @@ import { ApiProperty } from '@nestjs/swagger'; import { IsString } from 'class-validator'; -export class NicknameUniqueRequest { +export class UserNameUniqueRequest { @ApiProperty({ example: 'pythonstrup', description: '์œ ์ € ์ด๋ฆ„', required: true, }) @IsString() - username: string; + userName: string; } diff --git a/backend/src/app/user/dto/nickname-unique-response.dto.ts b/backend/src/app/user/dto/username-unique-response.dto.ts similarity index 78% rename from backend/src/app/user/dto/nickname-unique-response.dto.ts rename to backend/src/app/user/dto/username-unique-response.dto.ts index 9f6123d9..aa4570cd 100644 --- a/backend/src/app/user/dto/nickname-unique-response.dto.ts +++ b/backend/src/app/user/dto/username-unique-response.dto.ts @@ -1,6 +1,6 @@ import { ApiProperty } from '@nestjs/swagger'; -export class NicknameUniqueResponse { +export class UserNameUniqueResponse { @ApiProperty({ example: true, description: '์ด๋ฏธ ์ ์œ ๋œ ๋‹‰๋„ค์ž„์ธ์ง€ ๋ถˆ๋ฆฌ์–ธ ๊ฐ’์œผ๋กœ ์•Œ๋ ค์คŒ', @@ -9,7 +9,7 @@ export class NicknameUniqueResponse { isOccupied: boolean; static from(isOccupied: boolean) { - const response = new NicknameUniqueResponse(); + const response = new UserNameUniqueResponse(); response.isOccupied = isOccupied; return response; } diff --git a/backend/src/app/user/entity/user.entity.ts b/backend/src/app/user/entity/user.entity.ts index 040eb58d..b2fcc419 100644 --- a/backend/src/app/user/entity/user.entity.ts +++ b/backend/src/app/user/entity/user.entity.ts @@ -13,7 +13,7 @@ export class User { id: number; @Column({ type: 'varchar', length: 100 }) - username: string; + userName: string; @Column({ type: 'varchar', length: 400, default: '' }) profileImage: string; @@ -61,7 +61,7 @@ export class User { user.blogUrl = blogUrl; user.socialType = socialType; user.profileImage = profileImage; - user.username = randomUUID(); + user.userName = randomUUID(); return user; } } diff --git a/backend/src/app/user/exception/user-not-found.exception.ts b/backend/src/app/user/exception/user-not-found.exception.ts new file mode 100644 index 00000000..fac055f3 --- /dev/null +++ b/backend/src/app/user/exception/user-not-found.exception.ts @@ -0,0 +1,7 @@ +import { NotFoundException } from '@nestjs/common'; + +export class UserNotFoundException extends NotFoundException { + constructor(message = 'ํ•ด๋‹น ์œ ์ €๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.') { + super({ status: 'USER_NOT_FOUND', message }); + } +} diff --git a/backend/src/app/user/user.controller.ts b/backend/src/app/user/user.controller.ts index de4b3ce7..406e4c02 100644 --- a/backend/src/app/user/user.controller.ts +++ b/backend/src/app/user/user.controller.ts @@ -1,31 +1,46 @@ -import { Body, Controller, Get, HttpStatus, Post } from '@nestjs/common'; +import { + Body, + Controller, + Get, + HttpStatus, + Param, + ParseIntPipe, + Post, +} from '@nestjs/common'; import { UserService } from '@app/user/user.service'; import { ApiTags } from '@nestjs/swagger'; import { JwtAuth } from '@src/common/decorator/jwt-auth.decorator'; import { ApiSuccessResponse } from '@src/common/decorator/api-success-resposne.decorator'; -import { NicknameUniqueRequest } from '@app/user//dto/nickname-unique-request.dto'; -import { NicknameUniqueResponse } from '@app/user/dto/nickname-unique-response.dto'; +import { UserNameUniqueRequest } from '@src/app/user/dto/username-unique-request.dto'; +import { UserNameUniqueResponse } from '@src/app/user/dto/username-unique-response.dto'; import { ResponseEntity } from '@src/common/response-entity'; +import { UserInfoResopnse } from './dto/user-info-response.dto'; +import { ApiErrorResponse } from '@src/common/decorator/api-error-response.decorator'; +import { UserNotFoundException } from '@app/user/exception/user-not-found.exception'; @Controller('users') @ApiTags('User') export class UserController { constructor(private readonly userService: UserService) {} - @Get() + @Get(':id') @JwtAuth() - getUserInfo() { - return ''; + @ApiSuccessResponse(HttpStatus.OK, UserInfoResopnse) + @ApiErrorResponse(UserNotFoundException) + async getUserInfo(@Param('id', ParseIntPipe) id: number) { + const user = await this.userService.findUserById(id); + const data = UserInfoResopnse.from(user); + return ResponseEntity.OK_WITH_DATA(data); } - @Post('nickname/is-occupied') + @Post('username/is-occupied') @JwtAuth() - @ApiSuccessResponse(HttpStatus.OK, NicknameUniqueResponse) - checkUsernameUnique(@Body() nicknameUniqueRequest: NicknameUniqueRequest) { + @ApiSuccessResponse(HttpStatus.OK, UserNameUniqueResponse) + checkUsernameUnique(@Body() userNameUniqueRequest: UserNameUniqueRequest) { const result = this.userService.checkUsernameUnique( - nicknameUniqueRequest.username, + userNameUniqueRequest.userName, ); - const data = NicknameUniqueResponse.from(result); + const data = UserNameUniqueResponse.from(result); return ResponseEntity.OK_WITH_DATA(data); } } diff --git a/backend/src/app/user/user.repository.ts b/backend/src/app/user/user.repository.ts index e61eefb1..07cdf8d5 100644 --- a/backend/src/app/user/user.repository.ts +++ b/backend/src/app/user/user.repository.ts @@ -16,7 +16,11 @@ export class UserRepository extends Repository { return this.findOneBy({ socialId, socialType }); } - findByUsername(username: string) { - return this.findOneBy({ username }); + findByUsername(userName: string) { + return this.findOneBy({ userName }); + } + + findById(id: number) { + return this.findOneBy({ id }); } } diff --git a/backend/src/app/user/user.service.ts b/backend/src/app/user/user.service.ts index 77cd110c..57d29fde 100644 --- a/backend/src/app/user/user.service.ts +++ b/backend/src/app/user/user.service.ts @@ -1,11 +1,20 @@ import { Injectable } from '@nestjs/common'; import { UserRepository } from '@app/user/user.repository'; +import { UserNotFoundException } from '@app/user/exception/user-not-found.exception'; @Injectable() export class UserService { constructor(private readonly userRepository: UserRepository) {} - checkUsernameUnique(username: string) { - return this.userRepository.findByUsername(username) ? false : true; + checkUsernameUnique(userName: string) { + return this.userRepository.findByUsername(userName) ? false : true; + } + + async findUserById(id: number) { + const user = await this.userRepository.findById(id); + if (!user) { + throw new UserNotFoundException(); + } + return user; } } From c13c4ae95e8823aee9a95a312bfb0c8737d4083b Mon Sep 17 00:00:00 2001 From: Kim Myeongil <67570061+username1103@users.noreply.github.com> Date: Tue, 29 Nov 2022 16:31:10 +0900 Subject: [PATCH 051/142] =?UTF-8?q?[Fix]=20=EB=AA=A8=EC=A7=91=20=EA=B2=8C?= =?UTF-8?q?=EC=8B=9C=EA=B8=80=20=EC=9E=91=EC=84=B1=20API=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20=20(#132)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :sparkles: feature: Article์—”ํ‹ฐํ‹ฐ์— ์œ ์ € ์—ฐ๊ด€๊ด€๊ณ„ ์ถ”๊ฐ€ * :sparkles: feature: ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€ ์ƒ์„ฑ API์— ์œ ์ €์ •๋ณด ์ถ”๊ฐ€ * :sparkles: feature: swagger๋ฌธ์„œ http -> https๋กœ ์ˆ˜์ • --- .../constants/group-article.constants.ts | 56 +++++++++---------- .../dto/group-article-register-request.dto.ts | 7 ++- .../group-article/entity/article.entity.ts | 10 ++++ .../entity/group-article.entity.ts | 45 +++++++-------- .../app/group-article/entity/group.entity.ts | 2 +- .../group-article/group-article.controller.ts | 19 ++++--- .../group-article/group-article.service.ts | 30 ++++++---- .../repository/group-article.repository.ts | 4 +- backend/src/setSwagger.ts | 2 +- 9 files changed, 100 insertions(+), 75 deletions(-) diff --git a/backend/src/app/group-article/constants/group-article.constants.ts b/backend/src/app/group-article/constants/group-article.constants.ts index 066292f9..18ecf43b 100644 --- a/backend/src/app/group-article/constants/group-article.constants.ts +++ b/backend/src/app/group-article/constants/group-article.constants.ts @@ -1,41 +1,41 @@ export enum CATEGORY { - MEAL = '์‹์‚ฌ', - STUDY = '์Šคํ„ฐ๋””', - ETC = '๊ธฐํƒ€', - COMPITITION = '๊ณต๋ชจ์ „', - PROJECT = 'ํ”„๋กœ์ ํŠธ', + MEAL = 'MEAL', + STUDY = 'STUDY', + ETC = 'ETC', + COMPETITION = 'COMPETITION', + PROJECT = 'PROJECT', } export enum LOCATION { - ONLINE = '์˜จ๋ผ์ธ', - SEOUL = '์„œ์šธ', - INCHEON = '์ธ์ฒœ', - BUSAN = '๋ถ€์‚ฐ', - DAEGU = '๋Œ€๊ตฌ', - GWANGJU = '๊ด‘์ฃผ', - DAEJEON = '๋Œ€์ „', - ULSAN = '์šธ์‚ฐ', - SEJONG = '์„ธ์ข…', - GYEONGGI = '๊ฒฝ๊ธฐ', - GANGWON = '๊ฐ•์›', - CHUNGBUK = '์ถฉ๋ถ', - CHUNGNAM = '์ถฉ๋‚จ', - JEONBUK = '์ „๋ถ', - JEONNAM = '์ „๋‚จ', - GYEONGBUK = '๊ฒฝ๋ถ', - GYEONGNAM = '๊ฒฝ๋‚จ', - JEJU = '์ œ์ฃผ', + ONLINE = 'ONLINE', + SEOUL = 'SEOUL', + INCHEON = 'INCHEON', + BUSAN = 'BUSAN', + DAEGU = 'DAEGU', + GWANGJU = 'GWANGJU', + DAEJEON = 'DAEJEON', + ULSAN = 'ULSAN', + SEJONG = 'SEJONG', + GYEONGGI = 'GYEONGGI', + GANGWON = 'GANGWON', + CHUNGBUK = 'CHUNGBUK', + CHUNGNAM = 'CHUNGNAM', + JEONBUK = 'JEONBUK', + JEONNAM = 'JEONNAM', + GYEONGBUK = 'GYEONGBUK', + GYEONGNAM = 'GYEONGNAM', + JEJU = 'JEJU', } export enum GROUP_APPLICATION_STATUS { - REGISTER, - CANCEL, + REGISTER = 'REGISTER', + CANCEL = 'CANCEL', } export enum GROUP_STATUS { - PROGRESS = '๋ชจ์ง‘์ค‘', - SUCCEED = '๋ชจ์ง‘์™„๋ฃŒ', - FAIL = '๋ชจ์ง‘์ค‘๋‹จ', + PROGRESS = 'PROGRESS', + SUCCEED = 'SUCCEED', + FAIL = 'FAIL', } export enum ARTICLE { diff --git a/backend/src/app/group-article/dto/group-article-register-request.dto.ts b/backend/src/app/group-article/dto/group-article-register-request.dto.ts index 73e0d231..af4a6c67 100644 --- a/backend/src/app/group-article/dto/group-article-register-request.dto.ts +++ b/backend/src/app/group-article/dto/group-article-register-request.dto.ts @@ -1,17 +1,18 @@ import { ApiProperty } from '@nestjs/swagger'; -import { IsEnum, IsString } from 'class-validator'; +import { IsEnum, IsNumber, IsString, Length, Min } from 'class-validator'; import { CATEGORY, LOCATION, } from '@app/group-article/constants/group-article.constants'; -export class GroupArticleRegisterResquest { +export class GroupArticleRegisterRequest { @ApiProperty({ example: 'CS ์Šคํ„ฐ๋”” ๋ชจ์ง‘', description: '๋ชจ์ง‘๊ฒŒ์‹œ๊ธ€ ์ œ๋ชฉ', required: true, }) @IsString() + @Length(1, 100) title: string; @ApiProperty({ @@ -46,6 +47,8 @@ export class GroupArticleRegisterResquest { description: '๋ชจ์ž„์˜ ์ตœ๋Œ€ ์ธ์›์„ ๋ช‡ ๋ช…์œผ๋กœ ํ•  ๊ฒƒ์ธ์ง€ ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.', required: true, }) + @IsNumber() + @Min(2) maxCapacity: number; @ApiProperty({ diff --git a/backend/src/app/group-article/entity/article.entity.ts b/backend/src/app/group-article/entity/article.entity.ts index fea40784..51f03483 100644 --- a/backend/src/app/group-article/entity/article.entity.ts +++ b/backend/src/app/group-article/entity/article.entity.ts @@ -2,10 +2,13 @@ import { Column, CreateDateColumn, Entity, + JoinColumn, + ManyToOne, PrimaryGeneratedColumn, TableInheritance, UpdateDateColumn, } from 'typeorm'; +import { User } from '@app/user/entity/user.entity'; @Entity({ name: 'article' }) @TableInheritance({ pattern: 'STI', column: { type: 'varchar', name: 'type' } }) @@ -13,6 +16,13 @@ export abstract class Article { @PrimaryGeneratedColumn({ unsigned: true }) id: number; + @Column({ unsigned: true }) + userId: number; + + @ManyToOne(() => User, { lazy: true, nullable: false }) + @JoinColumn({ referencedColumnName: 'id', name: 'user_id' }) + user: Promise; + @Column({ type: 'varchar', length: 100 }) title: string; diff --git a/backend/src/app/group-article/entity/group-article.entity.ts b/backend/src/app/group-article/entity/group-article.entity.ts index 7a903a80..9434e3fd 100644 --- a/backend/src/app/group-article/entity/group-article.entity.ts +++ b/backend/src/app/group-article/entity/group-article.entity.ts @@ -6,6 +6,7 @@ import { ARTICLE, LOCATION, } from '@app/group-article/constants/group-article.constants'; +import { User } from '@app/user/entity/user.entity'; @ChildEntity(ARTICLE.GROUP) export class GroupArticle extends Article { @@ -15,28 +16,32 @@ export class GroupArticle extends Article { }) group: Group; - static register({ - title, - contents, - thumbnail, - location, - chatUrl, - maxCapacity, - category, - }: { - title: string; - contents: string; - thumbnail: string; - location: LOCATION; - chatUrl: string; - maxCapacity: number; - category: GroupCategory; - }) { + static create( + user: User, + { + title, + contents, + thumbnail, + location, + chatUrl, + maxCapacity, + category, + }: { + title: string; + contents: string; + thumbnail: string; + location: LOCATION; + chatUrl: string; + maxCapacity: number; + category: GroupCategory; + }, + ) { const article = new GroupArticle(); article.title = title; article.contents = contents; article.type = ARTICLE.GROUP; - article.group = Group.register({ + article.user = Promise.resolve(user); + article.group = Group.create({ location, chatUrl, maxCapacity, @@ -45,8 +50,4 @@ export class GroupArticle extends Article { }); return article; } - - delete() { - this.deletedAt = new Date(); - } } diff --git a/backend/src/app/group-article/entity/group.entity.ts b/backend/src/app/group-article/entity/group.entity.ts index 39f5d0b3..c70bddc2 100644 --- a/backend/src/app/group-article/entity/group.entity.ts +++ b/backend/src/app/group-article/entity/group.entity.ts @@ -49,7 +49,7 @@ export class Group { @UpdateDateColumn() updatedAt: Date; - static register({ + static create({ location, chatUrl, maxCapacity, diff --git a/backend/src/app/group-article/group-article.controller.ts b/backend/src/app/group-article/group-article.controller.ts index cefd80f5..4746d9f4 100644 --- a/backend/src/app/group-article/group-article.controller.ts +++ b/backend/src/app/group-article/group-article.controller.ts @@ -4,7 +4,7 @@ import { ApiErrorResponse } from '@src/common/decorator/api-error-response.decor import { ApiSuccessResponse } from '@src/common/decorator/api-success-resposne.decorator'; import { JwtAuth } from '@src/common/decorator/jwt-auth.decorator'; import { ResponseEntity } from '@src/common/response-entity'; -import { GroupArticleRegisterResquest } from '@app/group-article/dto/group-article-register-request.dto'; +import { GroupArticleRegisterRequest } from '@app/group-article/dto/group-article-register-request.dto'; import { GroupArticleRegisterResponse } from '@app/group-article/dto/group-article-register-response.dto'; import { GroupCategoryNotFoundException } from '@app/group-article/exception/group-category-not-found.exception'; import { GroupArticleService } from '@app/group-article/group-article.service'; @@ -15,6 +15,8 @@ import { SearchGroupArticlesRequest } from '@app/group-article/dto/search-group- import { SearchGroupArticleResponse } from '@app/group-article/dto/search-group-articles-response.dto'; import { GroupArticleSearchResult } from '@app/group-article/dto/group-article-search-result.dto'; import { ImageService } from '@app/image/image.service'; +import { CurrentUser } from '@decorator/current-user.decorator'; +import { User } from '@app/user/entity/user.entity'; @Controller('group-articles') @ApiTags('Group-Article') @@ -38,19 +40,22 @@ export class GroupArticleController { ); } - @Post() + @Post('/') @JwtAuth() @ApiSuccessResponse(HttpStatus.CREATED, GroupArticleRegisterResponse) @ApiErrorResponse(GroupCategoryNotFoundException) - async registerBoard( - @Body() groupArticleRegisterResquest: GroupArticleRegisterResquest, + async createGroupArticle( + @CurrentUser() user: User, + @Body() groupArticleRegisterRequest: GroupArticleRegisterRequest, ) { const article = await this.groupArticleService.registerGroupArticle( - groupArticleRegisterResquest, + user, + groupArticleRegisterRequest, ); - const data = GroupArticleRegisterResponse.from(article); - return ResponseEntity.CREATED_WITH_DATA(data); + return ResponseEntity.CREATED_WITH_DATA( + GroupArticleRegisterResponse.from(article), + ); } @Get('/search') diff --git a/backend/src/app/group-article/group-article.service.ts b/backend/src/app/group-article/group-article.service.ts index 8de1679d..2ab38d5c 100644 --- a/backend/src/app/group-article/group-article.service.ts +++ b/backend/src/app/group-article/group-article.service.ts @@ -1,9 +1,10 @@ import { Injectable } from '@nestjs/common'; -import { GroupArticleRegisterResquest } from '@app/group-article/dto/group-article-register-request.dto'; +import { GroupArticleRegisterRequest } from '@app/group-article/dto/group-article-register-request.dto'; import { GroupArticle } from '@app/group-article/entity/group-article.entity'; import { GroupCategoryNotFoundException } from '@src/app/group-article/exception/group-category-not-found.exception'; import { GroupCategoryRepository } from '@app/group-article/repository/group-category.repository'; import { GroupArticleRepository } from '@app/group-article/repository/group-article.repository'; +import { User } from '@app/user/entity/user.entity'; @Injectable() export class GroupArticleService { @@ -13,24 +14,29 @@ export class GroupArticleService { ) {} async registerGroupArticle( - groupArticleRegisterResquest: GroupArticleRegisterResquest, + user: User, + groupArticleRegisterRequest: GroupArticleRegisterRequest, ) { const category = await this.groupCategoryRepository.findByCategoryName( - groupArticleRegisterResquest.category, + groupArticleRegisterRequest.category, ); + if (!category) { throw new GroupCategoryNotFoundException(); } - const groupArticle = GroupArticle.register({ - title: groupArticleRegisterResquest.title, - contents: groupArticleRegisterResquest.contents, - thumbnail: groupArticleRegisterResquest.thumbnail, - location: groupArticleRegisterResquest.location, - maxCapacity: groupArticleRegisterResquest.maxCapacity, - chatUrl: groupArticleRegisterResquest.chatUrl, - category: category, + const groupArticle = GroupArticle.create(user, { + title: groupArticleRegisterRequest.title, + contents: groupArticleRegisterRequest.contents, + thumbnail: groupArticleRegisterRequest.thumbnail, + location: groupArticleRegisterRequest.location, + maxCapacity: groupArticleRegisterRequest.maxCapacity, + chatUrl: groupArticleRegisterRequest.chatUrl, + category, }); - return this.groupArticleRepository.save(groupArticle); + + await this.groupArticleRepository.save(groupArticle); + + return groupArticle; } } diff --git a/backend/src/app/group-article/repository/group-article.repository.ts b/backend/src/app/group-article/repository/group-article.repository.ts index f917f5c7..e84ba5d6 100644 --- a/backend/src/app/group-article/repository/group-article.repository.ts +++ b/backend/src/app/group-article/repository/group-article.repository.ts @@ -55,8 +55,7 @@ export class GroupArticleRepository extends Repository { ) .leftJoin(Scrap, 'scrap', 'groupArticle.id = scrap.articleId') .where('groupArticle.deletedAt IS NULL') - .groupBy('groupArticle.id') - .orderBy('groupArticle.id', 'DESC'); + .groupBy('groupArticle.id'); if (searchRequest.location) { query.andWhere('group.location = :location', { @@ -78,6 +77,7 @@ export class GroupArticleRepository extends Repository { const count = await query.clone().getCount(); const result = await query + .orderBy('groupArticle.id', 'DESC') .limit(searchRequest.getLimit()) .offset(searchRequest.getOffset()) .getRawMany(); diff --git a/backend/src/setSwagger.ts b/backend/src/setSwagger.ts index d7a9b875..838dd5f9 100644 --- a/backend/src/setSwagger.ts +++ b/backend/src/setSwagger.ts @@ -12,7 +12,7 @@ export const setSwagger = (app: INestApplication) => { .setTitle('MoyeoMoyeo REST API Specification') .setVersion('1.0.0') .addServer(`http://localhost`) - .addServer('http://api.moyeomoyeo.com') + .addServer('https://api.moyeomoyeo.com') .addCookieAuth( 'access_token', { type: 'apiKey', in: 'cookie' }, From 91e828e354160ec87a4b6c632ffabbc9d2d2cb3a Mon Sep 17 00:00:00 2001 From: Gakko <90585081+pythonstrup@users.noreply.github.com> Date: Tue, 29 Nov 2022 18:13:28 +0900 Subject: [PATCH 052/142] =?UTF-8?q?[Feature]=20=ED=94=84=EB=A1=9C=ED=95=84?= =?UTF-8?q?=20=EC=88=98=EC=A0=95=20API=20(#134)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * โ™ป๏ธ refactor: NO_CONTENT Response Swagger ๋ณ€๊ฒฝ * โœจ feature: ์œ ์ €์ด๋ฆ„ ์ค‘๋ณต exception ์ž‘์„ฑ * โœจ feature: ํ”„๋กœํ•„ ์ˆ˜์ • request dto ์ž‘์„ฑ * โœจ feature: response entity 'NO_CONTENT' ์ถ”๊ฐ€ * โœจ feature: user repository ํ”„๋กœํ•„ ์ˆ˜์ • * โœจ feature: ํ”„๋กœํ•„ ์ˆ˜์ • ๋กœ์ง ๋ฐ ์˜ˆ์™ธ์ฒ˜๋ฆฌ * โœจ feature: ํ”„๋กœํ•„ ์ˆ˜์ • API ์ž‘์„ฑ - Put API - myinfo service ํ˜ธ์ถœ - swagger decorator * โ™ป๏ธ refactor: ์ƒ๋Œ€๊ฒฝ๋กœ๋ฅผ ์ ˆ๋Œ€๊ฒฝ๋กœ๋กœ ๋ณ€๊ฒฝ * โ™ป๏ธ refactor: ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ - Exception ์ด๋ฆ„ ๋ณ€๊ฒฝ * โ™ป๏ธ refactor: ์‚ญ์ œ๋œ ์œ ์ €๋ฅผ find ๋…ผ๋ฆฌ์—์„œ ์ œ์™ธ - ํšŒ์›ํƒˆํ‡ดํ–ˆ์„ ๊ฒฝ์šฐ ํƒˆํ‡ดํ•œ ์œ ์ €์˜ userName์„ ๋‹ค๋ฅธ ์œ ์ €๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋กœ์ง์„ ๋ณ€๊ฒฝ * โ™ป๏ธ refactor: myinfo Controller & Service ๋ฆฌํŒฉํ† ๋ง - ์ธ์ž ๊ฐ’์„ ๊ฐ์ฒด๋กœ ๋„˜๊ธฐ์ž! --- .../dto/profile-modifying-request.dto.ts | 45 +++++++++++++++++++ .../exception/username-duplicate.exception.ts | 9 ++++ backend/src/app/myinfo/myinfo.controller.ts | 19 +++++--- backend/src/app/myinfo/myinfo.service.ts | 21 +++++++++ backend/src/app/user/entity/user.entity.ts | 24 +++++++++- backend/src/app/user/user.repository.ts | 19 ++++++-- .../api-success-resposne.decorator.ts | 2 +- backend/src/common/guard/jwt-auth.guard.ts | 4 +- backend/src/common/response-entity.ts | 4 ++ 9 files changed, 134 insertions(+), 13 deletions(-) create mode 100644 backend/src/app/myinfo/dto/profile-modifying-request.dto.ts create mode 100644 backend/src/app/myinfo/exception/username-duplicate.exception.ts diff --git a/backend/src/app/myinfo/dto/profile-modifying-request.dto.ts b/backend/src/app/myinfo/dto/profile-modifying-request.dto.ts new file mode 100644 index 00000000..65b97e3d --- /dev/null +++ b/backend/src/app/myinfo/dto/profile-modifying-request.dto.ts @@ -0,0 +1,45 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { IsString, IsUrl } from 'class-validator'; + +export class ProfileModifyingRequest { + @ApiProperty({ + example: 'pythonstrup', + description: 'userName', + required: true, + }) + @IsString() + userName: string; + + @ApiProperty({ + example: + 'https://kr.object.ncloudstorage.com/uploads/images/1669276833875-64adca9c-94cd-4162-a53f-f75e951e39db', + description: 'ํ”„๋กœํ•„ ์ด๋ฏธ์ง€', + required: true, + }) + @IsString() + profileImage: string; + + @ApiProperty({ + example: '์•ˆ๋…•ํ•˜์„ธ์š” ์›นํ’€์Šคํƒ ๊ฐœ๋ฐœ์ž pythonstrup์ž…๋‹ˆ๋‹ค!', + description: '๊ฐ„๋‹จํ•œ ์ž๊ธฐ์†Œ๊ฐœ', + required: true, + }) + @IsString() + description: string; + + @ApiProperty({ + example: 'https://github.com/pythonstrup', + description: '๊นƒํ—ˆ๋ธŒ ์ฃผ์†Œ', + required: true, + }) + @IsUrl() + githubUrl: string; + + @ApiProperty({ + example: 'https://myvelop.tistory.com/', + description: '๋ธ”๋กœ๊ทธ ์ฃผ์†Œ', + required: true, + }) + @IsUrl() + blogUrl: string; +} diff --git a/backend/src/app/myinfo/exception/username-duplicate.exception.ts b/backend/src/app/myinfo/exception/username-duplicate.exception.ts new file mode 100644 index 00000000..687ce86c --- /dev/null +++ b/backend/src/app/myinfo/exception/username-duplicate.exception.ts @@ -0,0 +1,9 @@ +import { BadRequestException } from '@nestjs/common'; + +export class UserNameDuplicateException extends BadRequestException { + constructor( + message = '์ค‘๋ณต๋œ ์œ ์ €์ด๋ฆ„์œผ๋กœ ์š”์ฒญํ–ˆ์Šต๋‹ˆ๋‹ค! ํ•ด๋‹น ์œ ์ €์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.', + ) { + super({ status: 'USER_NAME_DUPLICATE_BAD_REQUEST', message }); + } +} diff --git a/backend/src/app/myinfo/myinfo.controller.ts b/backend/src/app/myinfo/myinfo.controller.ts index f8cce5e0..56b640bd 100644 --- a/backend/src/app/myinfo/myinfo.controller.ts +++ b/backend/src/app/myinfo/myinfo.controller.ts @@ -1,4 +1,4 @@ -import { Controller, Get, HttpStatus, Put } from '@nestjs/common'; +import { Body, Controller, Get, HttpStatus, Put } from '@nestjs/common'; import { JwtAuth } from '@src/common/decorator/jwt-auth.decorator'; import { MyInfoService } from '@app/myinfo/myinfo.service'; import { ApiTags } from '@nestjs/swagger'; @@ -7,6 +7,9 @@ import { MyInfoGetResponse } from '@app/myinfo/dto/myinfo-get-response.dto'; import { ResponseEntity } from '@src/common/response-entity'; import { CurrentUser } from '@src/common/decorator/current-user.decorator'; import { User } from '@app/user/entity/user.entity'; +import { ProfileModifyingRequest } from '@app/myinfo/dto/profile-modifying-request.dto'; +import { ApiErrorResponse } from '@src/common/decorator/api-error-response.decorator'; +import { UserNameDuplicateException } from '@app/myinfo/exception/username-duplicate.exception'; @Controller('/my-info') @JwtAuth() @@ -14,15 +17,21 @@ import { User } from '@app/user/entity/user.entity'; export class MyInfoController { constructor(private readonly myInfoService: MyInfoService) {} - @Get() + @Get('/') @ApiSuccessResponse(HttpStatus.OK, MyInfoGetResponse) async getMyInfo(@CurrentUser() user: User) { const data = MyInfoGetResponse.from(user); return ResponseEntity.OK_WITH_DATA(data); } - @Put() - modifyMyInfo() { - return ''; + @Put('/') + @ApiSuccessResponse(HttpStatus.NO_CONTENT) + @ApiErrorResponse(UserNameDuplicateException) + async modifyProfile( + @CurrentUser() user: User, + @Body() profileModifyingRequest: ProfileModifyingRequest, + ) { + await this.myInfoService.updateProfile(user, profileModifyingRequest); + return ResponseEntity.NO_CONTENT(); } } diff --git a/backend/src/app/myinfo/myinfo.service.ts b/backend/src/app/myinfo/myinfo.service.ts index a8973280..ee207666 100644 --- a/backend/src/app/myinfo/myinfo.service.ts +++ b/backend/src/app/myinfo/myinfo.service.ts @@ -1,7 +1,28 @@ import { Injectable } from '@nestjs/common'; import { UserRepository } from '@app/user/user.repository'; +import { ProfileModifyingRequest } from '@app/myinfo/dto/profile-modifying-request.dto'; +import { UserNameDuplicateException } from '@app/myinfo/exception/username-duplicate.exception'; +import { User } from '../user/entity/user.entity'; @Injectable() export class MyInfoService { constructor(private readonly userRepository: UserRepository) {} + + async updateProfile(user: User, ModifyingContents: ProfileModifyingRequest) { + const currentUser = await this.userRepository.findByUsername( + ModifyingContents.userName, + ); + if (currentUser && user.userName !== ModifyingContents.userName) { + throw new UserNameDuplicateException(); + } + + user.updateProfile({ + userName: ModifyingContents.userName, + profileImage: ModifyingContents.profileImage, + description: ModifyingContents.description, + githubUrl: ModifyingContents.githubUrl, + blogUrl: ModifyingContents.blogUrl, + }); + this.userRepository.updateUser(user); + } } diff --git a/backend/src/app/user/entity/user.entity.ts b/backend/src/app/user/entity/user.entity.ts index b2fcc419..8141fb3a 100644 --- a/backend/src/app/user/entity/user.entity.ts +++ b/backend/src/app/user/entity/user.entity.ts @@ -12,7 +12,7 @@ export class User { @PrimaryGeneratedColumn({ unsigned: true }) id: number; - @Column({ type: 'varchar', length: 100 }) + @Column({ type: 'varchar', length: 100, unique: true }) userName: string; @Column({ type: 'varchar', length: 400, default: '' }) @@ -40,7 +40,7 @@ export class User { updatedAt: Date; @Column({ type: 'timestamp', nullable: true }) - deletedAt: Date; + deletedAt: Date | null; static signup({ socialId, @@ -64,4 +64,24 @@ export class User { user.userName = randomUUID(); return user; } + + updateProfile({ + userName, + profileImage, + description, + blogUrl, + githubUrl, + }: { + userName: string; + profileImage: string; + description: string; + blogUrl: string; + githubUrl: string; + }) { + this.userName = userName; + this.profileImage = profileImage; + this.blogUrl = blogUrl; + this.description = description; + this.githubUrl = githubUrl; + } } diff --git a/backend/src/app/user/user.repository.ts b/backend/src/app/user/user.repository.ts index 07cdf8d5..fab2e47b 100644 --- a/backend/src/app/user/user.repository.ts +++ b/backend/src/app/user/user.repository.ts @@ -13,14 +13,27 @@ export class UserRepository extends Repository { } findBySocial(socialId: string, socialType: string) { - return this.findOneBy({ socialId, socialType }); + return this.findOneBy({ socialId, socialType, deletedAt: null }); } findByUsername(userName: string) { - return this.findOneBy({ userName }); + return this.findOneBy({ userName, deletedAt: null }); } findById(id: number) { - return this.findOneBy({ id }); + return this.findOneBy({ id, deletedAt: null }); + } + + updateUser(user: User) { + return this.update( + { id: user.id }, + { + userName: user.userName, + profileImage: user.profileImage, + description: user.description, + githubUrl: user.githubUrl, + blogUrl: user.blogUrl, + }, + ); } } diff --git a/backend/src/common/decorator/api-success-resposne.decorator.ts b/backend/src/common/decorator/api-success-resposne.decorator.ts index f5cea92f..548412e2 100644 --- a/backend/src/common/decorator/api-success-resposne.decorator.ts +++ b/backend/src/common/decorator/api-success-resposne.decorator.ts @@ -25,7 +25,7 @@ export function ApiSuccessResponse( return applyDecorators( HttpCode(status), ApiResponse({ - type: dataType && Temp, + type: HttpStatus.NO_CONTENT === status ? undefined : dataType && Temp, status, description: HttpStatus[status], }), diff --git a/backend/src/common/guard/jwt-auth.guard.ts b/backend/src/common/guard/jwt-auth.guard.ts index 36164fa5..910103a5 100644 --- a/backend/src/common/guard/jwt-auth.guard.ts +++ b/backend/src/common/guard/jwt-auth.guard.ts @@ -31,7 +31,7 @@ export class JwtAuthGuard implements CanActivate { const user = await this.dataSource .getRepository(User) - .findOneBy({ id: authTokenPayload.userId }); + .findOneBy({ id: authTokenPayload.userId, deletedAt: null }); if (!user) throw new Error('์œ ์ €๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค'); @@ -48,7 +48,7 @@ export class JwtAuthGuard implements CanActivate { const user = await this.dataSource .getRepository(User) - .findOneBy({ id: authTokenPayload.userId }); + .findOneBy({ id: authTokenPayload.userId, deletedAt: null }); if (!user) throw new Error('Not Found User'); diff --git a/backend/src/common/response-entity.ts b/backend/src/common/response-entity.ts index ff464793..f9966274 100644 --- a/backend/src/common/response-entity.ts +++ b/backend/src/common/response-entity.ts @@ -24,6 +24,10 @@ export class ResponseEntity { return new ResponseEntity('CREATED', '', data); } + static NO_CONTENT() { + return new ResponseEntity('NO_CONTENT', '', ''); + } + static ERROR() { return new ResponseEntity( 'INTERNAL_SERVER_ERROR', From 01d6258999c7b5494a204ccb027d6cb015bc3b41 Mon Sep 17 00:00:00 2001 From: Kim Myeongil <67570061+username1103@users.noreply.github.com> Date: Tue, 29 Nov 2022 19:07:43 +0900 Subject: [PATCH 053/142] =?UTF-8?q?[Feature]=20=EB=AA=A8=EC=A7=91=20?= =?UTF-8?q?=EA=B2=8C=EC=8B=9C=EA=B8=80=20=EC=82=AD=EC=A0=9C=20API=20(#133)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit :sparkles: feature: DELETE /v1/group-articles/:id API ์ถ”๊ฐ€ --- .../entity/group-article.entity.ts | 13 +++++++++- .../group-article-not-found.exception.ts | 7 ++++++ .../exception/not-author.exception.ts | 7 ++++++ .../group-article/group-article.controller.ts | 25 ++++++++++++++++++- .../group-article/group-article.service.ts | 15 +++++++++++ 5 files changed, 65 insertions(+), 2 deletions(-) create mode 100644 backend/src/app/group-article/exception/group-article-not-found.exception.ts create mode 100644 backend/src/app/group-article/exception/not-author.exception.ts diff --git a/backend/src/app/group-article/entity/group-article.entity.ts b/backend/src/app/group-article/entity/group-article.entity.ts index 9434e3fd..c0003203 100644 --- a/backend/src/app/group-article/entity/group-article.entity.ts +++ b/backend/src/app/group-article/entity/group-article.entity.ts @@ -4,15 +4,17 @@ import { Group } from '@app/group-article/entity/group.entity'; import { GroupCategory } from '@app/group-article/entity/group-category.entity'; import { ARTICLE, + GROUP_STATUS, LOCATION, } from '@app/group-article/constants/group-article.constants'; import { User } from '@app/user/entity/user.entity'; +import { NotAuthorException } from '@app/group-article/exception/not-author.exception'; @ChildEntity(ARTICLE.GROUP) export class GroupArticle extends Article { @OneToOne(() => Group, (group) => group.article, { eager: true, - cascade: ['insert'], + cascade: ['insert', 'update'], }) group: Group; @@ -50,4 +52,13 @@ export class GroupArticle extends Article { }); return article; } + + remove(user: User) { + if (this.userId !== user.id) { + throw new NotAuthorException(); + } + + this.group.status = GROUP_STATUS.FAIL; + this.deletedAt = new Date(); + } } diff --git a/backend/src/app/group-article/exception/group-article-not-found.exception.ts b/backend/src/app/group-article/exception/group-article-not-found.exception.ts new file mode 100644 index 00000000..c13f9a65 --- /dev/null +++ b/backend/src/app/group-article/exception/group-article-not-found.exception.ts @@ -0,0 +1,7 @@ +import { NotFoundException } from '@nestjs/common'; + +export class GroupArticleNotFoundException extends NotFoundException { + constructor(message = 'ํ•ด๋‹นํ•˜๋Š” ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€์ด ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค') { + super({ status: 'GROUP_ARTICLE_NOT_FOUND', message }); + } +} diff --git a/backend/src/app/group-article/exception/not-author.exception.ts b/backend/src/app/group-article/exception/not-author.exception.ts new file mode 100644 index 00000000..6a2af919 --- /dev/null +++ b/backend/src/app/group-article/exception/not-author.exception.ts @@ -0,0 +1,7 @@ +import { ForbiddenException } from '@nestjs/common'; + +export class NotAuthorException extends ForbiddenException { + constructor(message = '์ž‘์„ฑ์ž๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค') { + super({ status: 'NOT_AUTHOR', message }); + } +} diff --git a/backend/src/app/group-article/group-article.controller.ts b/backend/src/app/group-article/group-article.controller.ts index 4746d9f4..2701415f 100644 --- a/backend/src/app/group-article/group-article.controller.ts +++ b/backend/src/app/group-article/group-article.controller.ts @@ -1,4 +1,14 @@ -import { Body, Controller, Get, HttpStatus, Post, Query } from '@nestjs/common'; +import { + Body, + Controller, + Delete, + Get, + HttpStatus, + Param, + ParseIntPipe, + Post, + Query, +} from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; import { ApiErrorResponse } from '@src/common/decorator/api-error-response.decorator'; import { ApiSuccessResponse } from '@src/common/decorator/api-success-resposne.decorator'; @@ -17,6 +27,8 @@ import { GroupArticleSearchResult } from '@app/group-article/dto/group-article-s import { ImageService } from '@app/image/image.service'; import { CurrentUser } from '@decorator/current-user.decorator'; import { User } from '@app/user/entity/user.entity'; +import { NotAuthorException } from '@app/group-article/exception/not-author.exception'; +import { GroupArticleNotFoundException } from '@app/group-article/exception/group-article-not-found.exception'; @Controller('group-articles') @ApiTags('Group-Article') @@ -74,4 +86,15 @@ export class GroupArticleController { ), ); } + + @Delete('/:id') + @JwtAuth() + @ApiSuccessResponse(HttpStatus.NO_CONTENT) + @ApiErrorResponse(NotAuthorException, GroupArticleNotFoundException) + async remove( + @CurrentUser() user: User, + @Param('id', ParseIntPipe) id: number, + ) { + await this.groupArticleService.remove(user, id); + } } diff --git a/backend/src/app/group-article/group-article.service.ts b/backend/src/app/group-article/group-article.service.ts index 2ab38d5c..bf814faf 100644 --- a/backend/src/app/group-article/group-article.service.ts +++ b/backend/src/app/group-article/group-article.service.ts @@ -5,6 +5,7 @@ import { GroupCategoryNotFoundException } from '@src/app/group-article/exception import { GroupCategoryRepository } from '@app/group-article/repository/group-category.repository'; import { GroupArticleRepository } from '@app/group-article/repository/group-article.repository'; import { User } from '@app/user/entity/user.entity'; +import { GroupArticleNotFoundException } from '@app/group-article/exception/group-article-not-found.exception'; @Injectable() export class GroupArticleService { @@ -39,4 +40,18 @@ export class GroupArticleService { return groupArticle; } + + async remove(user: User, id: number) { + const groupArticle = await this.groupArticleRepository.findOneBy({ + id, + deletedAt: null, + }); + if (!groupArticle) { + throw new GroupArticleNotFoundException(); + } + + groupArticle.remove(user); + + await this.groupArticleRepository.save(groupArticle, { reload: false }); + } } From 977772ba29639b535850242969fedd52867cbfe7 Mon Sep 17 00:00:00 2001 From: Gakko <90585081+pythonstrup@users.noreply.github.com> Date: Wed, 30 Nov 2022 00:42:07 +0900 Subject: [PATCH 054/142] =?UTF-8?q?=E2=9C=A8=20feature:=20image=20upload?= =?UTF-8?q?=20body=20swagger=20=EC=B6=94=EA=B0=80=20(#140)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/src/app/image/image.controller.ts | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/backend/src/app/image/image.controller.ts b/backend/src/app/image/image.controller.ts index f51ec527..25223553 100644 --- a/backend/src/app/image/image.controller.ts +++ b/backend/src/app/image/image.controller.ts @@ -6,7 +6,7 @@ import { UseInterceptors, } from '@nestjs/common'; import { FilesInterceptor } from '@nestjs/platform-express'; -import { ApiTags } from '@nestjs/swagger'; +import { ApiBody, ApiConsumes, ApiTags } from '@nestjs/swagger'; import { ApiSuccessResponse } from '@src/common/decorator/api-success-resposne.decorator'; import { ResponseEntity } from '@src/common/response-entity'; import { ImagesUploadResponse } from '@app/image/dto/images-upload-response.dto'; @@ -18,8 +18,23 @@ export class ImageController { constructor(private readonly imageService: ImageService) {} @Post('upload') - @UseInterceptors(FilesInterceptor('files')) @ApiSuccessResponse(HttpStatus.CREATED, ImagesUploadResponse) + @UseInterceptors(FilesInterceptor('files')) + @ApiConsumes('multipart/form-data') + @ApiBody({ + schema: { + type: 'object', + properties: { + files: { + type: 'array', + items: { + type: 'string', + format: 'binary', + }, + }, + }, + }, + }) async uploadImage(@UploadedFiles() files: Array) { const { keyList, urlList } = this.imageService.uploadImage(files); const data = keyList.map( From bc9d0431501ae775e8df81d1d295464d526a2ef4 Mon Sep 17 00:00:00 2001 From: yangseungchan Date: Wed, 30 Nov 2022 10:24:21 +0900 Subject: [PATCH 055/142] =?UTF-8?q?[Feature]=20=EB=A1=9C=EA=B7=B8=EC=9D=B8?= =?UTF-8?q?=20API=20=EC=97=B0=EB=8F=99=20=EB=B0=8F=20=EB=A6=AC=EB=8B=A4?= =?UTF-8?q?=EC=9D=B4=EB=A0=89=EC=85=98=20=EB=A1=9C=EC=A7=81=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=20(#135)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ๐Ÿฅ… chore: ์ปดํฌ๋„ŒํŠธ props๋กœ ๋น„๋™๊ธฐ ํ•จ์ˆ˜ ๋„˜๊ธธ์ˆ˜ ์žˆ๋„๋ก lint ์ˆ˜์ • * ๐Ÿฅ… chore: ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ถ”๊ฐ€ ๋ฐ ๊ฐœ๋ฐœ ํฌํŠธ๋ฒˆํ˜ธ ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: API ์ฃผ์†Œ๋กœ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด ํ”„๋ก์‹œ ์„ค์ • * โœจ feature: ๋กœ๊ทธ์ธ ๋กœ์ง ์ถ”๊ฐ€ * โœจ feature: ์œ ์ € ์ •๋ณด ์กฐํšŒ ์ปค์Šคํ…€ ํ›… ์ƒ์„ฑ * โœจ feature: ๋กœ๊ทธ์ธ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ํ—ค๋”์— ์œ ์ €์ •๋ณด ํ‘œ์‹œ * โ™ป๏ธ refactor: useFetchMyInfo์— ๋ฆฌ๋‹ค์ด๋ ‰์…˜ ๋กœ์ง ์ถ”๊ฐ€ * ๐Ÿฅ… chore: ๋ถˆํ•„์š”ํ•œ ๋ชจํ‚น hook๊ณผ fetcher ์‚ญ์ œ * ๐Ÿฅ… chore: ํ”„๋กœํ•„์—์„œ ์ด๋ฆ„์ด ๊ธธ๋•Œ ๋ณด๊ธฐ ์ด์ƒํ•˜์ง€ ์•Š๊ฒŒ ์ˆ˜์ • * ๐Ÿฅ… chore: ์œ ์ € ๋กœ๊ทธ์ธ ์—ฌ๋ถ€ ํ™•์ธ ๋กœ์ง ์ถ”๊ฐ€ * โ™ป๏ธ refactor: ๋กœ๊ทธ์ธ ๋ฆฌ๋‹ค์ด๋ ‰์…˜ ๋กœ์ง ๋ถ„๋ฆฌ * ๐Ÿฅ… chore: ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๊ด€๋ จ ์„ค์ • * ๐Ÿฅ… chore: ํ”„๋ก ํŠธ ci/cd ์ˆ˜์ • * ๐Ÿฅ… chore: ci ํ…Œ์ŠคํŠธ * ๐Ÿฅ… chore: ์Šคํ† ๋ฆฌ๋ถ queryclient ๋กœ๋“œ ์•ˆ๋˜๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ * ๐Ÿฅ… chore: ๋ถˆํ•„์š”ํ•œ ์ฃผ์„ ์ œ๊ฑฐ * ๐Ÿฅ… chore: myProfile ๋กœ ๋ณ€์ˆ˜๋ช… ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: ํ•จ์ˆ˜๋ช… ๋ณ€๊ฒฝ --- .github/workflows/frontend-cd.yml | 2 +- .github/workflows/frontend-ci.yml | 15 ++++++ frontend/.eslintrc.json | 6 ++- frontend/.gitignore | 1 + frontend/.storybook/preview.tsx | 11 ++++- frontend/next.config.js | 8 ++++ frontend/package.json | 2 +- frontend/scripts/dev-deploy.sh | 2 +- frontend/src/apis/test/getTestMyData.ts | 7 --- .../FloatingUtilButton.stories.tsx | 9 +--- .../common/FloatingUtilButton/index.tsx | 15 ++---- .../common/Header/Header.stories.tsx | 4 +- .../common/Header/UserLoginItem/index.tsx | 47 ++++++++++++------- .../components/common/LoginRedirect/index.tsx | 21 +++++++++ .../common/PageLayout/PageLayout.stories.tsx | 2 +- .../components/common/PageLayout/index.tsx | 2 +- .../src/components/common/Profile/index.tsx | 1 + .../components/login/GitLoginButton/index.tsx | 6 ++- frontend/src/hooks/queries/useFetchMyData.ts | 19 -------- frontend/src/hooks/queries/useFetchMyInfo.ts | 24 ++++++++++ frontend/src/pages/_app.tsx | 4 +- frontend/src/pages/article/[id].tsx | 1 + frontend/src/pages/index.tsx | 2 + frontend/src/pages/login.tsx | 14 ++++++ frontend/src/pages/my/edit.tsx | 16 ++++--- frontend/src/pages/my/index.tsx | 19 +++++--- frontend/src/typings/types.ts | 5 ++ 27 files changed, 182 insertions(+), 83 deletions(-) delete mode 100644 frontend/src/apis/test/getTestMyData.ts create mode 100644 frontend/src/components/common/LoginRedirect/index.tsx delete mode 100644 frontend/src/hooks/queries/useFetchMyData.ts create mode 100644 frontend/src/hooks/queries/useFetchMyInfo.ts diff --git a/.github/workflows/frontend-cd.yml b/.github/workflows/frontend-cd.yml index a55f3503..757240b8 100644 --- a/.github/workflows/frontend-cd.yml +++ b/.github/workflows/frontend-cd.yml @@ -76,7 +76,7 @@ jobs: sudo chmod +x ./frontend/scripts/dev-deploy.sh - ./frontend/scripts/dev-deploy.sh ${{ secrets.NCP_ACCESS_KEY }} ${{ secrets.NCP_SECRET_KEY }} ${{ secrets.NCP_DOCKER_REGISTRY }} ${{ secrets.DOCKER_CLIENT_IMAGE }} + ./frontend/scripts/dev-deploy.sh ${{ secrets.NCP_ACCESS_KEY }} ${{ secrets.NCP_SECRET_KEY }} ${{ secrets.NCP_DOCKER_REGISTRY }} ${{ secrets.FRONTEND_PRODUCTION_ENV }} slack-notifications: needs: [Register-Docker-Image, CD] diff --git a/.github/workflows/frontend-ci.yml b/.github/workflows/frontend-ci.yml index 60ba3b1a..9dff8db1 100644 --- a/.github/workflows/frontend-ci.yml +++ b/.github/workflows/frontend-ci.yml @@ -25,6 +25,11 @@ jobs: uses: actions/setup-node@v3 with: node-version: 16.18.1 + + - name: create environment variable file + run: | + touch .env.production + echo -e ${{ secrets.FRONTEND_PRODUCTION_ENV }} > .env.production - name: dependency install run: npm install @@ -44,6 +49,11 @@ jobs: uses: actions/checkout@v3 with: fetch-depth: 0 + + - name: create environment variable file + run: | + touch .env.production + echo -e ${{ secrets.FRONTEND_PRODUCTION_ENV }} > .env.production - name: depedency install run: npm install @@ -81,6 +91,11 @@ jobs: with: node-version: 16.18.1 + - name: create environment variable file + run: | + touch .env.production + echo -e ${{ secrets.FRONTEND_PRODUCTION_ENV }} > .env.production + - name: dependency install run: | npm install diff --git a/frontend/.eslintrc.json b/frontend/.eslintrc.json index 7c884eeb..77e8c3c9 100644 --- a/frontend/.eslintrc.json +++ b/frontend/.eslintrc.json @@ -76,7 +76,11 @@ "@typescript-eslint/strict-boolean-expressions": "off", "@typescript-eslint/no-floating-promises": "warn", "@typescript-eslint/return-await": "off", - "@typescript-eslint/promise-function-async": "off" + "@typescript-eslint/promise-function-async": "off", + "@typescript-eslint/no-misused-promises": [ + "error", + { "checksVoidReturn": { "attributes": false } } + ] }, "settings": { "import/resolver": { diff --git a/frontend/.gitignore b/frontend/.gitignore index 926d16e9..d7f6c3bc 100644 --- a/frontend/.gitignore +++ b/frontend/.gitignore @@ -26,6 +26,7 @@ yarn-error.log* .pnpm-debug.log* # local env files +.env* .env*.local # vercel diff --git a/frontend/.storybook/preview.tsx b/frontend/.storybook/preview.tsx index c1e7f90f..935a190f 100644 --- a/frontend/.storybook/preview.tsx +++ b/frontend/.storybook/preview.tsx @@ -1,6 +1,7 @@ import { ReactNode } from 'react'; import { RouterContext } from 'next/dist/shared/lib/router-context'; import CommonStyles from '@styles/CommonStyles'; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; const ThemeWrapper = (props: { children: ReactNode }) => { return {props.children}; @@ -13,4 +14,12 @@ export const parameters = { }, }; -export const decorators = [(renderStory: Function) => {renderStory()}]; +const queryClient = new QueryClient(); + +export const decorators = [ + (renderStory: Function) => ( + + {renderStory()} + + ), +]; diff --git a/frontend/next.config.js b/frontend/next.config.js index 89f46b88..4af173d6 100644 --- a/frontend/next.config.js +++ b/frontend/next.config.js @@ -15,6 +15,14 @@ const nextConfig = { }, images: { domains: ["avatars.githubusercontent.com"], + }, + async rewrites() { + return [ + { + source: '/api/:path*', + destination: `${process.env.API_URL}/:path*` + } + ] } } diff --git a/frontend/package.json b/frontend/package.json index 3b9f7020..3946f83b 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -3,7 +3,7 @@ "version": "0.1.0", "private": true, "scripts": { - "dev": "next dev", + "dev": "PORT=3001 next dev", "build": "next build", "start": "next start", "lint": "next lint", diff --git a/frontend/scripts/dev-deploy.sh b/frontend/scripts/dev-deploy.sh index ab7c1749..3b72086d 100644 --- a/frontend/scripts/dev-deploy.sh +++ b/frontend/scripts/dev-deploy.sh @@ -8,7 +8,7 @@ cd frontend touch .env -echo $4 > .env +echo -e $4 > .env # docker down docker compose down --rmi all --remove-orphans diff --git a/frontend/src/apis/test/getTestMyData.ts b/frontend/src/apis/test/getTestMyData.ts deleted file mode 100644 index f4802c97..00000000 --- a/frontend/src/apis/test/getTestMyData.ts +++ /dev/null @@ -1,7 +0,0 @@ -import axios from 'axios'; - -const getTestUserData = async () => { - return axios.get(`http://testServer/my-info`); -}; - -export default getTestUserData; diff --git a/frontend/src/components/common/FloatingUtilButton/FloatingUtilButton.stories.tsx b/frontend/src/components/common/FloatingUtilButton/FloatingUtilButton.stories.tsx index 96dc4683..46f7f80d 100644 --- a/frontend/src/components/common/FloatingUtilButton/FloatingUtilButton.stories.tsx +++ b/frontend/src/components/common/FloatingUtilButton/FloatingUtilButton.stories.tsx @@ -27,19 +27,14 @@ const SampleHeader = () => ( const DefaultTemplate: ComponentStory = (args) => ( } footer={}> - + ); export const Default = DefaultTemplate.bind({}); -Default.args = { - authorized: true, -}; export const Clicked = DefaultTemplate.bind({}); -Clicked.args = { - authorized: true, -}; + Clicked.play = async ({ canvasElement }) => { const canvas = within(canvasElement); const buttons = await canvas.findAllByRole('button'); diff --git a/frontend/src/components/common/FloatingUtilButton/index.tsx b/frontend/src/components/common/FloatingUtilButton/index.tsx index 04698564..51c7a632 100644 --- a/frontend/src/components/common/FloatingUtilButton/index.tsx +++ b/frontend/src/components/common/FloatingUtilButton/index.tsx @@ -4,21 +4,16 @@ import { Menu, Text } from '@mantine/core'; import { IconArrowAutofitUp, IconPencil } from '@tabler/icons'; import FloatingButton from '@components/common/FloatingButton'; +import useFetchMyInfo from '@hooks/queries/useFetchMyInfo'; /** * FloatingButton๊ณผ * FloatingButton์„ ๋ˆŒ๋ €์„ ๋•Œ ๋‚˜์˜ค๋Š” Item๋“ค - * Item ๋ณ„๋กœ ํ•„์š”ํ•œ ๋กœ์ง๋“ค์„ ์ •์˜ํ•œ๋‹ค. + * Item ๋ณ„๋กœ ํ•„์š”ํ•œ ๋กœ์ง๋“ค์„ ์ •์˜ํ•œ๋‹ค */ -interface Props { - /** - * ์œ ์ € ์ธ์ฆ ์—ฌ๋ถ€๋ฅผ ๋„˜๊ฒจ์ค€๋‹ค. - * (userQuery ๋ถ™์ด๋ฉด ์ง€์šฐ์ž) - */ - authorized?: boolean; -} -const FloatingUtilButton = ({ authorized = false }: Props) => { +const FloatingUtilButton = () => { + const { data: myData } = useFetchMyInfo(); return ( { ์ƒ๋‹จ์œผ๋กœ ์ด๋™ - {authorized && ( + {myData && ( }> diff --git a/frontend/src/components/common/Header/Header.stories.tsx b/frontend/src/components/common/Header/Header.stories.tsx index bc6690f3..683b6722 100644 --- a/frontend/src/components/common/Header/Header.stories.tsx +++ b/frontend/src/components/common/Header/Header.stories.tsx @@ -27,13 +27,13 @@ HomeRootNotLogin.args = { export const HomeRootLogin = Template.bind({}); HomeRootLogin.args = { leftNode: , - rightNode: , + rightNode: , }; export const OtherRootLogin = Template.bind({}); OtherRootLogin.args = { leftNode: , - rightNode: , + rightNode: , }; export const OtherRootNotLogin = Template.bind({}); diff --git a/frontend/src/components/common/Header/UserLoginItem/index.tsx b/frontend/src/components/common/Header/UserLoginItem/index.tsx index e6aeec3c..32b2d428 100644 --- a/frontend/src/components/common/Header/UserLoginItem/index.tsx +++ b/frontend/src/components/common/Header/UserLoginItem/index.tsx @@ -1,25 +1,40 @@ -import { Avatar } from '@mantine/core'; +import Link from 'next/link'; + +import { Avatar, Menu, Text } from '@mantine/core'; import LoginButton from '@components/common/Header/LoginButton'; +import useFetchMyInfo from '@hooks/queries/useFetchMyInfo'; /** - * ๋กœ๊ทธ์ธ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜์—ฌ - * ์•„๋ฐ”ํƒ€๋ฅผ ๋ Œ๋”๋งํ•˜๊ฑฐ๋‚˜ ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์„ ๋ Œ๋”๋ง + * TODO + * ๋กœ๊ทธ์•„์›ƒ API ์—ฐ๋™ํ•˜๊ธฐ */ -const UserLoginItem = ({ authorized = false }: { authorized?: boolean }) => { - /** - * TODO - * query๋กœ user ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์™€์„œ ๋กœ๊ทธ์ธํ–ˆ๋Š”์ง€ ์•ˆํ–ˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•œ๋‹ค. - * query๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด props๋กœ ๋กœ๊ทธ์ธ ์—ฌ๋ถ€๋ฅผ ๋ฐ›๋Š” ๊ฑด ์ œ๊ฑฐํ•œ๋‹ค. - */ - return authorized ? ( - +const UserLoginItem = () => { + const { data: myData, isLoading } = useFetchMyInfo(); + + if (isLoading) return null; + + return myData ? ( + + + + + + + + + ๋‚ด ํ”„๋กœํ•„ + + + + + + ๋กœ๊ทธ์•„์›ƒ + + + + ) : ( ); diff --git a/frontend/src/components/common/LoginRedirect/index.tsx b/frontend/src/components/common/LoginRedirect/index.tsx new file mode 100644 index 00000000..1337ecde --- /dev/null +++ b/frontend/src/components/common/LoginRedirect/index.tsx @@ -0,0 +1,21 @@ +import { useRouter } from 'next/router'; +import { useEffect } from 'react'; + +import useFetchMyInfo from '@hooks/queries/useFetchMyInfo'; + +const LoginRedirect = () => { + const { data, isLoading } = useFetchMyInfo(); + const router = useRouter(); + + useEffect(() => { + const noRedirectPaths = ['/', '/login']; + if (!isLoading && !data && !noRedirectPaths.includes(router.pathname)) { + alert('๋กœ๊ทธ์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.'); + void router.push('/login'); + } + }, [data, isLoading, router]); + + return <>; +}; + +export default LoginRedirect; diff --git a/frontend/src/components/common/PageLayout/PageLayout.stories.tsx b/frontend/src/components/common/PageLayout/PageLayout.stories.tsx index 5c16e5ad..ea0dcf0f 100644 --- a/frontend/src/components/common/PageLayout/PageLayout.stories.tsx +++ b/frontend/src/components/common/PageLayout/PageLayout.stories.tsx @@ -25,7 +25,7 @@ RootPageLayout.args = { header: (
    } - rightNode={} + rightNode={} /> ), }; diff --git a/frontend/src/components/common/PageLayout/index.tsx b/frontend/src/components/common/PageLayout/index.tsx index eb1f6bef..0bc80618 100644 --- a/frontend/src/components/common/PageLayout/index.tsx +++ b/frontend/src/components/common/PageLayout/index.tsx @@ -16,7 +16,7 @@ const PageLayout = ({ header, footer, hasFloatingUtil, children }: Props) => { {header} {children} - {hasFloatingUtil && } + {hasFloatingUtil && } {footer} diff --git a/frontend/src/components/common/Profile/index.tsx b/frontend/src/components/common/Profile/index.tsx index 56629ca0..a3714030 100644 --- a/frontend/src/components/common/Profile/index.tsx +++ b/frontend/src/components/common/Profile/index.tsx @@ -62,6 +62,7 @@ const UserWrapper = styled.div` const UserName = styled.span` font-size: 2rem; font-weight: 700; + word-break: break-all; `; const Description = styled.span` diff --git a/frontend/src/components/login/GitLoginButton/index.tsx b/frontend/src/components/login/GitLoginButton/index.tsx index 031a73e2..044e634c 100644 --- a/frontend/src/components/login/GitLoginButton/index.tsx +++ b/frontend/src/components/login/GitLoginButton/index.tsx @@ -5,8 +5,12 @@ import { IconBrandGithub } from '@tabler/icons'; const GitLoginButton = () => { const { white } = useTheme(); + const handleLoginButtonClick = async () => { + window.location.href = '/api/v1/auth/github/login'; + }; + return ( - + Github๋กœ ๋กœ๊ทธ์ธ diff --git a/frontend/src/hooks/queries/useFetchMyData.ts b/frontend/src/hooks/queries/useFetchMyData.ts deleted file mode 100644 index 51d0c706..00000000 --- a/frontend/src/hooks/queries/useFetchMyData.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { useQuery } from '@tanstack/react-query'; -import { AxiosError, AxiosResponse } from 'axios'; - -import getTestMyData from '@apis/test/getTestMyData'; -import { UserType } from '@typings/types'; - -const useFetchMyData = () => { - const { data, isLoading } = useQuery, AxiosError, UserType>( - ['myinfo'], - getTestMyData, - { - select: (data) => data.data, - } - ); - - return { data, isLoading }; -}; - -export default useFetchMyData; diff --git a/frontend/src/hooks/queries/useFetchMyInfo.ts b/frontend/src/hooks/queries/useFetchMyInfo.ts new file mode 100644 index 00000000..232e5353 --- /dev/null +++ b/frontend/src/hooks/queries/useFetchMyInfo.ts @@ -0,0 +1,24 @@ +import { useQuery } from '@tanstack/react-query'; +import axios, { AxiosError } from 'axios'; + +import { ApiResponse, UserType } from '@typings/types'; + +/** + * ๋กœ๊ทธ์ธ ํ•œ ์œ ์ €์˜ ์œ ์ €์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ + */ + +const useFetchMyInfo = () => { + const { data, isLoading, isError } = useQuery, AxiosError, UserType>( + ['my'], + () => axios.get('/api/v1/my-info'), + { + select: (res) => res.data.data, + retry: false, + staleTime: 1000 * 60 * 4, + } + ); + + return { data, isLoading, isError }; +}; + +export default useFetchMyInfo; diff --git a/frontend/src/pages/_app.tsx b/frontend/src/pages/_app.tsx index 5056a086..63640d10 100644 --- a/frontend/src/pages/_app.tsx +++ b/frontend/src/pages/_app.tsx @@ -5,6 +5,7 @@ import { useEffect, useState } from 'react'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; +import LoginRedirect from '@components/common/LoginRedirect'; import RouterTransition from '@components/common/RouterTransition'; import initMockApi from '@mocks/.'; import CommonStyles from '@styles/CommonStyles'; @@ -12,7 +13,7 @@ import CommonStyles from '@styles/CommonStyles'; const queryClient = new QueryClient(); export default function App({ Component, pageProps }: AppProps) { - const [shouldRender, setShouldRender] = useState(false); + const [shouldRender, setShouldRender] = useState(true); useEffect(() => { void (async () => { @@ -34,6 +35,7 @@ export default function App({ Component, pageProps }: AppProps) { + diff --git a/frontend/src/pages/article/[id].tsx b/frontend/src/pages/article/[id].tsx index 70d41ee5..39560770 100644 --- a/frontend/src/pages/article/[id].tsx +++ b/frontend/src/pages/article/[id].tsx @@ -24,6 +24,7 @@ const ArticleDetail = () => { const { colors: { indigo, gray }, } = useTheme(); + const [participantsModalOpen, setParticipantsModalOpen] = useState(false); const { diff --git a/frontend/src/pages/index.tsx b/frontend/src/pages/index.tsx index 4aa737df..f21590f4 100644 --- a/frontend/src/pages/index.tsx +++ b/frontend/src/pages/index.tsx @@ -12,6 +12,7 @@ import EmptyMessage from '@components/common/EmptyMessage'; import GroupArticleCard from '@components/common/GroupArticleCard'; import Header from '@components/common/Header'; import RootTitle from '@components/common/Header/RootTitle'; +import UserLoginItem from '@components/common/Header/UserLoginItem'; import NavigationTab from '@components/common/NavigationTab'; import PageLayout from '@components/common/PageLayout'; import { Category, CategoryKr } from '@constants/category'; @@ -57,6 +58,7 @@ const Main = () => { leftNode={ } + rightNode={} /> } footer={} diff --git a/frontend/src/pages/login.tsx b/frontend/src/pages/login.tsx index b702b540..f8b44129 100644 --- a/frontend/src/pages/login.tsx +++ b/frontend/src/pages/login.tsx @@ -1,3 +1,5 @@ +import Link from 'next/link'; + import styled from '@emotion/styled'; import Header from '@components/common/Header'; @@ -20,6 +22,9 @@ const Login = () => { + + ๋ฉ”์ธ์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ + ); @@ -57,4 +62,13 @@ const SubTitle = styled.span` color: ${({ theme }) => theme.colors.indigo[7]}; `; +const BackHomeText = styled.span` + font-size: 1.6rem; + font-weight: 900; + color: ${({ theme }) => theme.colors.indigo[7]}; + &:hover { + cursor: pointer; + } +`; + export default Login; diff --git a/frontend/src/pages/my/edit.tsx b/frontend/src/pages/my/edit.tsx index eab0c575..ac49b273 100644 --- a/frontend/src/pages/my/edit.tsx +++ b/frontend/src/pages/my/edit.tsx @@ -9,7 +9,7 @@ import Header from '@components/common/Header'; import DetailTitle from '@components/common/Header/DetailTitle'; import PageLayout from '@components/common/PageLayout'; import TextInput from '@components/common/TextInput'; -import useFetchMyData from '@hooks/queries/useFetchMyData'; +import useFetchMyInfo from '@hooks/queries/useFetchMyInfo'; import { UserType } from '@typings/types'; /** @@ -18,7 +18,7 @@ import { UserType } from '@typings/types'; */ const MyEditPage = () => { - const { data: myData, isLoading } = useFetchMyData(); + const { data: myProfile } = useFetchMyInfo(); const [userDataInput, setUserDataInput] = useState>({ userName: '', @@ -29,17 +29,19 @@ const MyEditPage = () => { }); useEffect(() => { - if (!isLoading) { - const { id, ...rest } = myData; + if (myProfile) { + const { id, ...rest } = myProfile; setUserDataInput({ ...rest }); } - }, [isLoading, myData]); + }, [myProfile]); const handleUserDataChange = (e: ChangeEvent) => { const { name, value } = e.target; setUserDataInput((prev) => ({ ...prev, [name]: value })); }; + if (!myProfile) return null; + return (
    { } /> - {isLoading ? ( + {!myProfile ? ( ) : ( - + )} diff --git a/frontend/src/pages/my/index.tsx b/frontend/src/pages/my/index.tsx index d97091f7..9cba0f69 100644 --- a/frontend/src/pages/my/index.tsx +++ b/frontend/src/pages/my/index.tsx @@ -7,33 +7,40 @@ import { IconFlag, IconPencil } from '@tabler/icons'; import Header from '@components/common/Header'; import RootTitle from '@components/common/Header/RootTitle'; +import UserLoginItem from '@components/common/Header/UserLoginItem'; import NavigationTab from '@components/common/NavigationTab'; import PageLayout from '@components/common/PageLayout'; import Profile from '@components/common/Profile'; -import { dummyUser } from '@constants/dummy'; import { PAGE_TITLE } from '@constants/pageTitle'; +import useFetchMyInfo from '@hooks/queries/useFetchMyInfo'; const My = () => { const { colors: { red, cyan }, } = useTheme(); + const { data: myData, isLoading } = useFetchMyInfo(); + + if (isLoading || !myData) return null; + return ( } + rightNode={} /> } footer={} > - - + + + + diff --git a/frontend/src/typings/types.ts b/frontend/src/typings/types.ts index 28a41e6a..bddafc41 100644 --- a/frontend/src/typings/types.ts +++ b/frontend/src/typings/types.ts @@ -1,3 +1,5 @@ +import { AxiosResponse } from 'axios'; + import { ArticleStatus } from '@constants/article'; import { Category } from '@constants/category'; import { Location } from '@constants/location'; @@ -68,7 +70,10 @@ interface UserType { blogUrl: string; } +type ApiResponse = AxiosResponse<{ data: T }>; + export type { + ApiResponse, ArticlePreviewType, ArticleType, LocationType, From 616937cb1925f69dca3b7e1dc59561257775ef19 Mon Sep 17 00:00:00 2001 From: Kim Myeongil <67570061+username1103@users.noreply.github.com> Date: Wed, 30 Nov 2022 11:29:07 +0900 Subject: [PATCH 056/142] =?UTF-8?q?[Feature]=20=EB=AA=A8=EC=A7=91=20?= =?UTF-8?q?=EA=B2=8C=EC=8B=9C=EA=B8=80=20=EC=83=81=EC=84=B8=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20API=20=EC=A0=9C=EC=9E=91=20(#139)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :sparkles: feature: ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€ ์ƒ์„ธ ์กฐํšŒ ์ฟผ๋ฆฌ ์ถ”๊ฐ€ * :sparkles: feature: ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€ ์ƒ์„ธ ์กฐํšŒ API ์ถ”๊ฐ€ * :sparkles: feature: ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€ ์ƒ์„ธ ์กฐํšŒ API ํ† ํฐ์ธ์ฆ ์ถ”๊ฐ€ --- .../src/app/group-article/dto/author.dto.ts | 15 ++++ .../get-group-article-detail-response.dto.ts | 87 +++++++++++++++++++ .../dto/group-article-detail.interface.ts | 22 +++++ .../dto/group-article-search-result.dto.ts | 10 ++- .../group-article/group-article.controller.ts | 15 +++- .../group-article/group-article.service.ts | 11 +++ .../repository/group-article.repository.ts | 45 ++++++++++ backend/src/common/dto/image-response.dto.ts | 2 +- 8 files changed, 202 insertions(+), 5 deletions(-) create mode 100644 backend/src/app/group-article/dto/author.dto.ts create mode 100644 backend/src/app/group-article/dto/get-group-article-detail-response.dto.ts create mode 100644 backend/src/app/group-article/dto/group-article-detail.interface.ts diff --git a/backend/src/app/group-article/dto/author.dto.ts b/backend/src/app/group-article/dto/author.dto.ts new file mode 100644 index 00000000..40764770 --- /dev/null +++ b/backend/src/app/group-article/dto/author.dto.ts @@ -0,0 +1,15 @@ +import { ApiProperty } from '@nestjs/swagger'; + +export class Author { + @ApiProperty({ example: 1, description: '์ž‘์„ฑ์ž ์•„์ด๋””' }) + id: number; + + @ApiProperty({ example: '๋ฐ•์ข…ํ˜', description: '์ž‘์„ฑ์ž ์ด๋ฆ„' }) + userName: string; + + @ApiProperty({ + example: 'https://avatars.githubusercontent.com/u/67570061?v=4', + description: '์ž‘์„ฑ์ž ํ”„๋กœํ•„ ์ด๋ฏธ์ง€', + }) + profileImage: string; +} diff --git a/backend/src/app/group-article/dto/get-group-article-detail-response.dto.ts b/backend/src/app/group-article/dto/get-group-article-detail-response.dto.ts new file mode 100644 index 00000000..f30e217a --- /dev/null +++ b/backend/src/app/group-article/dto/get-group-article-detail-response.dto.ts @@ -0,0 +1,87 @@ +import { + GROUP_STATUS, + LOCATION, +} from '@app/group-article/constants/group-article.constants'; +import { IGroupArticleDetail } from '@app/group-article/dto/group-article-detail.interface'; +import { GroupCategoryResponse } from '@app/group-article/dto/get-cateogories-response.dto'; +import { ImageService } from '@app/image/image.service'; +import { ImageResponse } from '@common/dto/image-response.dto'; +import { ApiProperty } from '@nestjs/swagger'; +import { Author } from '@app/group-article/dto/author.dto'; +import { Type } from 'class-transformer'; + +export class GetGroupArticleDetailResponse { + @ApiProperty({ example: 1, description: '๊ฒŒ์‹œ๊ธ€ ์•„์ด๋””' }) + id: number; + + @ApiProperty({ example: 'CS ์Šคํ„ฐ๋”” ๋ชจ์ง‘', description: '๊ฒŒ์‹œ๊ธ€ ์ œ๋ชฉ' }) + title: string; + + @ApiProperty({ + example: `์•ˆ๋…•ํ•˜์„ธ์š”. ์„œ์šธ ์ง€์—ญ CS ์Šคํ„ฐ๋””์›๋“ค์„ ๋ชจ์ง‘ํ•ฉ๋‹ˆ๋‹ค!\\n์„œ์šธ ์ง€์—ญ CS ๋ชจ์ง‘ ์‚ฌ์ง„์ž๋ฃŒ`, + description: '๊ฒŒ์‹œ๊ธ€ ์ œ๋ชฉ', + }) + content: string; + + @ApiProperty() + author: Author; + + @ApiProperty() + category: GroupCategoryResponse; + + @ApiProperty({ example: LOCATION.ONLINE, description: '๋ชจ์ž„ ์žฅ์†Œ' }) + location: LOCATION; + + @ApiProperty() + thumbnail: ImageResponse; + + @ApiProperty({ + example: GROUP_STATUS.PROGRESS, + description: '๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€ ์ƒํƒœ', + }) + status: GROUP_STATUS; + + @ApiProperty({ example: 10, description: '๋Œ“๊ธ€ ์ˆ˜' }) + @Type(() => Number) + commentCount: number; + + @ApiProperty({ example: 12, description: '์Šคํฌ๋žฉ ์ˆ˜' }) + @Type(() => Number) + scrapCount: number; + + @ApiProperty({ example: 10, description: '์ตœ๋Œ€ ๋ชจ์ง‘ ์ธ์›' }) + maxCapacity: number; + + @ApiProperty({ example: new Date(), description: '๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ์ผ' }) + createdAt: Date; + + static from( + groupArticleDetail: IGroupArticleDetail, + imageService: ImageService, + ) { + const res = new GetGroupArticleDetailResponse(); + res.id = groupArticleDetail.id; + res.title = groupArticleDetail.title; + res.content = groupArticleDetail.contents; + res.author = { + id: groupArticleDetail.userId, + userName: groupArticleDetail.userName, + profileImage: groupArticleDetail.userProfileImage, + }; + res.category = { + id: groupArticleDetail.groupCategoryId, + name: groupArticleDetail.groupCategoryName, + }; + res.thumbnail = { + key: groupArticleDetail.thumbnail, + url: imageService.getStorageUrl([groupArticleDetail.thumbnail])[0], + }; + res.status = groupArticleDetail.status; + res.location = groupArticleDetail.location; + res.commentCount = groupArticleDetail.commentCount; + res.scrapCount = groupArticleDetail.scrapCount; + res.maxCapacity = groupArticleDetail.maxCapacity; + res.createdAt = groupArticleDetail.createdAt; + return res; + } +} diff --git a/backend/src/app/group-article/dto/group-article-detail.interface.ts b/backend/src/app/group-article/dto/group-article-detail.interface.ts new file mode 100644 index 00000000..26529503 --- /dev/null +++ b/backend/src/app/group-article/dto/group-article-detail.interface.ts @@ -0,0 +1,22 @@ +import { + GROUP_STATUS, + LOCATION, +} from '@app/group-article/constants/group-article.constants'; + +export interface IGroupArticleDetail { + id: number; + title: string; + contents: string; + userId: number; + userName: string; + userProfileImage: string; + maxCapacity: number; + thumbnail: string; + status: GROUP_STATUS; + location: LOCATION; + groupCategoryId: number; + groupCategoryName: string; + scrapCount: number; + commentCount: number; + createdAt: Date; +} diff --git a/backend/src/app/group-article/dto/group-article-search-result.dto.ts b/backend/src/app/group-article/dto/group-article-search-result.dto.ts index 4efb3b4c..2af26a25 100644 --- a/backend/src/app/group-article/dto/group-article-search-result.dto.ts +++ b/backend/src/app/group-article/dto/group-article-search-result.dto.ts @@ -6,7 +6,8 @@ import { ApiProperty } from '@nestjs/swagger'; import { GroupCategoryResponse } from '@app/group-article/dto/get-cateogories-response.dto'; import { IGroupArticleSearchResult } from '@app/group-article/dto/group-article-search-result.interface'; import { ImageService } from '@app/image/image.service'; -import { IamgeResponse } from '@common/dto/image-response.dto'; +import { ImageResponse } from '@common/dto/image-response.dto'; +import { Type } from 'class-transformer'; export class GroupArticleSearchResult { @ApiProperty({ example: 1, description: '๊ฒŒ์‹œ๊ธ€ ์•„์ด๋””' }) @@ -15,8 +16,8 @@ export class GroupArticleSearchResult { @ApiProperty({ example: 'test001', description: '๊ฒŒ์‹œ๊ธ€ ์ œ๋ชฉ' }) title: string; - @ApiProperty({ type: IamgeResponse }) - thumbnail: IamgeResponse; + @ApiProperty({ type: ImageResponse }) + thumbnail: ImageResponse; @ApiProperty({ example: GROUP_STATUS.PROGRESS, @@ -34,12 +35,15 @@ export class GroupArticleSearchResult { maxCapacity: number; @ApiProperty({ example: 3, description: 'ํ˜„์žฌ ์‹ ์ฒญ์ž ์ˆ˜' }) + @Type(() => Number) currentCapacity: number; @ApiProperty({ example: 0, description: '์Šคํฌ๋žฉ ์ˆ˜' }) + @Type(() => Number) scrapCount: number; @ApiProperty({ example: 1, description: '๋Œ“๊ธ€ ์ˆ˜' }) + @Type(() => Number) commentCount: number; @ApiProperty({ diff --git a/backend/src/app/group-article/group-article.controller.ts b/backend/src/app/group-article/group-article.controller.ts index 2701415f..38e71fc5 100644 --- a/backend/src/app/group-article/group-article.controller.ts +++ b/backend/src/app/group-article/group-article.controller.ts @@ -27,8 +27,9 @@ import { GroupArticleSearchResult } from '@app/group-article/dto/group-article-s import { ImageService } from '@app/image/image.service'; import { CurrentUser } from '@decorator/current-user.decorator'; import { User } from '@app/user/entity/user.entity'; -import { NotAuthorException } from '@app/group-article/exception/not-author.exception'; +import { GetGroupArticleDetailResponse } from '@app/group-article/dto/get-group-article-detail-response.dto'; import { GroupArticleNotFoundException } from '@app/group-article/exception/group-article-not-found.exception'; +import { NotAuthorException } from '@app/group-article/exception/not-author.exception'; @Controller('group-articles') @ApiTags('Group-Article') @@ -87,6 +88,18 @@ export class GroupArticleController { ); } + @Get('/:id') + @JwtAuth() + @ApiSuccessResponse(HttpStatus.OK, GetGroupArticleDetailResponse) + @ApiErrorResponse(GroupArticleNotFoundException) + async getDetail(@Param('id', ParseIntPipe) id: number) { + const groupArticleDetail = await this.groupArticleService.getDetailById(id); + + return ResponseEntity.OK_WITH_DATA( + GetGroupArticleDetailResponse.from(groupArticleDetail, this.imageService), + ); + } + @Delete('/:id') @JwtAuth() @ApiSuccessResponse(HttpStatus.NO_CONTENT) diff --git a/backend/src/app/group-article/group-article.service.ts b/backend/src/app/group-article/group-article.service.ts index bf814faf..34e600ba 100644 --- a/backend/src/app/group-article/group-article.service.ts +++ b/backend/src/app/group-article/group-article.service.ts @@ -54,4 +54,15 @@ export class GroupArticleService { await this.groupArticleRepository.save(groupArticle, { reload: false }); } + + async getDetailById(id: number) { + const groupArticleDetail = await this.groupArticleRepository.getDetailById( + id, + ); + if (!groupArticleDetail) { + throw new GroupArticleNotFoundException(); + } + + return groupArticleDetail; + } } diff --git a/backend/src/app/group-article/repository/group-article.repository.ts b/backend/src/app/group-article/repository/group-article.repository.ts index e84ba5d6..5617a774 100644 --- a/backend/src/app/group-article/repository/group-article.repository.ts +++ b/backend/src/app/group-article/repository/group-article.repository.ts @@ -8,6 +8,8 @@ import { Scrap } from '@app/scrap/entity/scrap.entity'; import { Comment } from '@app/comment/entity/comment.entity'; import { SearchGroupArticlesRequest } from '@app/group-article/dto/search-group-articles-request.dto'; import { IGroupArticleSearchResult } from '@app/group-article/dto/group-article-search-result.interface'; +import { User } from '@app/user/entity/user.entity'; +import { IGroupArticleDetail } from '@app/group-article/dto/group-article-detail.interface'; @Injectable() export class GroupArticleRepository extends Repository { @@ -84,4 +86,47 @@ export class GroupArticleRepository extends Repository { return [result, count]; } + + async getDetailById(id: number) { + return this.createQueryBuilder('groupArticle') + .select([ + 'groupArticle.id as id', + 'groupArticle.title as title', + 'groupArticle.contents as contents', + 'user.id as userId', + 'user.user_name as userName', + 'user.profile_image as userProfileImage', + 'group.maxCapacity as maxCapacity', + 'group.thumbnail as thumbnail', + 'group.status as status', + 'group.location as location', + 'groupCategory.id as groupCategoryId', + 'groupCategory.name as groupCategoryName', + 'COUNT(DISTINCT scrap.id) as scrapCount', + 'COUNT(DISTINCT comment.id) as commentCount', + 'groupArticle.createdAt as createdAt', + ]) + .leftJoin(Group, 'group', 'groupArticle.id = group.article_id') + .leftJoin( + User, + 'user', + 'groupArticle.userId = user.id AND user.deletedAt IS NULL', + ) + .leftJoin( + GroupCategory, + 'groupCategory', + 'groupCategory.id = group.category.id AND groupCategory.deletedAt IS NULL', + ) + + .leftJoin( + Comment, + 'comment', + 'groupArticle.id = comment.articleId AND comment.deletedAt IS NULL', + ) + .leftJoin(Scrap, 'scrap', 'groupArticle.id = scrap.articleId') + .where('groupArticle.id = :id', { id }) + .andWhere('groupArticle.deletedAt IS NULL') + .groupBy('groupArticle.id') + .getRawOne(); + } } diff --git a/backend/src/common/dto/image-response.dto.ts b/backend/src/common/dto/image-response.dto.ts index bda7685f..c093b7b8 100644 --- a/backend/src/common/dto/image-response.dto.ts +++ b/backend/src/common/dto/image-response.dto.ts @@ -1,6 +1,6 @@ import { ApiProperty } from '@nestjs/swagger'; -export class IamgeResponse { +export class ImageResponse { @ApiProperty({ example: '1669276833875-64adca9c-94cd-4162-a53f-f75e951e39db', description: '์ด๋ฏธ์ง€ key', From 364db1730afee8e7fac61139f2977c215172be48 Mon Sep 17 00:00:00 2001 From: Kim Myeongil <67570061+username1103@users.noreply.github.com> Date: Wed, 30 Nov 2022 11:49:04 +0900 Subject: [PATCH 057/142] =?UTF-8?q?[Feature]=20=EB=AA=A8=EC=A7=91=20?= =?UTF-8?q?=EC=99=84=EB=A3=8C=20API=20=EC=B6=94=EA=B0=80=ED=95=98=EA=B8=B0?= =?UTF-8?q?=20(#142)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :sparkles: feature: ๋ชจ์ง‘์™„๋ฃŒ ๋ฉ”์†Œ๋“œ ์ถ”๊ฐ€ * :sparkles: feature: ๋ชจ์ง‘์™„๋ฃŒ API ์ถ”๊ฐ€ - ์ž‘์„ฑ์ž๊ฐ€ ์•„๋‹ˆ๋ฉด NotAuthorException ๋ฐ˜ํ™˜ - ๋ชจ์ง‘์ค‘์ธ ๊ฒŒ์‹œ๊ธ€์ด ์•„๋‹ˆ๋ฉด NotProgressGroupException ๋ฐ˜ํ™˜ - ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€์ด ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด GroupArticleNotFoundException ๋ฐ˜ํ™˜ * :recycle: refactor: ๋ชจ์ง‘๊ฒŒ์‹œ๊ธ€ ์—”ํ‹ฐํ‹ฐ ๋ฆฌํŒฉํ† ๋ง * :recycle: refactor: GroupArticleController ๋ผ์šฐํ„ฐ ์ˆœ์„œ ์ˆ˜์ • --- .../entity/group-article.entity.ts | 23 ++++++++++- .../app/group-article/entity/group.entity.ts | 8 ++++ .../exception/not-progress-group.exception.ts | 7 ++++ .../group-article/group-article.controller.ts | 40 +++++++++++++------ .../group-article/group-article.service.ts | 17 ++++++++ 5 files changed, 81 insertions(+), 14 deletions(-) create mode 100644 backend/src/app/group-article/exception/not-progress-group.exception.ts diff --git a/backend/src/app/group-article/entity/group-article.entity.ts b/backend/src/app/group-article/entity/group-article.entity.ts index c0003203..c27c3701 100644 --- a/backend/src/app/group-article/entity/group-article.entity.ts +++ b/backend/src/app/group-article/entity/group-article.entity.ts @@ -9,6 +9,7 @@ import { } from '@app/group-article/constants/group-article.constants'; import { User } from '@app/user/entity/user.entity'; import { NotAuthorException } from '@app/group-article/exception/not-author.exception'; +import { NotProgressGroupException } from '@app/group-article/exception/not-progress-group.exception'; @ChildEntity(ARTICLE.GROUP) export class GroupArticle extends Article { @@ -54,11 +55,29 @@ export class GroupArticle extends Article { } remove(user: User) { - if (this.userId !== user.id) { + if (!this.isAuthor(user)) { throw new NotAuthorException(); } - this.group.status = GROUP_STATUS.FAIL; + this.group.stop(); this.deletedAt = new Date(); } + + complete(user: User) { + if (!this.isAuthor(user)) { + throw new NotAuthorException(); + } + + if (this.group.status !== GROUP_STATUS.PROGRESS) { + throw new NotProgressGroupException( + '๋ชจ์ง‘์ค‘์ธ ๊ฒŒ์‹œ๊ธ€๋งŒ ๋ชจ์ง‘์™„๋ฃŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค', + ); + } + + this.group.complete(); + } + + private isAuthor(user: User) { + return this.userId === user.id; + } } diff --git a/backend/src/app/group-article/entity/group.entity.ts b/backend/src/app/group-article/entity/group.entity.ts index c70bddc2..885462b1 100644 --- a/backend/src/app/group-article/entity/group.entity.ts +++ b/backend/src/app/group-article/entity/group.entity.ts @@ -72,4 +72,12 @@ export class Group { return group; } + + stop() { + this.status = GROUP_STATUS.FAIL; + } + + complete() { + this.status = GROUP_STATUS.SUCCEED; + } } diff --git a/backend/src/app/group-article/exception/not-progress-group.exception.ts b/backend/src/app/group-article/exception/not-progress-group.exception.ts new file mode 100644 index 00000000..437582f2 --- /dev/null +++ b/backend/src/app/group-article/exception/not-progress-group.exception.ts @@ -0,0 +1,7 @@ +import { BadRequestException } from '@nestjs/common'; + +export class NotProgressGroupException extends BadRequestException { + constructor(message = '๋ชจ์ง‘์ค‘์ด ์•„๋‹™๋‹ˆ๋‹ค') { + super({ status: 'NOT_PROGRESS_GROUP', message }); + } +} diff --git a/backend/src/app/group-article/group-article.controller.ts b/backend/src/app/group-article/group-article.controller.ts index 38e71fc5..96432c12 100644 --- a/backend/src/app/group-article/group-article.controller.ts +++ b/backend/src/app/group-article/group-article.controller.ts @@ -30,6 +30,7 @@ import { User } from '@app/user/entity/user.entity'; import { GetGroupArticleDetailResponse } from '@app/group-article/dto/get-group-article-detail-response.dto'; import { GroupArticleNotFoundException } from '@app/group-article/exception/group-article-not-found.exception'; import { NotAuthorException } from '@app/group-article/exception/not-author.exception'; +import { NotProgressGroupException } from '@app/group-article/exception/not-progress-group.exception'; @Controller('group-articles') @ApiTags('Group-Article') @@ -41,18 +42,6 @@ export class GroupArticleController { private readonly imageService: ImageService, ) {} - @Get('/categories') - @ApiSuccessResponse(HttpStatus.OK, GroupCategoryResponse, { isArray: true }) - async getCategories() { - const categories = await this.groupCategoryRepository.find({ - where: { deletedAt: null }, - }); - - return ResponseEntity.OK_WITH_DATA( - categories.map((category) => GroupCategoryResponse.from(category)), - ); - } - @Post('/') @JwtAuth() @ApiSuccessResponse(HttpStatus.CREATED, GroupArticleRegisterResponse) @@ -71,6 +60,33 @@ export class GroupArticleController { ); } + @Post('/:id/recruitment-complete') + @JwtAuth() + @ApiSuccessResponse(HttpStatus.NO_CONTENT) + @ApiErrorResponse( + NotAuthorException, + GroupArticleNotFoundException, + NotProgressGroupException, + ) + async complete( + @CurrentUser() user: User, + @Param('id', ParseIntPipe) id: number, + ) { + await this.groupArticleService.complete(user, id); + } + + @Get('/categories') + @ApiSuccessResponse(HttpStatus.OK, GroupCategoryResponse, { isArray: true }) + async getCategories() { + const categories = await this.groupCategoryRepository.find({ + where: { deletedAt: null }, + }); + + return ResponseEntity.OK_WITH_DATA( + categories.map((category) => GroupCategoryResponse.from(category)), + ); + } + @Get('/search') @ApiSuccessResponse(HttpStatus.OK, SearchGroupArticleResponse) async search(@Query() query: SearchGroupArticlesRequest) { diff --git a/backend/src/app/group-article/group-article.service.ts b/backend/src/app/group-article/group-article.service.ts index 34e600ba..3f3489d1 100644 --- a/backend/src/app/group-article/group-article.service.ts +++ b/backend/src/app/group-article/group-article.service.ts @@ -55,6 +55,23 @@ export class GroupArticleService { await this.groupArticleRepository.save(groupArticle, { reload: false }); } + async complete(user: User, id: number) { + const groupArticle = await this.groupArticleRepository.findOneBy({ + id, + deletedAt: null, + }); + + if (!groupArticle) { + throw new GroupArticleNotFoundException(); + } + + groupArticle.complete(user); + + await this.groupArticleRepository.save(groupArticle, { reload: false }); + + // TODO: ์•Œ๋ฆผ ์ถ”๊ฐ€ ๋ฐ ์•Œ๋ฆผ ๋ฐœ์†ก + } + async getDetailById(id: number) { const groupArticleDetail = await this.groupArticleRepository.getDetailById( id, From 590e3d40b52be10060963ee75f8b5d99553f2f06 Mon Sep 17 00:00:00 2001 From: yangseungchan Date: Wed, 30 Nov 2022 14:33:53 +0900 Subject: [PATCH 058/142] =?UTF-8?q?[Feature]=20Dockerfile=EC=97=90=20?= =?UTF-8?q?=ED=99=98=EA=B2=BD=20=EB=B3=80=EC=88=98=20=EC=A3=BC=EC=9E=85=20?= =?UTF-8?q?(#145)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :bug: fix: Dockerfile์— ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ฃผ์ž… * ๐Ÿฅ… chore: cd ํ…Œ์ŠคํŠธ * ๐Ÿฅ… chore: cd ํ…Œ์ŠคํŠธ * ๐Ÿฅ… chore: build-args ๊ฐ’ ์ˆ˜์ • * ๐Ÿฅ… chore: cd์—์„œ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ž˜ ๋‚˜์˜ค๋Š”์ง€ ํ…Œ์ŠคํŠธ * ๐Ÿฅ… chore: Dockerfile ์ˆ˜์ • * ๐Ÿฅ… chore: Dockerfile ์ˆ˜์ • ๋ฐ ํ…Œ์ŠคํŠธ * ๐Ÿฅ… chore: docker file ์ˆ˜์ • * ๐Ÿฅ… chore: ๋„์ปคํŒŒ์ผ ์žฌ์ˆ˜์ • * ๐Ÿฅ… chore: Dockerfile ์ˆ˜์ • * ๐Ÿฅ… chore: ci cd ์Šคํฌ๋ฆฝํŠธ๋“ค ์ˆ˜์ • --- .github/workflows/frontend-cd.yml | 5 +++-- .github/workflows/frontend-ci.yml | 12 ++++++------ frontend/Dockerfile | 4 ++++ frontend/scripts/dev-deploy.sh | 5 ++++- .../src/components/login/GitLoginButton/index.tsx | 4 ++-- 5 files changed, 19 insertions(+), 11 deletions(-) diff --git a/.github/workflows/frontend-cd.yml b/.github/workflows/frontend-cd.yml index 757240b8..7b0c7579 100644 --- a/.github/workflows/frontend-cd.yml +++ b/.github/workflows/frontend-cd.yml @@ -1,7 +1,7 @@ name: Frontend Dev CD run-name: ${{ github.actor }}๊ฐ€ ์‹คํ–‰ํ•จ on: - push: + pull_request: branches: - develop paths: @@ -39,6 +39,8 @@ jobs: uses: docker/build-push-action@v3 with: context: frontend + build-args: | + FRONTEND_PRODUCTION_ENV=${{ secrets.FRONTEND_PRODUCTION_ENV }} file: frontend/Dockerfile tags: | ${{ secrets.NCP_DOCKER_REGISTRY }}/moyeo-client:latest @@ -71,7 +73,6 @@ jobs: cd web13-moyeomoyeo - git checkout -t origin/develop sudo chmod +x ./frontend/scripts/dev-deploy.sh diff --git a/.github/workflows/frontend-ci.yml b/.github/workflows/frontend-ci.yml index 9dff8db1..4e609c39 100644 --- a/.github/workflows/frontend-ci.yml +++ b/.github/workflows/frontend-ci.yml @@ -28,8 +28,8 @@ jobs: - name: create environment variable file run: | - touch .env.production - echo -e ${{ secrets.FRONTEND_PRODUCTION_ENV }} > .env.production + touch .env + echo -e API_URL=https://api.moyeomoyeo.com > .env - name: dependency install run: npm install @@ -52,8 +52,8 @@ jobs: - name: create environment variable file run: | - touch .env.production - echo -e ${{ secrets.FRONTEND_PRODUCTION_ENV }} > .env.production + touch .env + echo -e API_URL=https://api.moyeomoyeo.com > .env - name: depedency install run: npm install @@ -93,8 +93,8 @@ jobs: - name: create environment variable file run: | - touch .env.production - echo -e ${{ secrets.FRONTEND_PRODUCTION_ENV }} > .env.production + touch .env + echo -e API_URL=https://api.moyeomoyeo.com > .env - name: dependency install run: | diff --git a/frontend/Dockerfile b/frontend/Dockerfile index 0dc7087a..918bfda6 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -13,6 +13,10 @@ RUN npm install # ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋“  ํŒŒ์ผ ๋ณต์‚ฌ COPY . . +# ์ด๋ฏธ์ง€ ๋นŒ๋“œ์‹œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ฃผ์ž… ์‚ฌ์šฉ +RUN touch .env +RUN echo -e "API_URL=https://api.moyeomoyeo.com" > .env + # Build NextJS app RUN npm run build diff --git a/frontend/scripts/dev-deploy.sh b/frontend/scripts/dev-deploy.sh index 3b72086d..e7533401 100644 --- a/frontend/scripts/dev-deploy.sh +++ b/frontend/scripts/dev-deploy.sh @@ -7,8 +7,11 @@ echo "docker has been logged in" cd frontend touch .env +touch .env.production -echo -e $4 > .env +echo -e $4 > .env.production + +echo -e API_URL=https://api.moyeomoyeo.com > .env # docker down docker compose down --rmi all --remove-orphans diff --git a/frontend/src/components/login/GitLoginButton/index.tsx b/frontend/src/components/login/GitLoginButton/index.tsx index 044e634c..9abdc6ba 100644 --- a/frontend/src/components/login/GitLoginButton/index.tsx +++ b/frontend/src/components/login/GitLoginButton/index.tsx @@ -5,8 +5,8 @@ import { IconBrandGithub } from '@tabler/icons'; const GitLoginButton = () => { const { white } = useTheme(); - const handleLoginButtonClick = async () => { - window.location.href = '/api/v1/auth/github/login'; + const handleLoginButtonClick = () => { + window.location.href = `/api/v1/auth/github/login`; }; return ( From 136dec891ae0afcf849e44858b94fcf08163a170 Mon Sep 17 00:00:00 2001 From: Gakko <90585081+pythonstrup@users.noreply.github.com> Date: Wed, 30 Nov 2022 14:46:00 +0900 Subject: [PATCH 059/142] =?UTF-8?q?[Feature]=20=EB=AA=A8=EC=A7=91=20?= =?UTF-8?q?=EC=8B=A0=EC=B2=AD=ED=95=98=EA=B8=B0=20API=20(#143)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * โœจ feature: ๋ชจ์ง‘ ์‹ ์ฒญํ•˜๊ธฐ request dto ์ž‘์„ฑ * โœจ feature: ๋ชจ์ง‘ ์‹ ์ฒญํ•˜๊ธฐ response dto ์ž‘์„ฑ * โœจ feature: group application ์‹ ์ฒญ ๋ฐ ์ทจ์†Œ ๋ฉ”์†Œ๋“œ * โœจ feature: ๋ชจ์ž„ ์ค‘๋ณต ์‹ ์ฒญ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ * ๐Ÿฅ… chore: category sql๋ฌธ ๋ณ€๊ฒฝ * โœจ feature: group not found exception ์ž‘์„ฑ * โœจ feature: cannot applicate exception ์ž‘์„ฑ * โœจ feature: group application์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด export * โœจ feature: group repository์— findById ์ถ”๊ฐ€ * โœจ feature: group application repository ์ž‘์„ฑ - ์ธ๋ฑ์‹ฑ๋œ userId, groupId, status๋ฅผ ๋ฌถ์–ด ์ฟผ๋ฆฌ๋ฌธ์„ ์‹คํ–‰ํ•˜๋„๋ก ํ•จ * โœจ feature: group application service ์ž‘์„ฑ - ๋ชจ์ž„ ์ฐธ๊ฐ€ ์‹ ์ฒญ ๋กœ์ง ์ž‘์„ฑ - ๊ทธ๋ฃน ์•„์ด๋””์™€ ๋งค์นญ๋˜๋Š” ๊ทธ๋ฃน์ด ์žˆ๋Š”์ง€ ํ™•์ธ - ๊ธ€ ์ž‘์„ฑ์ž๊ฐ€ ๋ชจ์ž„์„ ์‹ ์ฒญํ–ˆ๋Š”์ง€ ํ™•์ธ - ์ค‘๋ณต ์‹ ์ฒญ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ * ๐Ÿฅ… chore: group application service ํ•จ์ˆ˜ ์ˆœ์„œ ๋ณ€๊ฒฝ * โœจ feature: group application controller ์ž‘์„ฑ - ๋ชจ์ง‘ ์ฐธ๊ฐ€ ์‹ ์ฒญ ๊ฒฝ๋กœ - swagger ์ ์šฉ * โœจ feature: group application module ์ ์šฉ - set swagger ์ ์šฉ * ๐Ÿฅ… chore: ์ƒ๋Œ€๊ฒฝ๋กœ๋ฅผ ์ ˆ๋Œ€๊ฒฝ๋กœ๋กœ ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ * ๐Ÿฅ… chore: ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ * โœจ feature: group application entity ์ผ๊ด€์„ฑ์„ ์œ„ํ•œ ์ˆ˜์ • - value transformer ์ ์šฉ - value transformer ์ฝ”๋“œ ์ž‘์„ฑ * ๐Ÿฅ… chore: ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ * ๐Ÿฅ… chore: API ๋ช…์„ธ ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ์ฝ”๋“œ ๋ณ€๊ฒฝ - groupID => groupArticleId --- backend/sql/category.sql | 12 +++-- backend/src/app.module.ts | 2 + .../dto/attend-group-request.dto.ts | 12 +++++ .../dto/attend-group-response.dto.ts | 16 ++++++ .../entity/group-application.entity.ts | 27 ++++++++-- .../exception/cannot-applicate.exception.ts | 7 +++ .../duplicate-application.exception.ts | 7 +++ .../exception/group-not-found.exception.ts | 7 +++ .../group-application.controller.ts | 43 +++++++++++++++ .../group-application.module.ts | 12 +++++ .../group-application.repository.ts | 23 ++++++++ .../group-application.service.ts | 52 +++++++++++++++++++ .../group-application-status.transformer.ts | 16 ++++++ .../app/group-article/group-article.module.ts | 1 + .../repository/group-article.repository.ts | 4 ++ backend/src/setSwagger.ts | 2 + 16 files changed, 234 insertions(+), 9 deletions(-) create mode 100644 backend/src/app/group-application/dto/attend-group-request.dto.ts create mode 100644 backend/src/app/group-application/dto/attend-group-response.dto.ts create mode 100644 backend/src/app/group-application/exception/cannot-applicate.exception.ts create mode 100644 backend/src/app/group-application/exception/duplicate-application.exception.ts create mode 100644 backend/src/app/group-application/exception/group-not-found.exception.ts create mode 100644 backend/src/app/group-application/group-application.controller.ts create mode 100644 backend/src/app/group-application/group-application.module.ts create mode 100644 backend/src/app/group-application/group-application.repository.ts create mode 100644 backend/src/app/group-application/group-application.service.ts create mode 100644 backend/src/app/group-application/type/group-application-status.transformer.ts diff --git a/backend/sql/category.sql b/backend/sql/category.sql index 3815f4a5..03b055fc 100644 --- a/backend/sql/category.sql +++ b/backend/sql/category.sql @@ -1,7 +1,9 @@ +USE development; + INSERT INTO group_category (name) VALUES - ('์‹์‚ฌ'), - ('์Šคํ„ฐ๋””'), - ('๊ธฐํƒ€'), - ('๊ณต๋ชจ์ „'), - ('ํ”„๋กœ์ ํŠธ'); \ No newline at end of file + ('MEAL'), + ('STUDY'), + ('ETC'), + ('COMPETITION'), + ('PROJECT'); \ No newline at end of file diff --git a/backend/src/app.module.ts b/backend/src/app.module.ts index e854fb6e..3829af94 100644 --- a/backend/src/app.module.ts +++ b/backend/src/app.module.ts @@ -12,6 +12,7 @@ import { GroupArticleModule } from '@app/group-article/group-article.module'; import { UserModule } from '@app/user/user.module'; import { MyInfoModule } from '@app/myinfo/myinfo.module'; import { CookieConfigModule } from '@config/cookie/config.module'; +import { GroupApplicationModule } from '@app/group-application/group-application.module'; @Module({ imports: [ @@ -24,6 +25,7 @@ import { CookieConfigModule } from '@config/cookie/config.module'; GroupArticleModule, UserModule, MyInfoModule, + GroupApplicationModule, ], controllers: [AppController], providers: [AppService], diff --git a/backend/src/app/group-application/dto/attend-group-request.dto.ts b/backend/src/app/group-application/dto/attend-group-request.dto.ts new file mode 100644 index 00000000..0c5e929d --- /dev/null +++ b/backend/src/app/group-application/dto/attend-group-request.dto.ts @@ -0,0 +1,12 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { IsNumber } from 'class-validator'; + +export class AttendGroupRequest { + @ApiProperty({ + example: 1, + description: '๊ทธ๋ฃน ์•„์ด๋””', + required: true, + }) + @IsNumber() + groupArticleId: number; +} diff --git a/backend/src/app/group-application/dto/attend-group-response.dto.ts b/backend/src/app/group-application/dto/attend-group-response.dto.ts new file mode 100644 index 00000000..f28a1b98 --- /dev/null +++ b/backend/src/app/group-application/dto/attend-group-response.dto.ts @@ -0,0 +1,16 @@ +import { ApiProperty } from '@nestjs/swagger'; + +export class AttendGroupResponse { + @ApiProperty({ + example: 1, + description: '์ฐธ๊ฐ€์‹ ์ฒญ ์•„์ด๋””', + required: true, + }) + id: number; + + static from(id: number) { + const response = new AttendGroupResponse(); + response.id = id; + return response; + } +} diff --git a/backend/src/app/group-application/entity/group-application.entity.ts b/backend/src/app/group-application/entity/group-application.entity.ts index 7c753719..b2612436 100644 --- a/backend/src/app/group-application/entity/group-application.entity.ts +++ b/backend/src/app/group-application/entity/group-application.entity.ts @@ -10,6 +10,8 @@ import { } from 'typeorm'; import { Group } from '@app/group-article/entity/group.entity'; import { User } from '@app/user/entity/user.entity'; +import { GROUP_APPLICATION_STATUS } from '@src/app/group-article/constants/group-article.constants'; +import { GroupApplicationStatusTransformer } from '@app/group-application/type/group-application-status.transformer'; @Entity() @Unique('UNIQUE_USER_ID_GROUP_ID_STATUS', ['userId', 'groupId', 'status']) @@ -32,12 +34,13 @@ export class GroupApplication { group: Promise; @Column({ - type: 'tinyint', - precision: 1, + type: 'varchar', + length: 30, nullable: true, - comment: '์‚ญ์ œ๋˜์—ˆ์œผ๋ฉด NULL ์•„๋‹ˆ๋ฉด 1', + comment: 'enumํ˜• - GROUP_APPLICATION_STATUS ๋˜๋Š” null', + transformer: new GroupApplicationStatusTransformer(), }) - status: number | null; + status: GROUP_APPLICATION_STATUS; @CreateDateColumn({ type: 'timestamp' }) createdAt: Date; @@ -47,4 +50,20 @@ export class GroupApplication { @Column({ type: 'timestamp', nullable: true }) deletedAt: Date | null; + + static create(userId: number, groupId: number) { + const groupApplication = new GroupApplication(); + groupApplication.userId = userId; + groupApplication.groupId = groupId; + groupApplication.status = GROUP_APPLICATION_STATUS.REGISTER; + return groupApplication; + } + + static cancel(userId: number, groupId: number) { + const groupApplication = new GroupApplication(); + groupApplication.userId = userId; + groupApplication.groupId = groupId; + groupApplication.status = null; + return groupApplication; + } } diff --git a/backend/src/app/group-application/exception/cannot-applicate.exception.ts b/backend/src/app/group-application/exception/cannot-applicate.exception.ts new file mode 100644 index 00000000..b06fbf37 --- /dev/null +++ b/backend/src/app/group-application/exception/cannot-applicate.exception.ts @@ -0,0 +1,7 @@ +import { BadRequestException } from '@nestjs/common'; + +export class CannotApplicateException extends BadRequestException { + constructor(message = '๋‹น์‹ ์ด ๋งŒ๋“  ๊ทธ๋ฃน์— ์‹ ์ฒญ์„ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.') { + super({ status: 'CAN_NOT_APPLICATE_BAD_REQUEST', message }); + } +} diff --git a/backend/src/app/group-application/exception/duplicate-application.exception.ts b/backend/src/app/group-application/exception/duplicate-application.exception.ts new file mode 100644 index 00000000..785d2bd9 --- /dev/null +++ b/backend/src/app/group-application/exception/duplicate-application.exception.ts @@ -0,0 +1,7 @@ +import { BadRequestException } from '@nestjs/common'; + +export class DuplicateApplicationException extends BadRequestException { + constructor(message = '์ด๋ฏธ ์‹ ์ฒญ๋˜์–ด ์žˆ๋Š” ์œ ์ €์ž…๋‹ˆ๋‹ค.') { + super({ status: 'DUPLICATE_APPLICATION_BAD_REQUEST', message }); + } +} diff --git a/backend/src/app/group-application/exception/group-not-found.exception.ts b/backend/src/app/group-application/exception/group-not-found.exception.ts new file mode 100644 index 00000000..205e64d9 --- /dev/null +++ b/backend/src/app/group-application/exception/group-not-found.exception.ts @@ -0,0 +1,7 @@ +import { NotFoundException } from '@nestjs/common'; + +export class GroupNotFoundException extends NotFoundException { + constructor(message = 'ํ•ด๋‹น ๊ทธ๋ฃน์ด ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.') { + super({ status: 'GROUP_NOT_FOUND', message }); + } +} diff --git a/backend/src/app/group-application/group-application.controller.ts b/backend/src/app/group-application/group-application.controller.ts new file mode 100644 index 00000000..da3943ca --- /dev/null +++ b/backend/src/app/group-application/group-application.controller.ts @@ -0,0 +1,43 @@ +import { Body, Controller, HttpStatus, Post } from '@nestjs/common'; +import { GroupApplicationService } from '@app/group-application/group-application.service'; +import { AttendGroupRequest } from '@app/group-application/dto/attend-group-request.dto'; +import { ApiSuccessResponse } from '@src/common/decorator/api-success-resposne.decorator'; +import { AttendGroupResponse } from '@app/group-application/dto/attend-group-response.dto'; +import { CurrentUser } from '@src/common/decorator/current-user.decorator'; +import { User } from '@app/user/entity/user.entity'; +import { JwtAuth } from '@src/common/decorator/jwt-auth.decorator'; +import { ResponseEntity } from '@src/common/response-entity'; +import { ApiTags } from '@nestjs/swagger'; +import { ApiErrorResponse } from '@src/common/decorator/api-error-response.decorator'; +import { DuplicateApplicationException } from '@src/app/group-application/exception/duplicate-application.exception'; +import { GroupNotFoundException } from '@app/group-application/exception/group-not-found.exception'; +import { CannotApplicateException } from '@src/app/group-application/exception/cannot-applicate.exception'; + +@Controller('group-applications') +@JwtAuth() +@ApiTags('Group-Application') +export class GroupApplicationController { + constructor( + private readonly groupApplicationService: GroupApplicationService, + ) {} + + @Post('/') + @ApiSuccessResponse(HttpStatus.CREATED, AttendGroupResponse) + @ApiErrorResponse( + DuplicateApplicationException, + CannotApplicateException, + GroupNotFoundException, + ) + async attendGroup( + @CurrentUser() user: User, + @Body() attendGroupRequest: AttendGroupRequest, + ) { + const groupArticleId = attendGroupRequest.groupArticleId; + const groupApplication = await this.groupApplicationService.attendGroup( + user.id, + groupArticleId, + ); + const data = AttendGroupResponse.from(groupApplication.id); + return ResponseEntity.CREATED_WITH_DATA(data); + } +} diff --git a/backend/src/app/group-application/group-application.module.ts b/backend/src/app/group-application/group-application.module.ts new file mode 100644 index 00000000..f3de0ebb --- /dev/null +++ b/backend/src/app/group-application/group-application.module.ts @@ -0,0 +1,12 @@ +import { Module } from '@nestjs/common'; +import { GroupApplicationController } from '@app/group-application/group-application.controller'; +import { GroupApplicationRepository } from '@app/group-application/group-application.repository'; +import { GroupApplicationService } from '@app/group-application/group-application.service'; +import { GroupArticleModule } from '@app/group-article/group-article.module'; + +@Module({ + imports: [GroupArticleModule], + controllers: [GroupApplicationController], + providers: [GroupApplicationService, GroupApplicationRepository], +}) +export class GroupApplicationModule {} diff --git a/backend/src/app/group-application/group-application.repository.ts b/backend/src/app/group-application/group-application.repository.ts new file mode 100644 index 00000000..fbf5956b --- /dev/null +++ b/backend/src/app/group-application/group-application.repository.ts @@ -0,0 +1,23 @@ +import { Injectable } from '@nestjs/common'; +import { DataSource, Repository } from 'typeorm'; +import { GroupApplication } from '@app/group-application/entity/group-application.entity'; +import { GROUP_APPLICATION_STATUS } from '@app/group-article/constants/group-article.constants'; + +@Injectable() +export class GroupApplicationRepository extends Repository { + constructor(private readonly dataSource: DataSource) { + super( + GroupApplication, + dataSource.createEntityManager(), + dataSource.createQueryRunner(), + ); + } + + findByUserIdAndGroupIdAndStatus( + userId: number, + groupId: number, + status: GROUP_APPLICATION_STATUS | null, + ) { + return this.findOneBy({ userId, groupId, status }); + } +} diff --git a/backend/src/app/group-application/group-application.service.ts b/backend/src/app/group-application/group-application.service.ts new file mode 100644 index 00000000..6bae6331 --- /dev/null +++ b/backend/src/app/group-application/group-application.service.ts @@ -0,0 +1,52 @@ +import { Injectable } from '@nestjs/common'; +import { GroupApplicationRepository } from '@app/group-application/group-application.repository'; +import { GroupApplication } from '@app/group-application/entity/group-application.entity'; +import { GROUP_APPLICATION_STATUS } from '@app/group-article/constants/group-article.constants'; +import { DuplicateApplicationException } from '@src/app/group-application/exception/duplicate-application.exception'; +import { GroupNotFoundException } from '@app/group-application/exception/group-not-found.exception'; +import { CannotApplicateException } from '@app/group-application/exception/cannot-applicate.exception'; +import { GroupArticleRepository } from '@app/group-article/repository/group-article.repository'; + +@Injectable() +export class GroupApplicationService { + constructor( + private readonly groupApplicationRepository: GroupApplicationRepository, + private readonly groupArticleRespository: GroupArticleRepository, + ) {} + + async attendGroup(userId: number, groupId: number) { + const groupArticle = await this.validateGroupArticleId(groupId); + this.validateUserTarget(userId, groupArticle.userId); + await this.validateRegister(userId, groupId); + + const groupApplication = GroupApplication.create(userId, groupId); + return this.groupApplicationRepository.save(groupApplication); + } + + async validateGroupArticleId(groupId: number) { + const groupArticle = await this.groupArticleRespository.findById(groupId); + if (!groupArticle) { + throw new GroupNotFoundException(); + } + return groupArticle; + } + + validateUserTarget(currentUserId: number, userId: number) { + if (currentUserId === userId) { + throw new CannotApplicateException(); + } + } + + async validateRegister(userId: number, groupId: number) { + const application = + await this.groupApplicationRepository.findByUserIdAndGroupIdAndStatus( + userId, + groupId, + GROUP_APPLICATION_STATUS.REGISTER, + ); + + if (application) { + throw new DuplicateApplicationException(); + } + } +} diff --git a/backend/src/app/group-application/type/group-application-status.transformer.ts b/backend/src/app/group-application/type/group-application-status.transformer.ts new file mode 100644 index 00000000..5dd39e4b --- /dev/null +++ b/backend/src/app/group-application/type/group-application-status.transformer.ts @@ -0,0 +1,16 @@ +import { GROUP_APPLICATION_STATUS } from '@src/app/group-article/constants/group-article.constants'; +import { ValueTransformer } from 'typeorm'; + +export class GroupApplicationStatusTransformer implements ValueTransformer { + to(value: string) { + return value === GROUP_APPLICATION_STATUS.CANCEL + ? null + : GROUP_APPLICATION_STATUS.REGISTER; + } + + from(value: string | null) { + return value + ? GROUP_APPLICATION_STATUS.REGISTER + : GROUP_APPLICATION_STATUS.CANCEL; + } +} diff --git a/backend/src/app/group-article/group-article.module.ts b/backend/src/app/group-article/group-article.module.ts index 32d362a0..7d0ac565 100644 --- a/backend/src/app/group-article/group-article.module.ts +++ b/backend/src/app/group-article/group-article.module.ts @@ -15,5 +15,6 @@ import { ImageModule } from '@app/image/image.module'; GroupCategoryRepository, GroupArticleRepository, ], + exports: [GroupArticleRepository], }) export class GroupArticleModule {} diff --git a/backend/src/app/group-article/repository/group-article.repository.ts b/backend/src/app/group-article/repository/group-article.repository.ts index 5617a774..4b9868d1 100644 --- a/backend/src/app/group-article/repository/group-article.repository.ts +++ b/backend/src/app/group-article/repository/group-article.repository.ts @@ -21,6 +21,10 @@ export class GroupArticleRepository extends Repository { ); } + findById(id: number) { + return this.findOneBy({ id }); + } + async search( searchRequest: SearchGroupArticlesRequest, ): Promise<[IGroupArticleSearchResult[], number]> { diff --git a/backend/src/setSwagger.ts b/backend/src/setSwagger.ts index 838dd5f9..53650f58 100644 --- a/backend/src/setSwagger.ts +++ b/backend/src/setSwagger.ts @@ -6,6 +6,7 @@ import { ImageModule } from '@app/image/image.module'; import { GroupArticleModule } from '@app/group-article/group-article.module'; import { UserModule } from '@app/user/user.module'; import { MyInfoModule } from '@app/myinfo/myinfo.module'; +import { GroupApplicationModule } from '@app/group-application/group-application.module'; export const setSwagger = (app: INestApplication) => { const config = new DocumentBuilder() @@ -27,6 +28,7 @@ export const setSwagger = (app: INestApplication) => { GroupArticleModule, UserModule, MyInfoModule, + GroupApplicationModule, ], extraModels: [ResponseEntity], }); From eb23268021642ae38a28b8b140db20227b600d43 Mon Sep 17 00:00:00 2001 From: MinGyeong Park <37508296+kong430@users.noreply.github.com> Date: Wed, 30 Nov 2022 15:27:33 +0900 Subject: [PATCH 060/142] =?UTF-8?q?[Feature]=20=ED=81=B4=EB=9D=BC=EC=9D=B4?= =?UTF-8?q?=EC=96=B8=ED=8A=B8=20=EC=97=90=EB=9F=AC=20=EB=B0=8F=20API=20?= =?UTF-8?q?=EC=97=90=EB=9F=AC=20=EC=B2=98=EB=A6=AC=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EA=B5=AC=EC=83=81=20(#141)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :sparkles: feature: client ๋ฐ api ๊ณตํ†ต ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋กœ์ง ์ž‘์„ฑ * :recycle: refactor: error ํด๋” components ๋ฐ‘์œผ๋กœ ์˜ฎ๊น€ * :recycle: refactor: error ํด๋” ErrorBoundary๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ * :sparkles: feature: useGeneralQuery hook ์ •์˜ * :recycle: refactor: if๋ฌธ ์ค‘๊ด„ํ˜ธ ์ ์šฉ * :sparkles: feature: useAuthMutation hook ์ถ”๊ฐ€ ๋ฐ custom useQuery ํƒ€์ž… ๋ณ€๊ฒฝ * :recycle: refactor: error.response ์žˆ๋Š”์ง€ ์ฒดํฌํ•˜์ง€ ์•Š๋„๋ก ์ˆ˜์ • * :goal_net: chore: uuidv4 ๋Œ€์‹ uuid ์‚ฌ์šฉ --- frontend/package-lock.json | 46 +++++++++++++- frontend/package.json | 3 +- .../components/article/ArticleList/index.tsx | 61 +++++++++++++++++++ .../common/ErrorBoundary/ApiErrorBoundary.tsx | 50 +++++++++++++++ .../common/ErrorBoundary/AuthError.ts | 7 +++ .../ErrorBoundary/AuthErrorBoundary.tsx | 49 +++++++++++++++ .../common/ErrorBoundary/ErrorBoundary.tsx | 42 +++++++++++++ .../components/common/ErrorMessage/index.tsx | 2 +- .../common/RedirectHomeModal/index.tsx | 52 ++++++++++++++++ .../hooks/queries/useFetchGroupArticles.ts | 18 ++++-- frontend/src/hooks/useAuthMutation.ts | 29 +++++++++ frontend/src/hooks/useAuthQuery.ts | 36 +++++++++++ frontend/src/hooks/useGeneralQuery.ts | 33 ++++++++++ frontend/src/mocks/handlers.ts | 2 + frontend/src/mocks/resolvers/postTest.ts | 5 ++ frontend/src/pages/_app.tsx | 26 ++++++-- frontend/src/pages/index.tsx | 49 ++------------- 17 files changed, 455 insertions(+), 55 deletions(-) create mode 100644 frontend/src/components/article/ArticleList/index.tsx create mode 100644 frontend/src/components/common/ErrorBoundary/ApiErrorBoundary.tsx create mode 100644 frontend/src/components/common/ErrorBoundary/AuthError.ts create mode 100644 frontend/src/components/common/ErrorBoundary/AuthErrorBoundary.tsx create mode 100644 frontend/src/components/common/ErrorBoundary/ErrorBoundary.tsx create mode 100644 frontend/src/components/common/RedirectHomeModal/index.tsx create mode 100644 frontend/src/hooks/useAuthMutation.ts create mode 100644 frontend/src/hooks/useAuthQuery.ts create mode 100644 frontend/src/hooks/useGeneralQuery.ts create mode 100644 frontend/src/mocks/resolvers/postTest.ts diff --git a/frontend/package-lock.json b/frontend/package-lock.json index b7d18671..2ad38f14 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -23,7 +23,8 @@ "next": "^12.3.3", "react": "^17.0.2", "react-dom": "^17.0.2", - "timeago.js": "^4.0.2" + "timeago.js": "^4.0.2", + "uuidv4": "^6.2.13" }, "devDependencies": { "@babel/core": "^7.20.2", @@ -10631,6 +10632,11 @@ "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==", "dev": true }, + "node_modules/@types/uuid": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==" + }, "node_modules/@types/webpack": { "version": "4.41.33", "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.33.tgz", @@ -27702,6 +27708,23 @@ "integrity": "sha512-dsNgbLaTrd6l3MMxTtouOCFw4CBFc/3a+GgYA2YyrJvyQ1u6q4pcu3ktLoUZ/VN/Aw9WsauazbgsgdfVWgAKQg==", "dev": true }, + "node_modules/uuidv4": { + "version": "6.2.13", + "resolved": "https://registry.npmjs.org/uuidv4/-/uuidv4-6.2.13.tgz", + "integrity": "sha512-AXyzMjazYB3ovL3q051VLH06Ixj//Knx7QnUSi1T//Ie3io6CpsPu9nVMOx5MoLWh6xV0B9J0hIaxungxXUbPQ==", + "dependencies": { + "@types/uuid": "8.3.4", + "uuid": "8.3.2" + } + }, + "node_modules/uuidv4/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", @@ -36516,6 +36539,11 @@ "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==", "dev": true }, + "@types/uuid": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==" + }, "@types/webpack": { "version": "4.41.33", "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.33.tgz", @@ -49597,6 +49625,22 @@ "integrity": "sha512-dsNgbLaTrd6l3MMxTtouOCFw4CBFc/3a+GgYA2YyrJvyQ1u6q4pcu3ktLoUZ/VN/Aw9WsauazbgsgdfVWgAKQg==", "dev": true }, + "uuidv4": { + "version": "6.2.13", + "resolved": "https://registry.npmjs.org/uuidv4/-/uuidv4-6.2.13.tgz", + "integrity": "sha512-AXyzMjazYB3ovL3q051VLH06Ixj//Knx7QnUSi1T//Ie3io6CpsPu9nVMOx5MoLWh6xV0B9J0hIaxungxXUbPQ==", + "requires": { + "@types/uuid": "8.3.4", + "uuid": "8.3.2" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + } + } + }, "v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index 3946f83b..64cb308b 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -41,7 +41,8 @@ "next": "^12.3.3", "react": "^17.0.2", "react-dom": "^17.0.2", - "timeago.js": "^4.0.2" + "timeago.js": "^4.0.2", + "uuidv4": "^6.2.13" }, "devDependencies": { "@babel/core": "^7.20.2", diff --git a/frontend/src/components/article/ArticleList/index.tsx b/frontend/src/components/article/ArticleList/index.tsx new file mode 100644 index 00000000..4d622350 --- /dev/null +++ b/frontend/src/components/article/ArticleList/index.tsx @@ -0,0 +1,61 @@ +import Link from 'next/link'; +import { useMemo } from 'react'; + +import styled from '@emotion/styled'; + +import EmptyMessage from '@components/common/EmptyMessage'; +import GroupArticleCard from '@components/common/GroupArticleCard'; +import { Category } from '@constants/category'; +import { Location } from '@constants/location'; +import useFetchGroupArticles from '@hooks/queries/useFetchGroupArticles'; +import useIntersect from '@hooks/useIntersect'; +import { ArticleType } from '@typings/types'; + +const ArticleList = () => { + const { data, fetchNextPage, hasNextPage, isFetching } = useFetchGroupArticles( + Category.STUDY, + Location.BUSAN, + false + ); + const ref = useIntersect((entry, observer) => { + observer.unobserve(entry.target); + if (hasNextPage && !isFetching) { + void fetchNextPage(); + } + }); + + const articles: ArticleType[] = useMemo( + // @ts-expect-error + () => (data ? data.pages.flatMap(({ data }) => data.articles) : []), + [data] + ); + + // TODO ๋กœ๋”ฉ ์ฒ˜๋ฆฌ + if (isFetching) return
    test
    ; + + return ( + <> + {articles.length ? ( + + {articles.map((article) => ( + +
    + +
    + + ))} +
    +
    + ) : ( + + )} + + ); +}; +const ListWrapper = styled.div` + display: grid; + grid-template-columns: repeat(2, 1fr); + grid-gap: 1.3rem; +`; + +export default ArticleList; diff --git a/frontend/src/components/common/ErrorBoundary/ApiErrorBoundary.tsx b/frontend/src/components/common/ErrorBoundary/ApiErrorBoundary.tsx new file mode 100644 index 00000000..7eb27690 --- /dev/null +++ b/frontend/src/components/common/ErrorBoundary/ApiErrorBoundary.tsx @@ -0,0 +1,50 @@ +import { Component, PropsWithChildren, useState } from 'react'; + +import { AxiosError } from 'axios'; + +import AlertModal from '@components/common/AlertModal'; +import AuthError from '@components/common/ErrorBoundary/AuthError'; + +interface Props extends PropsWithChildren {} + +interface State { + error: Error; +} + +class ApiErrorBoundary extends Component { + constructor(props: Props) { + super(props); + this.state = { + error: null, + }; + } + + static getDerivedStateFromError(error: Error) { + if (error instanceof AxiosError && !(error instanceof AuthError)) { + return { error }; + } + throw error; + } + + render() { + const { error } = this.state; + const { children } = this.props; + if (error) { + return ; + } + return children; + } +} + +export default ApiErrorBoundary; + +const ApiErrors = () => { + const [open, setOpen] = useState(true); + return ( + setOpen(false)} + message="์š”์ฒญ ๋„์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ์‹œ๋„ํ•ด์ฃผ์„ธ์š”." + /> + ); +}; diff --git a/frontend/src/components/common/ErrorBoundary/AuthError.ts b/frontend/src/components/common/ErrorBoundary/AuthError.ts new file mode 100644 index 00000000..f473f3e8 --- /dev/null +++ b/frontend/src/components/common/ErrorBoundary/AuthError.ts @@ -0,0 +1,7 @@ +class AuthError extends Error { + constructor() { + super('๊ถŒํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค'); + } +} + +export default AuthError; diff --git a/frontend/src/components/common/ErrorBoundary/AuthErrorBoundary.tsx b/frontend/src/components/common/ErrorBoundary/AuthErrorBoundary.tsx new file mode 100644 index 00000000..a7c17a23 --- /dev/null +++ b/frontend/src/components/common/ErrorBoundary/AuthErrorBoundary.tsx @@ -0,0 +1,49 @@ +import { Component, PropsWithChildren, useState } from 'react'; + +import RedirectHomeModal from '@components/common/RedirectHomeModal'; + +import AuthError from './AuthError'; + +interface Props extends PropsWithChildren {} + +interface State { + error: Error; +} + +class AuthErrorBoundary extends Component { + constructor(props: Props) { + super(props); + this.state = { + error: null, + }; + } + + static getDerivedStateFromError(error: Error) { + if (error instanceof AuthError) { + return { error }; + } + throw error; + } + + render() { + const { error } = this.state; + const { children } = this.props; + if (error) { + return ; + } + return children; + } +} + +export default AuthErrorBoundary; + +const AuthErrors = () => { + const [open, setOpen] = useState(true); + return ( + setOpen(false)} + message="๋กœ๊ทธ์ธ์ด ํ•„์š”ํ•œ ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค." + /> + ); +}; diff --git a/frontend/src/components/common/ErrorBoundary/ErrorBoundary.tsx b/frontend/src/components/common/ErrorBoundary/ErrorBoundary.tsx new file mode 100644 index 00000000..b49e7ad5 --- /dev/null +++ b/frontend/src/components/common/ErrorBoundary/ErrorBoundary.tsx @@ -0,0 +1,42 @@ +import { Component, PropsWithChildren } from 'react'; + +import ErrorMessage from '@components/common/ErrorMessage'; + +interface Props extends PropsWithChildren {} + +interface State { + error: Error; +} + +class ErrorBoundary extends Component { + constructor(props: Props) { + super(props); + this.state = { + error: null, + }; + } + + static getDerivedStateFromError(error: Error) { + return { error }; + } + + render() { + const { error } = this.state; + const { children } = this.props; + if (error) { + return ; + } + return children; + } +} + +export default ErrorBoundary; + +const ErrorFallback = () => { + return ( + + ); +}; diff --git a/frontend/src/components/common/ErrorMessage/index.tsx b/frontend/src/components/common/ErrorMessage/index.tsx index 69accb87..ca6c7163 100644 --- a/frontend/src/components/common/ErrorMessage/index.tsx +++ b/frontend/src/components/common/ErrorMessage/index.tsx @@ -5,7 +5,7 @@ import styled from '@emotion/styled'; import { IconZoomExclamation } from '@tabler/icons'; interface Props { - errorCode: number; + errorCode?: number; title?: string; description?: string; subDescription?: string; diff --git a/frontend/src/components/common/RedirectHomeModal/index.tsx b/frontend/src/components/common/RedirectHomeModal/index.tsx new file mode 100644 index 00000000..d54f849c --- /dev/null +++ b/frontend/src/components/common/RedirectHomeModal/index.tsx @@ -0,0 +1,52 @@ +import { useRouter } from 'next/router'; + +import styled from '@emotion/styled'; +import { Modal } from '@mantine/core'; + +interface Props { + message: string; + open: boolean; + onClose: () => void; +} + +const RedirectHomeModal = ({ message, open, onClose }: Props) => { + const router = useRouter(); + + return ( + <> + {open && ( + + {message} + {/* eslint-disable-next-line @typescript-eslint/no-misused-promises */} + router.push('/login')}>๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๊ธฐ + + )} + + ); +}; + +export default RedirectHomeModal; + +const StyledModal = styled(Modal)` + & .mantine-Modal-body { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + } +`; + +const ModalContent = styled.div` + padding: 1.6rem; + text-align: center; +`; + +const OkButton = styled.div` + padding: 1.6rem; + color: ${({ theme }) => theme.colors.indigo[7]}; + background-color: ${({ theme }) => theme.white}; + border: none; + &:hover { + cursor: pointer; + } +`; diff --git a/frontend/src/hooks/queries/useFetchGroupArticles.ts b/frontend/src/hooks/queries/useFetchGroupArticles.ts index 4b4e5ce3..c670e547 100644 --- a/frontend/src/hooks/queries/useFetchGroupArticles.ts +++ b/frontend/src/hooks/queries/useFetchGroupArticles.ts @@ -1,11 +1,13 @@ import { useInfiniteQuery } from '@tanstack/react-query'; -import { AxiosResponse } from 'axios'; +import { AxiosError, AxiosResponse } from 'axios'; import getTestGroupArticles from '@apis/test/getTestGroupArticles'; import { Category } from '@constants/category'; import { Location } from '@constants/location'; import { ArticleType } from '@typings/types'; +import AuthError from '../../components/common/ErrorBoundary/AuthError'; + interface ArticleResponseType { articles: ArticleType[]; isLast: boolean; @@ -13,16 +15,24 @@ interface ArticleResponseType { } const useFetchGroupArticles = (category: Category, location: Location, progress: boolean) => { - const { data, fetchNextPage, hasNextPage, isFetching, isError } = useInfiniteQuery( + const { data, fetchNextPage, hasNextPage, isFetching, error } = useInfiniteQuery< + Promise>, + AxiosError + >( ['articles'], ({ pageParam = 0 }) => getTestGroupArticles(pageParam, category, location, progress), { + // @ts-expect-error getNextPageParam: (lastPage: AxiosResponse) => lastPage.data.isLast ? undefined : lastPage.data.currentId + 1, } ); - if (isError) { - // TODO ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๊ณตํ†ต ๋กœ์ง ์ ์šฉ + + if (error) { + if (error.response && error.response.status === 401) { + throw new AuthError(); + } + throw error; } return { data, fetchNextPage, hasNextPage, isFetching }; }; diff --git a/frontend/src/hooks/useAuthMutation.ts b/frontend/src/hooks/useAuthMutation.ts new file mode 100644 index 00000000..4b3d7843 --- /dev/null +++ b/frontend/src/hooks/useAuthMutation.ts @@ -0,0 +1,29 @@ +import { MutationFunction } from '@tanstack/query-core'; +import { useMutation } from '@tanstack/react-query'; +import { UseMutationOptions } from '@tanstack/react-query/src/types'; +import { AxiosError } from 'axios'; + +import AuthError from '@components/common/ErrorBoundary/AuthError'; + +const useAuthMutation = < + TData = unknown, + TError = AxiosError, + TVariables = unknown, + TContext = unknown +>( + mutationFunc: MutationFunction, + options?: Omit, 'mutationFn'> +) => { + const { mutate, error } = useMutation(mutationFunc, options); + + if (error && error instanceof AxiosError) { + if (error.response.status === 401) { + throw new AuthError(); + } + throw error; + } + + return { mutate }; +}; + +export default useAuthMutation; diff --git a/frontend/src/hooks/useAuthQuery.ts b/frontend/src/hooks/useAuthQuery.ts new file mode 100644 index 00000000..459e5b87 --- /dev/null +++ b/frontend/src/hooks/useAuthQuery.ts @@ -0,0 +1,36 @@ +import { QueryFunction, QueryKey, useQuery } from '@tanstack/react-query'; +import { UseQueryOptions } from '@tanstack/react-query/src/types'; +import { AxiosError } from 'axios'; + +import AuthError from '@components/common/ErrorBoundary/AuthError'; + +const useAuthQuery = < + TQueryFnData = unknown, + TError = AxiosError, + TData = TQueryFnData, + TQueryKey extends QueryKey = QueryKey +>( + queryKey: TQueryKey, + queryFn: QueryFunction, + options?: Omit< + UseQueryOptions, + 'queryKey' | 'queryFn' | 'initialData' + > & { initialData?: () => undefined } +) => { + const { data, isLoading, isFetching, error } = useQuery( + queryKey, + queryFn, + options + ); + + if (error && error instanceof AxiosError) { + if (error.response.status === 401) { + throw new AuthError(); + } + throw error; + } + + return { data, isLoading, isFetching }; +}; + +export default useAuthQuery; diff --git a/frontend/src/hooks/useGeneralQuery.ts b/frontend/src/hooks/useGeneralQuery.ts new file mode 100644 index 00000000..7e2cfb96 --- /dev/null +++ b/frontend/src/hooks/useGeneralQuery.ts @@ -0,0 +1,33 @@ +import { QueryFunction, QueryKey, useQuery } from '@tanstack/react-query'; +import { UseQueryOptions } from '@tanstack/react-query/src/types'; +import { AxiosError } from 'axios'; + +const useGeneralQuery = < + TQueryFnData = unknown, + TError = AxiosError, + TData = TQueryFnData, + TQueryKey extends QueryKey = QueryKey +>( + queryKey: TQueryKey, + queryFn: QueryFunction, + options?: Omit< + UseQueryOptions, + 'queryKey' | 'queryFn' | 'initialData' + > & { initialData?: () => undefined } +) => { + const { data, isLoading, isFetching, error } = useQuery( + queryKey, + queryFn, + options + ); + + if (error && error instanceof AxiosError) { + if (error.response.status !== 401) { + throw error; + } + } + + return { data, isLoading, isFetching }; +}; + +export default useGeneralQuery; diff --git a/frontend/src/mocks/handlers.ts b/frontend/src/mocks/handlers.ts index 1ce67cf8..aaf42d91 100644 --- a/frontend/src/mocks/handlers.ts +++ b/frontend/src/mocks/handlers.ts @@ -1,6 +1,7 @@ import { rest } from 'msw'; import { getGroupArticles } from '@mocks/resolvers/getGroupArticles'; +import { postTest } from '@mocks/resolvers/postTest'; import { getMyInfo } from './resolvers/getMyInfo'; import { getTest } from './resolvers/test'; @@ -10,4 +11,5 @@ export const handlers = [ rest.get('http://testServer/group-articles', getGroupArticles), rest.get('http://testServer/group-articles/me', getGroupArticles), rest.get('http://testServer/my-info', getMyInfo), + rest.post('http://testServer/post-test', postTest), ]; diff --git a/frontend/src/mocks/resolvers/postTest.ts b/frontend/src/mocks/resolvers/postTest.ts new file mode 100644 index 00000000..9152517c --- /dev/null +++ b/frontend/src/mocks/resolvers/postTest.ts @@ -0,0 +1,5 @@ +import { dummyUser } from '@constants/dummy'; + +export const postTest = (req: any, res: any, ctx: any) => { + return res(ctx.status(401), ctx.json({ ...dummyUser })); +}; diff --git a/frontend/src/pages/_app.tsx b/frontend/src/pages/_app.tsx index 63640d10..4fd1fc97 100644 --- a/frontend/src/pages/_app.tsx +++ b/frontend/src/pages/_app.tsx @@ -4,16 +4,26 @@ import { useEffect, useState } from 'react'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; +import { v4 as uuid } from 'uuid'; +import ApiErrorBoundary from '@components/common/ErrorBoundary/ApiErrorBoundary'; +import AuthErrorBoundary from '@components/common/ErrorBoundary/AuthErrorBoundary'; +import ErrorBoundary from '@components/common/ErrorBoundary/ErrorBoundary'; import LoginRedirect from '@components/common/LoginRedirect'; import RouterTransition from '@components/common/RouterTransition'; import initMockApi from '@mocks/.'; import CommonStyles from '@styles/CommonStyles'; -const queryClient = new QueryClient(); +const queryClient = new QueryClient({ + defaultOptions: { + queries: { + retry: false, + }, + }, +}); export default function App({ Component, pageProps }: AppProps) { - const [shouldRender, setShouldRender] = useState(true); + const [shouldRender, setShouldRender] = useState(false); useEffect(() => { void (async () => { @@ -34,9 +44,15 @@ export default function App({ Component, pageProps }: AppProps) { - - - + + + + + + + + + diff --git a/frontend/src/pages/index.tsx b/frontend/src/pages/index.tsx index f21590f4..c97fff45 100644 --- a/frontend/src/pages/index.tsx +++ b/frontend/src/pages/index.tsx @@ -1,5 +1,4 @@ -import Link from 'next/link'; -import { useMemo, useState } from 'react'; +import { useState } from 'react'; import { useQueryClient } from '@tanstack/react-query'; @@ -8,8 +7,8 @@ import styled from '@emotion/styled'; import { Checkbox, Select } from '@mantine/core'; import { IconRefresh } from '@tabler/icons'; -import EmptyMessage from '@components/common/EmptyMessage'; -import GroupArticleCard from '@components/common/GroupArticleCard'; +import ArticleList from '@components/article/ArticleList'; +import ApiErrorBoundary from '@components/common/ErrorBoundary/ApiErrorBoundary'; import Header from '@components/common/Header'; import RootTitle from '@components/common/Header/RootTitle'; import UserLoginItem from '@components/common/Header/UserLoginItem'; @@ -18,8 +17,6 @@ import PageLayout from '@components/common/PageLayout'; import { Category, CategoryKr } from '@constants/category'; import { Location, LocationKr } from '@constants/location'; import { PAGE_TITLE } from '@constants/pageTitle'; -import useFetchGroupArticles from '@hooks/queries/useFetchGroupArticles'; -import useIntersect from '@hooks/useIntersect'; const Main = () => { const { @@ -29,23 +26,6 @@ const Main = () => { const [selectedCategory, setSelectedCategory] = useState(null); const [selectedLocation, setSelectedLocation] = useState(null); const [progressChecked, setProgressChecked] = useState(false); - const { data, fetchNextPage, hasNextPage, isFetching } = useFetchGroupArticles( - selectedCategory, - selectedLocation, - progressChecked - ); - - const ref = useIntersect((entry, observer) => { - observer.unobserve(entry.target); - if (hasNextPage && !isFetching) { - void fetchNextPage(); - } - }); - - const articles = useMemo( - () => (data ? data.pages.flatMap(({ data }) => data.articles) : []), - [data] - ); const refreshArticleList = () => { void queryClient.resetQueries(['articles']); @@ -106,20 +86,9 @@ const Main = () => { - {articles.length ? ( - - {articles.map((article) => ( - -
    - -
    - - ))} -
    -
    - ) : ( - - )} + + +
    ); @@ -168,9 +137,3 @@ const RefreshButton = styled.button` cursor: pointer; } `; - -const ArticleList = styled.div` - display: grid; - grid-template-columns: repeat(2, 1fr); - grid-gap: 1.3rem; -`; From ecea427ecc494f9e97f5ba87814ba00aa7a302e0 Mon Sep 17 00:00:00 2001 From: yangseungchan Date: Wed, 30 Nov 2022 15:31:49 +0900 Subject: [PATCH 061/142] =?UTF-8?q?[Feature]=20credential=20=EC=98=B5?= =?UTF-8?q?=EC=85=98=20=EC=B6=94=EA=B0=80=20(#152)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ๐Ÿ› fix: credential ์˜ต์…˜ ์ถ”๊ฐ€ * ๐Ÿฅ… chore: cd ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ • --- .github/workflows/frontend-cd.yml | 2 +- .github/workflows/frontend-ci.yml | 6 +++--- backend/.gitignore | 1 + backend/src/setNestApp.ts | 5 ++++- frontend/next.config.js | 8 -------- frontend/scripts/dev-deploy.sh | 2 +- frontend/src/components/login/GitLoginButton/index.tsx | 4 ++-- frontend/src/hooks/queries/useFetchMyInfo.ts | 5 ++++- 8 files changed, 16 insertions(+), 17 deletions(-) diff --git a/.github/workflows/frontend-cd.yml b/.github/workflows/frontend-cd.yml index 7b0c7579..21f9bead 100644 --- a/.github/workflows/frontend-cd.yml +++ b/.github/workflows/frontend-cd.yml @@ -1,7 +1,7 @@ name: Frontend Dev CD run-name: ${{ github.actor }}๊ฐ€ ์‹คํ–‰ํ•จ on: - pull_request: + push: branches: - develop paths: diff --git a/.github/workflows/frontend-ci.yml b/.github/workflows/frontend-ci.yml index 4e609c39..6aed8487 100644 --- a/.github/workflows/frontend-ci.yml +++ b/.github/workflows/frontend-ci.yml @@ -29,7 +29,7 @@ jobs: - name: create environment variable file run: | touch .env - echo -e API_URL=https://api.moyeomoyeo.com > .env + echo -e API_URL=https://api.moyeomoyeo.com\\nNEXT_PUBLIC_API_URL=https://api.moyeomoyeo.com > .env - name: dependency install run: npm install @@ -53,7 +53,7 @@ jobs: - name: create environment variable file run: | touch .env - echo -e API_URL=https://api.moyeomoyeo.com > .env + echo -e API_URL=https://api.moyeomoyeo.com\\nNEXT_PUBLIC_API_URL=https://api.moyeomoyeo.com > .env - name: depedency install run: npm install @@ -94,7 +94,7 @@ jobs: - name: create environment variable file run: | touch .env - echo -e API_URL=https://api.moyeomoyeo.com > .env + echo -e API_URL=https://api.moyeomoyeo.com\\nNEXT_PUBLIC_API_URL=https://api.moyeomoyeo.com > .env - name: dependency install run: | diff --git a/backend/.gitignore b/backend/.gitignore index dd0176b0..364d7b80 100644 --- a/backend/.gitignore +++ b/backend/.gitignore @@ -8,3 +8,4 @@ dist .env .env.* +.vscode \ No newline at end of file diff --git a/backend/src/setNestApp.ts b/backend/src/setNestApp.ts index d0c7c93c..53b07f16 100644 --- a/backend/src/setNestApp.ts +++ b/backend/src/setNestApp.ts @@ -14,7 +14,10 @@ export const setNestApp = (app: INestApplication) => { app.use(cookieParser()); // TODO: cors ์„ค์ •์„ nginx๋กœ ์˜ฎ๊ธฐ๊ฑฐ๋‚˜ ์ ์ ˆํ•œ ์„ค์ • ํ•„์š” - app.enableCors(); + app.enableCors({ + origin: true, + credentials: true, + }); app.enableVersioning({ type: VersioningType.URI, diff --git a/frontend/next.config.js b/frontend/next.config.js index 4af173d6..71298580 100644 --- a/frontend/next.config.js +++ b/frontend/next.config.js @@ -16,14 +16,6 @@ const nextConfig = { images: { domains: ["avatars.githubusercontent.com"], }, - async rewrites() { - return [ - { - source: '/api/:path*', - destination: `${process.env.API_URL}/:path*` - } - ] - } } module.exports = nextConfig diff --git a/frontend/scripts/dev-deploy.sh b/frontend/scripts/dev-deploy.sh index e7533401..871dda5c 100644 --- a/frontend/scripts/dev-deploy.sh +++ b/frontend/scripts/dev-deploy.sh @@ -11,7 +11,7 @@ touch .env.production echo -e $4 > .env.production -echo -e API_URL=https://api.moyeomoyeo.com > .env +echo -e API_URL=https://api.moyeomoyeo.com\\nNEXT_PUBLIC_API_URL=https://api.moyeomoyeo.com > .env # docker down docker compose down --rmi all --remove-orphans diff --git a/frontend/src/components/login/GitLoginButton/index.tsx b/frontend/src/components/login/GitLoginButton/index.tsx index 9abdc6ba..87ae1c2a 100644 --- a/frontend/src/components/login/GitLoginButton/index.tsx +++ b/frontend/src/components/login/GitLoginButton/index.tsx @@ -5,8 +5,8 @@ import { IconBrandGithub } from '@tabler/icons'; const GitLoginButton = () => { const { white } = useTheme(); - const handleLoginButtonClick = () => { - window.location.href = `/api/v1/auth/github/login`; + const handleLoginButtonClick = async () => { + window.location.href = `${process.env.NEXT_PUBLIC_API_URL}/v1/auth/github/login`; }; return ( diff --git a/frontend/src/hooks/queries/useFetchMyInfo.ts b/frontend/src/hooks/queries/useFetchMyInfo.ts index 232e5353..94c507f2 100644 --- a/frontend/src/hooks/queries/useFetchMyInfo.ts +++ b/frontend/src/hooks/queries/useFetchMyInfo.ts @@ -10,7 +10,10 @@ import { ApiResponse, UserType } from '@typings/types'; const useFetchMyInfo = () => { const { data, isLoading, isError } = useQuery, AxiosError, UserType>( ['my'], - () => axios.get('/api/v1/my-info'), + () => + axios.get(`${process.env.NEXT_PUBLIC_API_URL}/v1/my-info`, { + withCredentials: true, + }), { select: (res) => res.data.data, retry: false, From a48bb25cfe07992dbadc76b25d6e3c1fdd6d0904 Mon Sep 17 00:00:00 2001 From: yangseungchan Date: Wed, 30 Nov 2022 16:04:15 +0900 Subject: [PATCH 062/142] =?UTF-8?q?[Fix]=20Dockerfile,=20ci/cd=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20(#154)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ๐Ÿ› fix: credential ์˜ต์…˜ ์ถ”๊ฐ€ * ๐Ÿฅ… chore: cd ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ • * ๐Ÿฅ… chore: ci/cd, ๋„์ปค ์ด๋ฏธ์ง€ ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ • * ๐Ÿฅ… chore: ์ปจํ…Œ์ด๋„ˆ ๊ตฌ์„ฑ ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ • --- frontend/Dockerfile | 2 +- frontend/scripts/dev-deploy.sh | 5 +---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/frontend/Dockerfile b/frontend/Dockerfile index 918bfda6..0ebebeb2 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -15,7 +15,7 @@ COPY . . # ์ด๋ฏธ์ง€ ๋นŒ๋“œ์‹œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ฃผ์ž… ์‚ฌ์šฉ RUN touch .env -RUN echo -e "API_URL=https://api.moyeomoyeo.com" > .env +RUN echo -e "API_URL=https://api.moyeomoyeo.com\\nNEXT_PUBLIC_API_URL=https://api.moyeomoyeo.com" > .env # Build NextJS app RUN npm run build diff --git a/frontend/scripts/dev-deploy.sh b/frontend/scripts/dev-deploy.sh index 871dda5c..3b72086d 100644 --- a/frontend/scripts/dev-deploy.sh +++ b/frontend/scripts/dev-deploy.sh @@ -7,11 +7,8 @@ echo "docker has been logged in" cd frontend touch .env -touch .env.production -echo -e $4 > .env.production - -echo -e API_URL=https://api.moyeomoyeo.com\\nNEXT_PUBLIC_API_URL=https://api.moyeomoyeo.com > .env +echo -e $4 > .env # docker down docker compose down --rmi all --remove-orphans From bb393f9bbebb2546804941e1f127cf837a316344 Mon Sep 17 00:00:00 2001 From: Gakko <90585081+pythonstrup@users.noreply.github.com> Date: Wed, 30 Nov 2022 16:26:38 +0900 Subject: [PATCH 063/142] =?UTF-8?q?[Feature]=20=EB=AA=A8=EC=9E=84=20?= =?UTF-8?q?=EC=8B=A0=EC=B2=AD=20=EC=97=AC=EB=B6=80=20=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?API=20(#153)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ๐Ÿฅ… chore: request dto ํŒŒ์ผ๋ช… ๋ฐ ํด๋ž˜์Šค ๋ช… ๋ณ€๊ฒฝ * โœจ feature: ๋ชจ์ž„ ์‹ ์ฒญ ์—ฌ๋ถ€ ์กฐํšŒ response ์ž‘์„ฑ * โœจ feature: ๋ชจ์ž„ ์‹ ์ฒญ ์—ฌ๋ถ€ ์กฐํšŒ service ์ž‘์„ฑ - ์ €์ž์ธ์ง€ ํ™•์ธ - ์ฐธ์—ฌ ์‹ ์ฒญ์ด ์žˆ์—ˆ๋Š”์ง€ ํ™•์ธ * โœจ feature: ๋ชจ์ž„ ์‹ ์ฒญ ์—ฌ๋ถ€ ์กฐํšŒ controller ์ž‘์„ฑ - swagger ์ ์šฉ - DTO ์„ธํŒ… * ๐Ÿฅ… chore: ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ * ๐Ÿฅ… chore: ์ฝ”๋“œ์Šคํƒ€์ผ ๋งž์ถ”๊ธฐ --- .../dto/check-joining-group-response.dto.ts | 16 +++++++ ...to.ts => group-application-request.dto.ts} | 2 +- .../entity/group-application.entity.ts | 12 ++--- .../group-application.controller.ts | 25 ++++++++-- .../group-application.service.ts | 46 ++++++++++++++----- .../entity/group-article.entity.ts | 2 +- 6 files changed, 79 insertions(+), 24 deletions(-) create mode 100644 backend/src/app/group-application/dto/check-joining-group-response.dto.ts rename backend/src/app/group-application/dto/{attend-group-request.dto.ts => group-application-request.dto.ts} (85%) diff --git a/backend/src/app/group-application/dto/check-joining-group-response.dto.ts b/backend/src/app/group-application/dto/check-joining-group-response.dto.ts new file mode 100644 index 00000000..4a5f1220 --- /dev/null +++ b/backend/src/app/group-application/dto/check-joining-group-response.dto.ts @@ -0,0 +1,16 @@ +import { ApiProperty } from '@nestjs/swagger'; + +export class CheckJoiningGroupResonse { + @ApiProperty({ + example: true, + description: '๋ชจ์ž„์˜ ์‹ ์ฒญ ์—ฌ๋ถ€๋ฅผ ์กฐํšŒ', + required: true, + }) + isJoined: boolean; + + static from(isJoined: boolean) { + const response = new CheckJoiningGroupResonse(); + response.isJoined = isJoined; + return response; + } +} diff --git a/backend/src/app/group-application/dto/attend-group-request.dto.ts b/backend/src/app/group-application/dto/group-application-request.dto.ts similarity index 85% rename from backend/src/app/group-application/dto/attend-group-request.dto.ts rename to backend/src/app/group-application/dto/group-application-request.dto.ts index 0c5e929d..8d846d64 100644 --- a/backend/src/app/group-application/dto/attend-group-request.dto.ts +++ b/backend/src/app/group-application/dto/group-application-request.dto.ts @@ -1,7 +1,7 @@ import { ApiProperty } from '@nestjs/swagger'; import { IsNumber } from 'class-validator'; -export class AttendGroupRequest { +export class GroupApplicationRequest { @ApiProperty({ example: 1, description: '๊ทธ๋ฃน ์•„์ด๋””', diff --git a/backend/src/app/group-application/entity/group-application.entity.ts b/backend/src/app/group-application/entity/group-application.entity.ts index b2612436..69a16820 100644 --- a/backend/src/app/group-application/entity/group-application.entity.ts +++ b/backend/src/app/group-application/entity/group-application.entity.ts @@ -51,18 +51,18 @@ export class GroupApplication { @Column({ type: 'timestamp', nullable: true }) deletedAt: Date | null; - static create(userId: number, groupId: number) { + static create(user: User, group: Group) { const groupApplication = new GroupApplication(); - groupApplication.userId = userId; - groupApplication.groupId = groupId; + groupApplication.userId = user.id; + groupApplication.groupId = group.id; groupApplication.status = GROUP_APPLICATION_STATUS.REGISTER; return groupApplication; } - static cancel(userId: number, groupId: number) { + static cancel(user: User, group: Group) { const groupApplication = new GroupApplication(); - groupApplication.userId = userId; - groupApplication.groupId = groupId; + groupApplication.userId = user.id; + groupApplication.groupId = group.id; groupApplication.status = null; return groupApplication; } diff --git a/backend/src/app/group-application/group-application.controller.ts b/backend/src/app/group-application/group-application.controller.ts index da3943ca..9c4458d6 100644 --- a/backend/src/app/group-application/group-application.controller.ts +++ b/backend/src/app/group-application/group-application.controller.ts @@ -1,6 +1,6 @@ import { Body, Controller, HttpStatus, Post } from '@nestjs/common'; import { GroupApplicationService } from '@app/group-application/group-application.service'; -import { AttendGroupRequest } from '@app/group-application/dto/attend-group-request.dto'; +import { GroupApplicationRequest } from '@src/app/group-application/dto/group-application-request.dto'; import { ApiSuccessResponse } from '@src/common/decorator/api-success-resposne.decorator'; import { AttendGroupResponse } from '@app/group-application/dto/attend-group-response.dto'; import { CurrentUser } from '@src/common/decorator/current-user.decorator'; @@ -12,6 +12,7 @@ import { ApiErrorResponse } from '@src/common/decorator/api-error-response.decor import { DuplicateApplicationException } from '@src/app/group-application/exception/duplicate-application.exception'; import { GroupNotFoundException } from '@app/group-application/exception/group-not-found.exception'; import { CannotApplicateException } from '@src/app/group-application/exception/cannot-applicate.exception'; +import { CheckJoiningGroupResonse } from '@app/group-application/dto/check-joining-group-response.dto'; @Controller('group-applications') @JwtAuth() @@ -30,14 +31,30 @@ export class GroupApplicationController { ) async attendGroup( @CurrentUser() user: User, - @Body() attendGroupRequest: AttendGroupRequest, + @Body() groupApplicationRequest: GroupApplicationRequest, ) { - const groupArticleId = attendGroupRequest.groupArticleId; + const groupArticleId = groupApplicationRequest.groupArticleId; const groupApplication = await this.groupApplicationService.attendGroup( - user.id, + user, groupArticleId, ); const data = AttendGroupResponse.from(groupApplication.id); return ResponseEntity.CREATED_WITH_DATA(data); } + + @Post('/status') + @ApiSuccessResponse(HttpStatus.OK, CheckJoiningGroupResonse) + @ApiErrorResponse(GroupNotFoundException) + async checkJoiningGroup( + @CurrentUser() user: User, + @Body() groupApplicationRequest: GroupApplicationRequest, + ) { + const groupArticleId = groupApplicationRequest.groupArticleId; + const isJoined = await this.groupApplicationService.checkJoiningGroup( + user, + groupArticleId, + ); + const data = CheckJoiningGroupResonse.from(isJoined); + return ResponseEntity.OK_WITH_DATA(data); + } } diff --git a/backend/src/app/group-application/group-application.service.ts b/backend/src/app/group-application/group-application.service.ts index 6bae6331..0ca6a9b0 100644 --- a/backend/src/app/group-application/group-application.service.ts +++ b/backend/src/app/group-application/group-application.service.ts @@ -6,6 +6,9 @@ import { DuplicateApplicationException } from '@src/app/group-application/except import { GroupNotFoundException } from '@app/group-application/exception/group-not-found.exception'; import { CannotApplicateException } from '@app/group-application/exception/cannot-applicate.exception'; import { GroupArticleRepository } from '@app/group-article/repository/group-article.repository'; +import { GroupArticle } from '@app/group-article/entity/group-article.entity'; +import { User } from '@app/user/entity/user.entity'; +import { Group } from '@app/group-article/entity/group.entity'; @Injectable() export class GroupApplicationService { @@ -14,34 +17,37 @@ export class GroupApplicationService { private readonly groupArticleRespository: GroupArticleRepository, ) {} - async attendGroup(userId: number, groupId: number) { - const groupArticle = await this.validateGroupArticleId(groupId); - this.validateUserTarget(userId, groupArticle.userId); - await this.validateRegister(userId, groupId); + async attendGroup(user: User, groupArticleId: number) { + const groupArticle = await this.groupArticleRespository.findById( + groupArticleId, + ); + await this.validateGroupArticleId(groupArticle); + this.validateUserTarget(user, groupArticle); + const group = groupArticle.group; + await this.validateRegister(user, group); - const groupApplication = GroupApplication.create(userId, groupId); + const groupApplication = GroupApplication.create(user, group); return this.groupApplicationRepository.save(groupApplication); } - async validateGroupArticleId(groupId: number) { - const groupArticle = await this.groupArticleRespository.findById(groupId); + async validateGroupArticleId(groupArticle: GroupArticle) { if (!groupArticle) { throw new GroupNotFoundException(); } return groupArticle; } - validateUserTarget(currentUserId: number, userId: number) { - if (currentUserId === userId) { + validateUserTarget(currentUser: User, groupArticle: GroupArticle) { + if (groupArticle.isAuthor(currentUser)) { throw new CannotApplicateException(); } } - async validateRegister(userId: number, groupId: number) { + async validateRegister(user: User, group: Group) { const application = await this.groupApplicationRepository.findByUserIdAndGroupIdAndStatus( - userId, - groupId, + user.id, + group.id, GROUP_APPLICATION_STATUS.REGISTER, ); @@ -49,4 +55,20 @@ export class GroupApplicationService { throw new DuplicateApplicationException(); } } + + async checkJoiningGroup(user: User, groupArticleId: number) { + const groupArticle = await this.groupArticleRespository.findById( + groupArticleId, + ); + await this.validateGroupArticleId(groupArticle); + const group = groupArticle.group; + const application = + await this.groupApplicationRepository.findByUserIdAndGroupIdAndStatus( + user.id, + group.id, + GROUP_APPLICATION_STATUS.REGISTER, + ); + + return groupArticle.isAuthor(user) || application !== null; + } } diff --git a/backend/src/app/group-article/entity/group-article.entity.ts b/backend/src/app/group-article/entity/group-article.entity.ts index c27c3701..2f33bcbe 100644 --- a/backend/src/app/group-article/entity/group-article.entity.ts +++ b/backend/src/app/group-article/entity/group-article.entity.ts @@ -77,7 +77,7 @@ export class GroupArticle extends Article { this.group.complete(); } - private isAuthor(user: User) { + isAuthor(user: User) { return this.userId === user.id; } } From 408edd53581dbc29a1b9150c059abe6c267f2582 Mon Sep 17 00:00:00 2001 From: Kim Myeongil <67570061+username1103@users.noreply.github.com> Date: Wed, 30 Nov 2022 16:42:15 +0900 Subject: [PATCH 064/142] =?UTF-8?q?[Feature]=20=EB=AA=A8=EC=A7=91=20?= =?UTF-8?q?=EC=A4=91=EB=8B=A8=20API=20=EC=B6=94=EA=B0=80=20(#146)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :sparkles: feature: ๋ชจ์ง‘์ค‘๋‹จ ๋ฉ”์†Œ๋“œ ์ถ”๊ฐ€ - ์ž‘์„ฑ์ž๊ฐ€ ์•„๋‹ˆ๋ฉด NotAuthorException ๋ฐ˜ํ™˜ - ๋ชจ์ง‘์ค‘์ธ ๊ฒŒ์‹œ๊ธ€์ด ์•„๋‹ˆ๋ฉด NotProgressGroupException ๋ฐ˜ํ™˜ * :sparkles: feature: ๋ชจ์ง‘์ค‘๋‹จ API ์ถ”๊ฐ€ - ์ž‘์„ฑ์ž๊ฐ€ ์•„๋‹ˆ๋ฉด NotAuthorException ๋ฐ˜ํ™˜ - ๋ชจ์ง‘์ค‘์ธ ๊ฒŒ์‹œ๊ธ€์ด ์•„๋‹ˆ๋ฉด NotProgressGroupException ๋ฐ˜ํ™˜ - ๋ชจ์ง‘๊ฒŒ์‹œ๊ธ€์ด ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด GroupArticleNotFoundException ๋ฐ˜ํ™˜ * :bug: fix: ์‚ญ์ œ๋œ ๊ฐ’์ด ์กฐํšŒ๋˜๋Š” ๋ฌธ์ œ ์ˆ˜์ • - typeorm์—์„œ ๋‹จ์ˆœํžˆ where์— null์„ ๋„ฃ๋Š” ๊ฒฝ์šฐ, ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค. - typeorm์—์„œ ์ œ๊ณตํ•˜๋Š” IsNull()๋กœ ๋ณ€๊ฒฝ * :memo: docs: ๋ชจ์ง‘๊ฒŒ์‹œ๊ธ€ ์ƒ์„ฑ ์š”์ฒญ ์Šค์›จ๊ฑฐ ์ˆ˜์ • * :sparkles: feature: ๋ชจ์ง‘๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก์กฐํšŒ, ๋ชจ์ง‘๊ฒŒ์‹œ๊ธ€ ์ƒ์„ธ์กฐํšŒ ์‘๋‹ต ์ˆ˜์ • - thumbnail์— ์ด๋ฏธ์ง€ url๋งŒ ๋„ฃ๋„๋ก ์ˆ˜์ • - cateogry์— ์นดํ…Œ๊ณ ๋ฆฌ ์ด๋ฆ„๋งŒ ๋„ฃ๋„๋ก ์ˆ˜์ • --- .../get-group-article-detail-response.dto.ts | 29 +++++++++---------- .../dto/group-article-register-request.dto.ts | 3 +- .../dto/group-article-search-result.dto.ts | 26 ++++++++--------- .../entity/group-article.entity.ts | 18 ++++++++++-- .../app/group-article/entity/group.entity.ts | 2 +- .../group-article/group-article.controller.ts | 18 +++++++++++- .../group-article/group-article.service.ts | 22 ++++++++++++-- .../repository/group-category.repository.ts | 3 +- 8 files changed, 83 insertions(+), 38 deletions(-) diff --git a/backend/src/app/group-article/dto/get-group-article-detail-response.dto.ts b/backend/src/app/group-article/dto/get-group-article-detail-response.dto.ts index f30e217a..55d445aa 100644 --- a/backend/src/app/group-article/dto/get-group-article-detail-response.dto.ts +++ b/backend/src/app/group-article/dto/get-group-article-detail-response.dto.ts @@ -1,14 +1,13 @@ +import { Type } from 'class-transformer'; import { + CATEGORY, GROUP_STATUS, LOCATION, } from '@app/group-article/constants/group-article.constants'; import { IGroupArticleDetail } from '@app/group-article/dto/group-article-detail.interface'; -import { GroupCategoryResponse } from '@app/group-article/dto/get-cateogories-response.dto'; import { ImageService } from '@app/image/image.service'; -import { ImageResponse } from '@common/dto/image-response.dto'; import { ApiProperty } from '@nestjs/swagger'; import { Author } from '@app/group-article/dto/author.dto'; -import { Type } from 'class-transformer'; export class GetGroupArticleDetailResponse { @ApiProperty({ example: 1, description: '๊ฒŒ์‹œ๊ธ€ ์•„์ด๋””' }) @@ -26,14 +25,18 @@ export class GetGroupArticleDetailResponse { @ApiProperty() author: Author; - @ApiProperty() - category: GroupCategoryResponse; + @ApiProperty({ example: CATEGORY.STUDY, description: '๋ชจ์ง‘ ์นดํ…Œ๊ณ ๋ฆฌ' }) + category: CATEGORY; @ApiProperty({ example: LOCATION.ONLINE, description: '๋ชจ์ž„ ์žฅ์†Œ' }) location: LOCATION; - @ApiProperty() - thumbnail: ImageResponse; + @ApiProperty({ + example: + 'https://kr.object.ncloudstorage.com/uploads/images/1669276833875-64adca9c-94cd-4162-a53f-f75e951e39db', + description: '๊ฒŒ์‹œ๊ธ€ ์ธ๋„ค์ผ', + }) + thumbnail: string; @ApiProperty({ example: GROUP_STATUS.PROGRESS, @@ -68,14 +71,10 @@ export class GetGroupArticleDetailResponse { userName: groupArticleDetail.userName, profileImage: groupArticleDetail.userProfileImage, }; - res.category = { - id: groupArticleDetail.groupCategoryId, - name: groupArticleDetail.groupCategoryName, - }; - res.thumbnail = { - key: groupArticleDetail.thumbnail, - url: imageService.getStorageUrl([groupArticleDetail.thumbnail])[0], - }; + res.category = CATEGORY[groupArticleDetail.groupCategoryName]; + res.thumbnail = imageService.getStorageUrl([ + groupArticleDetail.thumbnail, + ])[0]; res.status = groupArticleDetail.status; res.location = groupArticleDetail.location; res.commentCount = groupArticleDetail.commentCount; diff --git a/backend/src/app/group-article/dto/group-article-register-request.dto.ts b/backend/src/app/group-article/dto/group-article-register-request.dto.ts index af4a6c67..c1ef1acf 100644 --- a/backend/src/app/group-article/dto/group-article-register-request.dto.ts +++ b/backend/src/app/group-article/dto/group-article-register-request.dto.ts @@ -52,8 +52,7 @@ export class GroupArticleRegisterRequest { maxCapacity: number; @ApiProperty({ - example: - 'https://kr.object.ncloudstorage.com/moyeo-images/uploads/images/1669282011949-761671c7-cc43-4cee-bcb5-4bf3fea9478b.png', + example: '1669282011949-761671c7-cc43-4cee-bcb5-4bf3fea9478b.png', description: '์ธ๋„ค์ผ ์ด๋ฏธ์ง€๊ฐ€ ์ €์žฅ๋˜์–ด์žˆ๋Š” ์ฃผ์†Œ', required: true, }) diff --git a/backend/src/app/group-article/dto/group-article-search-result.dto.ts b/backend/src/app/group-article/dto/group-article-search-result.dto.ts index 2af26a25..678caa86 100644 --- a/backend/src/app/group-article/dto/group-article-search-result.dto.ts +++ b/backend/src/app/group-article/dto/group-article-search-result.dto.ts @@ -1,13 +1,13 @@ import { + CATEGORY, GROUP_STATUS, LOCATION, } from '@app/group-article/constants/group-article.constants'; import { ApiProperty } from '@nestjs/swagger'; -import { GroupCategoryResponse } from '@app/group-article/dto/get-cateogories-response.dto'; import { IGroupArticleSearchResult } from '@app/group-article/dto/group-article-search-result.interface'; import { ImageService } from '@app/image/image.service'; -import { ImageResponse } from '@common/dto/image-response.dto'; import { Type } from 'class-transformer'; +import { GroupCategory } from '@app/group-article/entity/group-category.entity'; export class GroupArticleSearchResult { @ApiProperty({ example: 1, description: '๊ฒŒ์‹œ๊ธ€ ์•„์ด๋””' }) @@ -16,8 +16,12 @@ export class GroupArticleSearchResult { @ApiProperty({ example: 'test001', description: '๊ฒŒ์‹œ๊ธ€ ์ œ๋ชฉ' }) title: string; - @ApiProperty({ type: ImageResponse }) - thumbnail: ImageResponse; + @ApiProperty({ + example: + 'https://kr.object.ncloudstorage.com/uploads/images/1669276833875-64adca9c-94cd-4162-a53f-f75e951e39db', + description: '๊ฒŒ์‹œ๊ธ€ ์ธ๋„ค์ผ', + }) + thumbnail: string; @ApiProperty({ example: GROUP_STATUS.PROGRESS, @@ -28,8 +32,8 @@ export class GroupArticleSearchResult { @ApiProperty({ example: LOCATION.BUSAN, description: '๋ชจ์ง‘ ์žฅ์†Œ' }) location: LOCATION; - @ApiProperty({ type: GroupCategoryResponse }) - category: GroupCategoryResponse; + @ApiProperty({ example: CATEGORY.STUDY, description: '๋ชจ์ง‘ ์นดํ…Œ๊ณ ๋ฆฌ' }) + category: CATEGORY; @ApiProperty({ example: 10, description: '๋ชจ์ง‘ ์ตœ๋Œ€ ์ธ์› ์ˆ˜' }) maxCapacity: number; @@ -56,14 +60,8 @@ export class GroupArticleSearchResult { const res = new GroupArticleSearchResult(); res.id = row.id; res.title = row.title; - res.thumbnail = { - key: row.thumbnail, - url: imageService.getStorageUrl([row.thumbnail])[0], - }; - res.category = { - id: row.groupCategoryId, - name: row.groupCategoryName, - }; + res.thumbnail = imageService.getStorageUrl([row.thumbnail])[0]; + res.category = GroupCategory[row.groupCategoryName]; res.location = row.location; res.status = row.status; res.maxCapacity = row.maxCapacity; diff --git a/backend/src/app/group-article/entity/group-article.entity.ts b/backend/src/app/group-article/entity/group-article.entity.ts index 2f33bcbe..5797623d 100644 --- a/backend/src/app/group-article/entity/group-article.entity.ts +++ b/backend/src/app/group-article/entity/group-article.entity.ts @@ -59,7 +59,7 @@ export class GroupArticle extends Article { throw new NotAuthorException(); } - this.group.stop(); + this.group.cancel(); this.deletedAt = new Date(); } @@ -70,13 +70,27 @@ export class GroupArticle extends Article { if (this.group.status !== GROUP_STATUS.PROGRESS) { throw new NotProgressGroupException( - '๋ชจ์ง‘์ค‘์ธ ๊ฒŒ์‹œ๊ธ€๋งŒ ๋ชจ์ง‘์™„๋ฃŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค', + '๋ชจ์ง‘์ค‘์ธ ๊ฒŒ์‹œ๊ธ€๋งŒ ๋ชจ์ง‘์™„๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค', ); } this.group.complete(); } + cancel(user: User) { + if (!this.isAuthor(user)) { + throw new NotAuthorException(); + } + + if (this.group.status !== GROUP_STATUS.PROGRESS) { + throw new NotProgressGroupException( + '๋ชจ์ง‘์ค‘์ธ ๊ฒŒ์‹œ๊ธ€๋งŒ ๋ชจ์ง‘์ค‘๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค', + ); + } + + this.group.cancel(); + } + isAuthor(user: User) { return this.userId === user.id; } diff --git a/backend/src/app/group-article/entity/group.entity.ts b/backend/src/app/group-article/entity/group.entity.ts index 885462b1..5ec1cd7b 100644 --- a/backend/src/app/group-article/entity/group.entity.ts +++ b/backend/src/app/group-article/entity/group.entity.ts @@ -73,7 +73,7 @@ export class Group { return group; } - stop() { + cancel() { this.status = GROUP_STATUS.FAIL; } diff --git a/backend/src/app/group-article/group-article.controller.ts b/backend/src/app/group-article/group-article.controller.ts index 96432c12..1a78b484 100644 --- a/backend/src/app/group-article/group-article.controller.ts +++ b/backend/src/app/group-article/group-article.controller.ts @@ -31,6 +31,7 @@ import { GetGroupArticleDetailResponse } from '@app/group-article/dto/get-group- import { GroupArticleNotFoundException } from '@app/group-article/exception/group-article-not-found.exception'; import { NotAuthorException } from '@app/group-article/exception/not-author.exception'; import { NotProgressGroupException } from '@app/group-article/exception/not-progress-group.exception'; +import { IsNull } from 'typeorm'; @Controller('group-articles') @ApiTags('Group-Article') @@ -75,11 +76,26 @@ export class GroupArticleController { await this.groupArticleService.complete(user, id); } + @Post('/:id/recruitment-cancel') + @JwtAuth() + @ApiSuccessResponse(HttpStatus.NO_CONTENT) + @ApiErrorResponse( + NotAuthorException, + GroupArticleNotFoundException, + NotProgressGroupException, + ) + async cancel( + @CurrentUser() user: User, + @Param('id', ParseIntPipe) id: number, + ) { + await this.groupArticleService.cancel(user, id); + } + @Get('/categories') @ApiSuccessResponse(HttpStatus.OK, GroupCategoryResponse, { isArray: true }) async getCategories() { const categories = await this.groupCategoryRepository.find({ - where: { deletedAt: null }, + where: { deletedAt: IsNull() }, }); return ResponseEntity.OK_WITH_DATA( diff --git a/backend/src/app/group-article/group-article.service.ts b/backend/src/app/group-article/group-article.service.ts index 3f3489d1..bf1530e7 100644 --- a/backend/src/app/group-article/group-article.service.ts +++ b/backend/src/app/group-article/group-article.service.ts @@ -6,6 +6,7 @@ import { GroupCategoryRepository } from '@app/group-article/repository/group-cat import { GroupArticleRepository } from '@app/group-article/repository/group-article.repository'; import { User } from '@app/user/entity/user.entity'; import { GroupArticleNotFoundException } from '@app/group-article/exception/group-article-not-found.exception'; +import { IsNull } from 'typeorm'; @Injectable() export class GroupArticleService { @@ -44,7 +45,7 @@ export class GroupArticleService { async remove(user: User, id: number) { const groupArticle = await this.groupArticleRepository.findOneBy({ id, - deletedAt: null, + deletedAt: IsNull(), }); if (!groupArticle) { throw new GroupArticleNotFoundException(); @@ -58,7 +59,7 @@ export class GroupArticleService { async complete(user: User, id: number) { const groupArticle = await this.groupArticleRepository.findOneBy({ id, - deletedAt: null, + deletedAt: IsNull(), }); if (!groupArticle) { @@ -72,6 +73,23 @@ export class GroupArticleService { // TODO: ์•Œ๋ฆผ ์ถ”๊ฐ€ ๋ฐ ์•Œ๋ฆผ ๋ฐœ์†ก } + async cancel(user: User, id: number) { + const groupArticle = await this.groupArticleRepository.findOneBy({ + id, + deletedAt: IsNull(), + }); + + if (!groupArticle) { + throw new GroupArticleNotFoundException(); + } + + groupArticle.cancel(user); + + await this.groupArticleRepository.save(groupArticle, { reload: false }); + + // TODO: ์•Œ๋ฆผ ์ถ”๊ฐ€ ๋ฐ ์•Œ๋ฆผ ๋ฐœ์†ก + } + async getDetailById(id: number) { const groupArticleDetail = await this.groupArticleRepository.getDetailById( id, diff --git a/backend/src/app/group-article/repository/group-category.repository.ts b/backend/src/app/group-article/repository/group-category.repository.ts index 4c018cd1..d86bed5c 100644 --- a/backend/src/app/group-article/repository/group-category.repository.ts +++ b/backend/src/app/group-article/repository/group-category.repository.ts @@ -1,4 +1,4 @@ -import { DataSource, Repository } from 'typeorm'; +import { DataSource, IsNull, Repository } from 'typeorm'; import { Injectable } from '@nestjs/common'; import { GroupCategory } from '@app/group-article/entity/group-category.entity'; @@ -19,6 +19,7 @@ export class GroupCategoryRepository extends Repository { }, where: { name: categoryName, + deletedAt: IsNull(), }, }); } From 789a65d76aee5760f0cc5b5527be74a154b8e57d Mon Sep 17 00:00:00 2001 From: Kim Myeongil <67570061+username1103@users.noreply.github.com> Date: Thu, 1 Dec 2022 11:43:49 +0900 Subject: [PATCH 065/142] =?UTF-8?q?[Feature]=20=EB=AA=A8=EC=A7=91=20?= =?UTF-8?q?=EA=B2=8C=EC=8B=9C=EA=B8=80=20=EC=88=98=EC=A0=95=20API=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20(#156)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :sparkles: feature: ๋ชจ์ง‘๊ฒŒ์‹œ๊ธ€ ์ˆ˜์ • ๋ฉ”์†Œ๋“œ ์ถ”๊ฐ€ - ์ž‘์„ฑ์ž๊ฐ€ ์•„๋‹ˆ๋ฉด NotAuthorException ๋ฐ˜ํ™˜ - title, contents, thumbnail, chatUrl ์ˆ˜์ • ๊ฐ€๋Šฅ * :sparkles: feature: ๋ชจ์ง‘๊ฒŒ์‹œ๊ธ€ ์ˆ˜์ • API ์ถ”๊ฐ€ - ์ž‘์„ฑ์ž๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ NotAuthorException ๋ฐ˜ํ™˜ - ๋ชจ์ง‘๊ฒŒ์‹œ๊ธ€์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ GroupArticleNotFoundException ๋ฐ˜ํ™˜ * :bug: fix: ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก ์กฐํšŒ, ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€ ์ƒ์„ธ ์กฐํšŒ ์นดํ…Œ๊ณ ๋ฆฌ ์•ˆ๋ณด๋‚ด์ง€๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ • * :recycle: refactor: router / ์ œ๊ฑฐ --- .../get-group-article-detail-response.dto.ts | 4 +- .../dto/group-article-search-result.dto.ts | 9 ++--- .../dto/update-group-article-request.dto.ts | 40 +++++++++++++++++++ .../entity/group-article.entity.ts | 24 +++++++++++ .../group-article/group-article.controller.ts | 26 +++++++++--- .../group-article/group-article.service.ts | 27 ++++++++++++- 6 files changed, 116 insertions(+), 14 deletions(-) create mode 100644 backend/src/app/group-article/dto/update-group-article-request.dto.ts diff --git a/backend/src/app/group-article/dto/get-group-article-detail-response.dto.ts b/backend/src/app/group-article/dto/get-group-article-detail-response.dto.ts index 55d445aa..36bdb4fe 100644 --- a/backend/src/app/group-article/dto/get-group-article-detail-response.dto.ts +++ b/backend/src/app/group-article/dto/get-group-article-detail-response.dto.ts @@ -26,7 +26,7 @@ export class GetGroupArticleDetailResponse { author: Author; @ApiProperty({ example: CATEGORY.STUDY, description: '๋ชจ์ง‘ ์นดํ…Œ๊ณ ๋ฆฌ' }) - category: CATEGORY; + category: string; @ApiProperty({ example: LOCATION.ONLINE, description: '๋ชจ์ž„ ์žฅ์†Œ' }) location: LOCATION; @@ -71,7 +71,7 @@ export class GetGroupArticleDetailResponse { userName: groupArticleDetail.userName, profileImage: groupArticleDetail.userProfileImage, }; - res.category = CATEGORY[groupArticleDetail.groupCategoryName]; + res.category = groupArticleDetail.groupCategoryName; res.thumbnail = imageService.getStorageUrl([ groupArticleDetail.thumbnail, ])[0]; diff --git a/backend/src/app/group-article/dto/group-article-search-result.dto.ts b/backend/src/app/group-article/dto/group-article-search-result.dto.ts index 678caa86..decbce6f 100644 --- a/backend/src/app/group-article/dto/group-article-search-result.dto.ts +++ b/backend/src/app/group-article/dto/group-article-search-result.dto.ts @@ -1,13 +1,12 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { Type } from 'class-transformer'; import { CATEGORY, GROUP_STATUS, LOCATION, } from '@app/group-article/constants/group-article.constants'; -import { ApiProperty } from '@nestjs/swagger'; import { IGroupArticleSearchResult } from '@app/group-article/dto/group-article-search-result.interface'; import { ImageService } from '@app/image/image.service'; -import { Type } from 'class-transformer'; -import { GroupCategory } from '@app/group-article/entity/group-category.entity'; export class GroupArticleSearchResult { @ApiProperty({ example: 1, description: '๊ฒŒ์‹œ๊ธ€ ์•„์ด๋””' }) @@ -33,7 +32,7 @@ export class GroupArticleSearchResult { location: LOCATION; @ApiProperty({ example: CATEGORY.STUDY, description: '๋ชจ์ง‘ ์นดํ…Œ๊ณ ๋ฆฌ' }) - category: CATEGORY; + category: string; @ApiProperty({ example: 10, description: '๋ชจ์ง‘ ์ตœ๋Œ€ ์ธ์› ์ˆ˜' }) maxCapacity: number; @@ -61,7 +60,7 @@ export class GroupArticleSearchResult { res.id = row.id; res.title = row.title; res.thumbnail = imageService.getStorageUrl([row.thumbnail])[0]; - res.category = GroupCategory[row.groupCategoryName]; + res.category = row.groupCategoryName; res.location = row.location; res.status = row.status; res.maxCapacity = row.maxCapacity; diff --git a/backend/src/app/group-article/dto/update-group-article-request.dto.ts b/backend/src/app/group-article/dto/update-group-article-request.dto.ts new file mode 100644 index 00000000..edec4001 --- /dev/null +++ b/backend/src/app/group-article/dto/update-group-article-request.dto.ts @@ -0,0 +1,40 @@ +import { IsString, Length } from 'class-validator'; +import { ApiProperty } from '@nestjs/swagger'; + +export class UpdateGroupArticleRequest { + @IsString() + @Length(1) + @ApiProperty({ + example: '์ˆ˜์ •ํ•  ์ œ๋ชฉ', + description: '๊ฒŒ์‹œ๊ธ€ ์ œ๋ชฉ', + required: true, + }) + title: string; + + @IsString() + @Length(1) + @ApiProperty({ + example: '์ˆ˜์ •ํ•  ๋‚ด์šฉ', + description: '๊ฒŒ์‹œ๊ธ€ ๋‚ด์šฉ', + required: true, + }) + contents: string; + + @IsString() + @Length(1) + @ApiProperty({ + example: '1669282011949-761671c7-cc43-4cee-bcb5-4bf3fea9478b.png', + description: '์ธ๋„ค์ผ ์ด๋ฏธ์ง€๊ฐ€ ์ €์žฅ๋˜์–ด์žˆ๋Š” ์ฃผ์†Œ', + required: true, + }) + thumbnail: string; + + @IsString() + @Length(1) + @ApiProperty({ + example: 'https://open.kakao.com/์˜คํ”ˆ์ฑ„ํŒ…๋ฐฉpath', + description: '์นด์นด์˜คํ†ก๊ณผ ๊ธฐํƒ€ ์ฑ„ํŒ…์„œ๋น„์Šค์˜ ์ฃผ์†Œ๋ฅผ ๋‹ด์•„๋†“์„ ์ˆ˜ ์žˆ๋‹ค.', + required: false, + }) + chatUrl: string; +} diff --git a/backend/src/app/group-article/entity/group-article.entity.ts b/backend/src/app/group-article/entity/group-article.entity.ts index 5797623d..be50f571 100644 --- a/backend/src/app/group-article/entity/group-article.entity.ts +++ b/backend/src/app/group-article/entity/group-article.entity.ts @@ -54,6 +54,30 @@ export class GroupArticle extends Article { return article; } + update( + user: User, + { + title, + contents, + thumbnail, + chatUrl, + }: { + title: string; + contents: string; + thumbnail: string; + chatUrl: string; + }, + ) { + if (!this.isAuthor(user)) { + throw new NotAuthorException(); + } + + this.title = title; + this.contents = contents; + this.group.thumbnail = thumbnail; + this.group.chatUrl = chatUrl; + } + remove(user: User) { if (!this.isAuthor(user)) { throw new NotAuthorException(); diff --git a/backend/src/app/group-article/group-article.controller.ts b/backend/src/app/group-article/group-article.controller.ts index 1a78b484..86f48342 100644 --- a/backend/src/app/group-article/group-article.controller.ts +++ b/backend/src/app/group-article/group-article.controller.ts @@ -7,6 +7,7 @@ import { Param, ParseIntPipe, Post, + Put, Query, } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; @@ -32,6 +33,7 @@ import { GroupArticleNotFoundException } from '@app/group-article/exception/grou import { NotAuthorException } from '@app/group-article/exception/not-author.exception'; import { NotProgressGroupException } from '@app/group-article/exception/not-progress-group.exception'; import { IsNull } from 'typeorm'; +import { UpdateGroupArticleRequest } from '@app/group-article/dto/update-group-article-request.dto'; @Controller('group-articles') @ApiTags('Group-Article') @@ -61,7 +63,7 @@ export class GroupArticleController { ); } - @Post('/:id/recruitment-complete') + @Post(':id/recruitment-complete') @JwtAuth() @ApiSuccessResponse(HttpStatus.NO_CONTENT) @ApiErrorResponse( @@ -76,7 +78,7 @@ export class GroupArticleController { await this.groupArticleService.complete(user, id); } - @Post('/:id/recruitment-cancel') + @Post(':id/recruitment-cancel') @JwtAuth() @ApiSuccessResponse(HttpStatus.NO_CONTENT) @ApiErrorResponse( @@ -91,7 +93,19 @@ export class GroupArticleController { await this.groupArticleService.cancel(user, id); } - @Get('/categories') + @Put(':id') + @JwtAuth() + @ApiSuccessResponse(HttpStatus.NO_CONTENT) + @ApiErrorResponse(NotAuthorException, GroupArticleNotFoundException) + async update( + @CurrentUser() user: User, + @Param('id', ParseIntPipe) id: number, + @Body() updateGroupArticleRequest: UpdateGroupArticleRequest, + ) { + await this.groupArticleService.update(user, id, updateGroupArticleRequest); + } + + @Get('categories') @ApiSuccessResponse(HttpStatus.OK, GroupCategoryResponse, { isArray: true }) async getCategories() { const categories = await this.groupCategoryRepository.find({ @@ -103,7 +117,7 @@ export class GroupArticleController { ); } - @Get('/search') + @Get('search') @ApiSuccessResponse(HttpStatus.OK, SearchGroupArticleResponse) async search(@Query() query: SearchGroupArticlesRequest) { const result = await this.groupArticleRepository.search(query); @@ -120,7 +134,7 @@ export class GroupArticleController { ); } - @Get('/:id') + @Get(':id') @JwtAuth() @ApiSuccessResponse(HttpStatus.OK, GetGroupArticleDetailResponse) @ApiErrorResponse(GroupArticleNotFoundException) @@ -132,7 +146,7 @@ export class GroupArticleController { ); } - @Delete('/:id') + @Delete(':id') @JwtAuth() @ApiSuccessResponse(HttpStatus.NO_CONTENT) @ApiErrorResponse(NotAuthorException, GroupArticleNotFoundException) diff --git a/backend/src/app/group-article/group-article.service.ts b/backend/src/app/group-article/group-article.service.ts index bf1530e7..6760dca0 100644 --- a/backend/src/app/group-article/group-article.service.ts +++ b/backend/src/app/group-article/group-article.service.ts @@ -1,4 +1,5 @@ import { Injectable } from '@nestjs/common'; +import { IsNull } from 'typeorm'; import { GroupArticleRegisterRequest } from '@app/group-article/dto/group-article-register-request.dto'; import { GroupArticle } from '@app/group-article/entity/group-article.entity'; import { GroupCategoryNotFoundException } from '@src/app/group-article/exception/group-category-not-found.exception'; @@ -6,7 +7,7 @@ import { GroupCategoryRepository } from '@app/group-article/repository/group-cat import { GroupArticleRepository } from '@app/group-article/repository/group-article.repository'; import { User } from '@app/user/entity/user.entity'; import { GroupArticleNotFoundException } from '@app/group-article/exception/group-article-not-found.exception'; -import { IsNull } from 'typeorm'; +import { UpdateGroupArticleRequest } from '@app/group-article/dto/update-group-article-request.dto'; @Injectable() export class GroupArticleService { @@ -100,4 +101,28 @@ export class GroupArticleService { return groupArticleDetail; } + + async update( + user: User, + id: number, + { title, contents, thumbnail, chatUrl }: UpdateGroupArticleRequest, + ) { + const groupArticle = await this.groupArticleRepository.findOneBy({ + id, + deletedAt: IsNull(), + }); + + if (!groupArticle) { + throw new GroupArticleNotFoundException(); + } + + groupArticle.update(user, { + title, + contents, + thumbnail, + chatUrl, + }); + + await this.groupArticleRepository.save(groupArticle, { reload: false }); + } } From d88bbb402e214b68bff6b248578a0e3268f6afe8 Mon Sep 17 00:00:00 2001 From: Gakko <90585081+pythonstrup@users.noreply.github.com> Date: Thu, 1 Dec 2022 11:44:44 +0900 Subject: [PATCH 066/142] =?UTF-8?q?[Feature]=20=EB=AA=A8=EC=9E=84=20?= =?UTF-8?q?=EC=8B=A0=EC=B2=AD=20=EC=B7=A8=EC=86=8C=20API=20(#157)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ๐Ÿฅ… chore: cannot applicate exception ๊ธฐ๋Šฅ ํ™•์žฅ * ๐Ÿฅ… chore: ์‹ ์ฒญ๋˜์ง€ ์•Š์€ ์œ ์ € ์œ ํšจ์„ฑ ๊ฒ€์ฆ * ๐Ÿฅ… chore: group application entity cancel ๋…ผ๋ฆฌ ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: transformer ์ ์šฉ์— ๋”ฐ๋ฅธ ์ž๋ฃŒํ˜• ๋ณ€๊ฒฝ * โœจ feature: ๋ชจ์ž„ ์‹ ์ฒญ ์ทจ์†Œ ๋กœ์ง ๊ตฌ์„ฑ - ์˜ˆ์™ธ์ฒ˜๋ฆฌ - ๊ฒน์น˜๋Š” ๋ถ€๋ถ„ ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง * โœจ feature: ๋ชจ์ž„ ์‹ ์ฒญ ์ทจ์†Œ ๋กœ์ง ๊ตฌ์„ฑ - DTO ์ ์šฉ - Swagger ์ ์šฉ - service ํ˜ธ์ถœ * โ™ป๏ธ refactor: ๋„ค์ด๋ฐ ๋ณ€๊ฒฝ ๋ฐ ๋ฉ˜ํ† ๋‹˜ ํ”ผ๋“œ๋ฐฑ ์ ์šฉ * ๐Ÿฅ… chore: ๋ฆฌ๋ทฐ ์ ์šฉ * ๐Ÿฅ… chore: ๋ฆฌ๋ทฐ ์ ์šฉ --- .../entity/group-application.entity.ts | 9 +-- .../application-not-found.exception.ts | 7 ++ .../exception/cannot-applicate.exception.ts | 4 +- .../group-application.controller.ts | 24 +++++- .../group-application.repository.ts | 2 +- .../group-application.service.ts | 80 +++++++++++++------ .../repository/group-article.repository.ts | 4 +- 7 files changed, 92 insertions(+), 38 deletions(-) create mode 100644 backend/src/app/group-application/exception/application-not-found.exception.ts diff --git a/backend/src/app/group-application/entity/group-application.entity.ts b/backend/src/app/group-application/entity/group-application.entity.ts index 69a16820..cb64bd16 100644 --- a/backend/src/app/group-application/entity/group-application.entity.ts +++ b/backend/src/app/group-application/entity/group-application.entity.ts @@ -59,11 +59,8 @@ export class GroupApplication { return groupApplication; } - static cancel(user: User, group: Group) { - const groupApplication = new GroupApplication(); - groupApplication.userId = user.id; - groupApplication.groupId = group.id; - groupApplication.status = null; - return groupApplication; + cancel() { + this.status = GROUP_APPLICATION_STATUS.CANCEL; + this.deletedAt = new Date(); } } diff --git a/backend/src/app/group-application/exception/application-not-found.exception.ts b/backend/src/app/group-application/exception/application-not-found.exception.ts new file mode 100644 index 00000000..68c2c0b5 --- /dev/null +++ b/backend/src/app/group-application/exception/application-not-found.exception.ts @@ -0,0 +1,7 @@ +import { NotFoundException } from '@nestjs/common'; + +export class ApplicationNotFoundException extends NotFoundException { + constructor(message = '์‹ ์ฒญ ๋‚ด์—ญ์„ ํ™•์ธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.') { + super({ status: 'APPLICATION_NOT_FOUND', message }); + } +} diff --git a/backend/src/app/group-application/exception/cannot-applicate.exception.ts b/backend/src/app/group-application/exception/cannot-applicate.exception.ts index b06fbf37..2e4a7fe9 100644 --- a/backend/src/app/group-application/exception/cannot-applicate.exception.ts +++ b/backend/src/app/group-application/exception/cannot-applicate.exception.ts @@ -1,7 +1,9 @@ import { BadRequestException } from '@nestjs/common'; export class CannotApplicateException extends BadRequestException { - constructor(message = '๋‹น์‹ ์ด ๋งŒ๋“  ๊ทธ๋ฃน์— ์‹ ์ฒญ์„ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.') { + constructor( + message = '๋‹น์‹ ์ด ๋งŒ๋“  ๊ทธ๋ฃน์— ์‹ ์ฒญ์„ ํ•˜๊ฑฐ๋‚˜ ์ทจ์†Œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.', + ) { super({ status: 'CAN_NOT_APPLICATE_BAD_REQUEST', message }); } } diff --git a/backend/src/app/group-application/group-application.controller.ts b/backend/src/app/group-application/group-application.controller.ts index 9c4458d6..7bbe395b 100644 --- a/backend/src/app/group-application/group-application.controller.ts +++ b/backend/src/app/group-application/group-application.controller.ts @@ -13,6 +13,7 @@ import { DuplicateApplicationException } from '@src/app/group-application/except import { GroupNotFoundException } from '@app/group-application/exception/group-not-found.exception'; import { CannotApplicateException } from '@src/app/group-application/exception/cannot-applicate.exception'; import { CheckJoiningGroupResonse } from '@app/group-application/dto/check-joining-group-response.dto'; +import { ApplicationNotFoundException } from '@app/group-application/exception/application-not-found.exception'; @Controller('group-applications') @JwtAuth() @@ -29,12 +30,12 @@ export class GroupApplicationController { CannotApplicateException, GroupNotFoundException, ) - async attendGroup( + async joinGroup( @CurrentUser() user: User, @Body() groupApplicationRequest: GroupApplicationRequest, ) { const groupArticleId = groupApplicationRequest.groupArticleId; - const groupApplication = await this.groupApplicationService.attendGroup( + const groupApplication = await this.groupApplicationService.joinGroup( user, groupArticleId, ); @@ -45,16 +46,31 @@ export class GroupApplicationController { @Post('/status') @ApiSuccessResponse(HttpStatus.OK, CheckJoiningGroupResonse) @ApiErrorResponse(GroupNotFoundException) - async checkJoiningGroup( + async checkJoinedGroup( @CurrentUser() user: User, @Body() groupApplicationRequest: GroupApplicationRequest, ) { const groupArticleId = groupApplicationRequest.groupArticleId; - const isJoined = await this.groupApplicationService.checkJoiningGroup( + const isJoined = await this.groupApplicationService.checkJoinedGroup( user, groupArticleId, ); const data = CheckJoiningGroupResonse.from(isJoined); return ResponseEntity.OK_WITH_DATA(data); } + + @Post('cancel') + @ApiSuccessResponse(HttpStatus.NO_CONTENT) + @ApiErrorResponse( + CannotApplicateException, + GroupNotFoundException, + ApplicationNotFoundException, + ) + async cancelJoinedGroup( + @CurrentUser() user: User, + @Body() groupApplicationRequest: GroupApplicationRequest, + ) { + const groupArticleId = groupApplicationRequest.groupArticleId; + await this.groupApplicationService.cancelJoinedGroup(user, groupArticleId); + } } diff --git a/backend/src/app/group-application/group-application.repository.ts b/backend/src/app/group-application/group-application.repository.ts index fbf5956b..6d1373b0 100644 --- a/backend/src/app/group-application/group-application.repository.ts +++ b/backend/src/app/group-application/group-application.repository.ts @@ -16,7 +16,7 @@ export class GroupApplicationRepository extends Repository { findByUserIdAndGroupIdAndStatus( userId: number, groupId: number, - status: GROUP_APPLICATION_STATUS | null, + status: GROUP_APPLICATION_STATUS, ) { return this.findOneBy({ userId, groupId, status }); } diff --git a/backend/src/app/group-application/group-application.service.ts b/backend/src/app/group-application/group-application.service.ts index 0ca6a9b0..246b890a 100644 --- a/backend/src/app/group-application/group-application.service.ts +++ b/backend/src/app/group-application/group-application.service.ts @@ -9,6 +9,7 @@ import { GroupArticleRepository } from '@app/group-article/repository/group-arti import { GroupArticle } from '@app/group-article/entity/group-article.entity'; import { User } from '@app/user/entity/user.entity'; import { Group } from '@app/group-article/entity/group.entity'; +import { ApplicationNotFoundException } from '@app/group-application/exception/application-not-found.exception'; @Injectable() export class GroupApplicationService { @@ -17,58 +18,89 @@ export class GroupApplicationService { private readonly groupArticleRespository: GroupArticleRepository, ) {} - async attendGroup(user: User, groupArticleId: number) { + private async getGroupApplicationContext(user: User, groupArticleId: number) { const groupArticle = await this.groupArticleRespository.findById( groupArticleId, ); - await this.validateGroupArticleId(groupArticle); - this.validateUserTarget(user, groupArticle); const group = groupArticle.group; - await this.validateRegister(user, group); + const application = await this.findGroupApplication(user, group); + + await this.validateGroupArticle(groupArticle); + + return { + groupArticle, + group, + application, + }; + } + + private async findGroupApplication(user: User, group: Group) { + return this.groupApplicationRepository.findByUserIdAndGroupIdAndStatus( + user.id, + group.id, + GROUP_APPLICATION_STATUS.REGISTER, + ); + } + + public async joinGroup(user: User, groupArticleId: number) { + const { groupArticle, group, application } = + await this.getGroupApplicationContext(user, groupArticleId); + + this.validateUserTarget(user, groupArticle); + await this.validateRegisterForJoining(application); const groupApplication = GroupApplication.create(user, group); return this.groupApplicationRepository.save(groupApplication); } - async validateGroupArticleId(groupArticle: GroupArticle) { + private async validateGroupArticle(groupArticle: GroupArticle) { if (!groupArticle) { throw new GroupNotFoundException(); } return groupArticle; } - validateUserTarget(currentUser: User, groupArticle: GroupArticle) { + private validateUserTarget(currentUser: User, groupArticle: GroupArticle) { if (groupArticle.isAuthor(currentUser)) { throw new CannotApplicateException(); } } - async validateRegister(user: User, group: Group) { - const application = - await this.groupApplicationRepository.findByUserIdAndGroupIdAndStatus( - user.id, - group.id, - GROUP_APPLICATION_STATUS.REGISTER, - ); - + private async validateRegisterForJoining(application: GroupApplication) { if (application) { throw new DuplicateApplicationException(); } } - async checkJoiningGroup(user: User, groupArticleId: number) { - const groupArticle = await this.groupArticleRespository.findById( + public async checkJoinedGroup(user: User, groupArticleId: number) { + const { groupArticle, application } = await this.getGroupApplicationContext( + user, groupArticleId, ); - await this.validateGroupArticleId(groupArticle); - const group = groupArticle.group; - const application = - await this.groupApplicationRepository.findByUserIdAndGroupIdAndStatus( - user.id, - group.id, - GROUP_APPLICATION_STATUS.REGISTER, - ); return groupArticle.isAuthor(user) || application !== null; } + + public async cancelJoinedGroup(user: User, groupArticleId: number) { + const { groupArticle, application } = await this.getGroupApplicationContext( + user, + groupArticleId, + ); + + this.validateUserTarget(user, groupArticle); + await this.validateRegisterForCanceling(application); + + await this.deleteApplication(application); + } + + private async validateRegisterForCanceling(application: GroupApplication) { + if (!application) { + throw new ApplicationNotFoundException(); + } + } + + private async deleteApplication(application: GroupApplication) { + application.cancel(); + await this.groupApplicationRepository.save(application); + } } diff --git a/backend/src/app/group-article/repository/group-article.repository.ts b/backend/src/app/group-article/repository/group-article.repository.ts index 4b9868d1..0bae98f7 100644 --- a/backend/src/app/group-article/repository/group-article.repository.ts +++ b/backend/src/app/group-article/repository/group-article.repository.ts @@ -1,5 +1,5 @@ import { Injectable } from '@nestjs/common'; -import { DataSource, Repository } from 'typeorm'; +import { DataSource, IsNull, Repository } from 'typeorm'; import { GroupArticle } from '@app/group-article/entity/group-article.entity'; import { Group } from '@app/group-article/entity/group.entity'; import { GroupCategory } from '@app/group-article/entity/group-category.entity'; @@ -22,7 +22,7 @@ export class GroupArticleRepository extends Repository { } findById(id: number) { - return this.findOneBy({ id }); + return this.findOneBy({ id, deletedAt: IsNull() }); } async search( From 9d4502728475a634cc94971acdcae7760972dd34 Mon Sep 17 00:00:00 2001 From: Gakko <90585081+pythonstrup@users.noreply.github.com> Date: Thu, 1 Dec 2022 14:31:59 +0900 Subject: [PATCH 067/142] =?UTF-8?q?[BUGFIX]=20=EC=9D=B4=EB=AF=B8=EC=A7=80?= =?UTF-8?q?=20=EC=97=85=EB=A1=9C=EB=93=9C=20=EC=98=88=EC=99=B8=EC=B2=98?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž๋งŒ ์ด๋ฏธ์ง€๋ฅผ ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณ€๊ฒฝ - ์„œ๋ฒ„๋ฅผ ํ„ฐํŠธ๋ฆฌ์ง€ ์•Š๊ธฐ ์œ„ํ•ด Promise๋กœ ๊ฐ์‹ธ์„œ ์ฒ˜๋ฆฌ --- backend/src/app/image/image.controller.ts | 6 +++++- backend/src/app/image/image.service.ts | 25 ++++++++++------------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/backend/src/app/image/image.controller.ts b/backend/src/app/image/image.controller.ts index 25223553..19a05b04 100644 --- a/backend/src/app/image/image.controller.ts +++ b/backend/src/app/image/image.controller.ts @@ -11,14 +11,18 @@ import { ApiSuccessResponse } from '@src/common/decorator/api-success-resposne.d import { ResponseEntity } from '@src/common/response-entity'; import { ImagesUploadResponse } from '@app/image/dto/images-upload-response.dto'; import { ImageService } from '@app/image/image.service'; +import { ApiErrorResponse } from '@src/common/decorator/api-error-response.decorator'; +import { JwtAuth } from '@src/common/decorator/jwt-auth.decorator'; @Controller('images') @ApiTags('Image') +@JwtAuth() export class ImageController { constructor(private readonly imageService: ImageService) {} @Post('upload') @ApiSuccessResponse(HttpStatus.CREATED, ImagesUploadResponse) + @ApiErrorResponse() @UseInterceptors(FilesInterceptor('files')) @ApiConsumes('multipart/form-data') @ApiBody({ @@ -36,7 +40,7 @@ export class ImageController { }, }) async uploadImage(@UploadedFiles() files: Array) { - const { keyList, urlList } = this.imageService.uploadImage(files); + const { keyList, urlList } = await this.imageService.uploadImage(files); const data = keyList.map( (key, index) => new ImagesUploadResponse(key, urlList[index]), ); diff --git a/backend/src/app/image/image.service.ts b/backend/src/app/image/image.service.ts index 7fb12f6d..d1e1964b 100644 --- a/backend/src/app/image/image.service.ts +++ b/backend/src/app/image/image.service.ts @@ -13,8 +13,8 @@ export class ImageService { this.s3 = this.certificateS3(); } - uploadImage(files: Array) { - const keyList = this.pushImageAndGetKey(files); + async uploadImage(files: Array) { + const keyList = await this.pushImageAndGetKey(files); const urlList = this.getStorageUrl(keyList); return { keyList, urlList }; } @@ -33,10 +33,10 @@ export class ImageService { return s3; } - pushImageAndGetKey(files: Express.Multer.File[]) { + async pushImageAndGetKey(files: Express.Multer.File[]) { const keyList = []; - files.forEach((file) => { + const uploadFiles = files.map(async (file) => { const extension = this.findImageExtension(file.originalname); if (extension.length === 0) return; @@ -45,10 +45,11 @@ export class ImageService { `${new Date().getTime()}-${v4()}${extension}`, ); - this.uploadImageToS3(file, key); + await this.uploadImageToS3(file, key); keyList.push(key); }); + await Promise.all(uploadFiles); return keyList; } @@ -58,19 +59,15 @@ export class ImageService { return result === null ? '' : result[0]; } - uploadImageToS3(file: Express.Multer.File, key: string) { - return this.s3.upload( - { + async uploadImageToS3(file: Express.Multer.File, key: string) { + return await this.s3 + .upload({ Bucket: this.s3ConfigService.bucket, Key: key, Body: file.buffer, ACL: 'public-read', - }, - - (err) => { - if (err) this.logger.error(err); - }, - ); + }) + .promise(); } getStorageUrl(keyList: string[]) { From 77016184f50e8da1a106ef759193ba162ff6e62b Mon Sep 17 00:00:00 2001 From: Kim Myeongil <67570061+username1103@users.noreply.github.com> Date: Thu, 1 Dec 2022 15:15:03 +0900 Subject: [PATCH 068/142] =?UTF-8?q?[Feature]=20=EB=AA=A8=EC=A7=91=20?= =?UTF-8?q?=EA=B2=8C=EC=8B=9C=EA=B8=80=20=EC=B1=84=ED=8C=85=EB=B0=A9=20url?= =?UTF-8?q?=20=EC=A1=B0=ED=9A=8C=20API=20=EC=B6=94=EA=B0=80=20(#164)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :sparkles: feature: ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€ ์ฑ„ํŒ…๋ฐฉ url ์กฐํšŒ ๋ฉ”์†Œ๋“œ ์ถ”๊ฐ€ - ๋ชจ์ง‘๊ฒŒ์‹œ๊ธ€์ด ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด GroupArticleNotFoundException ๋ฐ˜ํ™˜ - ์ฐธ๊ฐ€์ž๊ฐ€ ์•„๋‹ˆ๋ฉด NotParticipantException ๋ฐ˜ํ™˜ - ๋ชจ์ง‘์™„๋ฃŒ๋œ ๊ฒŒ์‹œ๊ธ€์ด ์•„๋‹ˆ๋ฉด NotSuccessGroupException ๋ฐ˜ํ™˜ * :sparkles: feature: ๋ชจ์ง‘๊ฒŒ์‹œ๊ธ€ ์ฑ„ํŒ…๋ฐฉ๋งํฌ ์กฐํšŒ API ์ถ”๊ฐ€ - ๋ชจ์ง‘๊ฒŒ์‹œ๊ธ€์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ GroupArticleNotFoundException ๋ฐ˜ํ™˜ - ๋ชจ์ง‘์™„๋ฃŒ๋œ ๊ฒŒ์‹œ๊ธ€์ด ์•„๋‹Œ ๊ฒฝ์šฐ, NotSuccessGroupException ๋ฐ˜ํ™˜ - ๋ชจ์ž„์ฐธ๊ฐ€์ž๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ NotParticipantException ๋ฐ˜ํ™˜ * :bug: fix: ๋ชจ์ง‘๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ์‹œ ๋ชจ์ง‘ ์‹ ์ฒญ ํ…Œ์ด๋ธ”์— ์ž‘์„ฑ์ž ์‹ ์ฒญ์ •๋ณด ์ถ”๊ฐ€ * :sparkles: feature: typeorm connection pool size 50์œผ๋กœ ์„ค์ • * :bug: fix: ์—‘์„ธ์Šคํ† ํฐ ๋งŒ๋ฃŒ์‹œ ๋ฆฌํ”„๋ ˆ์‹œ ๋กœ์ง ์ˆ˜์ • - ์—‘์„ธ์Šคํ† ํฐ์ด ์—†๋Š” ๊ฒฝ์šฐ ์ฟ ํ‚ค๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  InvalidTokenException๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ•˜์˜€์Œ - ํ•˜์ง€๋งŒ ํด๋ผ์ด์–ธํŠธ์—์„œ ์ฟ ํ‚ค๊ฐ€ ๋งŒ๋ฃŒ๋˜์–ด ์‚ฌ๋ผ์ง„ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์–ด ์˜ฌ๋ฐ”๋ฅธ ๋กœ์ง์ด ์•„๋‹˜ - ์—‘์„ธ์Šคํ† ํฐ์ด ์—†๋Š” ๊ฒฝ์šฐ ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ์„ ํ™•์ธํ•˜๋„๋ก ์ˆ˜์ • * :recycle: refactor: router / ์ œ๊ฑฐ --- .../dto/get-group-chat-url-response.dto.ts | 15 ++++++ .../exception/not-participant.exception.ts | 7 +++ .../exception/not-success-group.exception.ts | 7 +++ .../group-article/group-article.controller.ts | 22 ++++++++ .../group-article/group-article.service.ts | 45 +++++++++++++++- .../config/database/typeorm/config.service.ts | 1 + backend/src/common/guard/jwt-auth.guard.ts | 54 +++++++++++-------- 7 files changed, 126 insertions(+), 25 deletions(-) create mode 100644 backend/src/app/group-article/dto/get-group-chat-url-response.dto.ts create mode 100644 backend/src/app/group-article/exception/not-participant.exception.ts create mode 100644 backend/src/app/group-article/exception/not-success-group.exception.ts diff --git a/backend/src/app/group-article/dto/get-group-chat-url-response.dto.ts b/backend/src/app/group-article/dto/get-group-chat-url-response.dto.ts new file mode 100644 index 00000000..89532965 --- /dev/null +++ b/backend/src/app/group-article/dto/get-group-chat-url-response.dto.ts @@ -0,0 +1,15 @@ +import { ApiProperty } from '@nestjs/swagger'; + +export class GetGroupChatUrlResponseDto { + @ApiProperty({ + example: 'https://open.kakao.com/์˜คํ”ˆ์ฑ„ํŒ…๋ฐฉpath', + description: '์นด์นด์˜คํ†ก๊ณผ ๊ธฐํƒ€ ์ฑ„ํŒ…์„œ๋น„์Šค์˜ ์ฃผ์†Œ๋ฅผ ๋‹ด์•„๋†“์„ ์ˆ˜ ์žˆ๋‹ค.', + }) + url: string; + + static from(url: string) { + const res = new GetGroupChatUrlResponseDto(); + res.url = url; + return res; + } +} diff --git a/backend/src/app/group-article/exception/not-participant.exception.ts b/backend/src/app/group-article/exception/not-participant.exception.ts new file mode 100644 index 00000000..126f78bc --- /dev/null +++ b/backend/src/app/group-article/exception/not-participant.exception.ts @@ -0,0 +1,7 @@ +import { ForbiddenException } from '@nestjs/common'; + +export class NotParticipantException extends ForbiddenException { + constructor(message = '๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€์˜ ์ฐธ๊ฐ€์ž๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค') { + super({ status: 'NOT_PARTICIPANT', message }); + } +} diff --git a/backend/src/app/group-article/exception/not-success-group.exception.ts b/backend/src/app/group-article/exception/not-success-group.exception.ts new file mode 100644 index 00000000..ca5a756b --- /dev/null +++ b/backend/src/app/group-article/exception/not-success-group.exception.ts @@ -0,0 +1,7 @@ +import { BadRequestException } from '@nestjs/common'; + +export class NotSuccessGroupException extends BadRequestException { + constructor(message = '๋ชจ์ง‘์™„๋ฃŒ๋˜์ง€ ์•Š์€ ๊ฒŒ์‹œ๊ธ€์ž…๋‹ˆ๋‹ค') { + super({ status: 'NOT_SUCCESS_GROUP', message }); + } +} diff --git a/backend/src/app/group-article/group-article.controller.ts b/backend/src/app/group-article/group-article.controller.ts index 86f48342..bce30ebb 100644 --- a/backend/src/app/group-article/group-article.controller.ts +++ b/backend/src/app/group-article/group-article.controller.ts @@ -34,6 +34,9 @@ import { NotAuthorException } from '@app/group-article/exception/not-author.exce import { NotProgressGroupException } from '@app/group-article/exception/not-progress-group.exception'; import { IsNull } from 'typeorm'; import { UpdateGroupArticleRequest } from '@app/group-article/dto/update-group-article-request.dto'; +import { NotSuccessGroupException } from '@app/group-article/exception/not-success-group.exception'; +import { NotParticipantException } from '@app/group-article/exception/not-participant.exception'; +import { GetGroupChatUrlResponseDto } from '@app/group-article/dto/get-group-chat-url-response.dto'; @Controller('group-articles') @ApiTags('Group-Article') @@ -146,6 +149,25 @@ export class GroupArticleController { ); } + @Get(':id/chat-url') + @JwtAuth() + @ApiSuccessResponse(HttpStatus.OK, GetGroupChatUrlResponseDto) + @ApiErrorResponse( + GroupArticleNotFoundException, + NotSuccessGroupException, + NotParticipantException, + ) + async getChatUrl( + @CurrentUser() user: User, + @Param('id', ParseIntPipe) id: number, + ) { + const groupChatUrl = await this.groupArticleService.getChatUrl(user, id); + + return ResponseEntity.OK_WITH_DATA( + GetGroupChatUrlResponseDto.from(groupChatUrl), + ); + } + @Delete(':id') @JwtAuth() @ApiSuccessResponse(HttpStatus.NO_CONTENT) diff --git a/backend/src/app/group-article/group-article.service.ts b/backend/src/app/group-article/group-article.service.ts index 6760dca0..8f682988 100644 --- a/backend/src/app/group-article/group-article.service.ts +++ b/backend/src/app/group-article/group-article.service.ts @@ -1,5 +1,5 @@ import { Injectable } from '@nestjs/common'; -import { IsNull } from 'typeorm'; +import { DataSource, IsNull } from 'typeorm'; import { GroupArticleRegisterRequest } from '@app/group-article/dto/group-article-register-request.dto'; import { GroupArticle } from '@app/group-article/entity/group-article.entity'; import { GroupCategoryNotFoundException } from '@src/app/group-article/exception/group-category-not-found.exception'; @@ -8,12 +8,20 @@ import { GroupArticleRepository } from '@app/group-article/repository/group-arti import { User } from '@app/user/entity/user.entity'; import { GroupArticleNotFoundException } from '@app/group-article/exception/group-article-not-found.exception'; import { UpdateGroupArticleRequest } from '@app/group-article/dto/update-group-article-request.dto'; +import { GroupApplication } from '@app/group-application/entity/group-application.entity'; +import { + GROUP_APPLICATION_STATUS, + GROUP_STATUS, +} from '@app/group-article/constants/group-article.constants'; +import { NotParticipantException } from '@app/group-article/exception/not-participant.exception'; +import { NotSuccessGroupException } from '@app/group-article/exception/not-success-group.exception'; @Injectable() export class GroupArticleService { constructor( private readonly groupArticleRepository: GroupArticleRepository, private readonly groupCategoryRepository: GroupCategoryRepository, + private readonly dataSource: DataSource, ) {} async registerGroupArticle( @@ -38,7 +46,12 @@ export class GroupArticleService { category, }); - await this.groupArticleRepository.save(groupArticle); + await this.dataSource.transaction(async (em) => { + await em.getRepository(GroupArticle).save(groupArticle); + await em + .getRepository(GroupApplication) + .save(GroupApplication.create(user, groupArticle.group)); + }); return groupArticle; } @@ -125,4 +138,32 @@ export class GroupArticleService { await this.groupArticleRepository.save(groupArticle, { reload: false }); } + + async getChatUrl(user: User, id: number) { + const groupArticle = await this.groupArticleRepository.findOneBy({ + id, + deletedAt: IsNull(), + }); + + if (!groupArticle) { + throw new GroupArticleNotFoundException(); + } + + if (groupArticle.group.status !== GROUP_STATUS.SUCCEED) { + throw new NotSuccessGroupException(); + } + const groupApplication = await this.dataSource + .getRepository(GroupApplication) + .findOneBy({ + userId: user.id, + groupId: groupArticle.group.id, + status: GROUP_APPLICATION_STATUS.REGISTER, + }); + + if (!groupApplication) { + throw new NotParticipantException(); + } + + return groupArticle.group.chatUrl; + } } diff --git a/backend/src/common/config/database/typeorm/config.service.ts b/backend/src/common/config/database/typeorm/config.service.ts index 5406f997..2fc0b187 100644 --- a/backend/src/common/config/database/typeorm/config.service.ts +++ b/backend/src/common/config/database/typeorm/config.service.ts @@ -34,6 +34,7 @@ export class TypeOrmConfigService implements TypeOrmOptionsFactory { dropSchema: this.appConfigServce.isTest(), namingStrategy: new SnakeNamingStrategy(), timezone: 'Z', + poolSize: 50, }; } } diff --git a/backend/src/common/guard/jwt-auth.guard.ts b/backend/src/common/guard/jwt-auth.guard.ts index 910103a5..f0ca6fde 100644 --- a/backend/src/common/guard/jwt-auth.guard.ts +++ b/backend/src/common/guard/jwt-auth.guard.ts @@ -1,5 +1,5 @@ import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common'; -import { DataSource } from 'typeorm'; +import { DataSource, IsNull } from 'typeorm'; import { JwtTokenService } from '@common/module/jwt-token/jwt-token.service'; import { TokenType } from '@common/module/jwt-token/type/token-type'; import { User } from '@app/user/entity/user.entity'; @@ -18,28 +18,34 @@ export class JwtAuthGuard implements CanActivate { const request = context.switchToHttp().getRequest(); const response = context.switchToHttp().getResponse(); - try { - const { access_token, refresh_token } = request.cookies; + const { access_token, refresh_token } = request.cookies; - if (!access_token) throw new Error('์—‘์„ธ์Šค ํ† ํฐ์ด ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค'); + try { + if (!access_token) { + throw new Error('์—‘์„ธ์Šค ํ† ํฐ์ด ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค'); + } - try { - const authTokenPayload = this.jwtTokenService.verifyAuthToken( - access_token, - TokenType.ACCESS, - ); + const authTokenPayload = this.jwtTokenService.verifyAuthToken( + access_token, + TokenType.ACCESS, + ); - const user = await this.dataSource - .getRepository(User) - .findOneBy({ id: authTokenPayload.userId, deletedAt: null }); + const user = await this.dataSource + .getRepository(User) + .findOneBy({ id: authTokenPayload.userId, deletedAt: IsNull() }); - if (!user) throw new Error('์œ ์ €๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค'); + if (!user) { + throw new Error('์œ ์ €๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค'); + } - request.user = user; + request.user = user; - return true; - } catch (e) { - if (!refresh_token) throw new Error('Not Found RefreshToken'); + return true; + } catch (e) { + try { + if (!refresh_token) { + throw new Error('Not Found RefreshToken'); + } const authTokenPayload = this.jwtTokenService.verifyAuthToken( refresh_token, @@ -48,9 +54,11 @@ export class JwtAuthGuard implements CanActivate { const user = await this.dataSource .getRepository(User) - .findOneBy({ id: authTokenPayload.userId, deletedAt: null }); + .findOneBy({ id: authTokenPayload.userId, deletedAt: IsNull() }); - if (!user) throw new Error('Not Found User'); + if (!user) { + throw new Error('Not Found User'); + } request.user = user; @@ -65,11 +73,11 @@ export class JwtAuthGuard implements CanActivate { }); return true; + } catch (e) { + response.clearCookie('access_token'); + response.clearCookie('refresh_token'); + throw new InvalidTokenException(e.message); } - } catch (e) { - response.clearCookie('access_token'); - response.clearCookie('refresh_token'); - throw new InvalidTokenException(e.message); } } } From e8fa6108c72601a89fb0bee0d76523bfe5eef7cd Mon Sep 17 00:00:00 2001 From: MinGyeong Park <37508296+kong430@users.noreply.github.com> Date: Thu, 1 Dec 2022 17:01:35 +0900 Subject: [PATCH 069/142] =?UTF-8?q?[Feature]=20=EA=B2=8C=EC=8B=9C=EA=B8=80?= =?UTF-8?q?=20=EC=A1=B0=ED=9A=8C=20API=20=EC=97=B0=EA=B2=B0=20(#165)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apis/group-articles/getGroupArticles.ts | 20 ++ .../apis/group-articles/getSpecificArticle.ts | 10 + frontend/src/apis/test/getTestData.ts | 2 +- .../src/apis/test/getTestGroupArticles.ts | 4 +- .../src/apis/test/getTestMyGroupArticles.ts | 2 +- .../components/article/ArticleList/index.tsx | 61 ------ .../common/GroupArticleCard/index.tsx | 12 +- frontend/src/constants/color.ts | 33 +++- frontend/src/constants/dummy.ts | 26 +-- frontend/src/hooks/queries/useFetchArticle.ts | 25 +++ .../hooks/queries/useFetchGroupArticles.ts | 38 ++-- frontend/src/mocks/handlers.ts | 10 +- frontend/src/pages/_app.tsx | 15 +- frontend/src/pages/article/[id].tsx | 185 +++++++++--------- frontend/src/pages/index.tsx | 73 ++++--- frontend/src/typings/types.ts | 14 +- frontend/src/utils/colors.ts | 13 -- 17 files changed, 293 insertions(+), 250 deletions(-) create mode 100644 frontend/src/apis/group-articles/getGroupArticles.ts create mode 100644 frontend/src/apis/group-articles/getSpecificArticle.ts delete mode 100644 frontend/src/components/article/ArticleList/index.tsx create mode 100644 frontend/src/hooks/queries/useFetchArticle.ts delete mode 100644 frontend/src/utils/colors.ts diff --git a/frontend/src/apis/group-articles/getGroupArticles.ts b/frontend/src/apis/group-articles/getGroupArticles.ts new file mode 100644 index 00000000..0bbc6335 --- /dev/null +++ b/frontend/src/apis/group-articles/getGroupArticles.ts @@ -0,0 +1,20 @@ +import axios from 'axios'; + +import { ArticleStatus } from '@constants/article'; +import { Category } from '@constants/category'; +import { Location } from '@constants/location'; + +const getGroupArticles = async ( + currentPage: number, + category: Category, + location: Location, + filterProgress: boolean +) => { + const status = filterProgress ? ArticleStatus.PROGRESS : null; + return axios.get(`${process.env.NEXT_PUBLIC_API_URL}/v1/group-articles/search`, { + params: { category, location, status, currentPage, countPerPage: 5 }, + withCredentials: true, + }); +}; + +export default getGroupArticles; diff --git a/frontend/src/apis/group-articles/getSpecificArticle.ts b/frontend/src/apis/group-articles/getSpecificArticle.ts new file mode 100644 index 00000000..6fa39621 --- /dev/null +++ b/frontend/src/apis/group-articles/getSpecificArticle.ts @@ -0,0 +1,10 @@ +import axios from 'axios'; + +const getSpecificArticle = async (id: number) => { + return axios.get(`${process.env.NEXT_PUBLIC_API_URL}/v1/group-articles/${id}`, { + params: { id }, + withCredentials: true, + }); +}; + +export default getSpecificArticle; diff --git a/frontend/src/apis/test/getTestData.ts b/frontend/src/apis/test/getTestData.ts index 6c85a916..12c6920e 100644 --- a/frontend/src/apis/test/getTestData.ts +++ b/frontend/src/apis/test/getTestData.ts @@ -1,7 +1,7 @@ import axios from 'axios'; const getTestData = async (nextId: number) => { - return axios.get(`http://testServer/test`, { + return axios.get(`https://testServer/test`, { params: { limit: 5, nextId }, }); }; diff --git a/frontend/src/apis/test/getTestGroupArticles.ts b/frontend/src/apis/test/getTestGroupArticles.ts index 86bdc5ae..ec439c4b 100644 --- a/frontend/src/apis/test/getTestGroupArticles.ts +++ b/frontend/src/apis/test/getTestGroupArticles.ts @@ -9,8 +9,8 @@ const getTestGroupArticles = async ( location: Location, progress: boolean ) => { - return axios.get(`http://testServer/group-articles`, { - params: { category, location, progress, nextId, limit: 5 }, + return axios.get(`https://testServer/group-articles`, { + params: { category, location, progress, nextId, limit: 15 }, }); }; diff --git a/frontend/src/apis/test/getTestMyGroupArticles.ts b/frontend/src/apis/test/getTestMyGroupArticles.ts index 0fcf3706..8b32c087 100644 --- a/frontend/src/apis/test/getTestMyGroupArticles.ts +++ b/frontend/src/apis/test/getTestMyGroupArticles.ts @@ -1,7 +1,7 @@ import axios from 'axios'; const getTestMyGroupArticles = async (nextId: number) => { - return axios.get('http://testServer/group-articles/me', { + return axios.get('https://testServer/group-articles/me', { params: { nextId, limit: 5 }, }); }; diff --git a/frontend/src/components/article/ArticleList/index.tsx b/frontend/src/components/article/ArticleList/index.tsx deleted file mode 100644 index 4d622350..00000000 --- a/frontend/src/components/article/ArticleList/index.tsx +++ /dev/null @@ -1,61 +0,0 @@ -import Link from 'next/link'; -import { useMemo } from 'react'; - -import styled from '@emotion/styled'; - -import EmptyMessage from '@components/common/EmptyMessage'; -import GroupArticleCard from '@components/common/GroupArticleCard'; -import { Category } from '@constants/category'; -import { Location } from '@constants/location'; -import useFetchGroupArticles from '@hooks/queries/useFetchGroupArticles'; -import useIntersect from '@hooks/useIntersect'; -import { ArticleType } from '@typings/types'; - -const ArticleList = () => { - const { data, fetchNextPage, hasNextPage, isFetching } = useFetchGroupArticles( - Category.STUDY, - Location.BUSAN, - false - ); - const ref = useIntersect((entry, observer) => { - observer.unobserve(entry.target); - if (hasNextPage && !isFetching) { - void fetchNextPage(); - } - }); - - const articles: ArticleType[] = useMemo( - // @ts-expect-error - () => (data ? data.pages.flatMap(({ data }) => data.articles) : []), - [data] - ); - - // TODO ๋กœ๋”ฉ ์ฒ˜๋ฆฌ - if (isFetching) return
    test
    ; - - return ( - <> - {articles.length ? ( - - {articles.map((article) => ( - -
    - -
    - - ))} -
    -
    - ) : ( - - )} - - ); -}; -const ListWrapper = styled.div` - display: grid; - grid-template-columns: repeat(2, 1fr); - grid-gap: 1.3rem; -`; - -export default ArticleList; diff --git a/frontend/src/components/common/GroupArticleCard/index.tsx b/frontend/src/components/common/GroupArticleCard/index.tsx index 98d975e9..d9f5315b 100644 --- a/frontend/src/components/common/GroupArticleCard/index.tsx +++ b/frontend/src/components/common/GroupArticleCard/index.tsx @@ -13,9 +13,9 @@ import { import StatCounter from '@components/common/StatCounter'; import { ArticleStatus, ArticleStatusKr } from '@constants/article'; import { CategoryKr } from '@constants/category'; +import { CATEGORY_COLOR, LOCATION_COLOR, STATUS_COLOR } from '@constants/color'; import { LocationKr } from '@constants/location'; import { ArticlePreviewType } from '@typings/types'; -import { getCommonBadgeColor, getStatusBadgeColor } from '@utils/colors'; interface Props { article: ArticlePreviewType; @@ -33,16 +33,16 @@ const GroupArticleCard = ({ article }: Props) => { {article.title} diff --git a/frontend/src/constants/color.ts b/frontend/src/constants/color.ts index cfb17fb7..e7e39958 100644 --- a/frontend/src/constants/color.ts +++ b/frontend/src/constants/color.ts @@ -1,6 +1,35 @@ import { ArticleStatus } from '@constants/article'; +import { Category } from '@constants/category'; +import { Location } from '@constants/location'; -const BADGE_COLORS = ['cyan', 'green', 'yellow', 'orange', 'grape', 'violet', 'teal', 'pink']; +const LOCATION_COLOR = { + [Location.SEJONG]: 'cyan', + [Location.GWANGJU]: 'green', + [Location.INCHEON]: 'yellow', + [Location.GYEONGGI]: 'grape', + [Location.CHUNGBUK]: 'violet', + [Location.CHUNGNAM]: 'teal', + [Location.BUSAN]: 'pink', + [Location.DAEGU]: 'cyan', + [Location.DAEJEON]: 'green', + [Location.SEOUL]: 'yellow', + [Location.GANGWON]: 'orange', + [Location.JEONBUK]: 'grape', + [Location.JEONNAM]: 'violet', + [Location.ULSAN]: 'teal', + [Location.JEJU]: 'pink', + [Location.ONLINE]: 'cyan', + [Location.GYEONGBUK]: 'green', + [Location.GYEONGNAM]: 'yellow', +}; + +const CATEGORY_COLOR = { + [Category.STUDY]: 'cyan', + [Category.COMPETITION]: 'green', + [Category.PROJECT]: 'yellow', + [Category.MEAL]: 'grape', + [Category.ETC]: 'violet', +}; const STATUS_COLOR = { [ArticleStatus.PROGRESS]: 'lime', @@ -8,4 +37,4 @@ const STATUS_COLOR = { [ArticleStatus.FAIL]: 'red', }; -export { BADGE_COLORS, STATUS_COLOR }; +export { STATUS_COLOR, LOCATION_COLOR, CATEGORY_COLOR }; diff --git a/frontend/src/constants/dummy.ts b/frontend/src/constants/dummy.ts index a51d0400..7f16660a 100644 --- a/frontend/src/constants/dummy.ts +++ b/frontend/src/constants/dummy.ts @@ -7,14 +7,8 @@ import { ArticlePreviewType, ArticleType, UserType } from '@typings/types'; const dummyArticlePreview: ArticlePreviewType = { id: 1, title: '๋ชจ์ง‘ ํ…Œ์ŠคํŠธ1', - location: { - id: 2, - name: Location.BUSAN, - }, - category: { - id: 1, - name: Category.STUDY, - }, + location: Location.GYEONGNAM, + category: Category.STUDY, commentCount: 31, scrapCount: 12, thumbnail: 'https://avatars.githubusercontent.com/u/90585081?v=4', @@ -27,18 +21,14 @@ const dummyArticlePreview: ArticlePreviewType = { const dummyArticle: ArticleType = { id: 1, title: '๋ชจ์ง‘ ํ…Œ์ŠคํŠธ1', - location: { - id: 2, - name: Location.BUSAN, - }, - category: { + location: Location.GYEONGNAM, + category: Category.STUDY, + content: '
    test
    ', + author: { id: 1, - name: Category.STUDY, + userName: 'JHPark_GOD', + profileImage: 'https://avatars.githubusercontent.com/u/90585081?v=4', }, - contents: '
    test
    ', - authorId: 1, - authorName: 'JHPark_GOD', - authorThumbnail: 'https://avatars.githubusercontent.com/u/90585081?v=4', commentCount: 31, scrapCount: 12, thumbnail: 'https://avatars.githubusercontent.com/u/90585081?v=4', diff --git a/frontend/src/hooks/queries/useFetchArticle.ts b/frontend/src/hooks/queries/useFetchArticle.ts new file mode 100644 index 00000000..c3efb986 --- /dev/null +++ b/frontend/src/hooks/queries/useFetchArticle.ts @@ -0,0 +1,25 @@ +import { AxiosError, AxiosResponse } from 'axios'; + +import getSpecificArticle from '@apis/group-articles/getSpecificArticle'; +import useAuthQuery from '@hooks/useAuthQuery'; +import { ArticleType } from '@typings/types'; + +interface ResponseType { + status: string; + message: string; + data: ArticleType; +} + +const useFetchArticle = (id: number) => { + const { data, isLoading } = useAuthQuery, AxiosError, ArticleType>( + ['article', id], + () => getSpecificArticle(id), + { + select: (res) => res.data.data, + } + ); + + return { data, isLoading }; +}; + +export default useFetchArticle; diff --git a/frontend/src/hooks/queries/useFetchGroupArticles.ts b/frontend/src/hooks/queries/useFetchGroupArticles.ts index c670e547..35253acc 100644 --- a/frontend/src/hooks/queries/useFetchGroupArticles.ts +++ b/frontend/src/hooks/queries/useFetchGroupArticles.ts @@ -1,30 +1,40 @@ import { useInfiniteQuery } from '@tanstack/react-query'; import { AxiosError, AxiosResponse } from 'axios'; -import getTestGroupArticles from '@apis/test/getTestGroupArticles'; +import getGroupArticles from '@apis/group-articles/getGroupArticles'; +import AuthError from '@components/common/ErrorBoundary/AuthError'; import { Category } from '@constants/category'; import { Location } from '@constants/location'; -import { ArticleType } from '@typings/types'; - -import AuthError from '../../components/common/ErrorBoundary/AuthError'; +import { ArticlePreviewType, ArticleType } from '@typings/types'; interface ArticleResponseType { - articles: ArticleType[]; - isLast: boolean; - currentId: number; + status: string; + message: string; + data: { + totalPage: number; + currentPage: number; + countPerPage: number; + data: ArticlePreviewType[]; + }; } -const useFetchGroupArticles = (category: Category, location: Location, progress: boolean) => { +const useFetchGroupArticles = ( + category: Category | null, + location: Location | null, + filterProgress: boolean +) => { const { data, fetchNextPage, hasNextPage, isFetching, error } = useInfiniteQuery< - Promise>, - AxiosError + AxiosResponse, + AxiosError, + ArticleType[] >( - ['articles'], - ({ pageParam = 0 }) => getTestGroupArticles(pageParam, category, location, progress), + ['articles', category, location, filterProgress], + ({ pageParam = 1 }) => getGroupArticles(pageParam, category, location, filterProgress), { - // @ts-expect-error getNextPageParam: (lastPage: AxiosResponse) => - lastPage.data.isLast ? undefined : lastPage.data.currentId + 1, + lastPage.data.data.totalPage === lastPage.data.data.currentPage + ? undefined + : lastPage.data.data.currentPage + 1, } ); diff --git a/frontend/src/mocks/handlers.ts b/frontend/src/mocks/handlers.ts index aaf42d91..ca75a7b2 100644 --- a/frontend/src/mocks/handlers.ts +++ b/frontend/src/mocks/handlers.ts @@ -7,9 +7,9 @@ import { getMyInfo } from './resolvers/getMyInfo'; import { getTest } from './resolvers/test'; export const handlers = [ - rest.get('http://testServer/test', getTest), - rest.get('http://testServer/group-articles', getGroupArticles), - rest.get('http://testServer/group-articles/me', getGroupArticles), - rest.get('http://testServer/my-info', getMyInfo), - rest.post('http://testServer/post-test', postTest), + rest.get('https://testServer/test', getTest), + rest.get('https://testServer/group-articles', getGroupArticles), + rest.get('https://testServer/group-articles/me', getGroupArticles), + rest.get('https://testServer/my-info', getMyInfo), + rest.post('https://testServer/post-test', postTest), ]; diff --git a/frontend/src/pages/_app.tsx b/frontend/src/pages/_app.tsx index 4fd1fc97..addc0c91 100644 --- a/frontend/src/pages/_app.tsx +++ b/frontend/src/pages/_app.tsx @@ -14,6 +14,8 @@ import RouterTransition from '@components/common/RouterTransition'; import initMockApi from '@mocks/.'; import CommonStyles from '@styles/CommonStyles'; +const isDevelopment = process.env.NODE_ENV === 'development'; + const queryClient = new QueryClient({ defaultOptions: { queries: { @@ -23,14 +25,15 @@ const queryClient = new QueryClient({ }); export default function App({ Component, pageProps }: AppProps) { - const [shouldRender, setShouldRender] = useState(false); + const [shouldRender, setShouldRender] = useState(!isDevelopment); useEffect(() => { - void (async () => { - // TODO development์ผ๋•Œ๋งŒ ์‹คํ–‰ - await initMockApi(); - setShouldRender(true); - })(); + if (isDevelopment) { + void (async () => { + await initMockApi(); + setShouldRender(true); + })(); + } }, []); if (!shouldRender) return null; diff --git a/frontend/src/pages/article/[id].tsx b/frontend/src/pages/article/[id].tsx index 39560770..b2325166 100644 --- a/frontend/src/pages/article/[id].tsx +++ b/frontend/src/pages/article/[id].tsx @@ -1,3 +1,4 @@ +import { useRouter } from 'next/router'; import { useState } from 'react'; import { useTheme } from '@emotion/react'; @@ -14,108 +15,114 @@ import PageLayout from '@components/common/PageLayout'; import StatCounter from '@components/common/StatCounter'; import { ArticleStatusKr } from '@constants/article'; import { CategoryKr } from '@constants/category'; -import { dummyArticle, dummyParticipants } from '@constants/dummy'; +import { CATEGORY_COLOR, LOCATION_COLOR, STATUS_COLOR } from '@constants/color'; +import { dummyParticipants } from '@constants/dummy'; import { LocationKr } from '@constants/location'; import { PAGE_TITLE } from '@constants/pageTitle'; import { ParticipateButtonStatus } from '@constants/participateButton'; -import { getCommonBadgeColor, getStatusBadgeColor } from '@utils/colors'; +import useFetchArticle from '@hooks/queries/useFetchArticle'; +import dateTimeFormat from '@utils/dateTime'; const ArticleDetail = () => { const { colors: { indigo, gray }, } = useTheme(); + const router = useRouter(); + const articleId = Number(router.query.id); + const { data, isLoading } = useFetchArticle(articleId); const [participantsModalOpen, setParticipantsModalOpen] = useState(false); - const { - authorName, - title, - status, - authorThumbnail, - createdAt, - category, - location, - contents, - currentCapacity, - maxCapacity, - commentCount, - } = dummyArticle; - return ( - - } - /> - } - > - - - - - - {authorName} - - - - {title} - - - - - - - - ๋ชจ์ง‘ ํ˜„ํ™ฉ - - {currentCapacity}๋ช… / {maxCapacity}๋ช… - - - setParticipantsModalOpen(true)}> - - ์‹ ์ฒญ์ž ํ™•์ธ - - - + + } /> - - - - {/* TODO ๋ชจ์ง‘์ƒํƒœ์™€ ์œ ์ € ์ฐธ๊ฐ€ ์ƒํƒœ์— ๋”ฐ๋ผ ๋ Œ๋”๋ง */} - - - - - -
    ๋Œ“๊ธ€์˜์—ญ
    -
    -
    - {/* TODO participants API ์š”์ฒญ */} - setParticipantsModalOpen(false)} - /> -
    + } + > + {/* TODO ๋กœ๋”ฉ ์ฒ˜๋ฆฌ */} + {isLoading ? ( +
    ๋กœ๋”ฉ์ค‘
    + ) : ( + <> + + + + + + {data.author.userName} + + + + {data.title} + + + + + + + + ๋ชจ์ง‘ ํ˜„ํ™ฉ + + {data.currentCapacity}๋ช… / {data.maxCapacity}๋ช… + + + setParticipantsModalOpen(true)}> + + ์‹ ์ฒญ์ž ํ™•์ธ + + + + + + + {/* TODO ๋ชจ์ง‘์ƒํƒœ์™€ ์œ ์ € ์ฐธ๊ฐ€ ์ƒํƒœ์— ๋”ฐ๋ผ ๋ Œ๋”๋ง */} + + + + + +
    ๋Œ“๊ธ€์˜์—ญ
    +
    +
    + {/* TODO participants API ์š”์ฒญ */} + setParticipantsModalOpen(false)} + /> + + )} + + ); }; diff --git a/frontend/src/pages/index.tsx b/frontend/src/pages/index.tsx index c97fff45..2c48842c 100644 --- a/frontend/src/pages/index.tsx +++ b/frontend/src/pages/index.tsx @@ -1,14 +1,16 @@ -import { useState } from 'react'; +import Link from 'next/link'; +import { useMemo, useState } from 'react'; import { useQueryClient } from '@tanstack/react-query'; import { useTheme } from '@emotion/react'; import styled from '@emotion/styled'; -import { Checkbox, Select } from '@mantine/core'; +import { Checkbox } from '@mantine/core'; import { IconRefresh } from '@tabler/icons'; -import ArticleList from '@components/article/ArticleList'; -import ApiErrorBoundary from '@components/common/ErrorBoundary/ApiErrorBoundary'; +import DropDown from '@components/common/DropDown'; +import EmptyMessage from '@components/common/EmptyMessage'; +import GroupArticleCard from '@components/common/GroupArticleCard'; import Header from '@components/common/Header'; import RootTitle from '@components/common/Header/RootTitle'; import UserLoginItem from '@components/common/Header/UserLoginItem'; @@ -17,6 +19,9 @@ import PageLayout from '@components/common/PageLayout'; import { Category, CategoryKr } from '@constants/category'; import { Location, LocationKr } from '@constants/location'; import { PAGE_TITLE } from '@constants/pageTitle'; +import useFetchGroupArticles from '@hooks/queries/useFetchGroupArticles'; +import useIntersect from '@hooks/useIntersect'; +import { ArticleType } from '@typings/types'; const Main = () => { const { @@ -27,6 +32,24 @@ const Main = () => { const [selectedLocation, setSelectedLocation] = useState(null); const [progressChecked, setProgressChecked] = useState(false); + const { data, fetchNextPage, hasNextPage, isFetching } = useFetchGroupArticles( + selectedCategory, + selectedLocation, + progressChecked + ); + const ref = useIntersect((entry, observer) => { + observer.unobserve(entry.target); + if (hasNextPage && !isFetching) { + void fetchNextPage(); + } + }); + + const articles: ArticleType[] = useMemo( + // @ts-expect-error + () => (data ? data.pages.flatMap(({ data }) => data.data.data) : []), + [data] + ); + const refreshArticleList = () => { void queryClient.resetQueries(['articles']); }; @@ -46,7 +69,7 @@ const Main = () => { > - { size="md" maxDropdownHeight={200} /> - { - - - + {articles.length > 0 ? ( + + {articles.map((article) => ( + +
    + +
    + + ))} +
    +
    + ) : ( + + )}
    ); @@ -96,21 +130,6 @@ const Main = () => { export default Main; -// TODO ๊ณตํ†ต Dropdown ์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ -const StyledSelect = styled(Select)` - width: 100%; - & .mantine-Select-item { - padding: 1.2rem 1.6rem; - &[data-selected] { - &, - &:hover { - background-color: ${({ theme }) => theme.colors.indigo[0]}; - color: ${({ theme }) => theme.colors.indigo[7]}; - } - } - } -`; - const ContentWrapper = styled.div` flex: 1; display: flex; @@ -137,3 +156,9 @@ const RefreshButton = styled.button` cursor: pointer; } `; + +const ListWrapper = styled.div` + display: grid; + grid-template-columns: repeat(2, 1fr); + grid-gap: 1.3rem; +`; diff --git a/frontend/src/typings/types.ts b/frontend/src/typings/types.ts index bddafc41..9266ffec 100644 --- a/frontend/src/typings/types.ts +++ b/frontend/src/typings/types.ts @@ -7,8 +7,8 @@ import { Location } from '@constants/location'; interface ArticlePreviewType { id: number; title: string; - location: LocationType; - category: CategoryType; + location: Location; + category: Category; commentCount: number; scrapCount: number; thumbnail: string; @@ -21,12 +21,10 @@ interface ArticlePreviewType { interface ArticleType { id: number; title: string; - contents: string; - authorId: number; - authorName: string; - authorThumbnail: string; - location: LocationType; - category: CategoryType; + content: string; + author: Partial; + location: Location; + category: Category; commentCount: number; scrapCount: number; thumbnail: string; diff --git a/frontend/src/utils/colors.ts b/frontend/src/utils/colors.ts deleted file mode 100644 index c352287a..00000000 --- a/frontend/src/utils/colors.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { ArticleStatus } from '@constants/article'; -import { BADGE_COLORS, STATUS_COLOR } from '@constants/color'; - -const getCommonBadgeColor = (id: number) => { - const colorCount = BADGE_COLORS.length; - return BADGE_COLORS[id % colorCount]; -}; - -const getStatusBadgeColor = (status: ArticleStatus) => { - return STATUS_COLOR[status]; -}; - -export { getCommonBadgeColor, getStatusBadgeColor }; From 714247ac75729859acbbab158193ecdd7fc034a0 Mon Sep 17 00:00:00 2001 From: yangseungchan Date: Thu, 1 Dec 2022 18:52:07 +0900 Subject: [PATCH 070/142] =?UTF-8?q?[Feature]=20=EA=B2=8C=EC=8B=9C=EA=B8=80?= =?UTF-8?q?=20=EB=93=B1=EB=A1=9D=20API=20=EC=97=B0=EB=8F=99=20=EB=B0=8F=20?= =?UTF-8?q?=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EC=97=85=EB=A1=9C=EB=93=9C=20?= =?UTF-8?q?=EA=B3=B5=ED=86=B5=20=EB=A1=9C=EC=A7=81=20(#160)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * โ™ป๏ธ refactor: ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ ์ƒํƒœ๊ฐ’ ๊ตฌ์กฐ ๊ฐœ์„  * โ™ป๏ธ refactor: axios ๊ณตํ†ต ๋กœ์ง์„ axios ์ธ์Šคํ„ด์Šค๋กœ ์ฒ˜๋ฆฌ * โœจ feature: ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ๊ณตํ†ต ๋กœ์ง ๊ตฌํ˜„ * ๐Ÿฅ… chore: RouterTransition ์ˆ˜์ • * โœจ feature: ArticleEditor ์ปดํฌ๋„ŒํŠธ ์—๋””ํ„ฐ ์ด๋ฏธ์ง€์—…๋กœ๋“œ ํ•ธ๋“ค๋Ÿฌ ์ถ”๊ฐ€ * ๐Ÿฅ… chore: notification ์„ธํŒ… * โœจ feature: ๊ฒŒ์‹œ๊ธ€ ์—…๋กœ๋“œ ๋กœ์ง ์ถ”๊ฐ€ * ๐Ÿฅ… chore: ๋กœ๊ทธ์ธ ๋ฆฌ๋‹ค์ด๋ ‰์…˜ ๋กœ์ง ์ˆ˜์ • * ๐Ÿฅ… chore: axios ๊ณตํ†ต ๋กœ์ง ์ˆ˜์ • * ๐Ÿฅ… chore: handleUploadImage -> uploadImageFile * ๐Ÿ› fix: RouterTransition ์ปดํฌ๋„ŒํŠธ ์œ„์น˜ ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: ci ์žฌ์‹คํ–‰ ์ปค๋ฐ‹ * ๐Ÿฅ… chore: ๋ฌธ์ž์—ด๊ฐ’ trim ์ถ”๊ฐ€ * ๐Ÿฅ… chore: useGeneralQuery๋กœ ์ „ํ™˜ * ๐Ÿฅ… chore: trim ํ•จ์ˆ˜ ๋กœ์ง ์ˆ˜์ •, API ์š”์ฒญ body ์ˆ˜์ • --- frontend/next.config.js | 2 +- frontend/package-lock.json | 71 ++++++++++- frontend/package.json | 1 + .../article/ArticleEditor/index.tsx | 19 +++ .../components/common/LoginRedirect/index.tsx | 2 +- .../components/common/RouterTransition.tsx | 30 ----- .../common/RouterTransition/index.tsx | 2 +- frontend/src/hooks/queries/useFetchMyInfo.ts | 14 +-- frontend/src/hooks/useImageUpload.ts | 28 +++++ frontend/src/pages/_app.tsx | 4 +- frontend/src/pages/article/write/index.tsx | 116 +++++++++++++----- frontend/src/styles/CommonStyles.tsx | 3 +- frontend/src/typings/types.ts | 6 + frontend/src/utils/commonAxios.ts | 13 ++ 14 files changed, 235 insertions(+), 76 deletions(-) delete mode 100644 frontend/src/components/common/RouterTransition.tsx create mode 100644 frontend/src/hooks/useImageUpload.ts create mode 100644 frontend/src/utils/commonAxios.ts diff --git a/frontend/next.config.js b/frontend/next.config.js index 71298580..db31719d 100644 --- a/frontend/next.config.js +++ b/frontend/next.config.js @@ -14,7 +14,7 @@ const nextConfig = { return config; }, images: { - domains: ["avatars.githubusercontent.com"], + domains: ["avatars.githubusercontent.com", "kr.object.ncloudstorage.com"], }, } diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 2ad38f14..1b775704 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -14,6 +14,7 @@ "@mantine/core": "~5.7.2", "@mantine/hooks": "~5.7.2", "@mantine/next": "~5.7.2", + "@mantine/notifications": "~5.7.2", "@mantine/nprogress": "~5.7.2", "@mantine/rte": "~5.7.2", "@tabler/icons": "^1.111.0", @@ -2844,6 +2845,21 @@ "react-dom": ">=16.8.0" } }, + "node_modules/@mantine/notifications": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@mantine/notifications/-/notifications-5.7.2.tgz", + "integrity": "sha512-E10ShS42I2RZb3SPzDaSi+goDXeO3DUeA1gCMBY040S/+7CBlT/9x6H6guKUPuIoK+WMrWm4LT/m9ARJ0zdKFg==", + "dependencies": { + "@mantine/utils": "5.7.2", + "react-transition-group": "4.4.2" + }, + "peerDependencies": { + "@mantine/core": "5.7.2", + "@mantine/hooks": "5.7.2", + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, "node_modules/@mantine/nprogress": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/@mantine/nprogress/-/nprogress-5.7.2.tgz", @@ -14880,6 +14896,15 @@ "utila": "~0.4" } }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, "node_modules/dom-serializer": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", @@ -23498,7 +23523,6 @@ "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -23993,6 +24017,21 @@ "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, + "node_modules/react-transition-group": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz", + "integrity": "sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, "node_modules/read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", @@ -30631,6 +30670,15 @@ "@mantine/styles": "5.7.2" } }, + "@mantine/notifications": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@mantine/notifications/-/notifications-5.7.2.tgz", + "integrity": "sha512-E10ShS42I2RZb3SPzDaSi+goDXeO3DUeA1gCMBY040S/+7CBlT/9x6H6guKUPuIoK+WMrWm4LT/m9ARJ0zdKFg==", + "requires": { + "@mantine/utils": "5.7.2", + "react-transition-group": "4.4.2" + } + }, "@mantine/nprogress": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/@mantine/nprogress/-/nprogress-5.7.2.tgz", @@ -39821,6 +39869,15 @@ "utila": "~0.4" } }, + "dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "requires": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, "dom-serializer": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", @@ -46354,7 +46411,6 @@ "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, "requires": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -46749,6 +46805,17 @@ "use-latest": "^1.2.1" } }, + "react-transition-group": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz", + "integrity": "sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==", + "requires": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + } + }, "read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index 64cb308b..d53e2099 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -33,6 +33,7 @@ "@mantine/hooks": "~5.7.2", "@mantine/next": "~5.7.2", "@mantine/nprogress": "~5.7.2", + "@mantine/notifications": "~5.7.2", "@mantine/rte": "~5.7.2", "@tabler/icons": "^1.111.0", "@tanstack/react-query": "^4.16.1", diff --git a/frontend/src/components/article/ArticleEditor/index.tsx b/frontend/src/components/article/ArticleEditor/index.tsx index 42c34902..36b89961 100644 --- a/frontend/src/components/article/ArticleEditor/index.tsx +++ b/frontend/src/components/article/ArticleEditor/index.tsx @@ -1,9 +1,12 @@ import dynamic from 'next/dynamic'; +import { useCallback } from 'react'; import styled from '@emotion/styled'; import { LoadingOverlay, Text } from '@mantine/core'; import { RichTextEditorProps } from '@mantine/rte'; +import useImageUpload from '@hooks/useImageUpload'; + const RichTextEditor = dynamic(() => import('@mantine/rte'), { ssr: false, loading: () => ( @@ -16,6 +19,21 @@ const RichTextEditor = dynamic(() => import('@mantine/rte'), { interface Props extends RichTextEditorProps {} const ArticleEditor = (props: Props) => { + const { uploadImageFile } = useImageUpload(); + + const handleEditorImageUpload = useCallback( + async (file: File) => { + try { + return (await uploadImageFile(file)).url; + } catch (err) { + throw new Error('์—๋””ํ„ฐ ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ์‹คํŒจ'); + } + }, + // ๋นˆ ์นธ์œผ๋กœ ๋‘์ง€ ์•Š์œผ๋ฉด ์—๋””ํ„ฐ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ ์•ˆํ•จ! + // eslint-disable-next-line react-hooks/exhaustive-deps + [] + ); + return ( @@ -35,6 +53,7 @@ const ArticleEditor = (props: Props) => { ['unorderedList', 'orderedList'], ['blockquote', 'code', 'link', 'image'], ]} + onImageUpload={handleEditorImageUpload} {...props} /> diff --git a/frontend/src/components/common/LoginRedirect/index.tsx b/frontend/src/components/common/LoginRedirect/index.tsx index 1337ecde..162ac6a7 100644 --- a/frontend/src/components/common/LoginRedirect/index.tsx +++ b/frontend/src/components/common/LoginRedirect/index.tsx @@ -5,12 +5,12 @@ import useFetchMyInfo from '@hooks/queries/useFetchMyInfo'; const LoginRedirect = () => { const { data, isLoading } = useFetchMyInfo(); + const router = useRouter(); useEffect(() => { const noRedirectPaths = ['/', '/login']; if (!isLoading && !data && !noRedirectPaths.includes(router.pathname)) { - alert('๋กœ๊ทธ์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.'); void router.push('/login'); } }, [data, isLoading, router]); diff --git a/frontend/src/components/common/RouterTransition.tsx b/frontend/src/components/common/RouterTransition.tsx deleted file mode 100644 index 0940bee3..00000000 --- a/frontend/src/components/common/RouterTransition.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import { useRouter } from 'next/router'; -import { useEffect } from 'react'; - -import { - NavigationProgress, - completeNavigationProgress, - startNavigationProgress, -} from '@mantine/nprogress'; - -const RouterTransition = () => { - const router = useRouter(); - useEffect(() => { - const handleStart = (url: string) => url !== router.asPath && startNavigationProgress(); - const handleComplete = () => completeNavigationProgress(); - - router.events.on('routeChangeStart', handleStart); - router.events.on('routeChangeComplete', handleComplete); - router.events.on('routeChangeError', handleComplete); - - return () => { - router.events.off('routeChangeStart', handleStart); - router.events.off('routeChangeComplete', handleComplete); - router.events.off('routeChangeError', handleComplete); - }; - }, [router]); - - return ; -}; - -export default RouterTransition; diff --git a/frontend/src/components/common/RouterTransition/index.tsx b/frontend/src/components/common/RouterTransition/index.tsx index 0940bee3..41949236 100644 --- a/frontend/src/components/common/RouterTransition/index.tsx +++ b/frontend/src/components/common/RouterTransition/index.tsx @@ -22,7 +22,7 @@ const RouterTransition = () => { router.events.off('routeChangeComplete', handleComplete); router.events.off('routeChangeError', handleComplete); }; - }, [router]); + }, [router.asPath, router.events]); return ; }; diff --git a/frontend/src/hooks/queries/useFetchMyInfo.ts b/frontend/src/hooks/queries/useFetchMyInfo.ts index 94c507f2..fa7aac36 100644 --- a/frontend/src/hooks/queries/useFetchMyInfo.ts +++ b/frontend/src/hooks/queries/useFetchMyInfo.ts @@ -1,19 +1,17 @@ -import { useQuery } from '@tanstack/react-query'; -import axios, { AxiosError } from 'axios'; +import { AxiosError } from 'axios'; +import useGeneralQuery from '@hooks/useGeneralQuery'; import { ApiResponse, UserType } from '@typings/types'; +import { clientAxios } from '@utils/commonAxios'; /** * ๋กœ๊ทธ์ธ ํ•œ ์œ ์ €์˜ ์œ ์ €์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ */ const useFetchMyInfo = () => { - const { data, isLoading, isError } = useQuery, AxiosError, UserType>( + const { data, isLoading } = useGeneralQuery, AxiosError, UserType>( ['my'], - () => - axios.get(`${process.env.NEXT_PUBLIC_API_URL}/v1/my-info`, { - withCredentials: true, - }), + () => clientAxios.get('/v1/my-info'), { select: (res) => res.data.data, retry: false, @@ -21,7 +19,7 @@ const useFetchMyInfo = () => { } ); - return { data, isLoading, isError }; + return { data, isLoading }; }; export default useFetchMyInfo; diff --git a/frontend/src/hooks/useImageUpload.ts b/frontend/src/hooks/useImageUpload.ts new file mode 100644 index 00000000..22935b7b --- /dev/null +++ b/frontend/src/hooks/useImageUpload.ts @@ -0,0 +1,28 @@ +import { ImageUploadType } from '@typings/types'; +import { clientAxios } from '@utils/commonAxios'; + +const useImageUpload = () => { + const uploadImageFile = async (file: File) => { + try { + const formData = new FormData(); + formData.append('files', file); + const { + data: { + data: { 0: imageData }, + }, + } = await clientAxios.post('/v1/images/upload', formData, { + headers: { + 'Content-Type': 'multipart/form-data', + }, + }); + return imageData as ImageUploadType; + } catch (err) { + // TODO ์—๋Ÿฌ์ฒ˜๋ฆฌ ์–ด๋–ค์‹์œผ๋กœ ํ•ด์•ผํ• ๊นŒ... + throw new Error('์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ์—๋Ÿฌ ๋ฐœ์ƒ'); + } + }; + + return { uploadImageFile }; +}; + +export default useImageUpload; diff --git a/frontend/src/pages/_app.tsx b/frontend/src/pages/_app.tsx index addc0c91..dd53d069 100644 --- a/frontend/src/pages/_app.tsx +++ b/frontend/src/pages/_app.tsx @@ -47,12 +47,12 @@ export default function App({ Component, pageProps }: AppProps) { + - - + diff --git a/frontend/src/pages/article/write/index.tsx b/frontend/src/pages/article/write/index.tsx index 50a4d1ad..09098f67 100644 --- a/frontend/src/pages/article/write/index.tsx +++ b/frontend/src/pages/article/write/index.tsx @@ -1,8 +1,10 @@ import Head from 'next/head'; +import { useRouter } from 'next/router'; import { useState } from 'react'; import styled from '@emotion/styled'; import { ActionIcon, FileInput, Slider, Text } from '@mantine/core'; +import { showNotification } from '@mantine/notifications'; import { IconCheck, IconUpload, IconUser } from '@tabler/icons'; import ArticleEditor from '@components/article/ArticleEditor'; @@ -15,36 +17,85 @@ import PageLayout from '@components/common/PageLayout'; import TextInput from '@components/common/TextInput'; import { Category, CategoryKr } from '@constants/category'; import { Location, LocationKr } from '@constants/location'; +import useImageUpload from '@hooks/useImageUpload'; +import { ImageUploadType } from '@typings/types'; +import { clientAxios } from '@utils/commonAxios'; -/** - * Todo - * - ๊ฒŒ์‹œ๊ธ€ ๋“ฑ๋ก API ์—ฐ๋™ - * - ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ API ์—ฐ๋™ - */ +interface ArticleInput { + category: Category | null; + location: Location | null; + maxCapacity: number; + title: string; + contents: string; + chatUrl: string; + uploadedImage: ImageUploadType | null; +} const WritePage = () => { + const router = useRouter(); const [confirmModalOpen, setConfirmModalOpen] = useState(false); - const [category, setCategory] = useState(null); - const [location, setLocation] = useState(null); - const [maxCapacity, setmaxCapacity] = useState(5); - const [title, setTitle] = useState(''); - const [content, setContent] = useState(''); - const [chatLink, setChatLink] = useState(''); - const [uploadedImage, setUploadedImage] = useState(null); + const [articleInput, setArticleInput] = useState({ + category: null, + location: null, + maxCapacity: 5, + title: '', + contents: '', + chatUrl: '', + uploadedImage: null, + }); + const { category, location, maxCapacity, title, contents, chatUrl, uploadedImage } = articleInput; + const { uploadImageFile } = useImageUpload(); const possibleToSubmit = category && location && maxCapacity && - title.length > 0 && - content.length > 0 && - chatLink.length > 0 && + title.trim().length > 0 && + contents.length > 0 && + chatUrl.trim().length > 0 && uploadedImage; - const handleSubmit = () => { + const handleClickSubmitBtn = async () => { if (!possibleToSubmit) return; - // TODO API ํ˜ธ์ถœ - setConfirmModalOpen(true); + try { + const { uploadedImage, ...rest } = articleInput; + await clientAxios.post('/v1/group-articles', { + ...rest, + thumbnail: uploadedImage.key, + }); + // TODO : mutation ๋กœ์ง ์ถ”๊ฐ€? + // Modal, notification ์ค‘ ๊ณ ๋ฅด๊ธฐ + showNotification({ + color: 'indigo', + title: '๊ฒŒ์‹œ๊ธ€ ๋“ฑ๋ก ์™„๋ฃŒ!', + message: '์ด์ œ ๋ชจ์ง‘ ์™„๋ฃŒ ๋˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ ค์ฃผ์„ธ์š”!', + icon: , + autoClose: 5000, + styles: (theme) => ({ + root: { + paddingTop: '1.6rem', + paddingBottom: '1.6rem', + }, + title: { + fontSize: theme.fontSizes.lg, + fontWeight: 700, + }, + }), + }); + void router.push('/'); + } catch (err) { + // TODO ์—๋Ÿฌ์ฒ˜๋ฆฌ... + console.log(err); + } + }; + + const handleChangeImage = async (imageFile: File) => { + try { + const uploadedImage = await uploadImageFile(imageFile); + setArticleInput((prev) => ({ ...prev, uploadedImage })); + } catch (err) { + throw new Error((err as Error).message); + } }; return ( @@ -60,7 +111,7 @@ const WritePage = () => { @@ -83,10 +134,11 @@ const WritePage = () => { value: key, }))} value={category} - onChange={(value) => setCategory(value as Category)} + onChange={(value) => + setArticleInput((prev) => ({ ...prev, category: value as Category })) + } required /> - { value: key, }))} value={location} - onChange={(value) => setLocation(value as Location)} + onChange={(location) => + setArticleInput((prev) => ({ ...prev, location: location as Location })) + } required /> @@ -116,7 +170,7 @@ const WritePage = () => { min={1} max={15} value={maxCapacity} - onChange={setmaxCapacity} + onChange={(maxCapacity) => setArticleInput((prev) => ({ ...prev, maxCapacity }))} /> @@ -126,15 +180,18 @@ const WritePage = () => { placeholder="์ œ๋ชฉ์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”." required value={title} - onChange={(e) => setTitle(e.target.value)} + onChange={(e) => setArticleInput((prev) => ({ ...prev, title: e.target.value }))} + /> + setArticleInput((prev) => ({ ...prev, contents }))} /> - setChatLink(e.target.value)} + value={chatUrl} + onChange={(e) => setArticleInput((prev) => ({ ...prev, chatUrl: e.target.value }))} /> @@ -145,14 +202,13 @@ const WritePage = () => { * - + } /> diff --git a/frontend/src/styles/CommonStyles.tsx b/frontend/src/styles/CommonStyles.tsx index f625d2b5..6128c740 100644 --- a/frontend/src/styles/CommonStyles.tsx +++ b/frontend/src/styles/CommonStyles.tsx @@ -1,6 +1,7 @@ import { ReactNode } from 'react'; import { MantineProvider } from '@mantine/core'; +import { NotificationsProvider } from '@mantine/notifications'; import CustomFonts from '@styles/CustomFont'; import GlobalStyles from '@styles/GlobalStyles'; @@ -14,7 +15,7 @@ const CommonStyles = ({ children }: Props) => ( - {children} + {children} ); diff --git a/frontend/src/typings/types.ts b/frontend/src/typings/types.ts index 9266ffec..eec5b514 100644 --- a/frontend/src/typings/types.ts +++ b/frontend/src/typings/types.ts @@ -68,6 +68,11 @@ interface UserType { blogUrl: string; } +interface ImageUploadType { + key: string; + url: string; +} + type ApiResponse = AxiosResponse<{ data: T }>; export type { @@ -79,4 +84,5 @@ export type { TestResponseType, CommentType, UserType, + ImageUploadType, }; diff --git a/frontend/src/utils/commonAxios.ts b/frontend/src/utils/commonAxios.ts new file mode 100644 index 00000000..9f2ad4ab --- /dev/null +++ b/frontend/src/utils/commonAxios.ts @@ -0,0 +1,13 @@ +import axios from 'axios'; + +const clientAxios = axios.create({ + baseURL: process.env.NEXT_PUBLIC_API_URL, + withCredentials: true, +}); + +const serverAxios = axios.create({ + baseURL: process.env.API_URL, + withCredentials: true, +}); + +export { clientAxios, serverAxios }; From 5a1b9a0dfb74f2d972af2cf9325310324f1e1cf9 Mon Sep 17 00:00:00 2001 From: Gakko <90585081+pythonstrup@users.noreply.github.com> Date: Thu, 1 Dec 2022 19:05:03 +0900 Subject: [PATCH 071/142] =?UTF-8?q?[Feature]=20=EB=AA=A8=EC=9E=84=20?= =?UTF-8?q?=EC=8B=A0=EC=B2=AD=EC=9E=90=20=EC=A1=B0=ED=9A=8C=ED=95=98?= =?UTF-8?q?=EA=B8=B0=20API=20(#168)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * โœจ feature: ์ฐธ๊ฐ€์ž ์กฐํšŒ API Resonse DTO ์ž‘์„ฑ * โœจ feature: ์ฐธ๊ฐ€์ž ์กฐํšŒ API controller Skeleton * โœจ feature: ์œ ์ € ์ •๋ณด๋ฅผ ๋‹ด๋Š” DTO ์ž‘์„ฑ * ๐Ÿฅ… chore: resonse dto ๋ณ€๊ฒฝ * โœจ feature: ์‹ ์ฒญ์ž ์กฐํšŒ๋ฅผ ์œ„ํ•œ find ์งˆ์˜๋ฌธ ์ž‘์„ฑ * โœจ feature: ๊ทธ๋ฃน ์‹ ์ฒญ์ž ์กฐํšŒ service ๋กœ์ง ์ž‘์„ฑ * โœจ feature: ๊ทธ๋ฃน ์‹ ์ฒญ์ž ์กฐํšŒ controller ์ž‘์„ฑ - ๊ฒฝ๋กœ ์ถ”๊ฐ€ - swagger ์ž‘์„ฑ - dto ์ ์šฉ * โ™ป๏ธ refactor: N+1 ๋ฌธ์ œ ํ•ด๊ฒฐ --- ...application-with-user-info-response.dto.ts | 22 ++++++++++ .../group-application/dto/user-info.dto.ts | 42 +++++++++++++++++++ .../group-application.controller.ts | 27 +++++++++++- .../group-application.repository.ts | 12 ++++++ .../group-application.service.ts | 37 ++++++++++++++-- 5 files changed, 136 insertions(+), 4 deletions(-) create mode 100644 backend/src/app/group-application/dto/application-with-user-info-response.dto.ts create mode 100644 backend/src/app/group-application/dto/user-info.dto.ts diff --git a/backend/src/app/group-application/dto/application-with-user-info-response.dto.ts b/backend/src/app/group-application/dto/application-with-user-info-response.dto.ts new file mode 100644 index 00000000..c6e23f28 --- /dev/null +++ b/backend/src/app/group-application/dto/application-with-user-info-response.dto.ts @@ -0,0 +1,22 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { UserInfo } from '@app/group-application/dto/user-info.dto'; +import { GroupApplication } from '@app/group-application/entity/group-application.entity'; + +export class ApplicationWithUserInfoResponse { + @ApiProperty({ + example: 1, + description: '', + required: true, + }) + id: number; + + @ApiProperty() + user: UserInfo; + + static from(userInfo: UserInfo, application: GroupApplication) { + const response = new ApplicationWithUserInfoResponse(); + response.id = application.id; + response.user = userInfo; + return response; + } +} diff --git a/backend/src/app/group-application/dto/user-info.dto.ts b/backend/src/app/group-application/dto/user-info.dto.ts new file mode 100644 index 00000000..647faad7 --- /dev/null +++ b/backend/src/app/group-application/dto/user-info.dto.ts @@ -0,0 +1,42 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { User } from '@src/app/user/entity/user.entity'; + +export class UserInfo { + @ApiProperty({ + example: 1, + description: '์œ ์ €์˜ ์•„์ด๋””', + required: true, + }) + id: number; + + @ApiProperty({ + example: 'username1103', + description: '์œ ์ €์˜ ์œ ์ € ์ด๋ฆ„', + required: true, + }) + userName: string; + + @ApiProperty({ + example: '์•ˆ๋…•ํ•˜์„ธ์š” ์˜ˆ๋น„ ์ธํ”„๋Ÿฐ ๊ฐœ๋ฐœ์ž ๊น€๋ช…์ผ์ž…๋‹ˆ๋‹ค.', + description: '์œ ์ €์˜ ๊ฐ„๋‹จํ•œ ์ž๊ธฐ์†Œ๊ฐœ', + required: true, + }) + description: string; + + @ApiProperty({ + example: + 'https://kr.object.ncloudstorage.com/uploads/images/1669276833875-64adca9c-94cd-4162-a53f-f75e951e39d', + description: '์œ ์ €์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€', + required: true, + }) + profileImage: string; + + static from(user: User) { + const response = new UserInfo(); + response.id = user.id; + response.userName = user.userName; + response.description = user.description; + response.profileImage = user.profileImage; + return response; + } +} diff --git a/backend/src/app/group-application/group-application.controller.ts b/backend/src/app/group-application/group-application.controller.ts index 7bbe395b..c85503a4 100644 --- a/backend/src/app/group-application/group-application.controller.ts +++ b/backend/src/app/group-application/group-application.controller.ts @@ -1,4 +1,12 @@ -import { Body, Controller, HttpStatus, Post } from '@nestjs/common'; +import { + Body, + Controller, + Get, + HttpStatus, + ParseIntPipe, + Post, + Query, +} from '@nestjs/common'; import { GroupApplicationService } from '@app/group-application/group-application.service'; import { GroupApplicationRequest } from '@src/app/group-application/dto/group-application-request.dto'; import { ApiSuccessResponse } from '@src/common/decorator/api-success-resposne.decorator'; @@ -14,6 +22,7 @@ import { GroupNotFoundException } from '@app/group-application/exception/group-n import { CannotApplicateException } from '@src/app/group-application/exception/cannot-applicate.exception'; import { CheckJoiningGroupResonse } from '@app/group-application/dto/check-joining-group-response.dto'; import { ApplicationNotFoundException } from '@app/group-application/exception/application-not-found.exception'; +import { ApplicationWithUserInfoResponse } from '@app/group-application/dto/application-with-user-info-response.dto'; @Controller('group-applications') @JwtAuth() @@ -59,6 +68,22 @@ export class GroupApplicationController { return ResponseEntity.OK_WITH_DATA(data); } + @Get('participants') + @ApiSuccessResponse(HttpStatus.OK, ApplicationWithUserInfoResponse, { + isArray: true, + }) + @ApiErrorResponse(GroupNotFoundException) + async getAllParticipants( + @CurrentUser() user: User, + @Query('groupArticleId', ParseIntPipe) groupArticleId: number, + ) { + const data = await this.groupApplicationService.getAllParticipants( + user, + groupArticleId, + ); + return ResponseEntity.OK_WITH_DATA(data); + } + @Post('cancel') @ApiSuccessResponse(HttpStatus.NO_CONTENT) @ApiErrorResponse( diff --git a/backend/src/app/group-application/group-application.repository.ts b/backend/src/app/group-application/group-application.repository.ts index 6d1373b0..e2e0a8cb 100644 --- a/backend/src/app/group-application/group-application.repository.ts +++ b/backend/src/app/group-application/group-application.repository.ts @@ -20,4 +20,16 @@ export class GroupApplicationRepository extends Repository { ) { return this.findOneBy({ userId, groupId, status }); } + + findAllApplicationByGroup(groupId: number) { + return this.find({ + relations: { + user: true, + }, + where: { + groupId, + status: GROUP_APPLICATION_STATUS.REGISTER, + }, + }); + } } diff --git a/backend/src/app/group-application/group-application.service.ts b/backend/src/app/group-application/group-application.service.ts index 246b890a..8111928f 100644 --- a/backend/src/app/group-application/group-application.service.ts +++ b/backend/src/app/group-application/group-application.service.ts @@ -10,6 +10,8 @@ import { GroupArticle } from '@app/group-article/entity/group-article.entity'; import { User } from '@app/user/entity/user.entity'; import { Group } from '@app/group-article/entity/group.entity'; import { ApplicationNotFoundException } from '@app/group-application/exception/application-not-found.exception'; +import { UserInfo } from '@app/group-application/dto/user-info.dto'; +import { ApplicationWithUserInfoResponse } from '@src/app/group-application/dto/application-with-user-info-response.dto'; @Injectable() export class GroupApplicationService { @@ -22,11 +24,11 @@ export class GroupApplicationService { const groupArticle = await this.groupArticleRespository.findById( groupArticleId, ); + await this.validateGroupArticle(groupArticle); + const group = groupArticle.group; const application = await this.findGroupApplication(user, group); - await this.validateGroupArticle(groupArticle); - return { groupArticle, group, @@ -57,7 +59,6 @@ export class GroupApplicationService { if (!groupArticle) { throw new GroupNotFoundException(); } - return groupArticle; } private validateUserTarget(currentUser: User, groupArticle: GroupArticle) { @@ -103,4 +104,34 @@ export class GroupApplicationService { application.cancel(); await this.groupApplicationRepository.save(application); } + + async getAllParticipants(user: User, groupArticleId: number) { + const { group } = await this.getGroupApplicationContext( + user, + groupArticleId, + ); + + return this.getApplicationWithUserInfo(group); + } + + private async getApplicationWithUserInfo(group: Group) { + const allApplication = + await this.groupApplicationRepository.findAllApplicationByGroup(group.id); + + const applicationWithUserInfoList = allApplication.map( + async (application) => { + const user = await application.user; + return ApplicationWithUserInfoResponse.from( + UserInfo.from(user), + application, + ); + }, + ); + + return await Promise.all( + applicationWithUserInfoList.map((applicationWithUserInfo) => { + return applicationWithUserInfo; + }), + ); + } } From 877adb5729440e4348a2c78cfd8d9de92e7f625c Mon Sep 17 00:00:00 2001 From: Gakko <90585081+pythonstrup@users.noreply.github.com> Date: Thu, 1 Dec 2022 22:01:44 +0900 Subject: [PATCH 072/142] =?UTF-8?q?[Feature]=20=EB=AA=85=EC=84=B8=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=EC=9C=BC=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20?= =?UTF-8?q?=EC=8B=A0=EC=B2=AD=20=EC=97=AC=EB=B6=80=20=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?API=20=EC=88=98=EC=A0=95=20(#172)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * โ™ป๏ธ refactor: ๋ช…์„ธ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•œ API ์ˆ˜์ • - GET => POST - Body => Query String * ๐Ÿฅ… chore: status ๊ฒฝ๋กœ ์ถ”๊ฐ€ --- .../app/group-application/group-application.controller.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/backend/src/app/group-application/group-application.controller.ts b/backend/src/app/group-application/group-application.controller.ts index c85503a4..49a8c735 100644 --- a/backend/src/app/group-application/group-application.controller.ts +++ b/backend/src/app/group-application/group-application.controller.ts @@ -52,14 +52,13 @@ export class GroupApplicationController { return ResponseEntity.CREATED_WITH_DATA(data); } - @Post('/status') + @Get('/status') @ApiSuccessResponse(HttpStatus.OK, CheckJoiningGroupResonse) @ApiErrorResponse(GroupNotFoundException) async checkJoinedGroup( @CurrentUser() user: User, - @Body() groupApplicationRequest: GroupApplicationRequest, + @Query('groupArticleId', ParseIntPipe) groupArticleId: number, ) { - const groupArticleId = groupApplicationRequest.groupArticleId; const isJoined = await this.groupApplicationService.checkJoinedGroup( user, groupArticleId, From 4f3ffbd67ae3e3486fdd073e5c2a61804151eff2 Mon Sep 17 00:00:00 2001 From: MinGyeong Park <37508296+kong430@users.noreply.github.com> Date: Thu, 1 Dec 2022 22:35:19 +0900 Subject: [PATCH 073/142] =?UTF-8?q?[Feature]=20=EC=9C=A0=EC=A0=80=20?= =?UTF-8?q?=ED=94=84=EB=A1=9C=ED=95=84=20=EC=A1=B0=ED=9A=8C=20API=20?= =?UTF-8?q?=EC=97=B0=EA=B2=B0=20(#170)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :sparkles: feature: ๋‹ค๋ฅธ ์œ ์ € ํ”„๋กœํ•„ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ * :sparkles: feature: user profile querykey ๋ณ€๊ฒฝ] * :recycle: refactor: ๋ฆฌ๋ทฐ ๋ฐ˜์˜ query์—์„œ id๋ฅผ ๊ตฌ์กฐ๋ถ„ํ•ดํ•˜์—ฌ ๊ฐ€์ ธ์˜ด --- frontend/src/hooks/queries/useFetchProfile.ts | 31 +++++++++++++++++++ frontend/src/pages/user/[id].tsx | 19 ++++++++++-- 2 files changed, 47 insertions(+), 3 deletions(-) create mode 100644 frontend/src/hooks/queries/useFetchProfile.ts diff --git a/frontend/src/hooks/queries/useFetchProfile.ts b/frontend/src/hooks/queries/useFetchProfile.ts new file mode 100644 index 00000000..9ae5bc9f --- /dev/null +++ b/frontend/src/hooks/queries/useFetchProfile.ts @@ -0,0 +1,31 @@ +import axios, { AxiosError, AxiosResponse } from 'axios'; + +import useAuthQuery from '@hooks/useAuthQuery'; +import { UserType } from '@typings/types'; + +const getUserProfile = async (id: number) => { + return axios.get(`${process.env.NEXT_PUBLIC_API_URL}/v1/users/${id}`, { + params: { id }, + withCredentials: true, + }); +}; + +interface ResponseType { + status: string; + message: string; + data: UserType; +} + +const useFetchProfile = (id: number) => { + const { data, isLoading, isFetching } = useAuthQuery< + AxiosResponse, + AxiosError, + UserType + >(['profile', id], () => getUserProfile(id), { + select: (res) => res.data.data, + }); + + return { profile: data, isLoading, isFetching }; +}; + +export default useFetchProfile; diff --git a/frontend/src/pages/user/[id].tsx b/frontend/src/pages/user/[id].tsx index cd284407..69c3c32e 100644 --- a/frontend/src/pages/user/[id].tsx +++ b/frontend/src/pages/user/[id].tsx @@ -1,24 +1,37 @@ +import { useRouter } from 'next/router'; + import styled from '@emotion/styled'; import Header from '@components/common/Header'; import DetailTitle from '@components/common/Header/DetailTitle'; import PageLayout from '@components/common/PageLayout'; import Profile from '@components/common/Profile'; -import { dummyUser } from '@constants/dummy'; import { PAGE_TITLE } from '@constants/pageTitle'; +import useFetchProfile from '@hooks/queries/useFetchProfile'; const UserProfile = () => { + const { + query: { id }, + } = useRouter(); + const { profile, isFetching } = useFetchProfile(Number(id)); + return ( } + leftNode={ + + } /> } > - + {/* TODO ๋กœ๋”ฉ์ค‘ */} + {isFetching ?
    ๋กœ๋”ฉ์ค‘
    : }
    From d49646d1d52ef082489661a42a76ed86f5513566 Mon Sep 17 00:00:00 2001 From: Gakko <90585081+pythonstrup@users.noreply.github.com> Date: Thu, 1 Dec 2022 22:39:50 +0900 Subject: [PATCH 074/142] =?UTF-8?q?[BUGFIX]=20userName=20=EC=A4=91?= =?UTF-8?q?=EB=B3=B5=20=ED=99=95=EC=9D=B8=20API=20(#174)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ๐Ÿ› fix: ์œ ์ € ์ค‘๋ณต ์ฒดํฌ ๋””๋ฒ„๊ทธ * ๐Ÿ› fix: User Repository ์˜ค๋ฅ˜ ๋ณ€๊ฒฝ --- backend/src/app/user/user.controller.ts | 6 ++++-- backend/src/app/user/user.repository.ts | 8 ++++---- backend/src/app/user/user.service.ts | 5 +++-- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/backend/src/app/user/user.controller.ts b/backend/src/app/user/user.controller.ts index 406e4c02..92cda78a 100644 --- a/backend/src/app/user/user.controller.ts +++ b/backend/src/app/user/user.controller.ts @@ -36,8 +36,10 @@ export class UserController { @Post('username/is-occupied') @JwtAuth() @ApiSuccessResponse(HttpStatus.OK, UserNameUniqueResponse) - checkUsernameUnique(@Body() userNameUniqueRequest: UserNameUniqueRequest) { - const result = this.userService.checkUsernameUnique( + async checkUsernameUnique( + @Body() userNameUniqueRequest: UserNameUniqueRequest, + ) { + const result = await this.userService.checkUsernameUnique( userNameUniqueRequest.userName, ); const data = UserNameUniqueResponse.from(result); diff --git a/backend/src/app/user/user.repository.ts b/backend/src/app/user/user.repository.ts index fab2e47b..3fffc023 100644 --- a/backend/src/app/user/user.repository.ts +++ b/backend/src/app/user/user.repository.ts @@ -1,4 +1,4 @@ -import { DataSource, Repository } from 'typeorm'; +import { DataSource, IsNull, Repository } from 'typeorm'; import { User } from '@app/user/entity/user.entity'; import { Injectable } from '@nestjs/common'; @@ -13,15 +13,15 @@ export class UserRepository extends Repository { } findBySocial(socialId: string, socialType: string) { - return this.findOneBy({ socialId, socialType, deletedAt: null }); + return this.findOneBy({ socialId, socialType, deletedAt: IsNull() }); } findByUsername(userName: string) { - return this.findOneBy({ userName, deletedAt: null }); + return this.findOneBy({ userName }); } findById(id: number) { - return this.findOneBy({ id, deletedAt: null }); + return this.findOneBy({ id, deletedAt: IsNull() }); } updateUser(user: User) { diff --git a/backend/src/app/user/user.service.ts b/backend/src/app/user/user.service.ts index 57d29fde..3afa3c37 100644 --- a/backend/src/app/user/user.service.ts +++ b/backend/src/app/user/user.service.ts @@ -6,8 +6,9 @@ import { UserNotFoundException } from '@app/user/exception/user-not-found.except export class UserService { constructor(private readonly userRepository: UserRepository) {} - checkUsernameUnique(userName: string) { - return this.userRepository.findByUsername(userName) ? false : true; + async checkUsernameUnique(userName: string) { + const user = await this.userRepository.findByUsername(userName); + return user ? true : false; } async findUserById(id: number) { From ee120a13a0342a72ab9b8905c0de96c83d5bcb46 Mon Sep 17 00:00:00 2001 From: yangseungchan Date: Thu, 1 Dec 2022 23:12:52 +0900 Subject: [PATCH 075/142] =?UTF-8?q?[Feature]=20=ED=94=84=EB=A1=9C=ED=95=84?= =?UTF-8?q?=20=EC=88=98=EC=A0=95=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= =?UTF-8?q?=20(#176)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * โ™ป๏ธ refactor: ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ ์ƒํƒœ๊ฐ’ ๊ตฌ์กฐ ๊ฐœ์„  * โ™ป๏ธ refactor: axios ๊ณตํ†ต ๋กœ์ง์„ axios ์ธ์Šคํ„ด์Šค๋กœ ์ฒ˜๋ฆฌ * โœจ feature: ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ๊ณตํ†ต ๋กœ์ง ๊ตฌํ˜„ * ๐Ÿฅ… chore: RouterTransition ์ˆ˜์ • * โœจ feature: ArticleEditor ์ปดํฌ๋„ŒํŠธ ์—๋””ํ„ฐ ์ด๋ฏธ์ง€์—…๋กœ๋“œ ํ•ธ๋“ค๋Ÿฌ ์ถ”๊ฐ€ * ๐Ÿฅ… chore: notification ์„ธํŒ… * โœจ feature: ๊ฒŒ์‹œ๊ธ€ ์—…๋กœ๋“œ ๋กœ์ง ์ถ”๊ฐ€ * ๐Ÿฅ… chore: ๋กœ๊ทธ์ธ ๋ฆฌ๋‹ค์ด๋ ‰์…˜ ๋กœ์ง ์ˆ˜์ • * ๐Ÿฅ… chore: axios ๊ณตํ†ต ๋กœ์ง ์ˆ˜์ • * ๐Ÿฅ… chore: handleUploadImage -> uploadImageFile * ๐Ÿ› fix: RouterTransition ์ปดํฌ๋„ŒํŠธ ์œ„์น˜ ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: ci ์žฌ์‹คํ–‰ ์ปค๋ฐ‹ * โœจ feature: ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ + ์ˆ˜์ • API ์—ฐ๋™ * ๐Ÿฅ… chore: ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ๋กœ์ง ์œ„์น˜ ์ˆ˜์ • * โœจ feature: ๋น„๋™๊ธฐ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋กœ์ง ์ถ”๊ฐ€ * โ™ป๏ธ refactor: ํ”„๋กœํ•„ ์ˆ˜์ • ๋กœ์ง์„ useMutate๋กœ ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: LoginRedirect ๋กœ์ง ๊ฐœ์„  * ๐Ÿฅ… chore: API ์‘๋‹ต ํƒ€์ž… ์ˆ˜์ • * ๐Ÿฅ… chore: throwError ํ•จ์ˆ˜ ์ด๋ฆ„ ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: useEditMyProfile๋กœ ์ด๋ฆ„ ํ†ต์ผ * โœจ feature: toast ๊ณตํ†ต ๋กœ์ง ์ถ”๊ฐ€ --- .../article/ArticleEditor/index.tsx | 10 +-- .../common/ErrorBoundary/ApiErrorBoundary.tsx | 7 +- .../components/common/LoginRedirect/index.tsx | 5 +- .../src/hooks/queries/useEditMyProfile.ts | 19 +++++ frontend/src/hooks/useAsyncError.ts | 17 +++++ frontend/src/hooks/useAuthMutation.ts | 7 +- frontend/src/pages/article/write/index.tsx | 31 +++------ frontend/src/pages/my/edit.tsx | 69 +++++++++++++++---- frontend/src/typings/types.ts | 2 +- frontend/src/utils/toast.tsx | 28 ++++++++ frontend/src/utils/uploadImage.ts | 19 +++++ 11 files changed, 169 insertions(+), 45 deletions(-) create mode 100644 frontend/src/hooks/queries/useEditMyProfile.ts create mode 100644 frontend/src/hooks/useAsyncError.ts create mode 100644 frontend/src/utils/toast.tsx create mode 100644 frontend/src/utils/uploadImage.ts diff --git a/frontend/src/components/article/ArticleEditor/index.tsx b/frontend/src/components/article/ArticleEditor/index.tsx index 36b89961..e77037f8 100644 --- a/frontend/src/components/article/ArticleEditor/index.tsx +++ b/frontend/src/components/article/ArticleEditor/index.tsx @@ -5,7 +5,8 @@ import styled from '@emotion/styled'; import { LoadingOverlay, Text } from '@mantine/core'; import { RichTextEditorProps } from '@mantine/rte'; -import useImageUpload from '@hooks/useImageUpload'; +import useAsyncError from '@hooks/useAsyncError'; +import uploadImage from '@utils/uploadImage'; const RichTextEditor = dynamic(() => import('@mantine/rte'), { ssr: false, @@ -19,14 +20,13 @@ const RichTextEditor = dynamic(() => import('@mantine/rte'), { interface Props extends RichTextEditorProps {} const ArticleEditor = (props: Props) => { - const { uploadImageFile } = useImageUpload(); - + const throwAsyncError = useAsyncError(); const handleEditorImageUpload = useCallback( async (file: File) => { try { - return (await uploadImageFile(file)).url; + return (await uploadImage(file)).url; } catch (err) { - throw new Error('์—๋””ํ„ฐ ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ์‹คํŒจ'); + throwAsyncError('์—๋””ํ„ฐ ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ์— ์‹คํŒจํ•˜์˜€์Šต๋‹ˆ๋‹ค.'); } }, // ๋นˆ ์นธ์œผ๋กœ ๋‘์ง€ ์•Š์œผ๋ฉด ์—๋””ํ„ฐ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ ์•ˆํ•จ! diff --git a/frontend/src/components/common/ErrorBoundary/ApiErrorBoundary.tsx b/frontend/src/components/common/ErrorBoundary/ApiErrorBoundary.tsx index 7eb27690..63634990 100644 --- a/frontend/src/components/common/ErrorBoundary/ApiErrorBoundary.tsx +++ b/frontend/src/components/common/ErrorBoundary/ApiErrorBoundary.tsx @@ -30,7 +30,12 @@ class ApiErrorBoundary extends Component { const { error } = this.state; const { children } = this.props; if (error) { - return ; + return ( + <> + {children} + + + ); } return children; } diff --git a/frontend/src/components/common/LoginRedirect/index.tsx b/frontend/src/components/common/LoginRedirect/index.tsx index 162ac6a7..df7aa92a 100644 --- a/frontend/src/components/common/LoginRedirect/index.tsx +++ b/frontend/src/components/common/LoginRedirect/index.tsx @@ -9,8 +9,9 @@ const LoginRedirect = () => { const router = useRouter(); useEffect(() => { - const noRedirectPaths = ['/', '/login']; - if (!isLoading && !data && !noRedirectPaths.includes(router.pathname)) { + const authRequiredPaths = ['/my', '/notification', '/article', '/user']; + + if (!isLoading && !data && authRequiredPaths.some((path) => router.pathname.includes(path))) { void router.push('/login'); } }, [data, isLoading, router]); diff --git a/frontend/src/hooks/queries/useEditMyProfile.ts b/frontend/src/hooks/queries/useEditMyProfile.ts new file mode 100644 index 00000000..07bed1fe --- /dev/null +++ b/frontend/src/hooks/queries/useEditMyProfile.ts @@ -0,0 +1,19 @@ +import { useQueryClient } from '@tanstack/react-query'; + +import useAuthMutation from '@hooks/useAuthMutation'; +import { UserType } from '@typings/types'; +import { clientAxios } from '@utils/commonAxios'; + +const updateProfile = (userProfile: Omit) => + clientAxios.put('/v1/my-info', userProfile); + +const useEditMyProfile = () => { + const queryClient = useQueryClient(); + return useAuthMutation(updateProfile, { + onSuccess: async () => { + await queryClient.invalidateQueries(['my']); + }, + }); +}; + +export default useEditMyProfile; diff --git a/frontend/src/hooks/useAsyncError.ts b/frontend/src/hooks/useAsyncError.ts new file mode 100644 index 00000000..5039783f --- /dev/null +++ b/frontend/src/hooks/useAsyncError.ts @@ -0,0 +1,17 @@ +import { useCallback, useState } from 'react'; + +import { AxiosError } from 'axios'; + +const useAsyncError = () => { + const [, setError] = useState(); + return useCallback( + (msg: string) => { + setError(() => { + throw new AxiosError(msg); + }); + }, + [setError] + ); +}; + +export default useAsyncError; diff --git a/frontend/src/hooks/useAuthMutation.ts b/frontend/src/hooks/useAuthMutation.ts index 4b3d7843..c3ac4e20 100644 --- a/frontend/src/hooks/useAuthMutation.ts +++ b/frontend/src/hooks/useAuthMutation.ts @@ -14,7 +14,10 @@ const useAuthMutation = < mutationFunc: MutationFunction, options?: Omit, 'mutationFn'> ) => { - const { mutate, error } = useMutation(mutationFunc, options); + const { error, ...rest } = useMutation( + mutationFunc, + options + ); if (error && error instanceof AxiosError) { if (error.response.status === 401) { @@ -23,7 +26,7 @@ const useAuthMutation = < throw error; } - return { mutate }; + return { ...rest }; }; export default useAuthMutation; diff --git a/frontend/src/pages/article/write/index.tsx b/frontend/src/pages/article/write/index.tsx index 09098f67..d17d8f6f 100644 --- a/frontend/src/pages/article/write/index.tsx +++ b/frontend/src/pages/article/write/index.tsx @@ -4,7 +4,6 @@ import { useState } from 'react'; import styled from '@emotion/styled'; import { ActionIcon, FileInput, Slider, Text } from '@mantine/core'; -import { showNotification } from '@mantine/notifications'; import { IconCheck, IconUpload, IconUser } from '@tabler/icons'; import ArticleEditor from '@components/article/ArticleEditor'; @@ -17,9 +16,11 @@ import PageLayout from '@components/common/PageLayout'; import TextInput from '@components/common/TextInput'; import { Category, CategoryKr } from '@constants/category'; import { Location, LocationKr } from '@constants/location'; -import useImageUpload from '@hooks/useImageUpload'; +import useAsyncError from '@hooks/useAsyncError'; import { ImageUploadType } from '@typings/types'; import { clientAxios } from '@utils/commonAxios'; +import { showToast } from '@utils/toast'; +import uploadImage from '@utils/uploadImage'; interface ArticleInput { category: Category | null; @@ -33,6 +34,7 @@ interface ArticleInput { const WritePage = () => { const router = useRouter(); + const throwAsyncError = useAsyncError(); const [confirmModalOpen, setConfirmModalOpen] = useState(false); const [articleInput, setArticleInput] = useState({ category: null, @@ -44,7 +46,6 @@ const WritePage = () => { uploadedImage: null, }); const { category, location, maxCapacity, title, contents, chatUrl, uploadedImage } = articleInput; - const { uploadImageFile } = useImageUpload(); const possibleToSubmit = category && @@ -64,37 +65,23 @@ const WritePage = () => { thumbnail: uploadedImage.key, }); // TODO : mutation ๋กœ์ง ์ถ”๊ฐ€? - // Modal, notification ์ค‘ ๊ณ ๋ฅด๊ธฐ - showNotification({ - color: 'indigo', + showToast({ title: '๊ฒŒ์‹œ๊ธ€ ๋“ฑ๋ก ์™„๋ฃŒ!', message: '์ด์ œ ๋ชจ์ง‘ ์™„๋ฃŒ ๋˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ ค์ฃผ์„ธ์š”!', - icon: , - autoClose: 5000, - styles: (theme) => ({ - root: { - paddingTop: '1.6rem', - paddingBottom: '1.6rem', - }, - title: { - fontSize: theme.fontSizes.lg, - fontWeight: 700, - }, - }), }); + void router.push('/'); } catch (err) { - // TODO ์—๋Ÿฌ์ฒ˜๋ฆฌ... - console.log(err); + throwAsyncError('๊ฒŒ์‹œ๊ธ€ ๋“ฑ๋ก์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.'); } }; const handleChangeImage = async (imageFile: File) => { try { - const uploadedImage = await uploadImageFile(imageFile); + const uploadedImage = await uploadImage(imageFile); setArticleInput((prev) => ({ ...prev, uploadedImage })); } catch (err) { - throw new Error((err as Error).message); + throwAsyncError('์ด๋ฏธ์ง€ ์—…๋กœ๋“œ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.'); } }; diff --git a/frontend/src/pages/my/edit.tsx b/frontend/src/pages/my/edit.tsx index ac49b273..80842aa0 100644 --- a/frontend/src/pages/my/edit.tsx +++ b/frontend/src/pages/my/edit.tsx @@ -1,4 +1,5 @@ import Image from 'next/image'; +import { useRouter } from 'next/router'; import { ChangeEvent, useEffect, useState } from 'react'; import styled from '@emotion/styled'; @@ -9,16 +10,18 @@ import Header from '@components/common/Header'; import DetailTitle from '@components/common/Header/DetailTitle'; import PageLayout from '@components/common/PageLayout'; import TextInput from '@components/common/TextInput'; +import useEditMyProfile from '@hooks/queries/useEditMyProfile'; import useFetchMyInfo from '@hooks/queries/useFetchMyInfo'; +import useAsyncError from '@hooks/useAsyncError'; import { UserType } from '@typings/types'; - -/** - * TODO : ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ์—ฐ๋™ - * ๊ฒŒ์‹œ๊ธ€ ์ˆ˜์ • API ์—ฐ๋™ - */ +import { showToast } from '@utils/toast'; +import uploadImage from '@utils/uploadImage'; const MyEditPage = () => { const { data: myProfile } = useFetchMyInfo(); + const { mutate: updateMyProfile } = useEditMyProfile(); + const throwAsyncError = useAsyncError(); + const router = useRouter(); const [userDataInput, setUserDataInput] = useState>({ userName: '', @@ -28,6 +31,8 @@ const MyEditPage = () => { blogUrl: '', }); + const { profileImage, userName, description, githubUrl, blogUrl } = userDataInput; + useEffect(() => { if (myProfile) { const { id, ...rest } = myProfile; @@ -35,11 +40,41 @@ const MyEditPage = () => { } }, [myProfile]); + const posibleToSubmit = + myProfile && + profileImage.length > 0 && + userName.length > 0 && + userName.length <= 10 && + description.length <= 20; + const handleUserDataChange = (e: ChangeEvent) => { const { name, value } = e.target; setUserDataInput((prev) => ({ ...prev, [name]: value })); }; + const handleChangeImage = async (imageFile: File) => { + try { + const { url: imageUrl } = await uploadImage(imageFile); + setUserDataInput((prev) => ({ ...prev, profileImage: imageUrl })); + } catch (err) { + throwAsyncError('์ด๋ฏธ์ง€ ์—…๋กœ๋“œ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.'); + } + }; + + const handleClickProfileChangeBtn = async () => { + try { + updateMyProfile(userDataInput); + + showToast({ + title: 'ํ”„๋กœํ•„ ์ˆ˜์ • ์™„๋ฃŒ!', + message: '๋ฉ‹์ง€๊ฒŒ ๋ฐ”๋€ ํ”„๋กœํ•„์„ ํ™•์ธํ•ด๋ณด์„ธ์š”!', + }); + void router.push('/my'); + } catch (err) { + throwAsyncError('ํ”„๋กœํ•„ ์ˆ˜์ •์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.'); + } + }; + if (!myProfile) return null; return ( @@ -47,7 +82,11 @@ const MyEditPage = () => {
    } rightNode={ - alert('๊ฒŒ์‹œ๊ธ€ ๋“ฑ๋ก!')}> + } @@ -56,7 +95,12 @@ const MyEditPage = () => { {!myProfile ? ( ) : ( - + 0 ? profileImage : myProfile.profileImage} + alt="profile-image" + width={120} + height={120} + /> )} @@ -67,15 +111,16 @@ const MyEditPage = () => { accept="image/*" icon={} styles={{ label: { paddingBottom: '0.4rem' } }} + onChange={handleChangeImage} /> { disabled label="Github ๋งํฌ" placeholder="Github ๋งํฌ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”" - value={userDataInput.githubUrl} + value={githubUrl} /> { name="description" placeholder="์ž์‹ ์— ๋Œ€ํ•ด ํ•œ ์ค„๋กœ ์†Œ๊ฐœํ•ด์ฃผ์„ธ์š”" onChange={handleUserDataChange} - value={userDataInput.description} + value={description} maxLength={20} /> diff --git a/frontend/src/typings/types.ts b/frontend/src/typings/types.ts index eec5b514..3c959f24 100644 --- a/frontend/src/typings/types.ts +++ b/frontend/src/typings/types.ts @@ -73,7 +73,7 @@ interface ImageUploadType { url: string; } -type ApiResponse = AxiosResponse<{ data: T }>; +type ApiResponse = AxiosResponse<{ data: T; messasge: string; status: string }>; export type { ApiResponse, diff --git a/frontend/src/utils/toast.tsx b/frontend/src/utils/toast.tsx new file mode 100644 index 00000000..46513554 --- /dev/null +++ b/frontend/src/utils/toast.tsx @@ -0,0 +1,28 @@ +import { showNotification } from '@mantine/notifications'; +import { IconCheck } from '@tabler/icons'; + +interface ToastProps { + title: string; + message: string; +} + +const showToast = ({ title, message }: ToastProps) => + showNotification({ + title, + message, + color: 'indigo', + icon: , + autoClose: 4000, + styles: (theme) => ({ + root: { + paddingTop: '1.6rem', + paddingBottom: '1.6rem', + }, + title: { + fontSize: theme.fontSizes.lg, + fontWeight: 700, + }, + }), + }); + +export { showToast }; diff --git a/frontend/src/utils/uploadImage.ts b/frontend/src/utils/uploadImage.ts new file mode 100644 index 00000000..fac4eca3 --- /dev/null +++ b/frontend/src/utils/uploadImage.ts @@ -0,0 +1,19 @@ +import { ImageUploadType } from '@typings/types'; +import { clientAxios } from '@utils/commonAxios'; + +const uploadImage = async (file: File) => { + const formData = new FormData(); + formData.append('files', file); + const { + data: { + data: { 0: imageData }, + }, + } = await clientAxios.post('/v1/images/upload', formData, { + headers: { + 'Content-Type': 'multipart/form-data', + }, + }); + return imageData as ImageUploadType; +}; + +export default uploadImage; From d3a44c90de4087c50d61bea6a199cdc30022a87d Mon Sep 17 00:00:00 2001 From: MinGyeong Park <37508296+kong430@users.noreply.github.com> Date: Thu, 1 Dec 2022 23:13:23 +0900 Subject: [PATCH 076/142] =?UTF-8?q?[BUGFIX]=20=EB=AA=A8=EC=A7=91=20?= =?UTF-8?q?=EA=B2=8C=EC=8B=9C=EA=B8=80=20=EC=B9=B4=EB=93=9C=20=EB=84=88?= =?UTF-8?q?=EB=B9=84=20=EC=88=98=EC=A0=95=20(#178)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :pencil2: fix: ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€ card title overflow ์ˆ˜์ • ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€์˜ title์ด ๊ธธ์–ด์งˆ ๋•Œ, grid ๊ทœ๊ฒฉ์ด ๊นจ์ง€๊ณ  ์นด๋“œ์˜ ๋„ˆ๋น„๊ฐ€ ๋„“์–ด์ง€๋Š” ๊ฒƒ ์ˆ˜์ • * ๐Ÿฅ… chore: ArticleCard ์ด๋ฏธ์ง€ ๋ถ€๋ถ„ ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: ์ด๋ฏธ์ง€ ์‚ฌ์ด์ฆˆ ์˜ต์…˜ ์ถ”๊ฐ€ Co-authored-by: Yangseungchan --- .../common/GroupArticleCard/index.tsx | 13 +++++++++++-- .../common/GroupArticleCard/styles.ts | 17 ++++++++++++++++- frontend/src/pages/index.tsx | 8 ++++++-- 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/frontend/src/components/common/GroupArticleCard/index.tsx b/frontend/src/components/common/GroupArticleCard/index.tsx index d9f5315b..4ac4ab6a 100644 --- a/frontend/src/components/common/GroupArticleCard/index.tsx +++ b/frontend/src/components/common/GroupArticleCard/index.tsx @@ -1,4 +1,4 @@ -import { Image } from '@mantine/core'; +import Image from 'next/image'; import ArticleTag from '@components/common/ArticleTag'; import { @@ -6,6 +6,7 @@ import { CardWrapper, ClosedText, DimmedBox, + ImageWrapper, InfoWrapper, TagWrapper, TitleText, @@ -29,7 +30,15 @@ const GroupArticleCard = ({ article }: Props) => { ๋ชจ์ง‘ ์ข…๋ฃŒ )} - {'thumbnail-image'} + + {'thumbnail-image'} + theme.white}; font-size: 2rem; @@ -58,4 +64,13 @@ const CapacityText = styled.span` color: ${({ theme }) => theme.colors.gray[6]}; `; -export { CardWrapper, DimmedBox, InfoWrapper, TagWrapper, TitleText, CapacityText, ClosedText }; +export { + CardWrapper, + DimmedBox, + ImageWrapper, + InfoWrapper, + TagWrapper, + TitleText, + CapacityText, + ClosedText, +}; diff --git a/frontend/src/pages/index.tsx b/frontend/src/pages/index.tsx index 2c48842c..737e0929 100644 --- a/frontend/src/pages/index.tsx +++ b/frontend/src/pages/index.tsx @@ -113,9 +113,9 @@ const Main = () => { {articles.map((article) => ( -
    + -
    + ))}
    @@ -162,3 +162,7 @@ const ListWrapper = styled.div` grid-template-columns: repeat(2, 1fr); grid-gap: 1.3rem; `; + +const CardLink = styled.div` + overflow: auto; +`; From f55ce04e35120220e026eb2e46f627bcd0ace0e2 Mon Sep 17 00:00:00 2001 From: Kim Myeongil <67570061+username1103@users.noreply.github.com> Date: Thu, 1 Dec 2022 23:19:45 +0900 Subject: [PATCH 077/142] =?UTF-8?q?[BUGFIX]=20=EC=9D=B4=EB=AF=B8=EC=A7=80?= =?UTF-8?q?=20url=EC=9D=B4=20=EC=A0=9C=EB=8C=80=EB=A1=9C=20=EC=A0=84?= =?UTF-8?q?=EB=8B=AC=EB=90=98=EC=A7=80=20=EC=95=8A=EB=8A=94=20=EB=AC=B8?= =?UTF-8?q?=EC=A0=9C=20=EC=88=98=EC=A0=95=20(#181)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :bug: fix: ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ์‹œ thumbnail๊ฐ’์„ ์ด๋ฏธ์ง€ url๋กœ ์ˆ˜์ • * :bug: fix: ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก ์กฐํšŒ์‹œ thumbnail์„ ๋ณ€ํ™˜ํ•˜์ง€ ์•Š๊ณ  ๊ทธ๋Œ€๋กœ ์ „๋‹ฌ * :bug: fix: ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€ ์ƒ์„ธ ์กฐํšŒ์‹œ thumbnail์„ ๋ณ€ํ™˜ํ•˜์ง€ ์•Š๊ณ  ๊ทธ๋Œ€๋กœ ์ „๋‹ฌ - GroupArticleModule์—์„œ ๋”์ด์ƒ ImageService๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„ ImageModule์ œ๊ฑฐ * :bug: fix: ์ด๋ฏธ์ง€ key๋ฅผ url๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฉ”์†Œ๋“œ ์ˆ˜์ • --- .../dto/get-group-article-detail-response.dto.ts | 10 ++-------- .../dto/group-article-register-request.dto.ts | 16 ++++++++++++---- .../dto/group-article-search-result.dto.ts | 5 ++--- .../group-article/group-article.controller.ts | 8 ++------ .../app/group-article/group-article.module.ts | 2 -- backend/src/app/image/image.service.ts | 9 ++------- 6 files changed, 20 insertions(+), 30 deletions(-) diff --git a/backend/src/app/group-article/dto/get-group-article-detail-response.dto.ts b/backend/src/app/group-article/dto/get-group-article-detail-response.dto.ts index 36bdb4fe..52aed16d 100644 --- a/backend/src/app/group-article/dto/get-group-article-detail-response.dto.ts +++ b/backend/src/app/group-article/dto/get-group-article-detail-response.dto.ts @@ -5,7 +5,6 @@ import { LOCATION, } from '@app/group-article/constants/group-article.constants'; import { IGroupArticleDetail } from '@app/group-article/dto/group-article-detail.interface'; -import { ImageService } from '@app/image/image.service'; import { ApiProperty } from '@nestjs/swagger'; import { Author } from '@app/group-article/dto/author.dto'; @@ -58,10 +57,7 @@ export class GetGroupArticleDetailResponse { @ApiProperty({ example: new Date(), description: '๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ์ผ' }) createdAt: Date; - static from( - groupArticleDetail: IGroupArticleDetail, - imageService: ImageService, - ) { + static from(groupArticleDetail: IGroupArticleDetail) { const res = new GetGroupArticleDetailResponse(); res.id = groupArticleDetail.id; res.title = groupArticleDetail.title; @@ -72,9 +68,7 @@ export class GetGroupArticleDetailResponse { profileImage: groupArticleDetail.userProfileImage, }; res.category = groupArticleDetail.groupCategoryName; - res.thumbnail = imageService.getStorageUrl([ - groupArticleDetail.thumbnail, - ])[0]; + res.thumbnail = groupArticleDetail.thumbnail; res.status = groupArticleDetail.status; res.location = groupArticleDetail.location; res.commentCount = groupArticleDetail.commentCount; diff --git a/backend/src/app/group-article/dto/group-article-register-request.dto.ts b/backend/src/app/group-article/dto/group-article-register-request.dto.ts index c1ef1acf..55134d6e 100644 --- a/backend/src/app/group-article/dto/group-article-register-request.dto.ts +++ b/backend/src/app/group-article/dto/group-article-register-request.dto.ts @@ -1,5 +1,12 @@ import { ApiProperty } from '@nestjs/swagger'; -import { IsEnum, IsNumber, IsString, Length, Min } from 'class-validator'; +import { + IsEnum, + IsNumber, + IsString, + IsUrl, + Length, + Min, +} from 'class-validator'; import { CATEGORY, LOCATION, @@ -52,11 +59,12 @@ export class GroupArticleRegisterRequest { maxCapacity: number; @ApiProperty({ - example: '1669282011949-761671c7-cc43-4cee-bcb5-4bf3fea9478b.png', - description: '์ธ๋„ค์ผ ์ด๋ฏธ์ง€๊ฐ€ ์ €์žฅ๋˜์–ด์žˆ๋Š” ์ฃผ์†Œ', + example: + 'https://kr.object.ncloudstorage.com/uploads/images/1669276833875-64adca9c-94cd-4162-a53f-f75e951e39db', + description: '์ธ๋„ค์ผ ์ด๋ฏธ์ง€๊ฐ€ ์ €์žฅ๋˜์–ด์žˆ๋Š” ์ฃผ์†Œ(url)', required: true, }) - @IsString() + @IsUrl() thumbnail: string; @ApiProperty({ diff --git a/backend/src/app/group-article/dto/group-article-search-result.dto.ts b/backend/src/app/group-article/dto/group-article-search-result.dto.ts index decbce6f..2f30bd9f 100644 --- a/backend/src/app/group-article/dto/group-article-search-result.dto.ts +++ b/backend/src/app/group-article/dto/group-article-search-result.dto.ts @@ -6,7 +6,6 @@ import { LOCATION, } from '@app/group-article/constants/group-article.constants'; import { IGroupArticleSearchResult } from '@app/group-article/dto/group-article-search-result.interface'; -import { ImageService } from '@app/image/image.service'; export class GroupArticleSearchResult { @ApiProperty({ example: 1, description: '๊ฒŒ์‹œ๊ธ€ ์•„์ด๋””' }) @@ -55,11 +54,11 @@ export class GroupArticleSearchResult { }) createdAt: Date; - static from(row: IGroupArticleSearchResult, imageService: ImageService) { + static from(row: IGroupArticleSearchResult) { const res = new GroupArticleSearchResult(); res.id = row.id; res.title = row.title; - res.thumbnail = imageService.getStorageUrl([row.thumbnail])[0]; + res.thumbnail = row.thumbnail; res.category = row.groupCategoryName; res.location = row.location; res.status = row.status; diff --git a/backend/src/app/group-article/group-article.controller.ts b/backend/src/app/group-article/group-article.controller.ts index bce30ebb..4ce8e95e 100644 --- a/backend/src/app/group-article/group-article.controller.ts +++ b/backend/src/app/group-article/group-article.controller.ts @@ -25,7 +25,6 @@ import { GroupArticleRepository } from '@app/group-article/repository/group-arti import { SearchGroupArticlesRequest } from '@app/group-article/dto/search-group-articles-request.dto'; import { SearchGroupArticleResponse } from '@app/group-article/dto/search-group-articles-response.dto'; import { GroupArticleSearchResult } from '@app/group-article/dto/group-article-search-result.dto'; -import { ImageService } from '@app/image/image.service'; import { CurrentUser } from '@decorator/current-user.decorator'; import { User } from '@app/user/entity/user.entity'; import { GetGroupArticleDetailResponse } from '@app/group-article/dto/get-group-article-detail-response.dto'; @@ -45,7 +44,6 @@ export class GroupArticleController { private readonly groupArticleService: GroupArticleService, private readonly groupCategoryRepository: GroupCategoryRepository, private readonly groupArticleRepository: GroupArticleRepository, - private readonly imageService: ImageService, ) {} @Post('/') @@ -130,9 +128,7 @@ export class GroupArticleController { result[1], query.currentPage, query.countPerPage, - result[0].map((row) => - GroupArticleSearchResult.from(row, this.imageService), - ), + result[0].map((row) => GroupArticleSearchResult.from(row)), ), ); } @@ -145,7 +141,7 @@ export class GroupArticleController { const groupArticleDetail = await this.groupArticleService.getDetailById(id); return ResponseEntity.OK_WITH_DATA( - GetGroupArticleDetailResponse.from(groupArticleDetail, this.imageService), + GetGroupArticleDetailResponse.from(groupArticleDetail), ); } diff --git a/backend/src/app/group-article/group-article.module.ts b/backend/src/app/group-article/group-article.module.ts index 7d0ac565..8cfa832e 100644 --- a/backend/src/app/group-article/group-article.module.ts +++ b/backend/src/app/group-article/group-article.module.ts @@ -4,10 +4,8 @@ import { GroupArticleService } from '@app/group-article/group-article.service'; import { GroupCategoryRepository } from '@app/group-article/repository/group-category.repository'; import { GroupRepository } from '@app/group-article/repository/group.repository'; import { GroupArticleRepository } from '@app/group-article/repository/group-article.repository'; -import { ImageModule } from '@app/image/image.module'; @Module({ - imports: [ImageModule], controllers: [GroupArticleController], providers: [ GroupArticleService, diff --git a/backend/src/app/image/image.service.ts b/backend/src/app/image/image.service.ts index d1e1964b..6243efbf 100644 --- a/backend/src/app/image/image.service.ts +++ b/backend/src/app/image/image.service.ts @@ -1,4 +1,4 @@ -import { Injectable, Logger } from '@nestjs/common'; +import { Injectable } from '@nestjs/common'; import { S3ConfigService } from '@src/common/config/s3/config.service'; import { Endpoint, S3 } from 'aws-sdk'; import * as path from 'path'; @@ -6,7 +6,6 @@ import { v4 } from 'uuid'; @Injectable() export class ImageService { - private readonly logger = new Logger(ImageService.name); private readonly s3: S3; constructor(private readonly s3ConfigService: S3ConfigService) { @@ -72,11 +71,7 @@ export class ImageService { getStorageUrl(keyList: string[]) { return keyList.map((key) => { - return path.join( - this.s3ConfigService.endpoint, - this.s3ConfigService.bucket, - key, - ); + return `${this.s3ConfigService.endpoint}/${this.s3ConfigService.bucket}/${key}`; }); } } From 852df2fe86127e1f2a1986f496886e254002b75d Mon Sep 17 00:00:00 2001 From: yangseungchan Date: Thu, 1 Dec 2022 23:32:03 +0900 Subject: [PATCH 078/142] =?UTF-8?q?[BUGFIX]=20=EC=97=85=EB=A1=9C=EB=93=9C?= =?UTF-8?q?=20=EC=8B=9C=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20url=EC=9D=84=20?= =?UTF-8?q?=EC=A0=84=EC=86=A1=20(#186)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/pages/article/write/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/pages/article/write/index.tsx b/frontend/src/pages/article/write/index.tsx index d17d8f6f..3b7188b9 100644 --- a/frontend/src/pages/article/write/index.tsx +++ b/frontend/src/pages/article/write/index.tsx @@ -62,7 +62,7 @@ const WritePage = () => { const { uploadedImage, ...rest } = articleInput; await clientAxios.post('/v1/group-articles', { ...rest, - thumbnail: uploadedImage.key, + thumbnail: uploadedImage.url, }); // TODO : mutation ๋กœ์ง ์ถ”๊ฐ€? showToast({ From 23548762525fc765f163ea0c1fc076870ea744d4 Mon Sep 17 00:00:00 2001 From: Kim Myeongil <67570061+username1103@users.noreply.github.com> Date: Thu, 1 Dec 2022 23:46:16 +0900 Subject: [PATCH 079/142] =?UTF-8?q?[Feature]=20=EC=82=AC=EC=9A=A9=EC=9E=90?= =?UTF-8?q?=20=EC=95=8C=EB=A6=BC=20=EC=84=A4=EC=A0=95=20=EC=83=81=ED=83=9C?= =?UTF-8?q?=20=EC=88=98=EC=A0=95=20=EB=B0=8F=20=EC=A1=B0=ED=9A=8C=20API=20?= =?UTF-8?q?(#175)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :sparkles: feature: ์•Œ๋ฆผ์„ค์ •์„ ์œ„ํ•œ enum ์ถ”๊ฐ€ * :sparkles: feature: ์ฒซ ๋กœ๊ทธ์ธ์‹œ ์•Œ๋ฆผ์„ค์ • ๋ฐ์ดํ„ฐ๋„ ์ถ”๊ฐ€๋˜๋„๋ก ์ˆ˜์ • * :sparkles: feature: ์•Œ๋ฆผ๋ชจ๋“ˆ ๋ฐ ์ปจํŠธ๋กค๋Ÿฌ ์ถ”๊ฐ€ * :sparkles: feature: GET /v1/notifications/settings ์•Œ๋ฆผ์„ค์ •์ƒํƒœ ์กฐํšŒ API ์ถ”๊ฐ€ * :sparkles: feature: PATCH /v1/notifications/settings/:id ์ถ”๊ฐ€ - ์•Œ๋ฆผ์„ค์ • ๋ณ€๊ฒฝ API ์ถ”๊ฐ€: ์„ค์ •์„ ON|OFF๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค - ํ•ด๋‹น ์„ค์ • ์ •๋ณด๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ NotificationSettingNotFoundException ๋ฐ˜ํ™˜ - ์ž์‹ ์˜ ์„ค์ •์ด ์•„๋‹Œ ๊ฒฝ์šฐ NotAccessibleException ๋ฐ˜ํ™˜ * :bug: fix: PATCH /v1/notifications/settings/:id/status๋กœ uri๋ณ€๊ฒฝ --- backend/src/app.module.ts | 2 + backend/src/app/auth/auth.service.ts | 21 +++++- .../constants/notification.constants.ts | 9 +++ .../get-notification-settings-response.dto.ts | 31 +++++++++ .../patch-notification-setting-request.dto.ts | 14 ++++ .../entity/notification-setting.entity.ts | 28 +++++++- .../exception/not-accessible.exception.ts | 7 ++ ...otification-setting-not-found.exception.ts | 7 ++ .../notification/notification.controller.ts | 64 +++++++++++++++++++ .../app/notification/notification.module.ts | 10 +++ .../app/notification/notification.service.ts | 31 +++++++++ .../notification-setting.repository.ts | 14 ++++ backend/src/setSwagger.ts | 2 + 13 files changed, 235 insertions(+), 5 deletions(-) create mode 100644 backend/src/app/notification/constants/notification.constants.ts create mode 100644 backend/src/app/notification/dto/get-notification-settings-response.dto.ts create mode 100644 backend/src/app/notification/dto/patch-notification-setting-request.dto.ts create mode 100644 backend/src/app/notification/exception/not-accessible.exception.ts create mode 100644 backend/src/app/notification/exception/notification-setting-not-found.exception.ts create mode 100644 backend/src/app/notification/notification.controller.ts create mode 100644 backend/src/app/notification/notification.module.ts create mode 100644 backend/src/app/notification/notification.service.ts create mode 100644 backend/src/app/notification/repository/notification-setting.repository.ts diff --git a/backend/src/app.module.ts b/backend/src/app.module.ts index 3829af94..13bbaf21 100644 --- a/backend/src/app.module.ts +++ b/backend/src/app.module.ts @@ -13,6 +13,7 @@ import { UserModule } from '@app/user/user.module'; import { MyInfoModule } from '@app/myinfo/myinfo.module'; import { CookieConfigModule } from '@config/cookie/config.module'; import { GroupApplicationModule } from '@app/group-application/group-application.module'; +import { NotificationModule } from '@app/notification/notification.module'; @Module({ imports: [ @@ -26,6 +27,7 @@ import { GroupApplicationModule } from '@app/group-application/group-application UserModule, MyInfoModule, GroupApplicationModule, + NotificationModule, ], controllers: [AppController], providers: [AppService], diff --git a/backend/src/app/auth/auth.service.ts b/backend/src/app/auth/auth.service.ts index cdbd1d4c..60ff9637 100644 --- a/backend/src/app/auth/auth.service.ts +++ b/backend/src/app/auth/auth.service.ts @@ -1,10 +1,16 @@ import { Injectable } from '@nestjs/common'; import { UserRepository } from '@app/user/user.repository'; import { User } from '@app/user/entity/user.entity'; +import { DataSource } from 'typeorm'; +import { NotificationSetting } from '@app/notification/entity/notification-setting.entity'; +import { NOTIFICATION_SETTING_TYPE } from '@app/notification/constants/notification.constants'; @Injectable() export class AuthService { - constructor(private readonly userRepository: UserRepository) {} + constructor( + private readonly userRepository: UserRepository, + private readonly dataSource: DataSource, + ) {} async socialLogin({ id, @@ -28,7 +34,18 @@ export class AuthService { blogUrl, socialType, }); - await this.userRepository.save(newUser); + + await this.dataSource.transaction(async (em) => { + await em.save(newUser); + await em.save([ + NotificationSetting.create(newUser, NOTIFICATION_SETTING_TYPE.GROUP), + NotificationSetting.create( + newUser, + NOTIFICATION_SETTING_TYPE.COMMENT, + ), + ]); + }); + return newUser; } return user; diff --git a/backend/src/app/notification/constants/notification.constants.ts b/backend/src/app/notification/constants/notification.constants.ts new file mode 100644 index 00000000..09adf72b --- /dev/null +++ b/backend/src/app/notification/constants/notification.constants.ts @@ -0,0 +1,9 @@ +export enum NOTIFICATION_SETTING_TYPE { + COMMENT = 'COMMENT', + GROUP = 'GROUP', +} + +export enum NOTIFICATION_SETTING_STATUS { + ON = 'ON', + OFF = 'OFF', +} diff --git a/backend/src/app/notification/dto/get-notification-settings-response.dto.ts b/backend/src/app/notification/dto/get-notification-settings-response.dto.ts new file mode 100644 index 00000000..15215207 --- /dev/null +++ b/backend/src/app/notification/dto/get-notification-settings-response.dto.ts @@ -0,0 +1,31 @@ +import { + NOTIFICATION_SETTING_STATUS, + NOTIFICATION_SETTING_TYPE, +} from '@app/notification/constants/notification.constants'; +import { ApiProperty } from '@nestjs/swagger'; +import { NotificationSetting } from '@app/notification/entity/notification-setting.entity'; + +export class GetNotificationSettingsResponse { + @ApiProperty({ example: 1, description: '์•Œ๋ฆผ์„ค์ •์•„์ด๋””' }) + id: number; + + @ApiProperty({ + example: NOTIFICATION_SETTING_TYPE.GROUP, + description: '์•Œ๋ฆผ์„ค์ •ํƒ€์ž…', + }) + type: NOTIFICATION_SETTING_TYPE; + + @ApiProperty({ + example: NOTIFICATION_SETTING_STATUS.ON, + description: '์•Œ๋ฆผ์„ค์ •์ƒํƒœ', + }) + status: NOTIFICATION_SETTING_STATUS; + + static from(notificationSetting: NotificationSetting) { + const res = new GetNotificationSettingsResponse(); + res.id = notificationSetting.id; + res.type = notificationSetting.type; + res.status = notificationSetting.status; + return res; + } +} diff --git a/backend/src/app/notification/dto/patch-notification-setting-request.dto.ts b/backend/src/app/notification/dto/patch-notification-setting-request.dto.ts new file mode 100644 index 00000000..3a4b9d24 --- /dev/null +++ b/backend/src/app/notification/dto/patch-notification-setting-request.dto.ts @@ -0,0 +1,14 @@ +import { NOTIFICATION_SETTING_STATUS } from '@app/notification/constants/notification.constants'; +import { ApiProperty } from '@nestjs/swagger'; +import { IsEnum } from 'class-validator'; + +export class PatchNotificationSettingRequest { + @ApiProperty({ + enum: NOTIFICATION_SETTING_STATUS, + example: NOTIFICATION_SETTING_STATUS.ON, + description: '์•Œ๋ฆผ์ƒํƒœ(ON|OFF)', + required: true, + }) + @IsEnum(NOTIFICATION_SETTING_STATUS) + status: NOTIFICATION_SETTING_STATUS; +} diff --git a/backend/src/app/notification/entity/notification-setting.entity.ts b/backend/src/app/notification/entity/notification-setting.entity.ts index ca1a6296..3006d0c9 100644 --- a/backend/src/app/notification/entity/notification-setting.entity.ts +++ b/backend/src/app/notification/entity/notification-setting.entity.ts @@ -8,6 +8,11 @@ import { UpdateDateColumn, } from 'typeorm'; import { User } from '@app/user/entity/user.entity'; +import { + NOTIFICATION_SETTING_STATUS, + NOTIFICATION_SETTING_TYPE, +} from '@app/notification/constants/notification.constants'; +import { NotAccessibleException } from '@app/notification/exception/not-accessible.exception'; @Entity({ name: 'notification_setting' }) export class NotificationSetting { @@ -22,14 +27,31 @@ export class NotificationSetting { user: Promise; @Column({ type: 'varchar', length: 200 }) - type: string; + type: NOTIFICATION_SETTING_TYPE; - @Column({ type: 'tinyint', precision: 1 }) - status: number; + @Column({ type: 'varchar', length: 10 }) + status: NOTIFICATION_SETTING_STATUS; @CreateDateColumn({ type: 'timestamp' }) createdAt: Date; @UpdateDateColumn({ type: 'timestamp' }) updatedAt: Date; + + static create(user: User, type: NOTIFICATION_SETTING_TYPE) { + const notificationSetting = new NotificationSetting(); + notificationSetting.userId = user.id; + notificationSetting.user = Promise.resolve(user); + notificationSetting.type = type; + notificationSetting.status = NOTIFICATION_SETTING_STATUS.ON; + return notificationSetting; + } + + setStatus(user: User, status: NOTIFICATION_SETTING_STATUS) { + if (this.userId !== user.id) { + throw new NotAccessibleException(); + } + + this.status = status; + } } diff --git a/backend/src/app/notification/exception/not-accessible.exception.ts b/backend/src/app/notification/exception/not-accessible.exception.ts new file mode 100644 index 00000000..627bdcf2 --- /dev/null +++ b/backend/src/app/notification/exception/not-accessible.exception.ts @@ -0,0 +1,7 @@ +import { ForbiddenException } from '@nestjs/common'; + +export class NotAccessibleException extends ForbiddenException { + constructor(message = '์ •๋ณด์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค') { + super({ status: 'NOT_ACCESSIBLE', message }); + } +} diff --git a/backend/src/app/notification/exception/notification-setting-not-found.exception.ts b/backend/src/app/notification/exception/notification-setting-not-found.exception.ts new file mode 100644 index 00000000..719d0e1a --- /dev/null +++ b/backend/src/app/notification/exception/notification-setting-not-found.exception.ts @@ -0,0 +1,7 @@ +import { NotFoundException } from '@nestjs/common'; + +export class NotificationSettingNotFoundException extends NotFoundException { + constructor(message = '์•Œ๋ฆผ์„ค์ • ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค') { + super({ status: 'NOTIFICATION_SETTING_NOT_FOUND', message }); + } +} diff --git a/backend/src/app/notification/notification.controller.ts b/backend/src/app/notification/notification.controller.ts new file mode 100644 index 00000000..68130555 --- /dev/null +++ b/backend/src/app/notification/notification.controller.ts @@ -0,0 +1,64 @@ +import { + Body, + Controller, + Get, + HttpStatus, + Param, + ParseIntPipe, + Patch, +} from '@nestjs/common'; +import { ApiTags } from '@nestjs/swagger'; +import { NotificationSettingRepository } from '@app/notification/repository/notification-setting.repository'; +import { ApiSuccessResponse } from '@decorator/api-success-resposne.decorator'; +import { JwtAuth } from '@decorator/jwt-auth.decorator'; +import { CurrentUser } from '@decorator/current-user.decorator'; +import { User } from '@app/user/entity/user.entity'; +import { ResponseEntity } from '@common/response-entity'; +import { GetNotificationSettingsResponse } from '@app/notification/dto/get-notification-settings-response.dto'; +import { NotificationService } from '@app/notification/notification.service'; +import { PatchNotificationSettingRequest } from '@app/notification/dto/patch-notification-setting-request.dto'; +import { ApiErrorResponse } from '@decorator/api-error-response.decorator'; +import { NotificationSettingNotFoundException } from '@app/notification/exception/notification-setting-not-found.exception'; +import { NotAccessibleException } from '@app/notification/exception/not-accessible.exception'; + +@Controller('notifications') +@ApiTags('Notification') +export class NotificationController { + constructor( + private readonly notificationService: NotificationService, + private readonly notificationSettingRepository: NotificationSettingRepository, + ) {} + + @Get('settings') + @JwtAuth() + @ApiSuccessResponse(HttpStatus.OK, GetNotificationSettingsResponse, { + isArray: true, + }) + async settings(@CurrentUser() user: User) { + const notificationSettings = + await this.notificationSettingRepository.findBy({ + userId: user.id, + }); + + return ResponseEntity.OK_WITH_DATA( + notificationSettings.map((notificationSetting) => + GetNotificationSettingsResponse.from(notificationSetting), + ), + ); + } + + @Patch('settings/:id/status') + @JwtAuth() + @ApiSuccessResponse(HttpStatus.NO_CONTENT) + @ApiErrorResponse( + NotificationSettingNotFoundException, + NotAccessibleException, + ) + async updateSettings( + @CurrentUser() user: User, + @Param('id', ParseIntPipe) id: number, + @Body() { status }: PatchNotificationSettingRequest, + ) { + await this.notificationService.updateStatus(user, id, status); + } +} diff --git a/backend/src/app/notification/notification.module.ts b/backend/src/app/notification/notification.module.ts new file mode 100644 index 00000000..db4fca3b --- /dev/null +++ b/backend/src/app/notification/notification.module.ts @@ -0,0 +1,10 @@ +import { Module } from '@nestjs/common'; +import { NotificationController } from '@app/notification/notification.controller'; +import { NotificationSettingRepository } from '@app/notification/repository/notification-setting.repository'; +import { NotificationService } from '@app/notification/notification.service'; + +@Module({ + controllers: [NotificationController], + providers: [NotificationService, NotificationSettingRepository], +}) +export class NotificationModule {} diff --git a/backend/src/app/notification/notification.service.ts b/backend/src/app/notification/notification.service.ts new file mode 100644 index 00000000..4a71cc5f --- /dev/null +++ b/backend/src/app/notification/notification.service.ts @@ -0,0 +1,31 @@ +import { Injectable } from '@nestjs/common'; +import { NotificationSettingRepository } from '@app/notification/repository/notification-setting.repository'; +import { User } from '@app/user/entity/user.entity'; +import { NotificationSettingNotFoundException } from '@app/notification/exception/notification-setting-not-found.exception'; +import { NOTIFICATION_SETTING_STATUS } from '@app/notification/constants/notification.constants'; + +@Injectable() +export class NotificationService { + constructor( + private readonly notificationSettingRepository: NotificationSettingRepository, + ) {} + + async updateStatus( + user: User, + id: number, + status: NOTIFICATION_SETTING_STATUS, + ) { + const notificationSetting = + await this.notificationSettingRepository.findOneBy({ + id, + }); + + if (!notificationSetting) { + throw new NotificationSettingNotFoundException(); + } + + notificationSetting.setStatus(user, status); + + await this.notificationSettingRepository.save(notificationSetting); + } +} diff --git a/backend/src/app/notification/repository/notification-setting.repository.ts b/backend/src/app/notification/repository/notification-setting.repository.ts new file mode 100644 index 00000000..9f61cac2 --- /dev/null +++ b/backend/src/app/notification/repository/notification-setting.repository.ts @@ -0,0 +1,14 @@ +import { DataSource, Repository } from 'typeorm'; +import { NotificationSetting } from '@app/notification/entity/notification-setting.entity'; +import { Injectable } from '@nestjs/common'; + +@Injectable() +export class NotificationSettingRepository extends Repository { + constructor(private readonly dataSource: DataSource) { + super( + NotificationSetting, + dataSource.createEntityManager(), + dataSource.createQueryRunner(), + ); + } +} diff --git a/backend/src/setSwagger.ts b/backend/src/setSwagger.ts index 53650f58..9934f2fd 100644 --- a/backend/src/setSwagger.ts +++ b/backend/src/setSwagger.ts @@ -7,6 +7,7 @@ import { GroupArticleModule } from '@app/group-article/group-article.module'; import { UserModule } from '@app/user/user.module'; import { MyInfoModule } from '@app/myinfo/myinfo.module'; import { GroupApplicationModule } from '@app/group-application/group-application.module'; +import { NotificationModule } from '@app/notification/notification.module'; export const setSwagger = (app: INestApplication) => { const config = new DocumentBuilder() @@ -29,6 +30,7 @@ export const setSwagger = (app: INestApplication) => { UserModule, MyInfoModule, GroupApplicationModule, + NotificationModule, ], extraModels: [ResponseEntity], }); From d5fe411240c4f247c44b3cde8fd5fe13ea84dbfd Mon Sep 17 00:00:00 2001 From: MinGyeong Park <37508296+kong430@users.noreply.github.com> Date: Fri, 2 Dec 2022 00:00:10 +0900 Subject: [PATCH 080/142] =?UTF-8?q?[Feature]=20=EB=AA=A8=EC=A7=91=20?= =?UTF-8?q?=EA=B2=8C=EC=8B=9C=EA=B8=80=20=EB=B2=84=ED=8A=BC=20API=20?= =?UTF-8?q?=EC=97=B0=EA=B2=B0=20(#185)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :pencil2: fix: ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€ card title overflow ์ˆ˜์ • ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€์˜ title์ด ๊ธธ์–ด์งˆ ๋•Œ, grid ๊ทœ๊ฒฉ์ด ๊นจ์ง€๊ณ  ์นด๋“œ์˜ ๋„ˆ๋น„๊ฐ€ ๋„“์–ด์ง€๋Š” ๊ฒƒ ์ˆ˜์ • * :sparkles: feature: ์œ ์ €์˜ ๋ชจ์ง‘๊ธ€ ์‹ ์ฒญ ํ˜„ํ™ฉ์„ ์กฐํšŒํ•˜๋Š” hook ์ •์˜ * :sparkles: feature: buttonStatus ๋ฐ›์•„์˜ค๋Š” ๋กœ์ง ๊ตฌํ˜„ * :sparkles: feature: ๋ชจ์ง‘ ์นดํ†ก ์˜คํ”ˆ์ฑ„ํŒ…๋ฐฉ ๋งํฌ fetch hook ์ •์˜ * :sparkles: feature: ๊ฒŒ์‹œ๊ธ€ status์™€ isJoined์— ๋”ฐ๋ผ ๋ฒ„ํŠผ ๋ Œ๋”๋ง * :sparkles: feature: ๋ชจ์ง‘ ์ฐธ๊ฐ€ ์‹ ์ฒญ ๋กœ์ง ๊ตฌํ˜„ * :sparkles: feature: ์ฐธ๊ฐ€ ์‹ ์ฒญ ์ทจ์†Œ ๋กœ์ง ๊ตฌํ˜„ * :bug: fix: post body ๊ฐ์ฒด๋กœ ์ˆ˜์ • * :bug: fix: isJoined ์—ฌ๋ถ€ ๋ฐ›์•„์˜ค๋Š” API url ์ˆ˜์ • * :sparkles: feature: ๋ชจ์ง‘ ์‹ ์ฒญ, ์ทจ์†Œ ์„ฑ๊ณต ์‹œ toast message ํ‘œ์‹œ * :sparkles: feature: ๋‚ด ๊ฒŒ์‹œ๊ธ€์ผ ๊ฒฝ์šฐ ์˜คํ”ˆ์ฑ„ํŒ…๋ฐฉ ๋ฒ„ํŠผ์„ ๋ณด์—ฌ์ฃผ๋„๋ก ๊ตฌํ˜„ * :sparkles: feature: ์ฑ„ํŒ…๋ฐฉ ๋งํฌ ๋ณต์‚ฌ ์™„๋ฃŒ ์‹œ toast message show * :sparkles: feature: ์ž‘์„ฑ์ž์ผ ๊ฒฝ์šฐ ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€ ๋ฒ„ํŠผ์„ ๋ณด์—ฌ์ฃผ์ง€ ์•Š์Œ --- .../ParticipateButton/ApplyButton/index.tsx | 43 +++++++---- .../ParticipateButton/CancelButton/index.tsx | 49 ++++++++----- .../ChatLinkButton/index.tsx | 37 +++++++--- .../article/ParticipateButton/index.tsx | 23 +++--- frontend/src/hooks/queries/useApplyGroup.ts | 19 +++++ .../src/hooks/queries/useCancelApplication.ts | 19 +++++ .../queries/useFetchApplicationStatus.ts | 23 ++++++ frontend/src/hooks/queries/useFetchArticle.ts | 2 +- frontend/src/hooks/queries/useFetchChatUrl.ts | 20 ++++++ frontend/src/pages/article/[id].tsx | 71 +++++++++++++------ 10 files changed, 237 insertions(+), 69 deletions(-) create mode 100644 frontend/src/hooks/queries/useApplyGroup.ts create mode 100644 frontend/src/hooks/queries/useCancelApplication.ts create mode 100644 frontend/src/hooks/queries/useFetchApplicationStatus.ts create mode 100644 frontend/src/hooks/queries/useFetchChatUrl.ts diff --git a/frontend/src/components/article/ParticipateButton/ApplyButton/index.tsx b/frontend/src/components/article/ParticipateButton/ApplyButton/index.tsx index 10a0158a..a5701706 100644 --- a/frontend/src/components/article/ParticipateButton/ApplyButton/index.tsx +++ b/frontend/src/components/article/ParticipateButton/ApplyButton/index.tsx @@ -1,17 +1,39 @@ -import { useState } from 'react'; - import { Button } from '@mantine/core'; +import { showNotification } from '@mantine/notifications'; +import { IconCheck } from '@tabler/icons'; + +import useApplyGroup from '@hooks/queries/useApplyGroup'; -import AlertModal from '@components/common/AlertModal'; +interface Props { + groupArticleId: number; +} -const ApplyButton = () => { - const [modalOpen, setModalOpen] = useState(false); - const [resultMessage, setResultMessage] = useState(''); +const ApplyButton = ({ groupArticleId }: Props) => { + const { mutate: applyGroup } = useApplyGroup(groupArticleId); - // TODO API ํ˜ธ์ถœ ๋ฐ ์„ฑ๊ณต ์—ฌ๋ถ€์— ๋”ฐ๋ฅธ message const applyForRecruitment = () => { - setResultMessage('์ฐธ๊ฐ€ ์‹ ์ฒญ์ด ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค'); - setModalOpen(true); + applyGroup(groupArticleId, { + onSuccess: () => { + // TODO ๊ณตํ†ต toast message ๋กœ์ง ์ ์šฉ + showNotification({ + color: 'indigo', + title: '์ฐธ๊ฐ€ ์‹ ์ฒญ ์™„๋ฃŒ!', + message: '๋ชจ์ง‘์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์กฐ๊ธˆ๋งŒ ๊ธฐ๋‹ค๋ ค์ฃผ์„ธ์š”.', + icon: , + autoClose: 4000, + styles: (theme) => ({ + root: { + paddingTop: '1.6rem', + paddingBottom: '1.6rem', + }, + title: { + fontSize: theme.fontSizes.lg, + fontWeight: 700, + }, + }), + }); + }, + }); }; return ( @@ -19,9 +41,6 @@ const ApplyButton = () => { - {modalOpen && ( - setModalOpen(false)} /> - )} ); }; diff --git a/frontend/src/components/article/ParticipateButton/CancelButton/index.tsx b/frontend/src/components/article/ParticipateButton/CancelButton/index.tsx index b7a11bd1..0b1d66fc 100644 --- a/frontend/src/components/article/ParticipateButton/CancelButton/index.tsx +++ b/frontend/src/components/article/ParticipateButton/CancelButton/index.tsx @@ -1,29 +1,46 @@ -import { useState } from 'react'; - import { Button } from '@mantine/core'; +import { showNotification } from '@mantine/notifications'; +import { IconCheck } from '@tabler/icons'; + +import useCancelApplication from '@hooks/queries/useCancelApplication'; -import AlertModal from '@components/common/AlertModal'; +interface Props { + groupArticleId: number; +} -const CancelButton = () => { - const [modalOpen, setModalOpen] = useState(false); +const CancelButton = ({ groupArticleId }: Props) => { + const { mutate: cancelApplication } = useCancelApplication(groupArticleId); - const cancelApplication = () => { - // TODO API ํ˜ธ์ถœ - setModalOpen(true); + const handleClickCancelButton = () => { + cancelApplication(groupArticleId, { + onSuccess: () => { + // TODO ๊ณตํ†ต toast message ๋กœ์ง ์ ์šฉ + showNotification({ + color: 'indigo', + title: '์‹ ์ฒญ ์ทจ์†Œ ์™„๋ฃŒ!', + message: '๋‹ค๋ฅธ ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€๋„ ํ™•์ธํ•ด๋ณด์„ธ์š”.', + icon: , + autoClose: 4000, + styles: (theme) => ({ + root: { + paddingTop: '1.6rem', + paddingBottom: '1.6rem', + }, + title: { + fontSize: theme.fontSizes.lg, + fontWeight: 700, + }, + }), + }); + }, + }); }; return ( <> - - {modalOpen && ( - setModalOpen(false)} - /> - )} ); }; diff --git a/frontend/src/components/article/ParticipateButton/ChatLinkButton/index.tsx b/frontend/src/components/article/ParticipateButton/ChatLinkButton/index.tsx index 484eb625..d1e9a647 100644 --- a/frontend/src/components/article/ParticipateButton/ChatLinkButton/index.tsx +++ b/frontend/src/components/article/ParticipateButton/ChatLinkButton/index.tsx @@ -1,6 +1,9 @@ +import { useCallback, useEffect } from 'react'; + import { Button } from '@mantine/core'; +import { showNotification } from '@mantine/notifications'; +import { IconCheck } from '@tabler/icons'; -import AlertModal from '@components/common/AlertModal'; import useClipboard from '@hooks/useClipboard'; interface Props { @@ -10,18 +13,36 @@ interface Props { const ChatLinkButton = ({ chatLink }: Props) => { const { isCopied, setIsCopied, doCopy } = useClipboard(); + const showSuccessToast = useCallback(() => { + showNotification({ + color: 'indigo', + title: '์˜คํ”ˆ ์ฑ„ํŒ…๋ฐฉ ๋งํฌ ๋ณต์‚ฌ ์™„๋ฃŒ!', + message: '์ง€๊ธˆ ๋ฐ”๋กœ ์ฑ„ํŒ…์— ์ฐธ์—ฌํ•ด๋ณด์„ธ์š”.', + icon: , + autoClose: 4000, + styles: (theme) => ({ + root: { + paddingTop: '1.6rem', + paddingBottom: '1.6rem', + }, + title: { + fontSize: theme.fontSizes.lg, + fontWeight: 700, + }, + }), + }); + setIsCopied(false); + }, [setIsCopied]); + + useEffect(() => { + if (isCopied) showSuccessToast(); + }, [isCopied, showSuccessToast]); + return ( <> - {isCopied && ( - setIsCopied(false)} - /> - )} ); }; diff --git a/frontend/src/components/article/ParticipateButton/index.tsx b/frontend/src/components/article/ParticipateButton/index.tsx index 78dc97b5..93fd08f0 100644 --- a/frontend/src/components/article/ParticipateButton/index.tsx +++ b/frontend/src/components/article/ParticipateButton/index.tsx @@ -7,22 +7,25 @@ import { ParticipateButtonStatus } from '@constants/participateButton'; interface Props { status: ParticipateButtonStatus; + groupArticleId: number; chatRoomLink?: string; } -const ParticipateButton = ({ status, chatRoomLink = '' }: Props) => { - return ( - <> - {status === ParticipateButtonStatus.APPLY && } - {status === ParticipateButtonStatus.CANCEL && } - {status === ParticipateButtonStatus.CLOSED && ( +const ParticipateButton = ({ status, groupArticleId, chatRoomLink = '' }: Props) => { + switch (status) { + case ParticipateButtonStatus.APPLY: + return ; + case ParticipateButtonStatus.CANCEL: + return ; + case ParticipateButtonStatus.CLOSED: + return ( - )} - {status === ParticipateButtonStatus.LINK && } - - ); + ); + case ParticipateButtonStatus.LINK: + return ; + } }; export default ParticipateButton; diff --git a/frontend/src/hooks/queries/useApplyGroup.ts b/frontend/src/hooks/queries/useApplyGroup.ts new file mode 100644 index 00000000..a4d315e4 --- /dev/null +++ b/frontend/src/hooks/queries/useApplyGroup.ts @@ -0,0 +1,19 @@ +import { useQueryClient } from '@tanstack/react-query'; + +import useAuthMutation from '@hooks/useAuthMutation'; +import { clientAxios } from '@utils/commonAxios'; + +const applyGroup = (groupArticleId: number) => + clientAxios.post('/v1/group-applications', { groupArticleId }); + +const useApplyGroup = (groupArticleId: number) => { + const queryClient = useQueryClient(); + return useAuthMutation(applyGroup, { + onSuccess: async () => { + await queryClient.invalidateQueries(['applicationStatus', groupArticleId]); + // TODO ์‹ ์ฒญ ์ธ์› invalidate + }, + }); +}; + +export default useApplyGroup; diff --git a/frontend/src/hooks/queries/useCancelApplication.ts b/frontend/src/hooks/queries/useCancelApplication.ts new file mode 100644 index 00000000..7eb6982f --- /dev/null +++ b/frontend/src/hooks/queries/useCancelApplication.ts @@ -0,0 +1,19 @@ +import { useQueryClient } from '@tanstack/react-query'; + +import useAuthMutation from '@hooks/useAuthMutation'; +import { clientAxios } from '@utils/commonAxios'; + +const cancelApplication = (groupArticleId: number) => + clientAxios.post('/v1/group-applications/cancel', { groupArticleId }); + +const useCancelApplication = (groupArticleId: number) => { + const queryClient = useQueryClient(); + return useAuthMutation(cancelApplication, { + onSuccess: async () => { + await queryClient.invalidateQueries(['applicationStatus', groupArticleId]); + // TODO ์‹ ์ฒญ ์ธ์› invalidate + }, + }); +}; + +export default useCancelApplication; diff --git a/frontend/src/hooks/queries/useFetchApplicationStatus.ts b/frontend/src/hooks/queries/useFetchApplicationStatus.ts new file mode 100644 index 00000000..9ccc1ea9 --- /dev/null +++ b/frontend/src/hooks/queries/useFetchApplicationStatus.ts @@ -0,0 +1,23 @@ +import { AxiosError } from 'axios'; + +import useAuthQuery from '@hooks/useAuthQuery'; +import { ApiResponse } from '@typings/types'; +import { clientAxios } from '@utils/commonAxios'; + +interface DataType { + isJoined: boolean; +} + +const useFetchApplicationStatus = (groupArticleId: number) => { + const { data } = useAuthQuery, AxiosError, boolean>( + ['applicationStatus', groupArticleId], + () => clientAxios.get(`/v1/group-applications/status`, { params: { groupArticleId } }), + { + select: (res) => res.data.data.isJoined, + } + ); + + return { isJoined: data }; +}; + +export default useFetchApplicationStatus; diff --git a/frontend/src/hooks/queries/useFetchArticle.ts b/frontend/src/hooks/queries/useFetchArticle.ts index c3efb986..932294a1 100644 --- a/frontend/src/hooks/queries/useFetchArticle.ts +++ b/frontend/src/hooks/queries/useFetchArticle.ts @@ -19,7 +19,7 @@ const useFetchArticle = (id: number) => { } ); - return { data, isLoading }; + return { article: data, isLoading }; }; export default useFetchArticle; diff --git a/frontend/src/hooks/queries/useFetchChatUrl.ts b/frontend/src/hooks/queries/useFetchChatUrl.ts new file mode 100644 index 00000000..e591d7ae --- /dev/null +++ b/frontend/src/hooks/queries/useFetchChatUrl.ts @@ -0,0 +1,20 @@ +import { AxiosError } from 'axios'; + +import useAuthQuery from '@hooks/useAuthQuery'; +import { ApiResponse } from '@typings/types'; +import { clientAxios } from '@utils/commonAxios'; + +const useFetchChatUrl = (groupArticleId: number, enabled: boolean) => { + const { data } = useAuthQuery, AxiosError, string>( + ['chatUrl', groupArticleId], + () => clientAxios.get(`/v1/group-articles/${groupArticleId}/chat-url`), + { + select: (res) => res.data.data.url, + enabled, + } + ); + + return { url: data }; +}; + +export default useFetchChatUrl; diff --git a/frontend/src/pages/article/[id].tsx b/frontend/src/pages/article/[id].tsx index b2325166..f36e444d 100644 --- a/frontend/src/pages/article/[id].tsx +++ b/frontend/src/pages/article/[id].tsx @@ -13,14 +13,18 @@ import Header from '@components/common/Header'; import DetailTitle from '@components/common/Header/DetailTitle'; import PageLayout from '@components/common/PageLayout'; import StatCounter from '@components/common/StatCounter'; -import { ArticleStatusKr } from '@constants/article'; +import { ArticleStatus, ArticleStatusKr } from '@constants/article'; import { CategoryKr } from '@constants/category'; import { CATEGORY_COLOR, LOCATION_COLOR, STATUS_COLOR } from '@constants/color'; import { dummyParticipants } from '@constants/dummy'; import { LocationKr } from '@constants/location'; import { PAGE_TITLE } from '@constants/pageTitle'; import { ParticipateButtonStatus } from '@constants/participateButton'; +import useFetchApplicationStatus from '@hooks/queries/useFetchApplicationStatus'; import useFetchArticle from '@hooks/queries/useFetchArticle'; +import useFetchChatUrl from '@hooks/queries/useFetchChatUrl'; +import useFetchMyInfo from '@hooks/queries/useFetchMyInfo'; +import { ArticleType } from '@typings/types'; import dateTimeFormat from '@utils/dateTime'; const ArticleDetail = () => { @@ -29,7 +33,13 @@ const ArticleDetail = () => { } = useTheme(); const router = useRouter(); const articleId = Number(router.query.id); - const { data, isLoading } = useFetchArticle(articleId); + const { data: myInfo } = useFetchMyInfo(); + const { article } = useFetchArticle(articleId); + const { isJoined } = useFetchApplicationStatus(articleId); + const { url } = useFetchChatUrl( + articleId, + getButtonStatus(article, isJoined) === ParticipateButtonStatus.LINK + ); const [participantsModalOpen, setParticipantsModalOpen] = useState(false); @@ -49,34 +59,34 @@ const ArticleDetail = () => { } > {/* TODO ๋กœ๋”ฉ ์ฒ˜๋ฆฌ */} - {isLoading ? ( + {!article || isJoined === undefined || !myInfo ? (
    ๋กœ๋”ฉ์ค‘
    ) : ( <> - + - {data.author.userName} - + {article.author.userName} + - {data.title} + {article.title} @@ -84,7 +94,7 @@ const ArticleDetail = () => { ๋ชจ์ง‘ ํ˜„ํ™ฉ - {data.currentCapacity}๋ช… / {data.maxCapacity}๋ช… + {article.currentCapacity}๋ช… / {article.maxCapacity}๋ช… setParticipantsModalOpen(true)}> @@ -93,20 +103,22 @@ const ArticleDetail = () => { - + - {/* TODO ๋ชจ์ง‘์ƒํƒœ์™€ ์œ ์ € ์ฐธ๊ฐ€ ์ƒํƒœ์— ๋”ฐ๋ผ ๋ Œ๋”๋ง */} - - + {article.author.id !== myInfo.id && ( + + )} + @@ -128,6 +140,21 @@ const ArticleDetail = () => { export default ArticleDetail; +const getButtonStatus = (article: ArticleType, isJoined: boolean) => { + if (!article || isJoined === undefined) return ParticipateButtonStatus.CLOSED; + + switch (article.status) { + case ArticleStatus.PROGRESS: + return isJoined ? ParticipateButtonStatus.CANCEL : ParticipateButtonStatus.APPLY; + case ArticleStatus.SUCCEED: + return isJoined ? ParticipateButtonStatus.LINK : ParticipateButtonStatus.CLOSED; + case ArticleStatus.FAIL: + return ParticipateButtonStatus.CLOSED; + default: + return ParticipateButtonStatus.CLOSED; + } +}; + const ContenxtWrapper = styled.div` display: flex; flex-direction: column; From ad877c14b1e84db310c0be9ec436e99fcc5032a7 Mon Sep 17 00:00:00 2001 From: Yangseungchan Date: Sat, 3 Dec 2022 16:57:32 +0900 Subject: [PATCH 081/142] =?UTF-8?q?=E2=9C=A8=20feature:=20=20README=20?= =?UTF-8?q?=EC=B4=88=EC=95=88=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- READMD.md | 1 - README.md | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 1 deletion(-) delete mode 100644 READMD.md create mode 100644 README.md diff --git a/READMD.md b/READMD.md deleted file mode 100644 index ab612b43..00000000 --- a/READMD.md +++ /dev/null @@ -1 +0,0 @@ -# Web13 diff --git a/README.md b/README.md new file mode 100644 index 00000000..bee2ba6a --- /dev/null +++ b/README.md @@ -0,0 +1,60 @@ +

    + +

    + +
    + ๋…ธ์…˜ใ€€|ใ€€ + ๋ฐฐํฌ ๋งํฌใ€€|ใ€€ + ์œ„ํ‚คใ€€|ใ€€ + ๋ฐฑ๋กœ๊ทธใ€€|ใ€€ + ํšŒ๊ณ ๋ก +
    + + + +๋ฑƒ์ง€ ๋“ค์–ด๊ฐˆ ์ž๋ฆฌ + + +# โœจ ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ + +> **๋ชจ์—ฌ๋ชจ์—ฌ**๋Š” ๊ฐœ๋ฐœ์ž๋“ค์˜ ๋ชจ์ž„ ํ™œ์„ฑํ™”๋ฅผ ์œ„ํ•œ ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. +> +> ์Šคํ„ฐ๋””, ํ”„๋กœ์ ํŠธ, ๋ฒˆ๊ฐœ ๋ชจ์ž„ ๋“ฑ ๋‹ค์–‘ํ•œ ๊ฐœ๋ฐœ์ž ๋™๋ฃŒ๋“ค๊ณผ ํ•จ๊ป˜ํ•ด๋ณด์„ธ์š”! + +

    + +# ๐ŸŽฏ ํ”„๋กœ์ ํŠธ ๋ชฉํ‘œ + +- ์‹ค์ œ๋กœ ์ˆ˜์š”๊ฐ€ ์žˆ๋Š” ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ํŒ€์›๋“ค์ด ์• ์ •์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค์ž. +- ์ง€์†์ ์ธ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ํ†ตํ•œ ์ฝ”๋“œ ์ผ๊ด€์„ฑ์„ ํ™•๋ณดํ•˜๊ณ  ํ’ˆ์งˆ์„ ๋†’์ด์ž. +- ๋ฆฌํŒฉํ† ๋ง์„ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ์™€ ์„œ๋น„์Šค์˜ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜์ž. +- CI/CD, ๋ฐฐํฌ ์ž๋™ํ™”๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์„ ๋†’์ด์ž. + + +

    + + +# ๐Ÿซต ํ”„๋กœ์ ํŠธ ํฌ์ธํŠธ + + +๊ฐ•์กฐํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ๋“ค + +

    + +# ๐Ÿ“š ๊ธฐ์ˆ  ์Šคํƒ + +
    + +
    + +

    + +# ๐Ÿ‘ฅ ํŒ€์› ์†Œ๊ฐœ + +| J031 ๊น€๋ช…์ผ | J074 ๋ฐ•๋ฏผ๊ฒฝ | J087 ๋ฐ•์ข…ํ˜ | J113 ์–‘์Šน์ฐฌ | +|:--------:|:--------:|:--------:|:--------:| +| ![img](https://avatars.githubusercontent.com/u/67570061?v=4) | ![img](https://avatars.githubusercontent.com/u/37508296?v=4) | ![img](https://avatars.githubusercontent.com/u/90585081?v=4) | ![img](https://avatars.githubusercontent.com/u/38908080?v=4) | +| [username1103](https://github.com/username1103) | [kong430](https://github.com/kong430) | [pythonstrup](https://github.com/pythonstrup) | [yangseungchan](https://github.com/yangseungchan) | +| ๋‚ด ์ด๋ฆ„์€ ๊น€๋ช…์ผ ํƒ์ •์ด์ฃ ! | ๋ง‰๋‚ด๋Š” ์Šฌํผ์š” | ์‹ ๋„๋ฆผ ๊น€๋ฐฅ VIP | ๋ชจ๊ธฐ ์‚ฌ๋ƒฅ๊พผ | +| ๐Ÿข ๊ฑฐ๋ถ์ด | ๐Ÿฐ ํ† ๋ผ | ๐Ÿฆซ ๋น„๋ฒ„ | ๐Ÿฆ™ ์•ŒํŒŒ์นด | +| ![image](https://user-images.githubusercontent.com/90585081/202906164-87810106-3b71-417a-ad79-97fdfa74736d.png) | ![image](https://user-images.githubusercontent.com/90585081/202906064-3c1b3f26-b9bb-4de4-9304-341afc12507b.png) | ![image](https://user-images.githubusercontent.com/90585081/202906106-28c2dc14-e2c7-4504-b638-6763548f473f.png) | ![image](https://user-images.githubusercontent.com/90585081/202906134-6017203f-2f29-40a1-8223-5ecd6ae063b3.png) | From 75c8df2a1794c8a02414e1c4d3b3092d0bc8d2d5 Mon Sep 17 00:00:00 2001 From: Yangseungchan Date: Sun, 4 Dec 2022 01:21:05 +0900 Subject: [PATCH 082/142] =?UTF-8?q?=F0=9F=A5=85=20chore:=20README=20?= =?UTF-8?q?=EA=B8=B0=EC=88=A0=EC=8A=A4=ED=83=9D=20=EC=9D=B4=EB=AF=B8?= =?UTF-8?q?=EC=A7=80=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index bee2ba6a..a46e2de4 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ ํšŒ๊ณ ๋ก
    - +

    ๋ฑƒ์ง€ ๋“ค์–ด๊ฐˆ ์ž๋ฆฌ @@ -44,9 +44,10 @@ # ๐Ÿ“š ๊ธฐ์ˆ  ์Šคํƒ
    - +
    +

    # ๐Ÿ‘ฅ ํŒ€์› ์†Œ๊ฐœ From edcb65544c10b3bf402ae33c53a1d20e61cbc362 Mon Sep 17 00:00:00 2001 From: Yangseungchan Date: Sun, 4 Dec 2022 12:16:57 +0900 Subject: [PATCH 083/142] =?UTF-8?q?=F0=9F=A5=85=20chore:=20=ED=94=84?= =?UTF-8?q?=EB=A1=9C=EC=A0=9D=ED=8A=B8=20=ED=8C=A8=ED=82=A4=EC=A7=80?= =?UTF-8?q?=EB=B2=84=EC=A0=84=20=EB=B1=83=EC=A7=80=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a46e2de4..89d4a54e 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,13 @@

    -๋ฑƒ์ง€ ๋“ค์–ด๊ฐˆ ์ž๋ฆฌ +
    + + + + + +
    # โœจ ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ From a07da71fa6334a9abff55143c454b51464aa67b2 Mon Sep 17 00:00:00 2001 From: Gakko <90585081+pythonstrup@users.noreply.github.com> Date: Mon, 5 Dec 2022 16:02:55 +0900 Subject: [PATCH 084/142] =?UTF-8?q?[Feature]=20=EB=AA=A8=EC=A7=91=20?= =?UTF-8?q?=EA=B2=8C=EC=8B=9C=EA=B8=80=20=EB=8C=93=EA=B8=80=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1=20API=20(#195)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * โœจ feature: comment repository ์ž‘์„ฑ * โœจ feature: comment service ์ž‘์„ฑ - ๋Œ“๊ธ€ ์ž‘์„ฑ ๋กœ์ง - ์—†๋Š” ๊ทธ๋ฃน ๊ฒ€์ฆ * โœจ feature: ๋Œ“๊ธ€ ์ž‘์„ฑ request, response dto ์ž‘์„ฑ * โœจ feature: ๊ทธ๋ฃน ์˜ˆ์™ธ ์ฝ”๋“œ ์ž‘์„ฑ * โœจ feature: comment controller ์ž‘์„ฑ - ๋Œ“๊ธ€ ์ž‘์„ฑ ๊ฒฝ๋กœ - Swagger ์ ์šฉ * โœจ feature: comment module ์ž‘์„ฑ * โœจ feature: comment entity method ์ถ”๊ฐ€ * โœจ feature: comment module์„ app ์ „์ฒด์— ๋“ฑ๋ก * ๐Ÿฅ… chore: group application service ์˜คํƒ€ ์ˆ˜์ • * ๐Ÿฅ… chore: comment์—์„œ ํ•„์š”ํ•œ ์˜์กด์„ฑ importํ•ด์˜ค๊ธฐ * ๐Ÿฅ… chore: ๋ถˆํ•„์š”ํ•œ import๋ฌธ ์ œ๊ฑฐ --- backend/src/app.module.ts | 2 ++ backend/src/app/comment/comment.controller.ts | 34 +++++++++++++++++++ backend/src/app/comment/comment.module.ts | 12 +++++++ backend/src/app/comment/comment.repository.ts | 14 ++++++++ backend/src/app/comment/comment.service.ts | 33 ++++++++++++++++++ .../dto/comment-writing-request.dto.ts | 18 ++++++++++ .../dto/comment-writing-response.dto.ts | 15 ++++++++ .../src/app/comment/entity/comment.entity.ts | 9 +++++ .../exception/group-not-found.exception.ts | 7 ++++ .../group-application.service.ts | 4 +-- backend/src/setSwagger.ts | 2 ++ 11 files changed, 148 insertions(+), 2 deletions(-) create mode 100644 backend/src/app/comment/comment.controller.ts create mode 100644 backend/src/app/comment/comment.module.ts create mode 100644 backend/src/app/comment/comment.repository.ts create mode 100644 backend/src/app/comment/comment.service.ts create mode 100644 backend/src/app/comment/dto/comment-writing-request.dto.ts create mode 100644 backend/src/app/comment/dto/comment-writing-response.dto.ts create mode 100644 backend/src/app/comment/exception/group-not-found.exception.ts diff --git a/backend/src/app.module.ts b/backend/src/app.module.ts index 13bbaf21..65de6233 100644 --- a/backend/src/app.module.ts +++ b/backend/src/app.module.ts @@ -14,6 +14,7 @@ import { MyInfoModule } from '@app/myinfo/myinfo.module'; import { CookieConfigModule } from '@config/cookie/config.module'; import { GroupApplicationModule } from '@app/group-application/group-application.module'; import { NotificationModule } from '@app/notification/notification.module'; +import { CommentModule } from '@app/comment/comment.module'; @Module({ imports: [ @@ -28,6 +29,7 @@ import { NotificationModule } from '@app/notification/notification.module'; MyInfoModule, GroupApplicationModule, NotificationModule, + CommentModule, ], controllers: [AppController], providers: [AppService], diff --git a/backend/src/app/comment/comment.controller.ts b/backend/src/app/comment/comment.controller.ts new file mode 100644 index 00000000..a223501a --- /dev/null +++ b/backend/src/app/comment/comment.controller.ts @@ -0,0 +1,34 @@ +import { Body, Controller, HttpStatus, Post } from '@nestjs/common'; +import { CommentService } from '@app/comment/comment.service'; +import { JwtAuth } from '@src/common/decorator/jwt-auth.decorator'; +import { ApiSuccessResponse } from '@src/common/decorator/api-success-resposne.decorator'; +import { CommentWritingResponse } from '@app/comment/dto/comment-writing-response.dto'; +import { CurrentUser } from '@src/common/decorator/current-user.decorator'; +import { CommentWritingRequest } from '@app/comment/dto/comment-writing-request.dto'; +import { User } from '@app/user/entity/user.entity'; +import { ResponseEntity } from '@src/common/response-entity'; +import { ApiTags } from '@nestjs/swagger'; +import { ApiErrorResponse } from '@src/common/decorator/api-error-response.decorator'; +import { GroupNotFoundException } from '@app/comment/exception/group-not-found.exception'; + +@Controller('comments') +@ApiTags('Comment') +@JwtAuth() +export class CommentController { + constructor(private readonly commentService: CommentService) {} + + @Post('/') + @ApiSuccessResponse(HttpStatus.CREATED, CommentWritingResponse) + @ApiErrorResponse(GroupNotFoundException) + async writeCommnet( + @CurrentUser() user: User, + @Body() commentWritingRequest: CommentWritingRequest, + ) { + const comment = await this.commentService.writeComment( + user, + commentWritingRequest, + ); + const data = CommentWritingResponse.from(comment); + return ResponseEntity.CREATED_WITH_DATA(data); + } +} diff --git a/backend/src/app/comment/comment.module.ts b/backend/src/app/comment/comment.module.ts new file mode 100644 index 00000000..741e1f21 --- /dev/null +++ b/backend/src/app/comment/comment.module.ts @@ -0,0 +1,12 @@ +import { Module } from '@nestjs/common'; +import { CommentController } from '@app/comment/comment.controller'; +import { CommentService } from '@app/comment/comment.service'; +import { CommnetRepository } from '@app/comment/comment.repository'; +import { GroupArticleModule } from '@app/group-article/group-article.module'; + +@Module({ + imports: [GroupArticleModule], + controllers: [CommentController], + providers: [CommentService, CommnetRepository], +}) +export class CommentModule {} diff --git a/backend/src/app/comment/comment.repository.ts b/backend/src/app/comment/comment.repository.ts new file mode 100644 index 00000000..a23589aa --- /dev/null +++ b/backend/src/app/comment/comment.repository.ts @@ -0,0 +1,14 @@ +import { DataSource, Repository } from 'typeorm'; +import { Injectable } from '@nestjs/common'; +import { Comment } from '@app/comment/entity/comment.entity'; + +@Injectable() +export class CommnetRepository extends Repository { + constructor(private readonly dataSource: DataSource) { + super( + Comment, + dataSource.createEntityManager(), + dataSource.createQueryRunner(), + ); + } +} diff --git a/backend/src/app/comment/comment.service.ts b/backend/src/app/comment/comment.service.ts new file mode 100644 index 00000000..6a2ba4b5 --- /dev/null +++ b/backend/src/app/comment/comment.service.ts @@ -0,0 +1,33 @@ +import { Injectable } from '@nestjs/common'; +import { CommnetRepository } from '@app/comment/comment.repository'; +import { CommentWritingRequest } from '@app/comment/dto/comment-writing-request.dto'; +import { User } from '@app/user/entity/user.entity'; +import { Comment } from '@app/comment/entity/comment.entity'; +import { GroupArticleRepository } from '@app/group-article/repository/group-article.repository'; +import { GroupNotFoundException } from '@app/comment/exception/group-not-found.exception'; + +@Injectable() +export class CommentService { + constructor( + private readonly commentRepository: CommnetRepository, + private readonly groupArticleRepository: GroupArticleRepository, + ) {} + + async writeComment(user: User, commentWritingRequest: CommentWritingRequest) { + this.validateArticle(commentWritingRequest.articleId); + + const comment = Comment.from( + user, + commentWritingRequest.articleId, + commentWritingRequest.contents, + ); + return await this.commentRepository.save(comment); + } + + async validateArticle(articleId: number) { + const groupArticle = await this.groupArticleRepository.findById(articleId); + if (!groupArticle) { + throw new GroupNotFoundException(); + } + } +} diff --git a/backend/src/app/comment/dto/comment-writing-request.dto.ts b/backend/src/app/comment/dto/comment-writing-request.dto.ts new file mode 100644 index 00000000..f54850f0 --- /dev/null +++ b/backend/src/app/comment/dto/comment-writing-request.dto.ts @@ -0,0 +1,18 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { IsNumber, IsString } from 'class-validator'; + +export class CommentWritingRequest { + @ApiProperty({ + example: 1, + description: '๋ชจ์ง‘ ๊ฒŒ์‹œํŒ ์•„์ด๋””', + }) + @IsNumber() + articleId: number; + + @ApiProperty({ + example: '์ •ํ™•ํžˆ ์–ด๋–ค ๊ฑธ ๊ณต๋ถ€ํ•˜๋Š” ๊ฑธ๊นŒ์š”?', + description: '๋Œ“๊ธ€ ๋‚ด์šฉ', + }) + @IsString() + contents: string; +} diff --git a/backend/src/app/comment/dto/comment-writing-response.dto.ts b/backend/src/app/comment/dto/comment-writing-response.dto.ts new file mode 100644 index 00000000..17e089b6 --- /dev/null +++ b/backend/src/app/comment/dto/comment-writing-response.dto.ts @@ -0,0 +1,15 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { Comment } from '@app/comment/entity/comment.entity'; + +export class CommentWritingResponse { + @ApiProperty({ + example: 1, + description: '๋Œ“๊ธ€ ์•„์ด๋””', + }) + id: number; + + static from(comment: Comment) { + const response = new CommentWritingResponse(); + response.id = comment.id; + } +} diff --git a/backend/src/app/comment/entity/comment.entity.ts b/backend/src/app/comment/entity/comment.entity.ts index 28b3d1de..787fe3f9 100644 --- a/backend/src/app/comment/entity/comment.entity.ts +++ b/backend/src/app/comment/entity/comment.entity.ts @@ -40,4 +40,13 @@ export class Comment { @Column({ type: 'timestamp', nullable: true }) deletedAt: Date | null; + + static from(user: User, articleId: number, contents: string) { + const comment = new Comment(); + comment.userId = user.id; + comment.articleId = articleId; + comment.contents = contents; + + return comment; + } } diff --git a/backend/src/app/comment/exception/group-not-found.exception.ts b/backend/src/app/comment/exception/group-not-found.exception.ts new file mode 100644 index 00000000..205e64d9 --- /dev/null +++ b/backend/src/app/comment/exception/group-not-found.exception.ts @@ -0,0 +1,7 @@ +import { NotFoundException } from '@nestjs/common'; + +export class GroupNotFoundException extends NotFoundException { + constructor(message = 'ํ•ด๋‹น ๊ทธ๋ฃน์ด ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.') { + super({ status: 'GROUP_NOT_FOUND', message }); + } +} diff --git a/backend/src/app/group-application/group-application.service.ts b/backend/src/app/group-application/group-application.service.ts index 8111928f..38336965 100644 --- a/backend/src/app/group-application/group-application.service.ts +++ b/backend/src/app/group-application/group-application.service.ts @@ -17,11 +17,11 @@ import { ApplicationWithUserInfoResponse } from '@src/app/group-application/dto/ export class GroupApplicationService { constructor( private readonly groupApplicationRepository: GroupApplicationRepository, - private readonly groupArticleRespository: GroupArticleRepository, + private readonly groupArticleRepository: GroupArticleRepository, ) {} private async getGroupApplicationContext(user: User, groupArticleId: number) { - const groupArticle = await this.groupArticleRespository.findById( + const groupArticle = await this.groupArticleRepository.findById( groupArticleId, ); await this.validateGroupArticle(groupArticle); diff --git a/backend/src/setSwagger.ts b/backend/src/setSwagger.ts index 9934f2fd..aef27b9a 100644 --- a/backend/src/setSwagger.ts +++ b/backend/src/setSwagger.ts @@ -8,6 +8,7 @@ import { UserModule } from '@app/user/user.module'; import { MyInfoModule } from '@app/myinfo/myinfo.module'; import { GroupApplicationModule } from '@app/group-application/group-application.module'; import { NotificationModule } from '@app/notification/notification.module'; +import { CommentModule } from '@app/comment/comment.module'; export const setSwagger = (app: INestApplication) => { const config = new DocumentBuilder() @@ -31,6 +32,7 @@ export const setSwagger = (app: INestApplication) => { MyInfoModule, GroupApplicationModule, NotificationModule, + CommentModule, ], extraModels: [ResponseEntity], }); From d366336bd2e51dceae4745ea4b548104e370b097 Mon Sep 17 00:00:00 2001 From: Kim Myeongil <67570061+username1103@users.noreply.github.com> Date: Mon, 5 Dec 2022 16:10:06 +0900 Subject: [PATCH 085/142] =?UTF-8?q?[Feature]=20=EB=82=B4=EA=B0=80=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1=ED=95=9C=20=EB=AA=A8=EC=A7=91=20=EA=B2=8C?= =?UTF-8?q?=EC=8B=9C=EA=B8=80=20=EB=AA=A9=EB=A1=9D=20=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?(#188)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :recycle: refactor: ๋ชจ์ง‘๊ฒŒ์‹œ๊ธ€๋ชฉ๋ก์กฐํšŒ API request dto ๋ถ„ํ•ด * :recycle: refactor: TypeOrmConfigService ๋„ค์ด๋ฐ ์˜คํƒ€ ์ˆ˜์ • * :sparkles: feature: ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก ์กฐํšŒ ์ฟผ๋ฆฌ ์ถ”๊ฐ€ * :sparkles: feature: GET /v1/group-articles/me ๋‚ด ๋ชจ์ง‘๊ฒŒ์‹œ๊ธ€๋ชฉ๋ก ์กฐํšŒ API ์ถ”๊ฐ€ --- .../group-article/group-article.controller.ts | 32 ++++++++++- .../repository/group-article.repository.ts | 55 ++++++++++++------- .../config/database/typeorm/config.service.ts | 15 +++-- 3 files changed, 74 insertions(+), 28 deletions(-) diff --git a/backend/src/app/group-article/group-article.controller.ts b/backend/src/app/group-article/group-article.controller.ts index 4ce8e95e..49208764 100644 --- a/backend/src/app/group-article/group-article.controller.ts +++ b/backend/src/app/group-article/group-article.controller.ts @@ -36,6 +36,7 @@ import { UpdateGroupArticleRequest } from '@app/group-article/dto/update-group-a import { NotSuccessGroupException } from '@app/group-article/exception/not-success-group.exception'; import { NotParticipantException } from '@app/group-article/exception/not-participant.exception'; import { GetGroupChatUrlResponseDto } from '@app/group-article/dto/get-group-chat-url-response.dto'; +import { PageRequest } from '@common/util/page-request'; @Controller('group-articles') @ApiTags('Group-Article') @@ -121,7 +122,36 @@ export class GroupArticleController { @Get('search') @ApiSuccessResponse(HttpStatus.OK, SearchGroupArticleResponse) async search(@Query() query: SearchGroupArticlesRequest) { - const result = await this.groupArticleRepository.search(query); + const result = await this.groupArticleRepository.search({ + limit: query.getLimit(), + offset: query.getOffset(), + location: query.location, + category: query.category, + status: query.status, + }); + + return ResponseEntity.OK_WITH_DATA( + new SearchGroupArticleResponse( + result[1], + query.currentPage, + query.countPerPage, + result[0].map((row) => GroupArticleSearchResult.from(row)), + ), + ); + } + + @Get('me') + @JwtAuth() + @ApiSuccessResponse(HttpStatus.OK, SearchGroupArticleResponse) + async getMyGroupArticles( + @CurrentUser() user: User, + @Query() query: PageRequest, + ) { + const result = await this.groupArticleRepository.search({ + limit: query.getLimit(), + offset: query.getOffset(), + user, + }); return ResponseEntity.OK_WITH_DATA( new SearchGroupArticleResponse( diff --git a/backend/src/app/group-article/repository/group-article.repository.ts b/backend/src/app/group-article/repository/group-article.repository.ts index 0bae98f7..f4cc0154 100644 --- a/backend/src/app/group-article/repository/group-article.repository.ts +++ b/backend/src/app/group-article/repository/group-article.repository.ts @@ -6,18 +6,23 @@ import { GroupCategory } from '@app/group-article/entity/group-category.entity'; import { GroupApplication } from '@app/group-application/entity/group-application.entity'; import { Scrap } from '@app/scrap/entity/scrap.entity'; import { Comment } from '@app/comment/entity/comment.entity'; -import { SearchGroupArticlesRequest } from '@app/group-article/dto/search-group-articles-request.dto'; import { IGroupArticleSearchResult } from '@app/group-article/dto/group-article-search-result.interface'; import { User } from '@app/user/entity/user.entity'; import { IGroupArticleDetail } from '@app/group-article/dto/group-article-detail.interface'; +import { + CATEGORY, + GROUP_STATUS, + LOCATION, +} from '@app/group-article/constants/group-article.constants'; @Injectable() export class GroupArticleRepository extends Repository { constructor(private readonly dataSource: DataSource) { + const baseRepository = dataSource.getRepository(GroupArticle); super( - GroupArticle, - dataSource.createEntityManager(), - dataSource.createQueryRunner(), + baseRepository.target, + baseRepository.manager, + baseRepository.queryRunner, ); } @@ -25,9 +30,21 @@ export class GroupArticleRepository extends Repository { return this.findOneBy({ id, deletedAt: IsNull() }); } - async search( - searchRequest: SearchGroupArticlesRequest, - ): Promise<[IGroupArticleSearchResult[], number]> { + async search({ + limit, + offset, + category, + status, + location, + user, + }: { + limit: number; + offset: number; + category?: CATEGORY; + status?: GROUP_STATUS; + location?: LOCATION; + user?: User; + }): Promise<[IGroupArticleSearchResult[], number]> { const query = this.createQueryBuilder('groupArticle') .select([ 'groupArticle.id as id', @@ -63,29 +80,29 @@ export class GroupArticleRepository extends Repository { .where('groupArticle.deletedAt IS NULL') .groupBy('groupArticle.id'); - if (searchRequest.location) { - query.andWhere('group.location = :location', { - location: searchRequest.location, - }); + if (location) { + query.andWhere('group.location = :location', { location }); } - if (searchRequest.category) { + if (category) { query.andWhere('groupCategory.name = :categoryName', { - categoryName: searchRequest.category, + categoryName: category, }); } - if (searchRequest.status) { - query.andWhere('group.status = :status', { - status: searchRequest.status, - }); + if (status) { + query.andWhere('group.status = :status', { status }); + } + + if (user) { + query.andWhere('groupArticle.userId = :userId', { userId: user.id }); } const count = await query.clone().getCount(); const result = await query .orderBy('groupArticle.id', 'DESC') - .limit(searchRequest.getLimit()) - .offset(searchRequest.getOffset()) + .limit(limit) + .offset(offset) .getRawMany(); return [result, count]; diff --git a/backend/src/common/config/database/typeorm/config.service.ts b/backend/src/common/config/database/typeorm/config.service.ts index 2fc0b187..4de92c62 100644 --- a/backend/src/common/config/database/typeorm/config.service.ts +++ b/backend/src/common/config/database/typeorm/config.service.ts @@ -9,12 +9,10 @@ import { AppConfigService } from '@config/app/config.service'; export class TypeOrmConfigService implements TypeOrmOptionsFactory { constructor( private readonly mysqlConfigService: MysqlConfigService, - private readonly appConfigServce: AppConfigService, + private readonly appConfigService: AppConfigService, ) {} - createTypeOrmOptions( - connectionName?: string, - ): Promise | TypeOrmModuleOptions { + createTypeOrmOptions(): Promise | TypeOrmModuleOptions { const entityPath = path.resolve( __dirname, '../../../../**/*.entity.{js,ts}', @@ -22,16 +20,17 @@ export class TypeOrmConfigService implements TypeOrmOptionsFactory { return { type: 'mysql', - name: connectionName, host: this.mysqlConfigService.hostname, username: this.mysqlConfigService.username, password: this.mysqlConfigService.password, database: this.mysqlConfigService.database, port: this.mysqlConfigService.port, - synchronize: !this.appConfigServce.isPrduction(), - logging: this.appConfigServce.isDevelopment() ? 'all' : ['error', 'warn'], + synchronize: !this.appConfigService.isPrduction(), + logging: this.appConfigService.isDevelopment() + ? 'all' + : ['error', 'warn'], entities: [entityPath], - dropSchema: this.appConfigServce.isTest(), + dropSchema: this.appConfigService.isTest(), namingStrategy: new SnakeNamingStrategy(), timezone: 'Z', poolSize: 50, From cd5a4238b96d3030906c54b1cfb8d0f7a8ac7562 Mon Sep 17 00:00:00 2001 From: yangseungchan Date: Mon, 5 Dec 2022 22:53:52 +0900 Subject: [PATCH 086/142] =?UTF-8?q?[Feature]=20=EC=95=8C=EB=A6=BC=20?= =?UTF-8?q?=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8,=20=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20=EB=A7=88=ED=81=AC=EC=97=85=20(#193)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * โœจ feature: ์•Œ๋ฆผ ์ปดํฌ๋„ŒํŠธ ๋งˆํฌ์—… ๋ฐ ์Šคํ† ๋ฆฌ ์ž‘์„ฑ * โœจ feature: ์•Œ๋ฆผํŽ˜์ด์ง€ ๊ธฐ๋ณธ ๊ตฌ์„ฑ * ๐Ÿฅ… chore: ์•Œ๋ฆผ ์ปดํฌ๋„ŒํŠธ ๋ ˆ์ด์•„์›ƒ ์ผ๋ถ€ ์ˆ˜์ • * ๐Ÿฅ… chore: ์•Œ๋ฆผ ์•„์ด์ฝ˜ ๊ฐ€์šด๋ฐ ์ •๋ ฌ ์ถ”๊ฐ€ * ๐Ÿฅ… chore: ์•Œ๋ฆผ์ด ์—†์„ ๋•Œ EmptyMessage ๋ Œ๋”๋ง * ๐Ÿฅ… chore: ํ”ผ๋“œ๋ฐฑ ๋ฐ˜์˜ --- .../components/common/EmptyMessage/index.tsx | 3 +- .../notification/NotificationIcon/index.tsx | 31 +++++ .../NotificationItem.stories.tsx | 45 +++++++ .../notification/NotificationItem/index.tsx | 113 ++++++++++++++++++ frontend/src/constants/notification.ts | 7 ++ frontend/src/pages/notification.tsx | 78 +++++++++++- frontend/src/typings/types.ts | 10 ++ 7 files changed, 283 insertions(+), 4 deletions(-) create mode 100644 frontend/src/components/notification/NotificationIcon/index.tsx create mode 100644 frontend/src/components/notification/NotificationItem/NotificationItem.stories.tsx create mode 100644 frontend/src/components/notification/NotificationItem/index.tsx create mode 100644 frontend/src/constants/notification.ts diff --git a/frontend/src/components/common/EmptyMessage/index.tsx b/frontend/src/components/common/EmptyMessage/index.tsx index 213df9f1..c12863da 100644 --- a/frontend/src/components/common/EmptyMessage/index.tsx +++ b/frontend/src/components/common/EmptyMessage/index.tsx @@ -3,13 +3,14 @@ import styled from '@emotion/styled'; import { IconMoodEmpty } from '@tabler/icons'; interface Props { - target: 'article' | 'participant'; + target: 'article' | 'participant' | 'notification'; large?: boolean; } const targetKr = { article: '๋ชจ์ž„์ด', participant: '์‹ ์ฒญ์ž๊ฐ€', + notification: '์•Œ๋ฆผ์ด', }; const EmptyMessage = ({ target, large }: Props) => { diff --git a/frontend/src/components/notification/NotificationIcon/index.tsx b/frontend/src/components/notification/NotificationIcon/index.tsx new file mode 100644 index 00000000..5ac7ce8b --- /dev/null +++ b/frontend/src/components/notification/NotificationIcon/index.tsx @@ -0,0 +1,31 @@ +import { ActionIcon } from '@mantine/core'; +import { IconCheck, IconMessageCircle2, IconX } from '@tabler/icons'; + +import { Notification } from '@constants/notification'; +import { NotificationType } from '@typings/types'; + +interface Props { + variant: NotificationType['type']; +} + +const NotificationIcon = ({ variant }: Props) => { + const iconScheme = + variant === Notification.ADD_COMMENT + ? { color: 'indigo', icon: } + : variant === Notification.GROUP_SUCCESS + ? { + color: 'cyan', + icon: , + } + : { + color: 'red', + icon: , + }; + return ( + + {iconScheme.icon} + + ); +}; + +export default NotificationIcon; diff --git a/frontend/src/components/notification/NotificationItem/NotificationItem.stories.tsx b/frontend/src/components/notification/NotificationItem/NotificationItem.stories.tsx new file mode 100644 index 00000000..700f4925 --- /dev/null +++ b/frontend/src/components/notification/NotificationItem/NotificationItem.stories.tsx @@ -0,0 +1,45 @@ +import { ComponentMeta, ComponentStory } from '@storybook/react'; + +import { Notification } from '@constants/notification'; + +import NotificationItem from '.'; + +export default { + title: 'Component/NotificationItem', + component: NotificationItem, +} as ComponentMeta; + +const Template: ComponentStory = (args) => ; + +export const AddComment = Template.bind({}); +AddComment.args = { + notification: { + id: 1, + type: Notification.ADD_COMMENT, + title: '๋ฐ•์ข…ํ˜๋‹˜์ด ๊ฒŒ์‹œ๊ธ€์— ๋Œ“๊ธ€์„ ๋‚จ๊ฒผ์–ด์š”.', + subTitle: 'ํ™€๋ฆฌ ์ฎ“', + createdAt: '2021-08-01T00:00:00.000Z', + }, +}; + +export const GroupSuccess = Template.bind({}); +GroupSuccess.args = { + notification: { + id: 1, + type: Notification.GROUP_SUCCESS, + title: 'ํ› ๊ถˆ ๋จน์์‹œ๋‹ค', + subTitle: 'ํ™€๋ฆฌ ์ฎ“', + createdAt: '2022-02-01T00:00:00.000Z', + }, +}; + +export const GroupFail = Template.bind({}); +GroupFail.args = { + notification: { + id: 1, + type: Notification.GROUP_FAIL, + title: '๋ชจ์ž„์ด ๋ฌด์‚ฐ๋˜์—ˆ์–ด์š”.', + subTitle: '์บ๋Ÿฟ์Šคํ„ฐ๋”” - ์ธ์ฒœ', + createdAt: '2021-08-01T00:00:00.000Z', + }, +}; diff --git a/frontend/src/components/notification/NotificationItem/index.tsx b/frontend/src/components/notification/NotificationItem/index.tsx new file mode 100644 index 00000000..ab762563 --- /dev/null +++ b/frontend/src/components/notification/NotificationItem/index.tsx @@ -0,0 +1,113 @@ +import Link from 'next/link'; +import { useState } from 'react'; + +import styled from '@emotion/styled'; +import { ActionIcon, Text } from '@mantine/core'; +import { IconX } from '@tabler/icons'; + +import AlertModal from '@components/common/AlertModal'; +import NotificationIcon from '@components/notification/NotificationIcon'; +import { NotificationType } from '@typings/types'; +import dateTimeFormat from '@utils/dateTime'; + +interface Props { + /** + * ์•Œ๋ฆผ ๋ฐ์ดํ„ฐ + */ + notification: NotificationType; +} + +const NotificationItem = ({ notification }: Props) => { + const { type, title, subTitle, createdAt } = notification; + + const [modalOpen, setModalOpen] = useState(false); + + const handleClickCloseButton = () => { + setModalOpen(true); + }; + /** + * TODO : ์•Œ๋ฆผ ๋ฐ์ดํ„ฐ์—์„œ ๋“ค์–ด์˜จ ๋งํฌ๋ฅผ ์‚ฌ์šฉ + */ + + return ( + + setModalOpen(false)} + /> + + + + + + + + {title} + + + {subTitle} + + + + + + + + + + {dateTimeFormat(createdAt)} + + + + ); +}; + +export default NotificationItem; + +const NotificationWrapper = styled.div` + display: grid; + align-items: center; + grid-template-columns: 1fr 5rem; + gap: 1.6rem; + padding: 1.6rem; + width: 100%; + border: 1px solid ${({ theme }) => theme.colors.gray[2]}; + border-radius: 0.8rem; +`; + +const ContentSection = styled.div` + cursor: pointer; + width: 100%; + display: grid; + grid-template-columns: 2.8rem 1fr; + gap: 1.6rem; +`; + +const IconWrapper = styled.div` + height: 100%; + margin-right: 1.6rem; + display: flex; + align-items: center; +`; + +const TitleWrapper = styled.div` + display: flex; + width: 100%; + flex-direction: column; + gap: 0.8rem; + overflow-x: hidden; +`; + +const AsideSection = styled.div` + height: 100%; + display: flex; + flex-direction: column; + align-items: flex-end; + justify-content: space-between; + min-width: 4rem; +`; diff --git a/frontend/src/constants/notification.ts b/frontend/src/constants/notification.ts new file mode 100644 index 00000000..8e45b4ea --- /dev/null +++ b/frontend/src/constants/notification.ts @@ -0,0 +1,7 @@ +enum Notification { + ADD_COMMENT = 'ADD_COMMENT', + GROUP_SUCCESS = 'GROUP_SUCCESS', + GROUP_FAIL = 'GROUP_FAIL', +} + +export { Notification }; diff --git a/frontend/src/pages/notification.tsx b/frontend/src/pages/notification.tsx index 7be1bfb5..6e3bd317 100644 --- a/frontend/src/pages/notification.tsx +++ b/frontend/src/pages/notification.tsx @@ -1,8 +1,80 @@ +import styled from '@emotion/styled'; + +import EmptyMessage from '@components/common/EmptyMessage'; +import Header from '@components/common/Header'; +import RootTitle from '@components/common/Header/RootTitle'; +import UserLoginItem from '@components/common/Header/UserLoginItem'; import NavigationTab from '@components/common/NavigationTab'; import PageLayout from '@components/common/PageLayout'; +import NotificationItem from '@components/notification/NotificationItem'; +import { Notification } from '@constants/notification'; +import { PAGE_TITLE } from '@constants/pageTitle'; +import { NotificationType } from '@typings/types'; + +const dummyNotifications: NotificationType[] = [ + { + id: 1, + type: Notification.ADD_COMMENT, + title: '๋ฐ•์ข…ํ˜๋‹˜์ด ๊ฒŒ์‹œ๊ธ€์— ๋Œ“๊ธ€์„ ๋‚จ๊ฒผ์–ด์š”.', + subTitle: 'ํ™€๋ฆฌ ์ฎ“', + createdAt: '2021-08-01T00:00:00.000Z', + }, + { + id: 2, + type: Notification.GROUP_SUCCESS, + title: 'ํ› ๊ถˆ ๋จน์์‹œ๋‹ค', + subTitle: 'ํ™€๋ฆฌ ์ฎ“', + createdAt: '2022-02-01T00:00:00.000Z', + }, + { + id: 3, + type: Notification.GROUP_FAIL, + title: '๋ชจ์ž„์ด ๋ฌด์‚ฐ๋˜์—ˆ์–ด์š”.', + subTitle: '์บ๋Ÿฟ์Šคํ„ฐ๋”” - ์ธ์ฒœ', + createdAt: '2021-08-01T00:00:00.000Z', + }, +]; -const Notification = () => { - return }>notification page; +const NotificationPage = () => { + /** + * TODO : API ๋ถ™์ด๊ธฐ + */ + const notifications = dummyNotifications; + return ( + + } + rightNode={} + /> + } + footer={} + > + + {notifications.length > 0 ? ( + notifications.map((notification) => ( + + )) + ) : ( + + )} + + + ); }; -export default Notification; +export default NotificationPage; + +const PageWrapper = styled.div` + width: 100%; + display: flex; + flex-direction: column; + flex: 1; + padding: 1.6rem; + gap: 1.6rem; +`; diff --git a/frontend/src/typings/types.ts b/frontend/src/typings/types.ts index 3c959f24..e3954c84 100644 --- a/frontend/src/typings/types.ts +++ b/frontend/src/typings/types.ts @@ -3,6 +3,7 @@ import { AxiosResponse } from 'axios'; import { ArticleStatus } from '@constants/article'; import { Category } from '@constants/category'; import { Location } from '@constants/location'; +import { Notification } from '@constants/notification'; interface ArticlePreviewType { id: number; @@ -73,6 +74,14 @@ interface ImageUploadType { url: string; } +interface NotificationType { + id: number; + type: Notification; + title: string; + subTitle: string; + createdAt: string; +} + type ApiResponse = AxiosResponse<{ data: T; messasge: string; status: string }>; export type { @@ -85,4 +94,5 @@ export type { CommentType, UserType, ImageUploadType, + NotificationType, }; From baa59d777377bd0bde0a6b14cda452deba497bd2 Mon Sep 17 00:00:00 2001 From: yangseungchan Date: Mon, 5 Dec 2022 22:54:32 +0900 Subject: [PATCH 087/142] =?UTF-8?q?[BUGFIX]=20=EA=B2=8C=EC=8B=9C=EA=B8=80?= =?UTF-8?q?=20=EC=83=81=EC=84=B8=20=EC=A1=B0=ED=9A=8C=EC=8B=9C=20NaN=20?= =?UTF-8?q?=EC=9A=94=EC=B2=AD=20=EB=B3=B4=EB=82=B4=EB=8A=94=20=EB=AC=B8?= =?UTF-8?q?=EC=A0=9C=20=ED=95=B4=EA=B2=B0=20(#198)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ๐Ÿ› fix: react-query๊ฐ€ router๊ฐ€ ์ค€๋น„๋˜์—ˆ์„๋•Œ๋งŒ ํ™œ์„ฑํ™”๋˜๋„๋ก ์ˆ˜์ • * ๐Ÿฅ… chore: ๊ฒŒ์‹œ๊ธ€ ์ƒ์„ธ ์กฐํšŒ ๋กœ๋”ฉ ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ --- .../common/ArticleLoading/index.tsx | 49 ++++++ frontend/src/hooks/useAuthQuery.ts | 5 +- frontend/src/hooks/useGeneralQuery.ts | 5 +- frontend/src/pages/article/[id].tsx | 157 +++++++++--------- frontend/src/pages/user/[id].tsx | 4 +- 5 files changed, 139 insertions(+), 81 deletions(-) create mode 100644 frontend/src/components/common/ArticleLoading/index.tsx diff --git a/frontend/src/components/common/ArticleLoading/index.tsx b/frontend/src/components/common/ArticleLoading/index.tsx new file mode 100644 index 00000000..2f04fa51 --- /dev/null +++ b/frontend/src/components/common/ArticleLoading/index.tsx @@ -0,0 +1,49 @@ +import styled from '@emotion/styled'; +import { Skeleton, Space } from '@mantine/core'; + +const ArticleLoading = () => { + return ( + <> + + +
    + + +
    +
    + + + + + + + + + + + + + + + + + ); +}; + +const ArticleAuthor = styled.div` + display: flex; + gap: 1.2rem; + align-items: center; +`; + +const ArticleStatusBar = styled.div` + display: flex; + gap: 0.4rem; +`; + +const ArticleApplicationStatus = styled.div` + display: flex; + justify-content: space-between; +`; + +export default ArticleLoading; diff --git a/frontend/src/hooks/useAuthQuery.ts b/frontend/src/hooks/useAuthQuery.ts index 459e5b87..8213aa68 100644 --- a/frontend/src/hooks/useAuthQuery.ts +++ b/frontend/src/hooks/useAuthQuery.ts @@ -1,3 +1,5 @@ +import { useRouter } from 'next/router'; + import { QueryFunction, QueryKey, useQuery } from '@tanstack/react-query'; import { UseQueryOptions } from '@tanstack/react-query/src/types'; import { AxiosError } from 'axios'; @@ -17,10 +19,11 @@ const useAuthQuery = < 'queryKey' | 'queryFn' | 'initialData' > & { initialData?: () => undefined } ) => { + const { isReady } = useRouter(); const { data, isLoading, isFetching, error } = useQuery( queryKey, queryFn, - options + { ...options, enabled: isReady && options.enabled } ); if (error && error instanceof AxiosError) { diff --git a/frontend/src/hooks/useGeneralQuery.ts b/frontend/src/hooks/useGeneralQuery.ts index 7e2cfb96..e62cf6bb 100644 --- a/frontend/src/hooks/useGeneralQuery.ts +++ b/frontend/src/hooks/useGeneralQuery.ts @@ -1,3 +1,5 @@ +import { useRouter } from 'next/router'; + import { QueryFunction, QueryKey, useQuery } from '@tanstack/react-query'; import { UseQueryOptions } from '@tanstack/react-query/src/types'; import { AxiosError } from 'axios'; @@ -15,10 +17,11 @@ const useGeneralQuery = < 'queryKey' | 'queryFn' | 'initialData' > & { initialData?: () => undefined } ) => { + const { isReady } = useRouter(); const { data, isLoading, isFetching, error } = useQuery( queryKey, queryFn, - options + { ...options, enabled: isReady && options.enabled } ); if (error && error instanceof AxiosError) { diff --git a/frontend/src/pages/article/[id].tsx b/frontend/src/pages/article/[id].tsx index f36e444d..8c2d7528 100644 --- a/frontend/src/pages/article/[id].tsx +++ b/frontend/src/pages/article/[id].tsx @@ -8,9 +8,11 @@ import { IconList } from '@tabler/icons'; import ParticipantsModal from '@components/article/ParticipantsModal'; import ParticipateButton from '@components/article/ParticipateButton'; +import ArticleLoading from '@components/common/ArticleLoading'; import ArticleTag from '@components/common/ArticleTag'; import Header from '@components/common/Header'; import DetailTitle from '@components/common/Header/DetailTitle'; +import UserLoginItem from '@components/common/Header/UserLoginItem'; import PageLayout from '@components/common/PageLayout'; import StatCounter from '@components/common/StatCounter'; import { ArticleStatus, ArticleStatusKr } from '@constants/article'; @@ -31,8 +33,8 @@ const ArticleDetail = () => { const { colors: { indigo, gray }, } = useTheme(); - const router = useRouter(); - const articleId = Number(router.query.id); + const { query } = useRouter(); + const articleId = Number(query.id); const { data: myInfo } = useFetchMyInfo(); const { article } = useFetchArticle(articleId); const { isJoined } = useFetchApplicationStatus(articleId); @@ -46,7 +48,6 @@ const ArticleDetail = () => { return ( <> { subTitle={PAGE_TITLE.ARTICLE.subTitle} /> } + rightNode={} /> } > - {/* TODO ๋กœ๋”ฉ ์ฒ˜๋ฆฌ */} - {!article || isJoined === undefined || !myInfo ? ( -
    ๋กœ๋”ฉ์ค‘
    - ) : ( - <> - - - - - - {article.author.userName} - - - - {article.title} - - + + {!article || isJoined === undefined || !myInfo ? ( + + ) : ( + <> + + + + + {article.author.userName} + + + + {article.title} + + + + + + + + ๋ชจ์ง‘ ํ˜„ํ™ฉ + + {article.currentCapacity}๋ช… / {article.maxCapacity}๋ช… + + + setParticipantsModalOpen(true)}> + + ์‹ ์ฒญ์ž ํ™•์ธ + + + - - - - - - ๋ชจ์ง‘ ํ˜„ํ™ฉ - - {article.currentCapacity}๋ช… / {article.maxCapacity}๋ช… - - - setParticipantsModalOpen(true)}> - - ์‹ ์ฒญ์ž ํ™•์ธ - - - - - - - {article.author.id !== myInfo.id && ( - - )} - - - - -
    ๋Œ“๊ธ€์˜์—ญ
    -
    -
    - {/* TODO participants API ์š”์ฒญ */} - setParticipantsModalOpen(false)} - /> - - )} + + + + {article.author.id !== myInfo.id && ( + + )} + + + + +
    ๋Œ“๊ธ€์˜์—ญ
    +
    + + )} + + {/* TODO participants API ์š”์ฒญ */} + setParticipantsModalOpen(false)} + /> +
    ); @@ -155,7 +158,7 @@ const getButtonStatus = (article: ArticleType, isJoined: boolean) => { } }; -const ContenxtWrapper = styled.div` +const ContentWrapper = styled.div` display: flex; flex-direction: column; padding: 1.6rem; diff --git a/frontend/src/pages/user/[id].tsx b/frontend/src/pages/user/[id].tsx index 69c3c32e..4b1b131d 100644 --- a/frontend/src/pages/user/[id].tsx +++ b/frontend/src/pages/user/[id].tsx @@ -11,7 +11,7 @@ import useFetchProfile from '@hooks/queries/useFetchProfile'; const UserProfile = () => { const { - query: { id }, + query: { id, isReady }, } = useRouter(); const { profile, isFetching } = useFetchProfile(Number(id)); @@ -31,7 +31,7 @@ const UserProfile = () => { {/* TODO ๋กœ๋”ฉ์ค‘ */} - {isFetching ?
    ๋กœ๋”ฉ์ค‘
    : } + {!isReady || isFetching ?
    ๋กœ๋”ฉ์ค‘
    : }
    From d432bdc03937e727dc57dff09898c6471537ed10 Mon Sep 17 00:00:00 2001 From: Gakko <90585081+pythonstrup@users.noreply.github.com> Date: Tue, 6 Dec 2022 10:49:43 +0900 Subject: [PATCH 088/142] =?UTF-8?q?[Feature]=20=EB=AA=A8=EC=A7=91=20?= =?UTF-8?q?=EA=B2=8C=EC=8B=9C=EA=B8=80=20=EB=8C=93=EA=B8=80=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=20API=20=20(#197)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * โœจ feature: comment delete ๋ฉ”์†Œ๋“œ ์ถ”๊ฐ€ * โœจ feature: comment repository findById ์ž‘์„ฑ * โœจ feature: comment not found exception ์ž‘์„ฑ * โœจ feature: not author exception ์ž‘์„ฑ * โœจ feature: comment service ์ž‘์„ฑ - delete ๋กœ์ง - delete ์˜ˆ์™ธ์ฒ˜๋ฆฌ * โœจ feature: comment controller ์ž‘์„ฑ - delete ๊ฒฝ๋กœ - Sucess, Error exception - Swagger ๋“ฑ๋ก * ๐Ÿฅ… chore: ํ”„๋กœํ•„ ๋ธ”๋กœ๊ทธ url ๋น„์˜๋ฌดํ™” --- backend/src/app/comment/comment.controller.ts | 24 +++++++++++++++++-- backend/src/app/comment/comment.repository.ts | 6 ++++- backend/src/app/comment/comment.service.ts | 20 ++++++++++++++++ .../src/app/comment/entity/comment.entity.ts | 4 ++++ .../exception/comment-not-found.exception.ts | 7 ++++++ .../comment/exception/not-author.exception.ts | 7 ++++++ .../dto/profile-modifying-request.dto.ts | 3 +-- 7 files changed, 66 insertions(+), 5 deletions(-) create mode 100644 backend/src/app/comment/exception/comment-not-found.exception.ts create mode 100644 backend/src/app/comment/exception/not-author.exception.ts diff --git a/backend/src/app/comment/comment.controller.ts b/backend/src/app/comment/comment.controller.ts index a223501a..431da9c7 100644 --- a/backend/src/app/comment/comment.controller.ts +++ b/backend/src/app/comment/comment.controller.ts @@ -1,4 +1,12 @@ -import { Body, Controller, HttpStatus, Post } from '@nestjs/common'; +import { + Body, + Controller, + Delete, + HttpStatus, + Param, + ParseIntPipe, + Post, +} from '@nestjs/common'; import { CommentService } from '@app/comment/comment.service'; import { JwtAuth } from '@src/common/decorator/jwt-auth.decorator'; import { ApiSuccessResponse } from '@src/common/decorator/api-success-resposne.decorator'; @@ -10,6 +18,8 @@ import { ResponseEntity } from '@src/common/response-entity'; import { ApiTags } from '@nestjs/swagger'; import { ApiErrorResponse } from '@src/common/decorator/api-error-response.decorator'; import { GroupNotFoundException } from '@app/comment/exception/group-not-found.exception'; +import { CommentNotFoundException } from '@app/comment/exception/comment-not-found.exception'; +import { NotAuthorException } from '@app/comment/exception/not-author.exception'; @Controller('comments') @ApiTags('Comment') @@ -20,7 +30,7 @@ export class CommentController { @Post('/') @ApiSuccessResponse(HttpStatus.CREATED, CommentWritingResponse) @ApiErrorResponse(GroupNotFoundException) - async writeCommnet( + async writeComment( @CurrentUser() user: User, @Body() commentWritingRequest: CommentWritingRequest, ) { @@ -31,4 +41,14 @@ export class CommentController { const data = CommentWritingResponse.from(comment); return ResponseEntity.CREATED_WITH_DATA(data); } + + @Delete(':id') + @ApiSuccessResponse(HttpStatus.NO_CONTENT) + @ApiErrorResponse(CommentNotFoundException, NotAuthorException) + async deleteComment( + @CurrentUser() user: User, + @Param('id', ParseIntPipe) id: number, + ) { + await this.commentService.deleteComment(user, id); + } } diff --git a/backend/src/app/comment/comment.repository.ts b/backend/src/app/comment/comment.repository.ts index a23589aa..a167b6ec 100644 --- a/backend/src/app/comment/comment.repository.ts +++ b/backend/src/app/comment/comment.repository.ts @@ -1,4 +1,4 @@ -import { DataSource, Repository } from 'typeorm'; +import { DataSource, IsNull, Repository } from 'typeorm'; import { Injectable } from '@nestjs/common'; import { Comment } from '@app/comment/entity/comment.entity'; @@ -11,4 +11,8 @@ export class CommnetRepository extends Repository { dataSource.createQueryRunner(), ); } + + findById(id: number) { + return this.findOneBy({ id, deletedAt: IsNull() }); + } } diff --git a/backend/src/app/comment/comment.service.ts b/backend/src/app/comment/comment.service.ts index 6a2ba4b5..65967550 100644 --- a/backend/src/app/comment/comment.service.ts +++ b/backend/src/app/comment/comment.service.ts @@ -5,6 +5,8 @@ import { User } from '@app/user/entity/user.entity'; import { Comment } from '@app/comment/entity/comment.entity'; import { GroupArticleRepository } from '@app/group-article/repository/group-article.repository'; import { GroupNotFoundException } from '@app/comment/exception/group-not-found.exception'; +import { CommentNotFoundException } from '@app/comment/exception/comment-not-found.exception'; +import { NotAuthorException } from '@app/comment/exception/not-author.exception'; @Injectable() export class CommentService { @@ -30,4 +32,22 @@ export class CommentService { throw new GroupNotFoundException(); } } + + async deleteComment(user: User, id: number) { + const comment = await this.commentRepository.findById(id); + await this.validateDeleteComment(comment, user); + + comment.delete(); + await this.commentRepository.save(comment); + } + + async validateDeleteComment(comment: Comment, user: User) { + if (!comment) { + throw new CommentNotFoundException(); + } + + if (comment.userId !== user.id) { + throw new NotAuthorException(); + } + } } diff --git a/backend/src/app/comment/entity/comment.entity.ts b/backend/src/app/comment/entity/comment.entity.ts index 787fe3f9..601a6ce6 100644 --- a/backend/src/app/comment/entity/comment.entity.ts +++ b/backend/src/app/comment/entity/comment.entity.ts @@ -49,4 +49,8 @@ export class Comment { return comment; } + + delete() { + this.deletedAt = new Date(); + } } diff --git a/backend/src/app/comment/exception/comment-not-found.exception.ts b/backend/src/app/comment/exception/comment-not-found.exception.ts new file mode 100644 index 00000000..7baea85d --- /dev/null +++ b/backend/src/app/comment/exception/comment-not-found.exception.ts @@ -0,0 +1,7 @@ +import { NotFoundException } from '@nestjs/common'; + +export class CommentNotFoundException extends NotFoundException { + constructor(message = 'ํ•ด๋‹น ๋Œ“๊ธ€์ด ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.') { + super({ status: 'COMMENT_NOT_FOUND', message }); + } +} diff --git a/backend/src/app/comment/exception/not-author.exception.ts b/backend/src/app/comment/exception/not-author.exception.ts new file mode 100644 index 00000000..756ba67a --- /dev/null +++ b/backend/src/app/comment/exception/not-author.exception.ts @@ -0,0 +1,7 @@ +import { ForbiddenException } from '@nestjs/common'; + +export class NotAuthorException extends ForbiddenException { + constructor(message = 'ํ•ด๋‹น ๋Œ“๊ธ€์˜ ์ž‘์„ฑ์ž๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.') { + super({ status: 'NOT_AUTHOR', message }); + } +} diff --git a/backend/src/app/myinfo/dto/profile-modifying-request.dto.ts b/backend/src/app/myinfo/dto/profile-modifying-request.dto.ts index 65b97e3d..19a7c558 100644 --- a/backend/src/app/myinfo/dto/profile-modifying-request.dto.ts +++ b/backend/src/app/myinfo/dto/profile-modifying-request.dto.ts @@ -38,8 +38,7 @@ export class ProfileModifyingRequest { @ApiProperty({ example: 'https://myvelop.tistory.com/', description: '๋ธ”๋กœ๊ทธ ์ฃผ์†Œ', - required: true, }) - @IsUrl() + @IsString() blogUrl: string; } From 358983d2215f4bc8cd7bd0d4d04474e83a5f15fc Mon Sep 17 00:00:00 2001 From: Kim Myeongil <67570061+username1103@users.noreply.github.com> Date: Tue, 6 Dec 2022 11:13:47 +0900 Subject: [PATCH 089/142] =?UTF-8?q?[Feature]=20=EB=82=B4=EA=B0=80=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1=ED=95=9C=20=EB=AA=A8=EC=9E=84=20=EA=B2=8C?= =?UTF-8?q?=EC=8B=9C=EA=B8=80=20=EC=A1=B0=ED=9A=8C=20API=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20(#206)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :sparkles: feature: ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก ์กฐํšŒ API URI ๋ณ€๊ฒฝ - GET /v1/my-group-articles๋กœ ๋ณ€๊ฒฝ - ๊ธฐ์กด์— ์žˆ๋˜ GET /v1/group-articles/me๋Š” ํ”„๋ก ํŠธ์—์„œ ์‚ฌ์šฉ์ค‘์ด๋ผ ์šฐ์„  ๋‘์—ˆ์Œ * :sparkles: feature: ๋‚ด ๊ฒŒ์‹œ๊ธ€ ์กฐํšŒ API ์ถ”๊ฐ€ - GET /v1/my-group-articles/:id ์ถ”๊ฐ€ - privateํ•œ ์ •๋ณด(chatUrl)๊นŒ์ง€ ์ „๋‹ฌ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•จ * :bug: fix: ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ์‹œ ์ตœ๋Œ€ ์ธ์›์ˆ˜ 15๋ช… ์ œํ•œ ์ถ”๊ฐ€ * :recycle: refactor: content์™€ contents๊ฐ€ ํ˜ผ์šฉ๋˜๊ณ  ์žˆ์–ด contents๋กœ ์ˆ˜์ • --- .../get-group-article-detail-response.dto.ts | 4 +- .../dto/get-my-group-article-response.dto.ts | 67 ++++++++++++++++++ .../dto/group-article-register-request.dto.ts | 2 + .../app/group-article/group-article.module.ts | 5 +- .../my-group-article.controller.ts | 70 +++++++++++++++++++ .../group-article/my-group-article.service.ts | 25 +++++++ 6 files changed, 170 insertions(+), 3 deletions(-) create mode 100644 backend/src/app/group-article/dto/get-my-group-article-response.dto.ts create mode 100644 backend/src/app/group-article/my-group-article.controller.ts create mode 100644 backend/src/app/group-article/my-group-article.service.ts diff --git a/backend/src/app/group-article/dto/get-group-article-detail-response.dto.ts b/backend/src/app/group-article/dto/get-group-article-detail-response.dto.ts index 52aed16d..95141fc7 100644 --- a/backend/src/app/group-article/dto/get-group-article-detail-response.dto.ts +++ b/backend/src/app/group-article/dto/get-group-article-detail-response.dto.ts @@ -19,7 +19,7 @@ export class GetGroupArticleDetailResponse { example: `์•ˆ๋…•ํ•˜์„ธ์š”. ์„œ์šธ ์ง€์—ญ CS ์Šคํ„ฐ๋””์›๋“ค์„ ๋ชจ์ง‘ํ•ฉ๋‹ˆ๋‹ค!\\n์„œ์šธ ์ง€์—ญ CS ๋ชจ์ง‘ ์‚ฌ์ง„์ž๋ฃŒ`, description: '๊ฒŒ์‹œ๊ธ€ ์ œ๋ชฉ', }) - content: string; + contents: string; @ApiProperty() author: Author; @@ -61,7 +61,7 @@ export class GetGroupArticleDetailResponse { const res = new GetGroupArticleDetailResponse(); res.id = groupArticleDetail.id; res.title = groupArticleDetail.title; - res.content = groupArticleDetail.contents; + res.contents = groupArticleDetail.contents; res.author = { id: groupArticleDetail.userId, userName: groupArticleDetail.userName, diff --git a/backend/src/app/group-article/dto/get-my-group-article-response.dto.ts b/backend/src/app/group-article/dto/get-my-group-article-response.dto.ts new file mode 100644 index 00000000..fa2e2de2 --- /dev/null +++ b/backend/src/app/group-article/dto/get-my-group-article-response.dto.ts @@ -0,0 +1,67 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { + CATEGORY, + GROUP_STATUS, + LOCATION, +} from '@app/group-article/constants/group-article.constants'; +import { GroupArticle } from '@app/group-article/entity/group-article.entity'; + +export class GetMyGroupArticleResponse { + @ApiProperty({ example: 1, description: '๊ฒŒ์‹œ๊ธ€ ์•„์ด๋””' }) + id: number; + + @ApiProperty({ example: 'CS ์Šคํ„ฐ๋”” ๋ชจ์ง‘', description: '๊ฒŒ์‹œ๊ธ€ ์ œ๋ชฉ' }) + title: string; + + @ApiProperty({ + example: `์•ˆ๋…•ํ•˜์„ธ์š”. ์„œ์šธ ์ง€์—ญ CS ์Šคํ„ฐ๋””์›๋“ค์„ ๋ชจ์ง‘ํ•ฉ๋‹ˆ๋‹ค!\\n์„œ์šธ ์ง€์—ญ CS ๋ชจ์ง‘ ์‚ฌ์ง„์ž๋ฃŒ`, + description: '๊ฒŒ์‹œ๊ธ€ ์ œ๋ชฉ', + }) + contents: string; + + @ApiProperty({ example: CATEGORY.STUDY, description: '๋ชจ์ง‘ ์นดํ…Œ๊ณ ๋ฆฌ' }) + category: string; + + @ApiProperty({ example: LOCATION.ONLINE, description: '๋ชจ์ž„ ์žฅ์†Œ' }) + location: LOCATION; + + @ApiProperty({ + example: + 'https://kr.object.ncloudstorage.com/uploads/images/1669276833875-64adca9c-94cd-4162-a53f-f75e951e39db', + description: '๊ฒŒ์‹œ๊ธ€ ์ธ๋„ค์ผ', + }) + thumbnail: string; + + @ApiProperty({ + example: GROUP_STATUS.PROGRESS, + description: '๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€ ์ƒํƒœ', + }) + status: GROUP_STATUS; + + @ApiProperty({ example: 10, description: '์ตœ๋Œ€ ๋ชจ์ง‘ ์ธ์›' }) + maxCapacity: number; + + @ApiProperty({ + example: 'https://open.kakao.com/์˜คํ”ˆ์ฑ„ํŒ…๋ฐฉpath', + description: '์นด์นด์˜คํ†ก๊ณผ ๊ธฐํƒ€ ์ฑ„ํŒ…์„œ๋น„์Šค์˜ ์ฃผ์†Œ๋ฅผ ๋‹ด์•„๋†“์„ ์ˆ˜ ์žˆ๋‹ค.', + }) + url: string; + + @ApiProperty({ example: new Date(), description: '๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ์ผ' }) + createdAt: Date; + + static from(groupArticle: GroupArticle) { + const res = new GetMyGroupArticleResponse(); + res.id = groupArticle.id; + res.title = groupArticle.title; + res.contents = groupArticle.contents; + res.category = groupArticle.group.category.name; + res.thumbnail = groupArticle.group.thumbnail; + res.status = groupArticle.group.status; + res.location = groupArticle.group.location; + res.maxCapacity = groupArticle.group.maxCapacity; + res.url = groupArticle.group.chatUrl; + res.createdAt = groupArticle.group.createdAt; + return res; + } +} diff --git a/backend/src/app/group-article/dto/group-article-register-request.dto.ts b/backend/src/app/group-article/dto/group-article-register-request.dto.ts index 55134d6e..424ee891 100644 --- a/backend/src/app/group-article/dto/group-article-register-request.dto.ts +++ b/backend/src/app/group-article/dto/group-article-register-request.dto.ts @@ -5,6 +5,7 @@ import { IsString, IsUrl, Length, + Max, Min, } from 'class-validator'; import { @@ -56,6 +57,7 @@ export class GroupArticleRegisterRequest { }) @IsNumber() @Min(2) + @Max(15) maxCapacity: number; @ApiProperty({ diff --git a/backend/src/app/group-article/group-article.module.ts b/backend/src/app/group-article/group-article.module.ts index 8cfa832e..56e3f524 100644 --- a/backend/src/app/group-article/group-article.module.ts +++ b/backend/src/app/group-article/group-article.module.ts @@ -4,14 +4,17 @@ import { GroupArticleService } from '@app/group-article/group-article.service'; import { GroupCategoryRepository } from '@app/group-article/repository/group-category.repository'; import { GroupRepository } from '@app/group-article/repository/group.repository'; import { GroupArticleRepository } from '@app/group-article/repository/group-article.repository'; +import { MyGroupArticleController } from '@app/group-article/my-group-article.controller'; +import { MyGroupArticleService } from '@app/group-article/my-group-article.service'; @Module({ - controllers: [GroupArticleController], + controllers: [GroupArticleController, MyGroupArticleController], providers: [ GroupArticleService, GroupRepository, GroupCategoryRepository, GroupArticleRepository, + MyGroupArticleService, ], exports: [GroupArticleRepository], }) diff --git a/backend/src/app/group-article/my-group-article.controller.ts b/backend/src/app/group-article/my-group-article.controller.ts new file mode 100644 index 00000000..69b0fc95 --- /dev/null +++ b/backend/src/app/group-article/my-group-article.controller.ts @@ -0,0 +1,70 @@ +import { + Controller, + Get, + HttpStatus, + Param, + ParseIntPipe, + Query, +} from '@nestjs/common'; +import { ApiTags } from '@nestjs/swagger'; +import { GroupArticleRepository } from '@app/group-article/repository/group-article.repository'; +import { JwtAuth } from '@decorator/jwt-auth.decorator'; +import { ApiSuccessResponse } from '@decorator/api-success-resposne.decorator'; +import { SearchGroupArticleResponse } from '@app/group-article/dto/search-group-articles-response.dto'; +import { CurrentUser } from '@decorator/current-user.decorator'; +import { User } from '@app/user/entity/user.entity'; +import { PageRequest } from '@common/util/page-request'; +import { ResponseEntity } from '@common/response-entity'; +import { GroupArticleSearchResult } from '@app/group-article/dto/group-article-search-result.dto'; +import { ApiErrorResponse } from '@decorator/api-error-response.decorator'; +import { GroupArticleNotFoundException } from '@app/group-article/exception/group-article-not-found.exception'; +import { NotAuthorException } from '@app/group-article/exception/not-author.exception'; +import { MyGroupArticleService } from '@app/group-article/my-group-article.service'; +import { GetMyGroupArticleResponse } from '@app/group-article/dto/get-my-group-article-response.dto'; + +@Controller('my-group-articles') +@ApiTags('MyGroupArticle') +export class MyGroupArticleController { + constructor( + private readonly groupArticleRepository: GroupArticleRepository, + private readonly myGroupArticleService: MyGroupArticleService, + ) {} + + @Get('/') + @JwtAuth() + @ApiSuccessResponse(HttpStatus.OK, SearchGroupArticleResponse) + async getMyGroupArticles( + @CurrentUser() user: User, + @Query() query: PageRequest, + ) { + const result = await this.groupArticleRepository.search({ + limit: query.getLimit(), + offset: query.getOffset(), + user, + }); + + return ResponseEntity.OK_WITH_DATA( + new SearchGroupArticleResponse( + result[1], + query.currentPage, + query.countPerPage, + result[0].map((row) => GroupArticleSearchResult.from(row)), + ), + ); + } + + @Get(':id') + @JwtAuth() + @ApiSuccessResponse(HttpStatus.OK, GetMyGroupArticleResponse) + @ApiErrorResponse(GroupArticleNotFoundException, NotAuthorException) + async getMyGroupArticle( + @CurrentUser() user: User, + @Param('id', ParseIntPipe) id: number, + ) { + const groupArticle = await this.myGroupArticleService.getById(user, id); + + return ResponseEntity.OK_WITH_DATA( + GetMyGroupArticleResponse.from(groupArticle), + ); + } +} diff --git a/backend/src/app/group-article/my-group-article.service.ts b/backend/src/app/group-article/my-group-article.service.ts new file mode 100644 index 00000000..edfe1055 --- /dev/null +++ b/backend/src/app/group-article/my-group-article.service.ts @@ -0,0 +1,25 @@ +import { Injectable } from '@nestjs/common'; +import { GroupArticleRepository } from '@app/group-article/repository/group-article.repository'; +import { User } from '@app/user/entity/user.entity'; +import { GroupArticleNotFoundException } from '@app/group-article/exception/group-article-not-found.exception'; +import { NotAuthorException } from '@app/group-article/exception/not-author.exception'; + +@Injectable() +export class MyGroupArticleService { + constructor( + private readonly groupArticleRepository: GroupArticleRepository, + ) {} + + async getById(user: User, id: number) { + const groupArticle = await this.groupArticleRepository.findById(id); + if (!groupArticle) { + throw new GroupArticleNotFoundException(); + } + + if (!groupArticle.isAuthor(user)) { + throw new NotAuthorException(); + } + + return groupArticle; + } +} From 47431351f4f6bac08b04a582d3ee06f7d66f45a0 Mon Sep 17 00:00:00 2001 From: Kim Myeongil <67570061+username1103@users.noreply.github.com> Date: Tue, 6 Dec 2022 11:29:06 +0900 Subject: [PATCH 090/142] =?UTF-8?q?[Feature]=20=EB=AA=A8=EC=A7=91=EC=A4=91?= =?UTF-8?q?=EB=8B=A8,=20=EB=AA=A8=EC=A7=91=EC=99=84=EB=A3=8C=EC=8B=9C=20?= =?UTF-8?q?=EC=95=8C=EB=A6=BC=20=EC=B6=94=EA=B0=80=ED=95=98=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=20=EC=88=98=EC=A0=95=20(#202)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :goal_net: chore: @nestjs/event-emitter ์„ค์น˜ * :sparkles: feature: eventEmitter ๋ชจ๋“ˆ ์ถ”๊ฐ€ * :sparkles: feature: user-notification userId, notificationId unique ์ธ๋ฑ์Šค ์ถ”๊ฐ€ * :sparkles: feature: ๋ชจ์ง‘์™„๋ฃŒ์‹œ ์•Œ๋ฆผ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€ - groupApplicationModule์—์„œ groupApplicationRepository export - NotificationModule์—์„œ GroupApplicationModule import - eventEmitter๋ฅผ ์‚ฌ์šฉํ•ด ์˜์กด์„ฑ ๋ถ„๋ฆฌ - ์•Œ๋ฆผ์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ชจ๋“ˆ์—์„œ ์‚ฌ์šฉ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๊ณ  ๋‹ค๋ฅธ ๋ชจ๋“ˆ๋“ค์„ importํ•  ๊ฒฝ์šฐ๋„ ๋งŽ์•„ ์ˆœํ™˜์˜์กด์„ฑ์ด ์ƒ๊ธธ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค. * :recycle: refactor: findAllApplicationByGroup -> findAllApplicationByGroupWithUser * :sparkles: feature: ๋ชจ์ง‘์ค‘๋‹จ์‹œ ์•Œ๋ฆผ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€ --- backend/package-lock.json | 32 +++++++ backend/package.json | 1 + backend/src/app.module.ts | 2 + .../group-application.module.ts | 1 + .../group-application.repository.ts | 13 ++- .../group-application.service.ts | 4 +- .../group-article/group-article.service.ts | 18 ++-- .../constants/notification.constants.ts | 6 ++ .../entity/notification-contents.ts | 12 +++ .../entity/notification.entity.ts | 32 ++++++- .../entity/user-notification.entity.ts | 13 +++ .../notification/event/group-failed.event.ts | 9 ++ .../notification/event/group-succeed.event.ts | 9 ++ .../app/notification/notification.listener.ts | 89 +++++++++++++++++++ .../app/notification/notification.module.ts | 9 +- .../notification-setting.repository.ts | 35 +++++++- 16 files changed, 270 insertions(+), 15 deletions(-) create mode 100644 backend/src/app/notification/entity/notification-contents.ts create mode 100644 backend/src/app/notification/event/group-failed.event.ts create mode 100644 backend/src/app/notification/event/group-succeed.event.ts create mode 100644 backend/src/app/notification/notification.listener.ts diff --git a/backend/package-lock.json b/backend/package-lock.json index 36ae8e64..ee329022 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -13,6 +13,7 @@ "@nestjs/common": "^9.0.0", "@nestjs/config": "^2.2.0", "@nestjs/core": "^9.0.0", + "@nestjs/event-emitter": "^1.3.1", "@nestjs/jwt": "^9.0.0", "@nestjs/passport": "^9.0.0", "@nestjs/platform-express": "^9.0.0", @@ -1625,6 +1626,19 @@ } } }, + "node_modules/@nestjs/event-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@nestjs/event-emitter/-/event-emitter-1.3.1.tgz", + "integrity": "sha512-AmHkPTe/cP1lbQEm15TIe9IDEAszl5VAR8HjMS2TDtNRuSzwyoJgZUVcRnH7Yk9/2DX5qMtmw6a1MHeR8DD+rw==", + "dependencies": { + "eventemitter2": "6.4.6" + }, + "peerDependencies": { + "@nestjs/common": "^7.0.0 || ^8.0.0 || ^9.0.0", + "@nestjs/core": "^7.0.0 || ^8.0.0 || ^9.0.0", + "reflect-metadata": "^0.1.12" + } + }, "node_modules/@nestjs/jwt": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/@nestjs/jwt/-/jwt-9.0.0.tgz", @@ -4386,6 +4400,11 @@ "node": ">= 0.6" } }, + "node_modules/eventemitter2": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.6.tgz", + "integrity": "sha512-OHqo4wbHX5VbvlbB6o6eDwhYmiTjrpWACjF8Pmof/GTD6rdBNdZFNck3xlhqOiQFGCOoq3uzHvA0cQpFHIGVAQ==" + }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", @@ -10768,6 +10787,14 @@ "uuid": "9.0.0" } }, + "@nestjs/event-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@nestjs/event-emitter/-/event-emitter-1.3.1.tgz", + "integrity": "sha512-AmHkPTe/cP1lbQEm15TIe9IDEAszl5VAR8HjMS2TDtNRuSzwyoJgZUVcRnH7Yk9/2DX5qMtmw6a1MHeR8DD+rw==", + "requires": { + "eventemitter2": "6.4.6" + } + }, "@nestjs/jwt": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/@nestjs/jwt/-/jwt-9.0.0.tgz", @@ -12880,6 +12907,11 @@ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" }, + "eventemitter2": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.6.tgz", + "integrity": "sha512-OHqo4wbHX5VbvlbB6o6eDwhYmiTjrpWACjF8Pmof/GTD6rdBNdZFNck3xlhqOiQFGCOoq3uzHvA0cQpFHIGVAQ==" + }, "events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", diff --git a/backend/package.json b/backend/package.json index a40533c8..2b8246de 100644 --- a/backend/package.json +++ b/backend/package.json @@ -29,6 +29,7 @@ "@nestjs/common": "^9.0.0", "@nestjs/config": "^2.2.0", "@nestjs/core": "^9.0.0", + "@nestjs/event-emitter": "^1.3.1", "@nestjs/jwt": "^9.0.0", "@nestjs/passport": "^9.0.0", "@nestjs/platform-express": "^9.0.0", diff --git a/backend/src/app.module.ts b/backend/src/app.module.ts index 65de6233..424a364d 100644 --- a/backend/src/app.module.ts +++ b/backend/src/app.module.ts @@ -1,4 +1,5 @@ import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common'; +import { EventEmitterModule } from '@nestjs/event-emitter'; import { AppController } from './app.controller'; import { AppService } from './app.service'; import { AppConfigModule } from '@config/app/config.module'; @@ -18,6 +19,7 @@ import { CommentModule } from '@app/comment/comment.module'; @Module({ imports: [ + EventEmitterModule.forRoot(), AppConfigModule, CookieConfigModule, DatabaseModule, diff --git a/backend/src/app/group-application/group-application.module.ts b/backend/src/app/group-application/group-application.module.ts index f3de0ebb..6c151ac7 100644 --- a/backend/src/app/group-application/group-application.module.ts +++ b/backend/src/app/group-application/group-application.module.ts @@ -8,5 +8,6 @@ import { GroupArticleModule } from '@app/group-article/group-article.module'; imports: [GroupArticleModule], controllers: [GroupApplicationController], providers: [GroupApplicationService, GroupApplicationRepository], + exports: [GroupApplicationRepository], }) export class GroupApplicationModule {} diff --git a/backend/src/app/group-application/group-application.repository.ts b/backend/src/app/group-application/group-application.repository.ts index e2e0a8cb..6cda3614 100644 --- a/backend/src/app/group-application/group-application.repository.ts +++ b/backend/src/app/group-application/group-application.repository.ts @@ -1,7 +1,8 @@ import { Injectable } from '@nestjs/common'; -import { DataSource, Repository } from 'typeorm'; +import { DataSource, IsNull, Repository } from 'typeorm'; import { GroupApplication } from '@app/group-application/entity/group-application.entity'; import { GROUP_APPLICATION_STATUS } from '@app/group-article/constants/group-article.constants'; +import { GroupArticle } from '@app/group-article/entity/group-article.entity'; @Injectable() export class GroupApplicationRepository extends Repository { @@ -21,7 +22,7 @@ export class GroupApplicationRepository extends Repository { return this.findOneBy({ userId, groupId, status }); } - findAllApplicationByGroup(groupId: number) { + findAllApplicationByGroupWithUser(groupId: number) { return this.find({ relations: { user: true, @@ -32,4 +33,12 @@ export class GroupApplicationRepository extends Repository { }, }); } + + findGroupApplications(groupArticle: GroupArticle) { + return this.findBy({ + groupId: groupArticle.group.id, + status: GROUP_APPLICATION_STATUS.REGISTER, + deletedAt: IsNull(), + }); + } } diff --git a/backend/src/app/group-application/group-application.service.ts b/backend/src/app/group-application/group-application.service.ts index 38336965..042ee5cd 100644 --- a/backend/src/app/group-application/group-application.service.ts +++ b/backend/src/app/group-application/group-application.service.ts @@ -116,7 +116,9 @@ export class GroupApplicationService { private async getApplicationWithUserInfo(group: Group) { const allApplication = - await this.groupApplicationRepository.findAllApplicationByGroup(group.id); + await this.groupApplicationRepository.findAllApplicationByGroupWithUser( + group.id, + ); const applicationWithUserInfoList = allApplication.map( async (application) => { diff --git a/backend/src/app/group-article/group-article.service.ts b/backend/src/app/group-article/group-article.service.ts index 8f682988..92c69af0 100644 --- a/backend/src/app/group-article/group-article.service.ts +++ b/backend/src/app/group-article/group-article.service.ts @@ -1,4 +1,5 @@ import { Injectable } from '@nestjs/common'; +import { EventEmitter2 } from '@nestjs/event-emitter'; import { DataSource, IsNull } from 'typeorm'; import { GroupArticleRegisterRequest } from '@app/group-article/dto/group-article-register-request.dto'; import { GroupArticle } from '@app/group-article/entity/group-article.entity'; @@ -15,6 +16,8 @@ import { } from '@app/group-article/constants/group-article.constants'; import { NotParticipantException } from '@app/group-article/exception/not-participant.exception'; import { NotSuccessGroupException } from '@app/group-article/exception/not-success-group.exception'; +import { GroupSucceedEvent } from '@app/notification/event/group-succeed.event'; +import { GroupFailedEvent } from '@app/notification/event/group-failed.event'; @Injectable() export class GroupArticleService { @@ -22,6 +25,7 @@ export class GroupArticleService { private readonly groupArticleRepository: GroupArticleRepository, private readonly groupCategoryRepository: GroupCategoryRepository, private readonly dataSource: DataSource, + private readonly eventEmitter: EventEmitter2, ) {} async registerGroupArticle( @@ -47,10 +51,8 @@ export class GroupArticleService { }); await this.dataSource.transaction(async (em) => { - await em.getRepository(GroupArticle).save(groupArticle); - await em - .getRepository(GroupApplication) - .save(GroupApplication.create(user, groupArticle.group)); + await em.save(groupArticle); + await em.save(GroupApplication.create(user, groupArticle.group)); }); return groupArticle; @@ -84,7 +86,10 @@ export class GroupArticleService { await this.groupArticleRepository.save(groupArticle, { reload: false }); - // TODO: ์•Œ๋ฆผ ์ถ”๊ฐ€ ๋ฐ ์•Œ๋ฆผ ๋ฐœ์†ก + this.eventEmitter.emit( + 'group.succeed', + new GroupSucceedEvent(groupArticle), + ); } async cancel(user: User, id: number) { @@ -101,7 +106,7 @@ export class GroupArticleService { await this.groupArticleRepository.save(groupArticle, { reload: false }); - // TODO: ์•Œ๋ฆผ ์ถ”๊ฐ€ ๋ฐ ์•Œ๋ฆผ ๋ฐœ์†ก + this.eventEmitter.emit('group.failed', new GroupFailedEvent(groupArticle)); } async getDetailById(id: number) { @@ -152,6 +157,7 @@ export class GroupArticleService { if (groupArticle.group.status !== GROUP_STATUS.SUCCEED) { throw new NotSuccessGroupException(); } + const groupApplication = await this.dataSource .getRepository(GroupApplication) .findOneBy({ diff --git a/backend/src/app/notification/constants/notification.constants.ts b/backend/src/app/notification/constants/notification.constants.ts index 09adf72b..bdc369ec 100644 --- a/backend/src/app/notification/constants/notification.constants.ts +++ b/backend/src/app/notification/constants/notification.constants.ts @@ -7,3 +7,9 @@ export enum NOTIFICATION_SETTING_STATUS { ON = 'ON', OFF = 'OFF', } + +export enum NOTIFICATION_TYPE { + GROUP_SUCCEED = 'GROUP_SUCCEED', + GROUP_FAILED = 'GROUP_FAILED', + COMMENT_ADDED = 'COMMENT_ADDED', +} diff --git a/backend/src/app/notification/entity/notification-contents.ts b/backend/src/app/notification/entity/notification-contents.ts new file mode 100644 index 00000000..bd74bb45 --- /dev/null +++ b/backend/src/app/notification/entity/notification-contents.ts @@ -0,0 +1,12 @@ +export interface NotificationContents { + title: string; + subTitle: string; +} + +export interface GroupSucceedContents extends NotificationContents { + groupArticleId: number; +} + +export interface GroupFailedContents extends NotificationContents { + groupArticleId: number; +} diff --git a/backend/src/app/notification/entity/notification.entity.ts b/backend/src/app/notification/entity/notification.entity.ts index 9500ca56..67ac7a1a 100644 --- a/backend/src/app/notification/entity/notification.entity.ts +++ b/backend/src/app/notification/entity/notification.entity.ts @@ -4,6 +4,12 @@ import { Entity, PrimaryGeneratedColumn, } from 'typeorm'; +import { NOTIFICATION_TYPE } from '@app/notification/constants/notification.constants'; +import { + GroupFailedContents, + GroupSucceedContents, +} from '@app/notification/entity/notification-contents'; +import { GroupArticle } from '@app/group-article/entity/group-article.entity'; @Entity() export class Notification { @@ -11,11 +17,33 @@ export class Notification { id: number; @Column({ type: 'varchar', length: 200 }) - type: string; + type: NOTIFICATION_TYPE; @Column({ type: 'json' }) - contents: any; + contents: GroupSucceedContents | GroupFailedContents; @CreateDateColumn({ type: 'timestamp' }) createdAt: Date; + + static createGroupSucceedNotification(groupArticle: GroupArticle) { + const notification = new Notification(); + notification.type = NOTIFICATION_TYPE.GROUP_SUCCEED; + notification.contents = { + title: '๋ชจ์ž„์ด ์„ฑ์‚ฌ๋˜์—ˆ์–ด์š”', + subTitle: groupArticle.title, + groupArticleId: groupArticle.id, + }; + return notification; + } + + static createGroupFailedNotification(groupArticle: GroupArticle) { + const notification = new Notification(); + notification.type = NOTIFICATION_TYPE.GROUP_FAILED; + notification.contents = { + title: '๋ชจ์ž„์ด ๋ฌด์‚ฐ๋˜์—ˆ์–ด์š”', + subTitle: groupArticle.title, + groupArticleId: groupArticle.id, + }; + return notification; + } } diff --git a/backend/src/app/notification/entity/user-notification.entity.ts b/backend/src/app/notification/entity/user-notification.entity.ts index d5ad79ac..09c7405b 100644 --- a/backend/src/app/notification/entity/user-notification.entity.ts +++ b/backend/src/app/notification/entity/user-notification.entity.ts @@ -2,6 +2,7 @@ import { Column, CreateDateColumn, Entity, + Index, JoinColumn, ManyToOne, PrimaryGeneratedColumn, @@ -11,6 +12,9 @@ import { User } from '@app/user/entity/user.entity'; import { Notification } from '@app/notification/entity/notification.entity'; @Entity({ name: 'user_notification' }) +@Index('UNIQUE_user_id_notification_id', ['userId', 'notificationId'], { + unique: true, +}) export class UserNotification { @PrimaryGeneratedColumn({ unsigned: true }) id: number; @@ -37,4 +41,13 @@ export class UserNotification { @Column({ type: 'timestamp', nullable: true }) deletedAt: Date | null; + + static create(user: User, notification: Notification) { + const userNotification = new UserNotification(); + userNotification.userId = user.id; + userNotification.user = Promise.resolve(user); + userNotification.notification = Promise.resolve(notification); + userNotification.notificationId = notification.id; + return userNotification; + } } diff --git a/backend/src/app/notification/event/group-failed.event.ts b/backend/src/app/notification/event/group-failed.event.ts new file mode 100644 index 00000000..b1438047 --- /dev/null +++ b/backend/src/app/notification/event/group-failed.event.ts @@ -0,0 +1,9 @@ +import { GroupArticle } from '@app/group-article/entity/group-article.entity'; + +export class GroupFailedEvent { + groupArticle: GroupArticle; + + constructor(groupArticle: GroupArticle) { + this.groupArticle = groupArticle; + } +} diff --git a/backend/src/app/notification/event/group-succeed.event.ts b/backend/src/app/notification/event/group-succeed.event.ts new file mode 100644 index 00000000..83848557 --- /dev/null +++ b/backend/src/app/notification/event/group-succeed.event.ts @@ -0,0 +1,9 @@ +import { GroupArticle } from '@app/group-article/entity/group-article.entity'; + +export class GroupSucceedEvent { + groupArticle: GroupArticle; + + constructor(groupArticle: GroupArticle) { + this.groupArticle = groupArticle; + } +} diff --git a/backend/src/app/notification/notification.listener.ts b/backend/src/app/notification/notification.listener.ts new file mode 100644 index 00000000..d16df47d --- /dev/null +++ b/backend/src/app/notification/notification.listener.ts @@ -0,0 +1,89 @@ +import { Injectable, Logger } from '@nestjs/common'; +import { OnEvent } from '@nestjs/event-emitter'; +import { GroupSucceedEvent } from '@app/notification/event/group-succeed.event'; +import { DataSource } from 'typeorm'; +import { Notification } from '@app/notification/entity/notification.entity'; +import { NOTIFICATION_SETTING_TYPE } from '@app/notification/constants/notification.constants'; +import { UserNotification } from '@app/notification/entity/user-notification.entity'; +import { GroupApplicationRepository } from '@app/group-application/group-application.repository'; +import { GroupFailedEvent } from '@app/notification/event/group-failed.event'; +import { NotificationSettingRepository } from '@app/notification/repository/notification-setting.repository'; + +@Injectable() +export class NotificationListener { + private readonly logger = new Logger(NotificationListener.name); + + constructor( + private readonly dataSource: DataSource, + private readonly groupApplicationRepository: GroupApplicationRepository, + private readonly notificationSettingRepository: NotificationSettingRepository, + ) {} + + @OnEvent('group.succeed') + async handleGroupSucceedEvent(event: GroupSucceedEvent) { + const { groupArticle } = event; + + try { + const groupApplications = + await this.groupApplicationRepository.findGroupApplications( + groupArticle, + ); + + const targetUsers = + await this.notificationSettingRepository.findTargetUsers({ + type: NOTIFICATION_SETTING_TYPE.GROUP, + userIds: groupApplications.map( + (groupApplication) => groupApplication.userId, + ), + }); + + const notification = + Notification.createGroupSucceedNotification(groupArticle); + + await this.dataSource.transaction(async (em) => { + await em.save(notification); + await em.save( + targetUsers.map((user) => + UserNotification.create(user, notification), + ), + ); + }); + } catch (e) { + this.logger.error(e); + } + } + + @OnEvent('group.failed') + async handleGroupFailedEvent(event: GroupFailedEvent) { + const { groupArticle } = event; + + try { + const groupApplications = + await this.groupApplicationRepository.findGroupApplications( + groupArticle, + ); + + const targetUsers = + await this.notificationSettingRepository.findTargetUsers({ + type: NOTIFICATION_SETTING_TYPE.GROUP, + userIds: groupApplications.map( + (groupApplication) => groupApplication.userId, + ), + }); + + const notification = + Notification.createGroupFailedNotification(groupArticle); + + await this.dataSource.transaction(async (em) => { + await em.save(notification); + await em.save( + targetUsers.map((user) => + UserNotification.create(user, notification), + ), + ); + }); + } catch (e) { + this.logger.error(e); + } + } +} diff --git a/backend/src/app/notification/notification.module.ts b/backend/src/app/notification/notification.module.ts index db4fca3b..231dfd7f 100644 --- a/backend/src/app/notification/notification.module.ts +++ b/backend/src/app/notification/notification.module.ts @@ -2,9 +2,16 @@ import { Module } from '@nestjs/common'; import { NotificationController } from '@app/notification/notification.controller'; import { NotificationSettingRepository } from '@app/notification/repository/notification-setting.repository'; import { NotificationService } from '@app/notification/notification.service'; +import { NotificationListener } from '@app/notification/notification.listener'; +import { GroupApplicationModule } from '@app/group-application/group-application.module'; @Module({ + imports: [GroupApplicationModule], controllers: [NotificationController], - providers: [NotificationService, NotificationSettingRepository], + providers: [ + NotificationService, + NotificationSettingRepository, + NotificationListener, + ], }) export class NotificationModule {} diff --git a/backend/src/app/notification/repository/notification-setting.repository.ts b/backend/src/app/notification/repository/notification-setting.repository.ts index 9f61cac2..46a33f0b 100644 --- a/backend/src/app/notification/repository/notification-setting.repository.ts +++ b/backend/src/app/notification/repository/notification-setting.repository.ts @@ -1,14 +1,43 @@ import { DataSource, Repository } from 'typeorm'; import { NotificationSetting } from '@app/notification/entity/notification-setting.entity'; import { Injectable } from '@nestjs/common'; +import { + NOTIFICATION_SETTING_STATUS, + NOTIFICATION_SETTING_TYPE, +} from '@app/notification/constants/notification.constants'; +import { User } from '@app/user/entity/user.entity'; @Injectable() export class NotificationSettingRepository extends Repository { constructor(private readonly dataSource: DataSource) { + const baseRepository = dataSource.getRepository(NotificationSetting); super( - NotificationSetting, - dataSource.createEntityManager(), - dataSource.createQueryRunner(), + baseRepository.target, + baseRepository.manager, + baseRepository.queryRunner, ); } + + findTargetUsers({ + type, + userIds, + }: { + type: NOTIFICATION_SETTING_TYPE; + userIds: number[]; + }) { + return this.createQueryBuilder('notificationSetting') + .select('user.*') + .leftJoin(User, 'user', 'user.id = notificationSetting.userId') + .where('user.id IN (:...ids)', { + ids: userIds, + }) + .andWhere('user.deletedAt IS NULL') + .andWhere('notificationSetting.type = :type', { + type, + }) + .andWhere('notificationSetting.status = :status', { + status: NOTIFICATION_SETTING_STATUS.ON, + }) + .getRawMany(); + } } From 49d251b1af2c265047909fbb69dd4984ee4ec5a0 Mon Sep 17 00:00:00 2001 From: Kim Myeongil <67570061+username1103@users.noreply.github.com> Date: Tue, 6 Dec 2022 12:17:56 +0900 Subject: [PATCH 091/142] =?UTF-8?q?[Feature]=20=EC=B1=84=ED=8C=85=20url?= =?UTF-8?q?=EC=9D=84=20chatUrl=EB=A1=9C=20=ED=86=B5=EC=9D=BC=20(#211)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit โ™ป๏ธ refactor: ์ฑ„ํŒ…url๊ฐ’์„ chatUrl๋กœ ํ†ต์ผ --- .../group-article/dto/get-group-chat-url-response.dto.ts | 6 +++--- .../group-article/dto/get-my-group-article-response.dto.ts | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/backend/src/app/group-article/dto/get-group-chat-url-response.dto.ts b/backend/src/app/group-article/dto/get-group-chat-url-response.dto.ts index 89532965..96905411 100644 --- a/backend/src/app/group-article/dto/get-group-chat-url-response.dto.ts +++ b/backend/src/app/group-article/dto/get-group-chat-url-response.dto.ts @@ -5,11 +5,11 @@ export class GetGroupChatUrlResponseDto { example: 'https://open.kakao.com/์˜คํ”ˆ์ฑ„ํŒ…๋ฐฉpath', description: '์นด์นด์˜คํ†ก๊ณผ ๊ธฐํƒ€ ์ฑ„ํŒ…์„œ๋น„์Šค์˜ ์ฃผ์†Œ๋ฅผ ๋‹ด์•„๋†“์„ ์ˆ˜ ์žˆ๋‹ค.', }) - url: string; + chatUrl: string; - static from(url: string) { + static from(charUrl: string) { const res = new GetGroupChatUrlResponseDto(); - res.url = url; + res.chatUrl = charUrl; return res; } } diff --git a/backend/src/app/group-article/dto/get-my-group-article-response.dto.ts b/backend/src/app/group-article/dto/get-my-group-article-response.dto.ts index fa2e2de2..d78740aa 100644 --- a/backend/src/app/group-article/dto/get-my-group-article-response.dto.ts +++ b/backend/src/app/group-article/dto/get-my-group-article-response.dto.ts @@ -45,7 +45,7 @@ export class GetMyGroupArticleResponse { example: 'https://open.kakao.com/์˜คํ”ˆ์ฑ„ํŒ…๋ฐฉpath', description: '์นด์นด์˜คํ†ก๊ณผ ๊ธฐํƒ€ ์ฑ„ํŒ…์„œ๋น„์Šค์˜ ์ฃผ์†Œ๋ฅผ ๋‹ด์•„๋†“์„ ์ˆ˜ ์žˆ๋‹ค.', }) - url: string; + chatUrl: string; @ApiProperty({ example: new Date(), description: '๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ์ผ' }) createdAt: Date; @@ -60,7 +60,7 @@ export class GetMyGroupArticleResponse { res.status = groupArticle.group.status; res.location = groupArticle.group.location; res.maxCapacity = groupArticle.group.maxCapacity; - res.url = groupArticle.group.chatUrl; + res.chatUrl = groupArticle.group.chatUrl; res.createdAt = groupArticle.group.createdAt; return res; } From 14bdeb8184461bb6c8fc0e9ab4bd4ef0c06a828b Mon Sep 17 00:00:00 2001 From: yangseungchan Date: Tue, 6 Dec 2022 12:33:56 +0900 Subject: [PATCH 092/142] =?UTF-8?q?[Feature]=20=EB=82=B4=EA=B0=80=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1=ED=95=9C=20=EA=B7=B8=EB=A3=B9=20=20(#201)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ๐Ÿฅ… chore: useAuthInfiniteQuery ํ›… ์ถ”๊ฐ€ * โœจ feature: ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ๋ชจ์ž„ ํŽ˜์ด์ง€ ๊ตฌ์„ฑ ๋ฐ ๋ฌดํ•œ์Šคํฌ๋กค ์ ์šฉ * ๐Ÿฅ… chore: ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ๋ชจ์ž„ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ˆ˜์ • * ๐Ÿฅ… chore: ๊ธฐ์กด์˜ axios๋ฅผ clientAxios๋กœ ๊ต์ฒด * ๐Ÿฅ… chore: fetch ํ•จ์ˆ˜ ์ปค์Šคํ…€ ํ›…์œผ๋กœ ํ•ฉ์น˜๊ธฐ * ๐Ÿฅ… chore: ๋ถˆํ•„์š”ํ•œ credential ์˜ต์…˜ ์ œ๊ฑฐ * โ™ป๏ธ refactor: ์ธํ”ผ๋‹ˆํ‹ฐ ์ฟผ๋ฆฌ ๋ถ€๋ถ„ ํƒ€์ดํ•‘ ์ˆ˜์ • * ๐Ÿฅ… chore: ArticleType ๋‹จ์ˆœํ™” * ๐Ÿฅ… chore: api์—์„œ contents๋กœ ๋ณ€๊ฒฝ๋œ ๊ฒƒ์„ ๋ฐ˜์˜ * ๐Ÿฅ… chore: contents๋กœ ๋‚˜์˜ค๋„๋ก ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: lhci comment step ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: ci ์ปค๋ฉ˜ํŠธ ๋ด‡ ์„ค์ • ์ˆ˜์ • --- .github/workflows/frontend-ci.yml | 5 +- .../apis/group-articles/getGroupArticles.ts | 20 ------ .../apis/group-articles/getSpecificArticle.ts | 10 --- frontend/src/constants/dummy.ts | 2 +- frontend/src/hooks/queries/useFetchArticle.ts | 6 +- .../hooks/queries/useFetchGroupArticles.ts | 58 ++++++++------- .../hooks/queries/useFetchMyWriteArticles.ts | 41 +++++++++++ frontend/src/hooks/queries/useFetchProfile.ts | 5 +- .../src/hooks/queries/useFetchTestData.ts | 22 ------ frontend/src/hooks/useAuthInfiniteQuery.ts | 38 ++++++++++ frontend/src/pages/article/[id].tsx | 2 +- frontend/src/pages/index.tsx | 7 +- frontend/src/pages/my/index.tsx | 2 +- frontend/src/pages/my/write.tsx | 70 +++++++++++++++++++ frontend/src/typings/types.ts | 15 +--- 15 files changed, 197 insertions(+), 106 deletions(-) delete mode 100644 frontend/src/apis/group-articles/getGroupArticles.ts delete mode 100644 frontend/src/apis/group-articles/getSpecificArticle.ts create mode 100644 frontend/src/hooks/queries/useFetchMyWriteArticles.ts delete mode 100644 frontend/src/hooks/queries/useFetchTestData.ts create mode 100644 frontend/src/hooks/useAuthInfiniteQuery.ts create mode 100644 frontend/src/pages/my/write.tsx diff --git a/.github/workflows/frontend-ci.yml b/.github/workflows/frontend-ci.yml index 6aed8487..38b64b4c 100644 --- a/.github/workflows/frontend-ci.yml +++ b/.github/workflows/frontend-ci.yml @@ -180,11 +180,12 @@ jobs: core.setOutput('comments', comments) - name: comment PR - uses: unsplash/comment-on-pr@v1.3.0 + uses: thollander/actions-comment-pull-request@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: - msg: ${{ steps.format_lighthouse_score.outputs.comments }} + message: ${{ steps.format_lighthouse_score.outputs.comments }} + reactions: rocket slack-notifications: needs: [checking, lhci, storybook] diff --git a/frontend/src/apis/group-articles/getGroupArticles.ts b/frontend/src/apis/group-articles/getGroupArticles.ts deleted file mode 100644 index 0bbc6335..00000000 --- a/frontend/src/apis/group-articles/getGroupArticles.ts +++ /dev/null @@ -1,20 +0,0 @@ -import axios from 'axios'; - -import { ArticleStatus } from '@constants/article'; -import { Category } from '@constants/category'; -import { Location } from '@constants/location'; - -const getGroupArticles = async ( - currentPage: number, - category: Category, - location: Location, - filterProgress: boolean -) => { - const status = filterProgress ? ArticleStatus.PROGRESS : null; - return axios.get(`${process.env.NEXT_PUBLIC_API_URL}/v1/group-articles/search`, { - params: { category, location, status, currentPage, countPerPage: 5 }, - withCredentials: true, - }); -}; - -export default getGroupArticles; diff --git a/frontend/src/apis/group-articles/getSpecificArticle.ts b/frontend/src/apis/group-articles/getSpecificArticle.ts deleted file mode 100644 index 6fa39621..00000000 --- a/frontend/src/apis/group-articles/getSpecificArticle.ts +++ /dev/null @@ -1,10 +0,0 @@ -import axios from 'axios'; - -const getSpecificArticle = async (id: number) => { - return axios.get(`${process.env.NEXT_PUBLIC_API_URL}/v1/group-articles/${id}`, { - params: { id }, - withCredentials: true, - }); -}; - -export default getSpecificArticle; diff --git a/frontend/src/constants/dummy.ts b/frontend/src/constants/dummy.ts index 7f16660a..06e86a2e 100644 --- a/frontend/src/constants/dummy.ts +++ b/frontend/src/constants/dummy.ts @@ -23,7 +23,7 @@ const dummyArticle: ArticleType = { title: '๋ชจ์ง‘ ํ…Œ์ŠคํŠธ1', location: Location.GYEONGNAM, category: Category.STUDY, - content: '
    test
    ', + contents: '
    test
    ', author: { id: 1, userName: 'JHPark_GOD', diff --git a/frontend/src/hooks/queries/useFetchArticle.ts b/frontend/src/hooks/queries/useFetchArticle.ts index 932294a1..2365d993 100644 --- a/frontend/src/hooks/queries/useFetchArticle.ts +++ b/frontend/src/hooks/queries/useFetchArticle.ts @@ -1,8 +1,8 @@ import { AxiosError, AxiosResponse } from 'axios'; -import getSpecificArticle from '@apis/group-articles/getSpecificArticle'; import useAuthQuery from '@hooks/useAuthQuery'; import { ArticleType } from '@typings/types'; +import { clientAxios } from '@utils/commonAxios'; interface ResponseType { status: string; @@ -10,6 +10,10 @@ interface ResponseType { data: ArticleType; } +const getSpecificArticle = async (id: number) => { + return clientAxios.get(`/v1/group-articles/${id}`); +}; + const useFetchArticle = (id: number) => { const { data, isLoading } = useAuthQuery, AxiosError, ArticleType>( ['article', id], diff --git a/frontend/src/hooks/queries/useFetchGroupArticles.ts b/frontend/src/hooks/queries/useFetchGroupArticles.ts index 35253acc..3b9772f4 100644 --- a/frontend/src/hooks/queries/useFetchGroupArticles.ts +++ b/frontend/src/hooks/queries/useFetchGroupArticles.ts @@ -1,50 +1,54 @@ -import { useInfiniteQuery } from '@tanstack/react-query'; -import { AxiosError, AxiosResponse } from 'axios'; +import { AxiosError } from 'axios'; -import getGroupArticles from '@apis/group-articles/getGroupArticles'; -import AuthError from '@components/common/ErrorBoundary/AuthError'; +import { ArticleStatus } from '@constants/article'; import { Category } from '@constants/category'; import { Location } from '@constants/location'; -import { ArticlePreviewType, ArticleType } from '@typings/types'; +import useAuthInfiniteQuery from '@hooks/useAuthInfiniteQuery'; +import { ArticlePreviewType } from '@typings/types'; +import { clientAxios } from '@utils/commonAxios'; +interface ArticlePagingData { + totalPage: number; + currentPage: number; + countPerPage: number; + data: ArticlePreviewType[]; +} interface ArticleResponseType { status: string; message: string; - data: { - totalPage: number; - currentPage: number; - countPerPage: number; - data: ArticlePreviewType[]; - }; + data: ArticlePagingData; } +const getGroupArticles = async ( + currentPage: number, + category: Category, + location: Location, + filterProgress: boolean +) => { + const status = filterProgress ? ArticleStatus.PROGRESS : null; + const { + data: { data }, + } = await clientAxios('/v1/group-articles/search', { + params: { category, location, status, currentPage, countPerPage: 5 }, + }); + return data; +}; + const useFetchGroupArticles = ( category: Category | null, location: Location | null, filterProgress: boolean ) => { - const { data, fetchNextPage, hasNextPage, isFetching, error } = useInfiniteQuery< - AxiosResponse, - AxiosError, - ArticleType[] - >( + const queryResult = useAuthInfiniteQuery( ['articles', category, location, filterProgress], ({ pageParam = 1 }) => getGroupArticles(pageParam, category, location, filterProgress), { - getNextPageParam: (lastPage: AxiosResponse) => - lastPage.data.data.totalPage === lastPage.data.data.currentPage - ? undefined - : lastPage.data.data.currentPage + 1, + getNextPageParam: (lastPage) => + lastPage.totalPage === lastPage.currentPage ? undefined : lastPage.currentPage + 1, } ); - if (error) { - if (error.response && error.response.status === 401) { - throw new AuthError(); - } - throw error; - } - return { data, fetchNextPage, hasNextPage, isFetching }; + return { ...queryResult }; }; export default useFetchGroupArticles; diff --git a/frontend/src/hooks/queries/useFetchMyWriteArticles.ts b/frontend/src/hooks/queries/useFetchMyWriteArticles.ts new file mode 100644 index 00000000..de7109da --- /dev/null +++ b/frontend/src/hooks/queries/useFetchMyWriteArticles.ts @@ -0,0 +1,41 @@ +import { AxiosError } from 'axios'; + +import useAuthInfiniteQuery from '@hooks/useAuthInfiniteQuery'; +import { ArticlePreviewType } from '@typings/types'; +import { clientAxios } from '@utils/commonAxios'; + +interface ArticlePagingData { + totalPage: number; + currentPage: number; + countPerPage: number; + data: ArticlePreviewType[]; +} + +interface ArticleResponseType { + status: string; + message: string; + data: ArticlePagingData; +} + +const getMyWriteArticles = async (currentPage: number) => { + const { + data: { data }, + } = await clientAxios.get('/v1/group-articles/me', { + params: { currentPage, countPerPage: 6 }, + }); + return data; +}; + +const useFetchMyWriteArticles = () => { + const queryResult = useAuthInfiniteQuery( + ['articles', 'mywrite'], + ({ pageParam = 1 }) => getMyWriteArticles(pageParam), + { + getNextPageParam: (lastPage) => + lastPage.totalPage === lastPage.currentPage ? undefined : lastPage.currentPage + 1, + } + ); + return { ...queryResult }; +}; + +export default useFetchMyWriteArticles; diff --git a/frontend/src/hooks/queries/useFetchProfile.ts b/frontend/src/hooks/queries/useFetchProfile.ts index 9ae5bc9f..db95c3cc 100644 --- a/frontend/src/hooks/queries/useFetchProfile.ts +++ b/frontend/src/hooks/queries/useFetchProfile.ts @@ -1,10 +1,11 @@ -import axios, { AxiosError, AxiosResponse } from 'axios'; +import { AxiosError, AxiosResponse } from 'axios'; import useAuthQuery from '@hooks/useAuthQuery'; import { UserType } from '@typings/types'; +import { clientAxios } from '@utils/commonAxios'; const getUserProfile = async (id: number) => { - return axios.get(`${process.env.NEXT_PUBLIC_API_URL}/v1/users/${id}`, { + return clientAxios.get(`/v1/users/${id}`, { params: { id }, withCredentials: true, }); diff --git a/frontend/src/hooks/queries/useFetchTestData.ts b/frontend/src/hooks/queries/useFetchTestData.ts deleted file mode 100644 index cdc2a857..00000000 --- a/frontend/src/hooks/queries/useFetchTestData.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { useInfiniteQuery } from '@tanstack/react-query'; -import { AxiosResponse } from 'axios'; - -import getTestData from '@apis/test/getTestData'; -import { TestResponseType } from '@typings/types'; - -const useFetchTestData = () => { - const { data, fetchNextPage, hasNextPage, isFetching, isError } = useInfiniteQuery( - ['test'], - ({ pageParam = 0 }) => getTestData(pageParam), - { - getNextPageParam: (lastPage: AxiosResponse) => - lastPage.data.isLast ? undefined : lastPage.data.currentId + 1, - } - ); - if (isError) { - // TODO ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๊ณตํ†ต ๋กœ์ง ์ ์šฉ - } - return { data, fetchNextPage, hasNextPage, isFetching }; -}; - -export default useFetchTestData; diff --git a/frontend/src/hooks/useAuthInfiniteQuery.ts b/frontend/src/hooks/useAuthInfiniteQuery.ts new file mode 100644 index 00000000..c0568b4e --- /dev/null +++ b/frontend/src/hooks/useAuthInfiniteQuery.ts @@ -0,0 +1,38 @@ +import { + QueryFunction, + QueryKey, + UseInfiniteQueryOptions, + useInfiniteQuery, +} from '@tanstack/react-query'; +import { AxiosError } from 'axios'; + +import AuthError from '@components/common/ErrorBoundary/AuthError'; + +const useAuthInfiniteQuery = < + TQueryFnData = unknown, + TError = AxiosError, + TData = TQueryFnData, + TQueryKey extends QueryKey = QueryKey +>( + queryKey: TQueryKey, + queryFn: QueryFunction, + options?: Omit< + UseInfiniteQueryOptions, + 'queryKey' | 'queryFn' + > +) => { + const { error, ...rest } = useInfiniteQuery( + queryKey, + queryFn, + options + ); + if (error && error instanceof AxiosError) { + if (error.response.status === 401) { + throw new AuthError(); + } + throw error; + } + return { ...rest }; +}; + +export default useAuthInfiniteQuery; diff --git a/frontend/src/pages/article/[id].tsx b/frontend/src/pages/article/[id].tsx index 8c2d7528..7ead7490 100644 --- a/frontend/src/pages/article/[id].tsx +++ b/frontend/src/pages/article/[id].tsx @@ -111,7 +111,7 @@ const ArticleDetail = () => { color={indigo[7]} /> - + {article.author.id !== myInfo.id && ( { const { @@ -44,11 +43,7 @@ const Main = () => { } }); - const articles: ArticleType[] = useMemo( - // @ts-expect-error - () => (data ? data.pages.flatMap(({ data }) => data.data.data) : []), - [data] - ); + const articles = useMemo(() => (data ? data.pages.flatMap(({ data }) => data) : []), [data]); const refreshArticleList = () => { void queryClient.resetQueries(['articles']); diff --git a/frontend/src/pages/my/index.tsx b/frontend/src/pages/my/index.tsx index 9cba0f69..c42457e9 100644 --- a/frontend/src/pages/my/index.tsx +++ b/frontend/src/pages/my/index.tsx @@ -43,7 +43,7 @@ const My = () => { - + diff --git a/frontend/src/pages/my/write.tsx b/frontend/src/pages/my/write.tsx new file mode 100644 index 00000000..f5ada256 --- /dev/null +++ b/frontend/src/pages/my/write.tsx @@ -0,0 +1,70 @@ +import Link from 'next/link'; +import { useMemo } from 'react'; + +import styled from '@emotion/styled'; + +import EmptyMessage from '@components/common/EmptyMessage'; +import GroupArticleCard from '@components/common/GroupArticleCard'; +import Header from '@components/common/Header'; +import DetailTitle from '@components/common/Header/DetailTitle'; +import PageLayout from '@components/common/PageLayout'; +import { PAGE_TITLE } from '@constants/pageTitle'; +import useFetchMyWriteArticles from '@hooks/queries/useFetchMyWriteArticles'; +import useIntersect from '@hooks/useIntersect'; + +const MyWriteArticlesPage = () => { + const { data, fetchNextPage, hasNextPage, isFetching } = useFetchMyWriteArticles(); + + const { + OWN_GROUP: { title, subTitle }, + } = PAGE_TITLE; + + const ref = useIntersect((entry, observer) => { + observer.unobserve(entry.target); + if (hasNextPage && !isFetching) { + void fetchNextPage(); + } + }); + + const articles = useMemo(() => (data ? data.pages.flatMap(({ data }) => data) : []), [data]); + + return ( + } />}> + + {articles.length ? ( + + {articles.map((article) => ( + + + + + + ))} +
    +
    + ) : ( + + )} +
    +
    + ); +}; + +const ContentWrapper = styled.div` + flex: 1; + display: flex; + flex-direction: column; + padding: 1.6rem; +`; + +const ArticleList = styled.div` + display: grid; + grid-template-columns: repeat(2, 1fr); + grid-gap: 1.3rem; +`; + +const CardLink = styled.div` + overflow: auto; +`; + +export default MyWriteArticlesPage; diff --git a/frontend/src/typings/types.ts b/frontend/src/typings/types.ts index e3954c84..5aacaa61 100644 --- a/frontend/src/typings/types.ts +++ b/frontend/src/typings/types.ts @@ -19,20 +19,9 @@ interface ArticlePreviewType { createdAt: string; } -interface ArticleType { - id: number; - title: string; - content: string; +interface ArticleType extends ArticlePreviewType { + contents: string; author: Partial; - location: Location; - category: Category; - commentCount: number; - scrapCount: number; - thumbnail: string; - maxCapacity: number; - currentCapacity: number; - status: ArticleStatus; - createdAt: string; } interface LocationType { From a511cbdd391e2fde9fcdd3ddea0e4fcd646dc381 Mon Sep 17 00:00:00 2001 From: MinGyeong Park <37508296+kong430@users.noreply.github.com> Date: Tue, 6 Dec 2022 14:54:28 +0900 Subject: [PATCH 093/142] =?UTF-8?q?[Feature]=20=ED=94=84=EB=A1=A0=ED=8A=B8?= =?UTF-8?q?=20API=20=EC=97=90=EB=9F=AC=20=EC=B2=98=EB=A6=AC=20=EB=B3=B4?= =?UTF-8?q?=EC=99=84=20(#205)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :sparkles: feature: get๊ณผ put/post/delete์— ๋”ฐ๋ฅธ ์—๋Ÿฌ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ * :recycle: refactor: ์—๋Ÿฌ class utils/errors ํด๋”๋กœ ์ด๋™ --- .../common/ErrorBoundary/ApiErrorBoundary.tsx | 27 ++++++++++--------- .../ErrorBoundary/AuthErrorBoundary.tsx | 3 +-- frontend/src/hooks/useAsyncError.ts | 4 +-- frontend/src/hooks/useAuthInfiniteQuery.ts | 2 +- frontend/src/hooks/useAuthMutation.ts | 5 ++-- frontend/src/hooks/useAuthQuery.ts | 5 ++-- frontend/src/hooks/useGeneralQuery.ts | 4 ++- .../errors}/AuthError.ts | 0 frontend/src/utils/errors/GetError.ts | 5 ++++ frontend/src/utils/errors/RequestError.ts | 5 ++++ 10 files changed, 37 insertions(+), 23 deletions(-) rename frontend/src/{components/common/ErrorBoundary => utils/errors}/AuthError.ts (100%) create mode 100644 frontend/src/utils/errors/GetError.ts create mode 100644 frontend/src/utils/errors/RequestError.ts diff --git a/frontend/src/components/common/ErrorBoundary/ApiErrorBoundary.tsx b/frontend/src/components/common/ErrorBoundary/ApiErrorBoundary.tsx index 63634990..1a7de65b 100644 --- a/frontend/src/components/common/ErrorBoundary/ApiErrorBoundary.tsx +++ b/frontend/src/components/common/ErrorBoundary/ApiErrorBoundary.tsx @@ -3,12 +3,14 @@ import { Component, PropsWithChildren, useState } from 'react'; import { AxiosError } from 'axios'; import AlertModal from '@components/common/AlertModal'; -import AuthError from '@components/common/ErrorBoundary/AuthError'; +import AuthError from '@utils/errors/AuthError'; +import GetError from '@utils/errors/GetError'; +import RequestError from '@utils/errors/RequestError'; interface Props extends PropsWithChildren {} interface State { - error: Error; + error: AxiosError; } class ApiErrorBoundary extends Component { @@ -29,27 +31,26 @@ class ApiErrorBoundary extends Component { render() { const { error } = this.state; const { children } = this.props; - if (error) { + + if (!error) return children; + + if (error instanceof GetError) { + return ; + } + if (error instanceof RequestError) { return ( <> {children} - + ); } - return children; } } export default ApiErrorBoundary; -const ApiErrors = () => { +const ApiErrorModal = ({ message }: { message: string }) => { const [open, setOpen] = useState(true); - return ( - setOpen(false)} - message="์š”์ฒญ ๋„์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ์‹œ๋„ํ•ด์ฃผ์„ธ์š”." - /> - ); + return setOpen(false)} message={message} />; }; diff --git a/frontend/src/components/common/ErrorBoundary/AuthErrorBoundary.tsx b/frontend/src/components/common/ErrorBoundary/AuthErrorBoundary.tsx index a7c17a23..da8ab3f6 100644 --- a/frontend/src/components/common/ErrorBoundary/AuthErrorBoundary.tsx +++ b/frontend/src/components/common/ErrorBoundary/AuthErrorBoundary.tsx @@ -1,8 +1,7 @@ import { Component, PropsWithChildren, useState } from 'react'; import RedirectHomeModal from '@components/common/RedirectHomeModal'; - -import AuthError from './AuthError'; +import AuthError from '@utils/errors/AuthError'; interface Props extends PropsWithChildren {} diff --git a/frontend/src/hooks/useAsyncError.ts b/frontend/src/hooks/useAsyncError.ts index 5039783f..2de774df 100644 --- a/frontend/src/hooks/useAsyncError.ts +++ b/frontend/src/hooks/useAsyncError.ts @@ -1,13 +1,13 @@ import { useCallback, useState } from 'react'; -import { AxiosError } from 'axios'; +import RequestError from '@utils/errors/RequestError'; const useAsyncError = () => { const [, setError] = useState(); return useCallback( (msg: string) => { setError(() => { - throw new AxiosError(msg); + throw new RequestError(msg); }); }, [setError] diff --git a/frontend/src/hooks/useAuthInfiniteQuery.ts b/frontend/src/hooks/useAuthInfiniteQuery.ts index c0568b4e..1c2d7fd3 100644 --- a/frontend/src/hooks/useAuthInfiniteQuery.ts +++ b/frontend/src/hooks/useAuthInfiniteQuery.ts @@ -6,7 +6,7 @@ import { } from '@tanstack/react-query'; import { AxiosError } from 'axios'; -import AuthError from '@components/common/ErrorBoundary/AuthError'; +import AuthError from '@utils/errors/AuthError'; const useAuthInfiniteQuery = < TQueryFnData = unknown, diff --git a/frontend/src/hooks/useAuthMutation.ts b/frontend/src/hooks/useAuthMutation.ts index c3ac4e20..cf70db5b 100644 --- a/frontend/src/hooks/useAuthMutation.ts +++ b/frontend/src/hooks/useAuthMutation.ts @@ -3,7 +3,8 @@ import { useMutation } from '@tanstack/react-query'; import { UseMutationOptions } from '@tanstack/react-query/src/types'; import { AxiosError } from 'axios'; -import AuthError from '@components/common/ErrorBoundary/AuthError'; +import AuthError from '@utils/errors/AuthError'; +import RequestError from '@utils/errors/RequestError'; const useAuthMutation = < TData = unknown, @@ -23,7 +24,7 @@ const useAuthMutation = < if (error.response.status === 401) { throw new AuthError(); } - throw error; + throw new RequestError(error.response.data.message); } return { ...rest }; diff --git a/frontend/src/hooks/useAuthQuery.ts b/frontend/src/hooks/useAuthQuery.ts index 8213aa68..7687b668 100644 --- a/frontend/src/hooks/useAuthQuery.ts +++ b/frontend/src/hooks/useAuthQuery.ts @@ -4,7 +4,8 @@ import { QueryFunction, QueryKey, useQuery } from '@tanstack/react-query'; import { UseQueryOptions } from '@tanstack/react-query/src/types'; import { AxiosError } from 'axios'; -import AuthError from '@components/common/ErrorBoundary/AuthError'; +import AuthError from '@utils/errors/AuthError'; +import GetError from '@utils/errors/GetError'; const useAuthQuery = < TQueryFnData = unknown, @@ -30,7 +31,7 @@ const useAuthQuery = < if (error.response.status === 401) { throw new AuthError(); } - throw error; + throw new GetError(error.response.data.message); } return { data, isLoading, isFetching }; diff --git a/frontend/src/hooks/useGeneralQuery.ts b/frontend/src/hooks/useGeneralQuery.ts index e62cf6bb..aa2dc344 100644 --- a/frontend/src/hooks/useGeneralQuery.ts +++ b/frontend/src/hooks/useGeneralQuery.ts @@ -4,6 +4,8 @@ import { QueryFunction, QueryKey, useQuery } from '@tanstack/react-query'; import { UseQueryOptions } from '@tanstack/react-query/src/types'; import { AxiosError } from 'axios'; +import GetError from '@utils/errors/GetError'; + const useGeneralQuery = < TQueryFnData = unknown, TError = AxiosError, @@ -26,7 +28,7 @@ const useGeneralQuery = < if (error && error instanceof AxiosError) { if (error.response.status !== 401) { - throw error; + throw new GetError(error.response.data.message); } } diff --git a/frontend/src/components/common/ErrorBoundary/AuthError.ts b/frontend/src/utils/errors/AuthError.ts similarity index 100% rename from frontend/src/components/common/ErrorBoundary/AuthError.ts rename to frontend/src/utils/errors/AuthError.ts diff --git a/frontend/src/utils/errors/GetError.ts b/frontend/src/utils/errors/GetError.ts new file mode 100644 index 00000000..ef849b66 --- /dev/null +++ b/frontend/src/utils/errors/GetError.ts @@ -0,0 +1,5 @@ +import { AxiosError } from 'axios'; + +class GetError extends AxiosError {} + +export default GetError; diff --git a/frontend/src/utils/errors/RequestError.ts b/frontend/src/utils/errors/RequestError.ts new file mode 100644 index 00000000..87f85db3 --- /dev/null +++ b/frontend/src/utils/errors/RequestError.ts @@ -0,0 +1,5 @@ +import { AxiosError } from 'axios'; + +class RequestError extends AxiosError {} + +export default RequestError; From d6480b2a6e7a175c3437f2de4ac4697f2e40cd66 Mon Sep 17 00:00:00 2001 From: Gakko <90585081+pythonstrup@users.noreply.github.com> Date: Tue, 6 Dec 2022 16:48:10 +0900 Subject: [PATCH 094/142] =?UTF-8?q?[Feature]=20=EB=AA=A8=EC=A7=91=20?= =?UTF-8?q?=EA=B2=8C=EC=8B=9C=EA=B8=80=20=EB=8C=93=EA=B8=80=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20API=20(#204)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * โœจ feature: selectAllComment(ํŽ˜์ด์ง€๋„ค์ด์…˜ X) * โœจ feature: ๋Œ“๊ธ€ ์กฐํšŒ response ์ž‘์„ฑ * โœจ feature: ๋Œ“๊ธ€ ์กฐํšŒ service ์ž‘์„ฑ * โœจ feature: ๋Œ“๊ธ€ ์กฐํšŒ controller ์ž‘์„ฑ * โœจ feature: selectAllComment ํŽ˜์ด์ง€๋„ค์ด์…˜ ์ ์šฉ * โœจ feature: query dto ์ž‘์„ฑ * โœจ feature: service pagination ์ ์šฉ * โœจ feature: ๋Œ“๊ธ€ ์กฐํšŒ API Query dto ์ ์šฉ * ๐Ÿฅ… chore: ์ด๋ฆ„ ๊ตฌ๋ถ„์„ ์œ„ํ•ด .dto ์ถ”๊ฐ€ * ๐Ÿฅ… chore: pageResponse๋ฅผ ์œ„ํ•ด ๋ถ„๋ฆฌ * โœจ feature: getTotalCount - ํ•ด๋‹นํ•˜๋Š” ๋ชจ๋“  ๋Œ“๊ธ€์˜ ์ˆ˜๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฉ”์†Œ๋“œ * ๐Ÿฅ… chore: CommentRepository ์˜คํƒ€ ์ˆ˜์ • * ๐Ÿฅ… chore: TotalCount ๋กœ์ง ์ถ”๊ฐ€ - dto ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ ์šฉ * ๐Ÿฅ… chore: ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋ฐ˜์˜ --- backend/src/app/comment/comment.controller.ts | 29 +++++++++- backend/src/app/comment/comment.module.ts | 4 +- backend/src/app/comment/comment.repository.ts | 31 ++++++++++- backend/src/app/comment/comment.service.ts | 35 +++++++++++- .../app/comment/dto/comment-response.dto.ts | 53 +++++++++++++++++++ .../dto/get-all-comment-query-request.dto.ts | 15 ++++++ .../group-article-comment-get-response.dto.ts | 12 +++++ .../exception/not-author.exception.ts | 7 +++ .../group-application.service.ts | 20 ++++--- 9 files changed, 192 insertions(+), 14 deletions(-) create mode 100644 backend/src/app/comment/dto/comment-response.dto.ts create mode 100644 backend/src/app/comment/dto/get-all-comment-query-request.dto.ts create mode 100644 backend/src/app/comment/dto/group-article-comment-get-response.dto.ts create mode 100644 backend/src/app/group-application/exception/not-author.exception.ts diff --git a/backend/src/app/comment/comment.controller.ts b/backend/src/app/comment/comment.controller.ts index 431da9c7..a5b173f1 100644 --- a/backend/src/app/comment/comment.controller.ts +++ b/backend/src/app/comment/comment.controller.ts @@ -1,11 +1,13 @@ import { Body, Controller, + Get, Delete, HttpStatus, Param, ParseIntPipe, Post, + Query, } from '@nestjs/common'; import { CommentService } from '@app/comment/comment.service'; import { JwtAuth } from '@src/common/decorator/jwt-auth.decorator'; @@ -18,6 +20,9 @@ import { ResponseEntity } from '@src/common/response-entity'; import { ApiTags } from '@nestjs/swagger'; import { ApiErrorResponse } from '@src/common/decorator/api-error-response.decorator'; import { GroupNotFoundException } from '@app/comment/exception/group-not-found.exception'; +import { GroupArticleCommentGetResponse } from '@src/app/comment/dto/group-article-comment-get-response.dto'; +import { GetAllCommentQueryRequest } from '@app/comment/dto/get-all-comment-query-request.dto'; +import { CommentRepository } from '@app/comment/comment.repository'; import { CommentNotFoundException } from '@app/comment/exception/comment-not-found.exception'; import { NotAuthorException } from '@app/comment/exception/not-author.exception'; @@ -25,7 +30,10 @@ import { NotAuthorException } from '@app/comment/exception/not-author.exception' @ApiTags('Comment') @JwtAuth() export class CommentController { - constructor(private readonly commentService: CommentService) {} + constructor( + private readonly commentService: CommentService, + private readonly commentRepository: CommentRepository, + ) {} @Post('/') @ApiSuccessResponse(HttpStatus.CREATED, CommentWritingResponse) @@ -42,6 +50,25 @@ export class CommentController { return ResponseEntity.CREATED_WITH_DATA(data); } + @Get('/') + @ApiSuccessResponse(HttpStatus.OK, GroupArticleCommentGetResponse) + @ApiErrorResponse(GroupNotFoundException) + async getComment(@Query() query: GetAllCommentQueryRequest) { + const { count, commentResponse } = await this.commentService.getComment({ + limit: query.getLimit(), + offset: query.getOffset(), + articleId: query.articleId, + }); + + const data = new GroupArticleCommentGetResponse( + count, + query.currentPage, + query.countPerPage, + commentResponse, + ); + return ResponseEntity.OK_WITH_DATA(data); + } + @Delete(':id') @ApiSuccessResponse(HttpStatus.NO_CONTENT) @ApiErrorResponse(CommentNotFoundException, NotAuthorException) diff --git a/backend/src/app/comment/comment.module.ts b/backend/src/app/comment/comment.module.ts index 741e1f21..3d30df9b 100644 --- a/backend/src/app/comment/comment.module.ts +++ b/backend/src/app/comment/comment.module.ts @@ -1,12 +1,12 @@ import { Module } from '@nestjs/common'; import { CommentController } from '@app/comment/comment.controller'; import { CommentService } from '@app/comment/comment.service'; -import { CommnetRepository } from '@app/comment/comment.repository'; +import { CommentRepository } from '@app/comment/comment.repository'; import { GroupArticleModule } from '@app/group-article/group-article.module'; @Module({ imports: [GroupArticleModule], controllers: [CommentController], - providers: [CommentService, CommnetRepository], + providers: [CommentService, CommentRepository], }) export class CommentModule {} diff --git a/backend/src/app/comment/comment.repository.ts b/backend/src/app/comment/comment.repository.ts index a167b6ec..e75ff4c0 100644 --- a/backend/src/app/comment/comment.repository.ts +++ b/backend/src/app/comment/comment.repository.ts @@ -3,7 +3,7 @@ import { Injectable } from '@nestjs/common'; import { Comment } from '@app/comment/entity/comment.entity'; @Injectable() -export class CommnetRepository extends Repository { +export class CommentRepository extends Repository { constructor(private readonly dataSource: DataSource) { super( Comment, @@ -12,6 +12,35 @@ export class CommnetRepository extends Repository { ); } + getTotalCount(articleId: number) { + return this.countBy({ + articleId, + deletedAt: IsNull(), + }); + } + + selectAllComments({ + limit, + offset, + articleId, + }: { + limit: number; + offset: number; + articleId: number; + }) { + return this.find({ + relations: { + user: true, + }, + where: { + articleId, + deletedAt: IsNull(), + }, + take: limit, + skip: offset, + }); + } + findById(id: number) { return this.findOneBy({ id, deletedAt: IsNull() }); } diff --git a/backend/src/app/comment/comment.service.ts b/backend/src/app/comment/comment.service.ts index 65967550..eead0c51 100644 --- a/backend/src/app/comment/comment.service.ts +++ b/backend/src/app/comment/comment.service.ts @@ -1,17 +1,18 @@ import { Injectable } from '@nestjs/common'; -import { CommnetRepository } from '@app/comment/comment.repository'; +import { CommentRepository } from '@app/comment/comment.repository'; import { CommentWritingRequest } from '@app/comment/dto/comment-writing-request.dto'; import { User } from '@app/user/entity/user.entity'; import { Comment } from '@app/comment/entity/comment.entity'; import { GroupArticleRepository } from '@app/group-article/repository/group-article.repository'; import { GroupNotFoundException } from '@app/comment/exception/group-not-found.exception'; +import { CommentResponse } from '@app/comment/dto/comment-response.dto'; import { CommentNotFoundException } from '@app/comment/exception/comment-not-found.exception'; import { NotAuthorException } from '@app/comment/exception/not-author.exception'; @Injectable() export class CommentService { constructor( - private readonly commentRepository: CommnetRepository, + private readonly commentRepository: CommentRepository, private readonly groupArticleRepository: GroupArticleRepository, ) {} @@ -33,6 +34,36 @@ export class CommentService { } } + async getComment({ + limit, + offset, + articleId, + }: { + limit: number; + offset: number; + articleId: number; + }) { + this.validateArticle(articleId); + const allCommentList = await this.commentRepository.selectAllComments({ + articleId, + limit, + offset, + }); + + const count = await this.commentRepository.getTotalCount(articleId); + const commentResponse = await this.bindCommentResponse(allCommentList); + return { count, commentResponse }; + } + + bindCommentResponse(allCommentList: Comment[]) { + const commentWithUserList = allCommentList.map(async (comment) => { + const user = await comment.user; + return CommentResponse.from(comment, user); + }); + + return Promise.all(commentWithUserList); + } + async deleteComment(user: User, id: number) { const comment = await this.commentRepository.findById(id); await this.validateDeleteComment(comment, user); diff --git a/backend/src/app/comment/dto/comment-response.dto.ts b/backend/src/app/comment/dto/comment-response.dto.ts new file mode 100644 index 00000000..55149b1f --- /dev/null +++ b/backend/src/app/comment/dto/comment-response.dto.ts @@ -0,0 +1,53 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { Comment } from '@app/comment/entity/comment.entity'; +import { User } from '@src/app/user/entity/user.entity'; + +export class CommentResponse { + @ApiProperty({ + example: 1, + description: '๋Œ“๊ธ€ ์•„์ด๋””', + }) + id: number; + + @ApiProperty({ + example: 1, + description: '๋Œ“๊ธ€ ์ž‘์„ฑ์ž ์•„์ด๋””', + }) + authorId: number; + + @ApiProperty({ + example: 'pythonstrup', + description: '๋Œ“๊ธ€ ์ž‘์„ฑ์ž ์œ ์ € ์ด๋ฆ„', + }) + authorName: string; + + @ApiProperty({ + example: + 'https://kr.object.ncloudstorage.com/uploads/images/1669276833875-64adca9c-94cd-4162-a53f-f75e951e39db', + description: '๋Œ“๊ธ€ ์ž‘์„ฑ์ž์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€', + }) + authorProfileImage: string; + + @ApiProperty({ + example: '์ œ ์ƒ์ผ์ž…๋‹ˆ๋‹ค!', + description: '๋Œ“๊ธ€ ๋‚ด์šฉ', + }) + contents: string; + + @ApiProperty({ + example: '2022/12/07', + description: '๋Œ“๊ธ€ ์ž‘์„ฑ์ผ', + }) + createdAt: string; + + static from(comment: Comment, user: User) { + const response = new CommentResponse(); + response.id = comment.id; + response.authorId = user.id; + response.authorName = user.userName; + response.authorProfileImage = user.profileImage; + response.contents = comment.contents; + response.createdAt = String(comment.createdAt); + return response; + } +} diff --git a/backend/src/app/comment/dto/get-all-comment-query-request.dto.ts b/backend/src/app/comment/dto/get-all-comment-query-request.dto.ts new file mode 100644 index 00000000..98b4833c --- /dev/null +++ b/backend/src/app/comment/dto/get-all-comment-query-request.dto.ts @@ -0,0 +1,15 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { PageRequest } from '@src/common/util/page-request'; +import { Type } from 'class-transformer'; +import { IsNumber } from 'class-validator'; + +export class GetAllCommentQueryRequest extends PageRequest { + @Type(() => Number) + @IsNumber() + @ApiProperty({ + example: 1, + description: '๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€ ์•„์ด๋””', + required: false, + }) + articleId: number; +} diff --git a/backend/src/app/comment/dto/group-article-comment-get-response.dto.ts b/backend/src/app/comment/dto/group-article-comment-get-response.dto.ts new file mode 100644 index 00000000..fd356024 --- /dev/null +++ b/backend/src/app/comment/dto/group-article-comment-get-response.dto.ts @@ -0,0 +1,12 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { CommentResponse } from './comment-response.dto'; +import { PageResult } from '@src/common/util/page-result'; +import { Expose } from 'class-transformer'; + +export class GroupArticleCommentGetResponse extends PageResult { + @Expose() + @ApiProperty({ type: CommentResponse, isArray: true }) + get data() { + return this._data; + } +} diff --git a/backend/src/app/group-application/exception/not-author.exception.ts b/backend/src/app/group-application/exception/not-author.exception.ts new file mode 100644 index 00000000..01744996 --- /dev/null +++ b/backend/src/app/group-application/exception/not-author.exception.ts @@ -0,0 +1,7 @@ +import { ForbiddenException } from '@nestjs/common'; + +export class NotAuthorException extends ForbiddenException { + constructor(message = 'ํ•ด๋‹น ์ฐธ๊ฐ€์‹ ์ฒญ์˜ ๋ณธ์ธ์ด ์•„๋‹™๋‹ˆ๋‹ค.') { + super({ status: 'NOT_AUTHOR', message }); + } +} diff --git a/backend/src/app/group-application/group-application.service.ts b/backend/src/app/group-application/group-application.service.ts index 042ee5cd..90cf5447 100644 --- a/backend/src/app/group-application/group-application.service.ts +++ b/backend/src/app/group-application/group-application.service.ts @@ -11,7 +11,8 @@ import { User } from '@app/user/entity/user.entity'; import { Group } from '@app/group-article/entity/group.entity'; import { ApplicationNotFoundException } from '@app/group-application/exception/application-not-found.exception'; import { UserInfo } from '@app/group-application/dto/user-info.dto'; -import { ApplicationWithUserInfoResponse } from '@src/app/group-application/dto/application-with-user-info-response.dto'; +import { ApplicationWithUserInfoResponse } from '@app/group-application/dto/application-with-user-info-response.dto'; +import { NotAuthorException } from '@app/group-application/exception/not-author.exception'; @Injectable() export class GroupApplicationService { @@ -89,15 +90,22 @@ export class GroupApplicationService { ); this.validateUserTarget(user, groupArticle); - await this.validateRegisterForCanceling(application); + await this.validateRegisterForCanceling(user, application); await this.deleteApplication(application); } - private async validateRegisterForCanceling(application: GroupApplication) { + private async validateRegisterForCanceling( + user: User, + application: GroupApplication, + ) { if (!application) { throw new ApplicationNotFoundException(); } + + if (application.userId !== user.id) { + throw new NotAuthorException(); + } } private async deleteApplication(application: GroupApplication) { @@ -130,10 +138,6 @@ export class GroupApplicationService { }, ); - return await Promise.all( - applicationWithUserInfoList.map((applicationWithUserInfo) => { - return applicationWithUserInfo; - }), - ); + return await Promise.all(applicationWithUserInfoList); } } From 55ca11e0e91a2c29fdad29099bfd12ae82265846 Mon Sep 17 00:00:00 2001 From: Kim Myeongil <67570061+username1103@users.noreply.github.com> Date: Tue, 6 Dec 2022 17:31:18 +0900 Subject: [PATCH 095/142] =?UTF-8?q?[Feature]=20=EC=9D=B4=EB=AF=B8=EC=A7=80?= =?UTF-8?q?=20blur=20url=20=EC=A0=84=EB=8B=AC=ED=95=98=EA=B8=B0=20(#215)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :goal_net: chore: plaiceholder ์„ค์น˜ - ์ด๋ฏธ์ง€ blur์ฒ˜๋ฆฌ๋ฅผ ๋„์™€์ฃผ๊ธฐ ์œ„ํ•œ ํŒจํ‚ค์ง€ ์„ค์น˜ * :sparkles: feature: ๋ชฉ๋ก์กฐํšŒ์‹œ blur url ์ถ”๊ฐ€ --- backend/package-lock.json | 718 +++++++++++++++++- backend/package.json | 1 + .../dto/group-article-search-result.dto.ts | 13 +- .../group-article/group-article.controller.ts | 28 +- .../my-group-article.controller.ts | 4 +- backend/src/common/dto/image-response.dto.ts | 18 - .../dto/image-with-blur-response.dto.ts | 32 + 7 files changed, 750 insertions(+), 64 deletions(-) delete mode 100644 backend/src/common/dto/image-response.dto.ts create mode 100644 backend/src/common/dto/image-with-blur-response.dto.ts diff --git a/backend/package-lock.json b/backend/package-lock.json index ee329022..799dcdc6 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -28,6 +28,7 @@ "mysql2": "^2.3.3", "passport": "^0.6.0", "passport-github": "^1.1.0", + "plaiceholder": "^2.5.0", "reflect-metadata": "^0.1.13", "rimraf": "^3.0.2", "rxjs": "^7.2.0", @@ -3139,7 +3140,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -3150,7 +3150,6 @@ "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, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -3160,6 +3159,11 @@ "node": ">= 6" } }, + "node_modules/blurhash": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/blurhash/-/blurhash-1.1.5.tgz", + "integrity": "sha512-a+LO3A2DfxTaTztsmkbLYmUzUeApi0LZuKalwbNmqAHR6HhJGMt1qSV/R3wc+w4DL28holjqO3Bg74aUGavGjg==" + }, "node_modules/body-parser": { "version": "1.20.1", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", @@ -3270,7 +3274,6 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, "funding": [ { "type": "github", @@ -3420,6 +3423,12 @@ "fsevents": "~2.3.2" } }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "peer": true + }, "node_modules/chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", @@ -3614,6 +3623,19 @@ "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", "dev": true }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -3630,6 +3652,16 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "peer": true, + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -3826,12 +3858,36 @@ } } }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "peer": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", "dev": true }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "peer": true, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -3893,6 +3949,15 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "peer": true, + "engines": { + "node": ">=8" + } + }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -4014,11 +4079,29 @@ "node": ">= 0.8" } }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/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==", - "dev": true, "dependencies": { "once": "^1.4.0" } @@ -4446,6 +4529,15 @@ "node": ">= 0.8.0" } }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "peer": true, + "engines": { + "node": ">=6" + } + }, "node_modules/expect": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz", @@ -4826,6 +4918,12 @@ "node": ">= 0.6" } }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "peer": true + }, "node_modules/fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", @@ -4929,6 +5027,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "peer": true + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -5154,6 +5258,20 @@ "node": ">= 4" } }, + "node_modules/image-size": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz", + "integrity": "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==", + "dependencies": { + "queue": "6.0.2" + }, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -5212,6 +5330,12 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "peer": true + }, "node_modules/inquirer": { "version": "7.3.3", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", @@ -6838,6 +6962,18 @@ "node": ">=6" } }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -6868,6 +7004,12 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "peer": true + }, "node_modules/morgan": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", @@ -6999,6 +7141,12 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" }, + "node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "peer": true + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -7025,12 +7173,49 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, + "node_modules/node-abi": { + "version": "3.30.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.30.0.tgz", + "integrity": "sha512-qWO5l3SCqbwQavymOmtTVuCWZE23++S+rxyoHjXqUmPyzRcaoI4lA2gO55/drddGnedAyjA7sk76SfQ5lfUMnw==", + "peer": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/node-abort-controller": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.0.1.tgz", "integrity": "sha512-/ujIVxthRs+7q6hsdjHMaj8hRG9NuWmwrz+JdRwZ14jdFoKSkm+vDsCbF9PLpnSqjaWQJuTmVtcWHNLr+vrOFw==", "dev": true }, + "node_modules/node-addon-api": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.0.0.tgz", + "integrity": "sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA==", + "peer": true + }, + "node_modules/node-cache": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-5.1.2.tgz", + "integrity": "sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg==", + "dependencies": { + "clone": "2.x" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/node-cache/node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "engines": { + "node": ">=0.8" + } + }, "node_modules/node-emoji": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", @@ -7536,6 +7721,21 @@ "node": ">=8" } }, + "node_modules/plaiceholder": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/plaiceholder/-/plaiceholder-2.5.0.tgz", + "integrity": "sha512-rygdNSWuYzs1GxxGjq2FiJdJB1AUaKhUHP/M7PIrSjAAGuoJC5ACiJx+cZZ+hDmMalxsxOMw0Sbbx3LF8jemGg==", + "dependencies": { + "blurhash": "1.1.5", + "encoding": "0.1.13", + "image-size": "1.0.2", + "node-cache": "5.1.2", + "node-fetch": "2.6.7" + }, + "peerDependencies": { + "sharp": ">= 0.30.6" + } + }, "node_modules/pluralize": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", @@ -7545,6 +7745,32 @@ "node": ">=4" } }, + "node_modules/prebuild-install": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", + "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", + "peer": true, + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -7647,7 +7873,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -7685,6 +7910,14 @@ "node": ">=0.4.x" } }, + "node_modules/queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "dependencies": { + "inherits": "~2.0.3" + } + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -7736,6 +7969,30 @@ "node": ">= 0.8" } }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "peer": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", @@ -8034,7 +8291,6 @@ "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -8131,6 +8387,29 @@ "sha.js": "bin.js" } }, + "node_modules/sharp": { + "version": "0.31.2", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.31.2.tgz", + "integrity": "sha512-DUdNVEXgS5A97cTagSLIIp8dUZ/lZtk78iNVZgHdHbx1qnQR7JAHY0BnXnwwH39Iw+VKhO08CTYhIg0p98vQ5Q==", + "hasInstallScript": true, + "peer": true, + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.1", + "node-addon-api": "^5.0.0", + "prebuild-install": "^7.1.1", + "semver": "^7.3.8", + "simple-get": "^4.0.1", + "tar-fs": "^2.1.1", + "tunnel-agent": "^0.6.0" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -8188,6 +8467,66 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peer": true + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peer": true, + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "peer": true, + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "peer": true + }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -8473,6 +8812,48 @@ "node": ">=6" } }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "peer": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "peer": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-stream/node_modules/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==", + "peer": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/terminal-link": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", @@ -8882,6 +9263,18 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "peer": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -11982,7 +12375,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, "requires": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -11993,7 +12385,6 @@ "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", @@ -12002,6 +12393,11 @@ } } }, + "blurhash": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/blurhash/-/blurhash-1.1.5.tgz", + "integrity": "sha512-a+LO3A2DfxTaTztsmkbLYmUzUeApi0LZuKalwbNmqAHR6HhJGMt1qSV/R3wc+w4DL28holjqO3Bg74aUGavGjg==" + }, "body-parser": { "version": "1.20.1", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", @@ -12088,7 +12484,6 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, "requires": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -12182,6 +12577,12 @@ "readdirp": "~3.6.0" } }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "peer": true + }, "chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", @@ -12326,6 +12727,16 @@ "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", "dev": true }, + "color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "peer": true, + "requires": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + } + }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -12339,6 +12750,16 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "peer": true, + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -12489,12 +12910,27 @@ "ms": "2.1.2" } }, + "decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "peer": true, + "requires": { + "mimic-response": "^3.1.0" + } + }, "dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", "dev": true }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "peer": true + }, "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -12537,6 +12973,12 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" }, + "detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "peer": true + }, "detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -12628,11 +13070,28 @@ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "requires": { + "iconv-lite": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, "requires": { "once": "^1.4.0" } @@ -12941,6 +13400,12 @@ "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", "dev": true }, + "expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "peer": true + }, "expect": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz", @@ -13254,6 +13719,12 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "peer": true + }, "fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", @@ -13329,6 +13800,12 @@ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true }, + "github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "peer": true + }, "glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -13480,6 +13957,14 @@ "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true }, + "image-size": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz", + "integrity": "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==", + "requires": { + "queue": "6.0.2" + } + }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -13520,6 +14005,12 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "peer": true + }, "inquirer": { "version": "7.3.3", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", @@ -14755,6 +15246,12 @@ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "peer": true + }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -14776,6 +15273,12 @@ "minimist": "^1.2.6" } }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "peer": true + }, "morgan": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", @@ -14895,6 +15398,12 @@ } } }, + "napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "peer": true + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -14918,12 +15427,42 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, + "node-abi": { + "version": "3.30.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.30.0.tgz", + "integrity": "sha512-qWO5l3SCqbwQavymOmtTVuCWZE23++S+rxyoHjXqUmPyzRcaoI4lA2gO55/drddGnedAyjA7sk76SfQ5lfUMnw==", + "peer": true, + "requires": { + "semver": "^7.3.5" + } + }, "node-abort-controller": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.0.1.tgz", "integrity": "sha512-/ujIVxthRs+7q6hsdjHMaj8hRG9NuWmwrz+JdRwZ14jdFoKSkm+vDsCbF9PLpnSqjaWQJuTmVtcWHNLr+vrOFw==", "dev": true }, + "node-addon-api": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.0.0.tgz", + "integrity": "sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA==", + "peer": true + }, + "node-cache": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-5.1.2.tgz", + "integrity": "sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg==", + "requires": { + "clone": "2.x" + }, + "dependencies": { + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==" + } + } + }, "node-emoji": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", @@ -15287,12 +15826,44 @@ } } }, + "plaiceholder": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/plaiceholder/-/plaiceholder-2.5.0.tgz", + "integrity": "sha512-rygdNSWuYzs1GxxGjq2FiJdJB1AUaKhUHP/M7PIrSjAAGuoJC5ACiJx+cZZ+hDmMalxsxOMw0Sbbx3LF8jemGg==", + "requires": { + "blurhash": "1.1.5", + "encoding": "0.1.13", + "image-size": "1.0.2", + "node-cache": "5.1.2", + "node-fetch": "2.6.7" + } + }, "pluralize": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", "dev": true }, + "prebuild-install": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", + "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", + "peer": true, + "requires": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + } + }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -15367,7 +15938,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -15392,6 +15962,14 @@ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==" }, + "queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "requires": { + "inherits": "~2.0.3" + } + }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -15423,6 +16001,26 @@ "unpipe": "1.0.0" } }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "peer": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "peer": true + } + } + }, "react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", @@ -15634,7 +16232,6 @@ "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, "requires": { "lru-cache": "^6.0.0" } @@ -15720,6 +16317,22 @@ "safe-buffer": "^5.0.1" } }, + "sharp": { + "version": "0.31.2", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.31.2.tgz", + "integrity": "sha512-DUdNVEXgS5A97cTagSLIIp8dUZ/lZtk78iNVZgHdHbx1qnQR7JAHY0BnXnwwH39Iw+VKhO08CTYhIg0p98vQ5Q==", + "peer": true, + "requires": { + "color": "^4.2.3", + "detect-libc": "^2.0.1", + "node-addon-api": "^5.0.0", + "prebuild-install": "^7.1.1", + "semver": "^7.3.8", + "simple-get": "^4.0.1", + "tar-fs": "^2.1.1", + "tunnel-agent": "^0.6.0" + } + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -15762,6 +16375,40 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "peer": true + }, + "simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "peer": true, + "requires": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "peer": true, + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "peer": true + } + } + }, "sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -15980,6 +16627,44 @@ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true }, + "tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "peer": true, + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "peer": true, + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "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==", + "peer": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, "terminal-link": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", @@ -16255,6 +16940,15 @@ } } }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "peer": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", diff --git a/backend/package.json b/backend/package.json index 2b8246de..64d3da4a 100644 --- a/backend/package.json +++ b/backend/package.json @@ -44,6 +44,7 @@ "mysql2": "^2.3.3", "passport": "^0.6.0", "passport-github": "^1.1.0", + "plaiceholder": "^2.5.0", "reflect-metadata": "^0.1.13", "rimraf": "^3.0.2", "rxjs": "^7.2.0", diff --git a/backend/src/app/group-article/dto/group-article-search-result.dto.ts b/backend/src/app/group-article/dto/group-article-search-result.dto.ts index 2f30bd9f..19461172 100644 --- a/backend/src/app/group-article/dto/group-article-search-result.dto.ts +++ b/backend/src/app/group-article/dto/group-article-search-result.dto.ts @@ -6,6 +6,7 @@ import { LOCATION, } from '@app/group-article/constants/group-article.constants'; import { IGroupArticleSearchResult } from '@app/group-article/dto/group-article-search-result.interface'; +import { ImageWithBlurResponse } from '@common/dto/image-with-blur-response.dto'; export class GroupArticleSearchResult { @ApiProperty({ example: 1, description: '๊ฒŒ์‹œ๊ธ€ ์•„์ด๋””' }) @@ -14,12 +15,8 @@ export class GroupArticleSearchResult { @ApiProperty({ example: 'test001', description: '๊ฒŒ์‹œ๊ธ€ ์ œ๋ชฉ' }) title: string; - @ApiProperty({ - example: - 'https://kr.object.ncloudstorage.com/uploads/images/1669276833875-64adca9c-94cd-4162-a53f-f75e951e39db', - description: '๊ฒŒ์‹œ๊ธ€ ์ธ๋„ค์ผ', - }) - thumbnail: string; + @ApiProperty({}) + thumbnail: ImageWithBlurResponse; @ApiProperty({ example: GROUP_STATUS.PROGRESS, @@ -54,11 +51,11 @@ export class GroupArticleSearchResult { }) createdAt: Date; - static from(row: IGroupArticleSearchResult) { + static async from(row: IGroupArticleSearchResult) { const res = new GroupArticleSearchResult(); res.id = row.id; res.title = row.title; - res.thumbnail = row.thumbnail; + res.thumbnail = await ImageWithBlurResponse.from(row.thumbnail); res.category = row.groupCategoryName; res.location = row.location; res.status = row.status; diff --git a/backend/src/app/group-article/group-article.controller.ts b/backend/src/app/group-article/group-article.controller.ts index 49208764..f99d8c4f 100644 --- a/backend/src/app/group-article/group-article.controller.ts +++ b/backend/src/app/group-article/group-article.controller.ts @@ -36,7 +36,6 @@ import { UpdateGroupArticleRequest } from '@app/group-article/dto/update-group-a import { NotSuccessGroupException } from '@app/group-article/exception/not-success-group.exception'; import { NotParticipantException } from '@app/group-article/exception/not-participant.exception'; import { GetGroupChatUrlResponseDto } from '@app/group-article/dto/get-group-chat-url-response.dto'; -import { PageRequest } from '@common/util/page-request'; @Controller('group-articles') @ApiTags('Group-Article') @@ -135,30 +134,9 @@ export class GroupArticleController { result[1], query.currentPage, query.countPerPage, - result[0].map((row) => GroupArticleSearchResult.from(row)), - ), - ); - } - - @Get('me') - @JwtAuth() - @ApiSuccessResponse(HttpStatus.OK, SearchGroupArticleResponse) - async getMyGroupArticles( - @CurrentUser() user: User, - @Query() query: PageRequest, - ) { - const result = await this.groupArticleRepository.search({ - limit: query.getLimit(), - offset: query.getOffset(), - user, - }); - - return ResponseEntity.OK_WITH_DATA( - new SearchGroupArticleResponse( - result[1], - query.currentPage, - query.countPerPage, - result[0].map((row) => GroupArticleSearchResult.from(row)), + await Promise.all( + result[0].map((row) => GroupArticleSearchResult.from(row)), + ), ), ); } diff --git a/backend/src/app/group-article/my-group-article.controller.ts b/backend/src/app/group-article/my-group-article.controller.ts index 69b0fc95..fe04634b 100644 --- a/backend/src/app/group-article/my-group-article.controller.ts +++ b/backend/src/app/group-article/my-group-article.controller.ts @@ -48,7 +48,9 @@ export class MyGroupArticleController { result[1], query.currentPage, query.countPerPage, - result[0].map((row) => GroupArticleSearchResult.from(row)), + await Promise.all( + result[0].map((row) => GroupArticleSearchResult.from(row)), + ), ), ); } diff --git a/backend/src/common/dto/image-response.dto.ts b/backend/src/common/dto/image-response.dto.ts deleted file mode 100644 index c093b7b8..00000000 --- a/backend/src/common/dto/image-response.dto.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; - -export class ImageResponse { - @ApiProperty({ - example: '1669276833875-64adca9c-94cd-4162-a53f-f75e951e39db', - description: '์ด๋ฏธ์ง€ key', - required: true, - }) - key: string; - - @ApiProperty({ - example: - 'https://kr.object.ncloudstorage.com/uploads/images/1669276833875-64adca9c-94cd-4162-a53f-f75e951e39db', - description: '๋ฒ„ํ‚ท ์ด๋ฏธ์ง€ url', - required: true, - }) - url: string; -} diff --git a/backend/src/common/dto/image-with-blur-response.dto.ts b/backend/src/common/dto/image-with-blur-response.dto.ts new file mode 100644 index 00000000..b7e62c24 --- /dev/null +++ b/backend/src/common/dto/image-with-blur-response.dto.ts @@ -0,0 +1,32 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { getPlaiceholder } from 'plaiceholder'; + +export class ImageWithBlurResponse { + @ApiProperty({ + example: + 'https://kr.object.ncloudstorage.com/uploads/images/1669276833875-64adca9c-94cd-4162-a53f-f75e951e39db', + description: '์ด๋ฏธ์ง€ ์›๋ณธ url', + required: true, + }) + originUrl: string; + + @ApiProperty({ + example: + 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAIAAAAmkwkpAAAACXBIWXMAACE3AAAhNwEzWJ96AAAAP0lEQVR4nAE0AMv/APPz8v///9O8uOba1wDn4ea3v8qgn6bs5OMAtc6/AANBABtT6d/HANvn3ZawsdbO2fr59MePI7dvVudoAAAAAElFTkSuQmCC', + description: 'blur ์ด๋ฏธ์ง€ url', + required: true, + }) + blurUrl: string; + + static async from(url: string) { + const res = new ImageWithBlurResponse(); + res.originUrl = url; + try { + const { base64 } = await getPlaiceholder(url); + res.blurUrl = base64; + } catch (e) { + res.blurUrl = url; + } + return res; + } +} From cd85282899dfe6637a22471cb6e921395f4b6660 Mon Sep 17 00:00:00 2001 From: Gakko <90585081+pythonstrup@users.noreply.github.com> Date: Tue, 6 Dec 2022 19:01:50 +0900 Subject: [PATCH 096/142] =?UTF-8?q?[Feature]=20=EB=8C=93=EA=B8=80=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1=20=EC=95=8C=EB=A6=BC=20(#221)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * โœจ feature: notification์— comment ์˜์กด์„ฑ ์ถ”๊ฐ€ * โœจ feature: ๋Œ“๊ธ€ ์ž‘์„ฑ ์‹œ ์•Œ๋ฆผ ์ด๋ฒคํŠธ ๋ฐœ์ƒ ๋กœ์ง ์ž‘์„ฑ * โœจ feature: ๊ฒŒ์‹œ๊ธ€ ์•„์ด๋””๋กœ ๋Œ“๊ธ€ ์ฐพ์•„์˜ค๊ธฐ * โœจ feature: comment added ์ด๋ฒคํŠธ ์„ค์ • * โœจ feature: comment added ์ด๋ฒคํŠธ ๋‚ด์šฉ ์„ค์ • * โœจ feature: createCommentAdded ๋ฉ”์†Œ๋“œ ์ถ”๊ฐ€ - notification entity * โœจ feature: ๋Œ“๊ธ€ ์ž‘์„ฑ ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ ๋กœ์ง ์ž‘์„ฑ - ๊ฒŒ์‹œ๊ธ€์— ํ•ด๋‹นํ•˜๋Š” ๋Œ“๊ธ€ ์ „๋ถ€ ์กฐํšŒ - ๋Œ“๊ธ€์„ ๋‹ฌ์•„๋†“์€ ๋ชจ๋“  ์œ ์ €์˜ ์•Œ๋ฆผ ์ˆ˜์‹  ์—ฌ๋ถ€๋ฅผ ํ™•์ธ - ์•Œ๋ฆผ์„ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ฒ˜๋ฆฌ --- backend/src/app/comment/comment.module.ts | 1 + backend/src/app/comment/comment.repository.ts | 4 +++ backend/src/app/comment/comment.service.ts | 23 +++++++++--- .../entity/notification-contents.ts | 4 +++ .../entity/notification.entity.ts | 18 +++++++++- .../notification/event/comment-added.event.ts | 12 +++++++ .../app/notification/notification.listener.ts | 35 +++++++++++++++++++ .../app/notification/notification.module.ts | 3 +- 8 files changed, 93 insertions(+), 7 deletions(-) create mode 100644 backend/src/app/notification/event/comment-added.event.ts diff --git a/backend/src/app/comment/comment.module.ts b/backend/src/app/comment/comment.module.ts index 3d30df9b..aeda650a 100644 --- a/backend/src/app/comment/comment.module.ts +++ b/backend/src/app/comment/comment.module.ts @@ -8,5 +8,6 @@ import { GroupArticleModule } from '@app/group-article/group-article.module'; imports: [GroupArticleModule], controllers: [CommentController], providers: [CommentService, CommentRepository], + exports: [CommentRepository], }) export class CommentModule {} diff --git a/backend/src/app/comment/comment.repository.ts b/backend/src/app/comment/comment.repository.ts index e75ff4c0..74483e18 100644 --- a/backend/src/app/comment/comment.repository.ts +++ b/backend/src/app/comment/comment.repository.ts @@ -44,4 +44,8 @@ export class CommentRepository extends Repository { findById(id: number) { return this.findOneBy({ id, deletedAt: IsNull() }); } + + findByArticleId(groupArticleId: number) { + return this.findBy({ articleId: groupArticleId, deletedAt: IsNull() }); + } } diff --git a/backend/src/app/comment/comment.service.ts b/backend/src/app/comment/comment.service.ts index eead0c51..1d039159 100644 --- a/backend/src/app/comment/comment.service.ts +++ b/backend/src/app/comment/comment.service.ts @@ -8,27 +8,39 @@ import { GroupNotFoundException } from '@app/comment/exception/group-not-found.e import { CommentResponse } from '@app/comment/dto/comment-response.dto'; import { CommentNotFoundException } from '@app/comment/exception/comment-not-found.exception'; import { NotAuthorException } from '@app/comment/exception/not-author.exception'; +import { EventEmitter2 } from '@nestjs/event-emitter'; +import { GroupArticle } from '@app/group-article/entity/group-article.entity'; +import { CommentAddedEvent } from '@app/notification/event/comment-added.event'; @Injectable() export class CommentService { constructor( private readonly commentRepository: CommentRepository, private readonly groupArticleRepository: GroupArticleRepository, + private readonly eventEmitter: EventEmitter2, ) {} async writeComment(user: User, commentWritingRequest: CommentWritingRequest) { - this.validateArticle(commentWritingRequest.articleId); + const groupArticle = await this.groupArticleRepository.findById( + commentWritingRequest.articleId, + ); + this.validateArticle(groupArticle); const comment = Comment.from( user, commentWritingRequest.articleId, commentWritingRequest.contents, ); - return await this.commentRepository.save(comment); + + const result = await this.commentRepository.save(comment); + this.eventEmitter.emit( + 'comment.added', + new CommentAddedEvent(groupArticle, result), + ); + return result; } - async validateArticle(articleId: number) { - const groupArticle = await this.groupArticleRepository.findById(articleId); + async validateArticle(groupArticle: GroupArticle) { if (!groupArticle) { throw new GroupNotFoundException(); } @@ -43,7 +55,8 @@ export class CommentService { offset: number; articleId: number; }) { - this.validateArticle(articleId); + const groupArticle = await this.groupArticleRepository.findById(articleId); + this.validateArticle(groupArticle); const allCommentList = await this.commentRepository.selectAllComments({ articleId, limit, diff --git a/backend/src/app/notification/entity/notification-contents.ts b/backend/src/app/notification/entity/notification-contents.ts index bd74bb45..e5699e67 100644 --- a/backend/src/app/notification/entity/notification-contents.ts +++ b/backend/src/app/notification/entity/notification-contents.ts @@ -10,3 +10,7 @@ export interface GroupSucceedContents extends NotificationContents { export interface GroupFailedContents extends NotificationContents { groupArticleId: number; } + +export interface CommnetAddedContents extends NotificationContents { + groupArticleId: number; +} diff --git a/backend/src/app/notification/entity/notification.entity.ts b/backend/src/app/notification/entity/notification.entity.ts index 67ac7a1a..d5de163e 100644 --- a/backend/src/app/notification/entity/notification.entity.ts +++ b/backend/src/app/notification/entity/notification.entity.ts @@ -6,10 +6,12 @@ import { } from 'typeorm'; import { NOTIFICATION_TYPE } from '@app/notification/constants/notification.constants'; import { + CommnetAddedContents, GroupFailedContents, GroupSucceedContents, } from '@app/notification/entity/notification-contents'; import { GroupArticle } from '@app/group-article/entity/group-article.entity'; +import { Comment } from '@src/app/comment/entity/comment.entity'; @Entity() export class Notification { @@ -20,7 +22,7 @@ export class Notification { type: NOTIFICATION_TYPE; @Column({ type: 'json' }) - contents: GroupSucceedContents | GroupFailedContents; + contents: GroupSucceedContents | GroupFailedContents | CommnetAddedContents; @CreateDateColumn({ type: 'timestamp' }) createdAt: Date; @@ -46,4 +48,18 @@ export class Notification { }; return notification; } + + static createCommentAddedNotification( + groupArticle: GroupArticle, + comment: Comment, + ) { + const notification = new Notification(); + notification.type = NOTIFICATION_TYPE.COMMENT_ADDED; + notification.contents = { + title: groupArticle.title, + subTitle: comment.contents, + groupArticleId: groupArticle.id, + }; + return notification; + } } diff --git a/backend/src/app/notification/event/comment-added.event.ts b/backend/src/app/notification/event/comment-added.event.ts new file mode 100644 index 00000000..2ccd8542 --- /dev/null +++ b/backend/src/app/notification/event/comment-added.event.ts @@ -0,0 +1,12 @@ +import { GroupArticle } from '@app/group-article/entity/group-article.entity'; +import { Comment } from '@src/app/comment/entity/comment.entity'; + +export class CommentAddedEvent { + groupArticle: GroupArticle; + comment: Comment; + + constructor(groupArticle: GroupArticle, comment: Comment) { + this.groupArticle = groupArticle; + this.comment = comment; + } +} diff --git a/backend/src/app/notification/notification.listener.ts b/backend/src/app/notification/notification.listener.ts index d16df47d..d12afe39 100644 --- a/backend/src/app/notification/notification.listener.ts +++ b/backend/src/app/notification/notification.listener.ts @@ -8,6 +8,8 @@ import { UserNotification } from '@app/notification/entity/user-notification.ent import { GroupApplicationRepository } from '@app/group-application/group-application.repository'; import { GroupFailedEvent } from '@app/notification/event/group-failed.event'; import { NotificationSettingRepository } from '@app/notification/repository/notification-setting.repository'; +import { CommentAddedEvent } from '@app/notification/event/comment-added.event'; +import { CommentRepository } from '@app/comment/comment.repository'; @Injectable() export class NotificationListener { @@ -17,6 +19,7 @@ export class NotificationListener { private readonly dataSource: DataSource, private readonly groupApplicationRepository: GroupApplicationRepository, private readonly notificationSettingRepository: NotificationSettingRepository, + private readonly commentRepository: CommentRepository, ) {} @OnEvent('group.succeed') @@ -86,4 +89,36 @@ export class NotificationListener { this.logger.error(e); } } + + @OnEvent('comment.added') + async handleCommentAddedEvent(event: CommentAddedEvent) { + const { groupArticle, comment } = event; + try { + const commentList = this.commentRepository.findByArticleId( + groupArticle.id, + ); + + const targetUsers = + await this.notificationSettingRepository.findTargetUsers({ + type: NOTIFICATION_SETTING_TYPE.COMMENT, + userIds: (await commentList).map((comment) => comment.userId), + }); + + const notification = Notification.createCommentAddedNotification( + groupArticle, + comment, + ); + + await this.dataSource.transaction(async (em) => { + await em.save(notification); + await em.save( + targetUsers.map((user) => + UserNotification.create(user, notification), + ), + ); + }); + } catch (e) { + this.logger.error(e); + } + } } diff --git a/backend/src/app/notification/notification.module.ts b/backend/src/app/notification/notification.module.ts index 231dfd7f..8efb2eef 100644 --- a/backend/src/app/notification/notification.module.ts +++ b/backend/src/app/notification/notification.module.ts @@ -4,9 +4,10 @@ import { NotificationSettingRepository } from '@app/notification/repository/noti import { NotificationService } from '@app/notification/notification.service'; import { NotificationListener } from '@app/notification/notification.listener'; import { GroupApplicationModule } from '@app/group-application/group-application.module'; +import { CommentModule } from '@app/comment/comment.module'; @Module({ - imports: [GroupApplicationModule], + imports: [GroupApplicationModule, CommentModule], controllers: [NotificationController], providers: [ NotificationService, From dffa2c477312b262c976eac30c1c5ad42a542efa Mon Sep 17 00:00:00 2001 From: MinGyeong Park <37508296+kong430@users.noreply.github.com> Date: Tue, 6 Dec 2022 19:07:16 +0900 Subject: [PATCH 097/142] =?UTF-8?q?[Feature]=20=EA=B2=8C=EC=8B=9C=EA=B8=80?= =?UTF-8?q?=20=EC=83=81=EC=84=B8=20Menu=EB=B2=84=ED=8A=BC=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20=EA=B8=B0=EB=8A=A5=20(#213)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :sparkles: feature: ๊ฒŒ์‹œ๊ธ€ ์ƒ์„ธ๋ณด๊ธฐ์˜ menu dropdown button ์ƒ์„ฑ ๋ณธ์ธ์˜ ๊ฒŒ์‹œ๊ธ€์ผ ๊ฒฝ์šฐ์—๋งŒ menu๋ฒ„ํŠผ show, <๋ชจ์ง‘์ค‘>์ผ๋•Œ๋งŒ ๋ชจ์ง‘ ์ƒํƒœ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ * :sparkles: feature: ๊ฒŒ์‹œ๊ธ€ ์ˆ˜์ • ํŽ˜์ด์ง€ ์ƒ์„ฑ * :recycle: refactor: ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ/์ˆ˜์ • ๊ณตํ†ต์œผ๋กœ ์“ฐ์ด๋Š” ๋กœ์ง ์ปดํฌ๋„ŒํŠธ๋กœ ๋ถ„๋ฆฌ * :sparkles: feature: toast message duration 2์ดˆ๋กœ ๋ณ€๊ฒฝ * :goal_net: chore: ์•ˆ์“ฐ๋Š” ๋ชจ๋‹ฌ ์ œ๊ฑฐ ๋ฐ ๋กœ๋”ฉ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ TODO comment out * :sparkles: feature: ๊ฒŒ์‹œ๊ธ€ ์‚ญ์ œ API ์—ฐ๊ฒฐ * :sparkles: feature: url ๋ณต์‚ฌ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ํ˜„์žฌ url ๋ณต์‚ฌ * :sparkles: fix: ํ”„๋กœํ•„ ์ˆ˜์ • ํŽ˜์ด์ง€์—์„œ ํ”„๋กœํ•„ ์ˆ˜์ • ์„ฑ๊ณต ์‹œ์—๋งŒ toast๋ฉ”์‹œ์ง€ ๋„์šฐ๋„๋ก ์ˆ˜์ • * :sparkles: feature: ๋ชจ์ง‘ ์ค‘๋‹จ api ์—ฐ๊ฒฐ * :sparkles: feature: ๋ชจ์ง‘ ์™„๋ฃŒ๋กœ ๋ณ€๊ฒฝ api ์—ฐ๊ฒฐ * :sparkles: feature: ํ™•์ธ, ์ทจ์†Œ ๋ฒ„ํŠผ์ด ์žˆ๋Š” ConfirmModal ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ * :sparkles: feature: ๊ฒŒ์‹œ๊ธ€ ์‚ญ์ œ, ์ƒํƒœ๋ณ€๊ฒฝ ์‹œ ConfirmModal open * :sparkles: feature: content->contents, url->chatUrl๋กœ ๋ช…์„ธ ๋ฐ”๋€ ๊ฒƒ ์ ์šฉ * :recycle: refactor: ArticlePostType์„ ArticlePostInputType์œผ๋กœ ๋„ค์ด๋ฐ ๋ณ€๊ฒฝ * :goal_net: chore: develop ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋ฐ˜์˜ ArticleLoading ์ปดํฌ๋„ŒํŠธ ์ ์šฉ ๋ฐ ContextWrapper ์˜คํƒ€ ์ˆ˜์ • * :recycle: refactor: ๋ฆฌ๋ทฐ ๋ฐ˜์˜ - isInProgress๋ฅผ isArticleInProgress๋กœ ๋ณ€๊ฒฝ --- .../article/ArticlePostInput/index.tsx | 90 +++++++++ .../components/article/MenuButton/index.tsx | 132 +++++++++++++ .../ConfirmModal/ConfirmModal.stories.tsx | 18 ++ .../components/common/ConfirmModal/index.tsx | 59 ++++++ .../src/hooks/queries/useCancelRecruitment.ts | 17 ++ .../hooks/queries/useCompleteRecruitment.ts | 17 ++ .../src/hooks/queries/useDeleteArticle.ts | 10 + .../src/hooks/queries/useEditMyArticle.ts | 25 +++ frontend/src/hooks/queries/useFetchChatUrl.ts | 4 +- .../src/hooks/queries/useFetchMyArticle.ts | 24 +++ frontend/src/pages/article/[id].tsx | 16 +- frontend/src/pages/article/edit/[id].tsx | 177 ++++++++++++++++++ frontend/src/pages/article/write/index.tsx | 107 +++-------- frontend/src/pages/my/edit.tsx | 24 ++- frontend/src/typings/types.ts | 20 +- frontend/src/utils/toast.tsx | 2 +- 16 files changed, 626 insertions(+), 116 deletions(-) create mode 100644 frontend/src/components/article/ArticlePostInput/index.tsx create mode 100644 frontend/src/components/article/MenuButton/index.tsx create mode 100644 frontend/src/components/common/ConfirmModal/ConfirmModal.stories.tsx create mode 100644 frontend/src/components/common/ConfirmModal/index.tsx create mode 100644 frontend/src/hooks/queries/useCancelRecruitment.ts create mode 100644 frontend/src/hooks/queries/useCompleteRecruitment.ts create mode 100644 frontend/src/hooks/queries/useDeleteArticle.ts create mode 100644 frontend/src/hooks/queries/useEditMyArticle.ts create mode 100644 frontend/src/hooks/queries/useFetchMyArticle.ts create mode 100644 frontend/src/pages/article/edit/[id].tsx diff --git a/frontend/src/components/article/ArticlePostInput/index.tsx b/frontend/src/components/article/ArticlePostInput/index.tsx new file mode 100644 index 00000000..c8e7d500 --- /dev/null +++ b/frontend/src/components/article/ArticlePostInput/index.tsx @@ -0,0 +1,90 @@ +import styled from '@emotion/styled'; +import { FileInput, Text } from '@mantine/core'; +import { IconUpload } from '@tabler/icons'; + +import ArticleEditor from '@components/article/ArticleEditor'; +import ImageThumbnail from '@components/article/ImageThumbnail'; +import TextInput from '@components/common/TextInput'; +import useAsyncError from '@hooks/useAsyncError'; +import { ArticlePostInputType } from '@typings/types'; +import uploadImage from '@utils/uploadImage'; + +interface Props { + values: ArticlePostInputType; + onChange: (target: keyof ArticlePostInputType, value: string) => void; +} + +const ArticlePostInput = ({ values, onChange }: Props) => { + const { title, contents, chatUrl, thumbnail } = values; + const throwAsyncError = useAsyncError(); + + const handleChangeImage = async (imageFile: File) => { + try { + const uploadedImage = await uploadImage(imageFile); + onChange('thumbnail', uploadedImage.url); + } catch (err) { + throwAsyncError('์ด๋ฏธ์ง€ ์—…๋กœ๋“œ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.'); + } + }; + + return ( + + onChange('title', e.target.value)} + /> + onChange('contents', contents)} /> + onChange('chatUrl', e.target.value)} + /> + + + + ์ธ๋„ค์ผ ์ด๋ฏธ์ง€ + + + * + + + + } + /> + + + ); +}; + +export default ArticlePostInput; + +const PostSection = styled.div` + width: 100%; + display: flex; + flex-direction: column; + gap: 1.6rem; + padding: 1.6rem; +`; + +const ImageSection = styled.div` + display: flex; + flex-direction: column; + gap: 0.8rem; +`; + +const FileInputLabel = styled.div` + display: flex; + align-items: center; + gap: 0.4rem; +`; diff --git a/frontend/src/components/article/MenuButton/index.tsx b/frontend/src/components/article/MenuButton/index.tsx new file mode 100644 index 00000000..515b4d83 --- /dev/null +++ b/frontend/src/components/article/MenuButton/index.tsx @@ -0,0 +1,132 @@ +import Link from 'next/link'; +import { useRouter } from 'next/router'; +import { useEffect, useState } from 'react'; + +import styled from '@emotion/styled'; +import { Menu, Text } from '@mantine/core'; +import { IconDotsVertical } from '@tabler/icons'; + +import ConfirmModal from '@components/common/ConfirmModal'; +import useCancelRecruitment from '@hooks/queries/useCancelRecruitment'; +import useCompleteRecruitment from '@hooks/queries/useCompleteRecruitment'; +import useDeleteArticle from '@hooks/queries/useDeleteArticle'; +import useClipboard from '@hooks/useClipboard'; +import { showToast } from '@utils/toast'; + +interface Props { + isArticleInProgress: boolean; +} + +const MenuButton = ({ isArticleInProgress }: Props) => { + const router = useRouter(); + const articleId = Number(router.query.id); + const { mutate: deleteArticle } = useDeleteArticle(); + const { mutate: cancelRecruitment } = useCancelRecruitment(); + const { mutate: completeRecruitment } = useCompleteRecruitment(); + const { isCopied, setIsCopied, doCopy } = useClipboard(); + const [deleteModalOpen, setDeleteModalOpen] = useState(false); + const [completeModalOpen, setCompleteModalOpen] = useState(false); + const [cancelModalOpen, setCancelModalOpen] = useState(false); + + const confirmDeletion = () => { + deleteArticle(articleId, { + onSuccess: () => { + showToast({ title: '๊ฒŒ์‹œ๊ธ€ ์‚ญ์ œ ์™„๋ฃŒ!', message: '๋‹ค๋ฅธ ๊ฒŒ์‹œ๊ธ€๋„ ์˜ฌ๋ ค๋ณด์„ธ์š”.' }); + router.back(); + }, + }); + }; + + const confirmCancel = () => { + cancelRecruitment(articleId, { + onSuccess: () => { + showToast({ title: '๋ชจ์ง‘ ์ค‘๋‹จ ์™„๋ฃŒ!', message: '๋‹ค๋ฅธ ๊ฒŒ์‹œ๊ธ€๋„ ์˜ฌ๋ ค๋ณด์„ธ์š”.' }); + setCancelModalOpen(false); + }, + }); + }; + + const confirmComplete = () => { + completeRecruitment(articleId, { + onSuccess: () => { + showToast({ title: '๋ชจ์ง‘ ์„ฑ๊ณต ์™„๋ฃŒ!', message: '์˜คํ”ˆ ์ฑ„ํŒ…๋ฐฉ์— ์ฐธ์—ฌํ•ด๋ณด์„ธ์š”.' }); + setCompleteModalOpen(false); + }, + }); + }; + + useEffect(() => { + if (isCopied) { + showToast({ title: 'URL ๋ณต์‚ฌ ์™„๋ฃŒ', message: '์นœ๊ตฌ์—๊ฒŒ ๊ณต์œ ํ•ด๋ณด์„ธ์š”' }); + setIsCopied(false); + } + }, [isCopied, setIsCopied]); + + return ( + <> + + + + + + + + + + ๊ฒŒ์‹œ๊ธ€ ์ˆ˜์ • + + + + setDeleteModalOpen(true)}> + ๊ฒŒ์‹œ๊ธ€ ์‚ญ์ œ + + + + doCopy(window.location.href)}> + URL ๋ณต์‚ฌํ•˜๊ธฐ + + {isArticleInProgress && ( + <> + setCancelModalOpen(true)}> + ๋ชจ์ง‘ ์ค‘๋‹จ์œผ๋กœ ๋ณ€๊ฒฝ + + setCompleteModalOpen(true)}> + ๋ชจ์ง‘ ์™„๋ฃŒ๋กœ ๋ณ€๊ฒฝ + + + )} + + + setDeleteModalOpen(false)} + /> + setCancelModalOpen(false)} + /> + setCompleteModalOpen(false)} + /> + + ); +}; + +export default MenuButton; + +const StyledButton = styled.button` + background-color: ${({ theme }) => theme.white}; + border: none; +`; + +const MenuDropdown = styled(Menu.Dropdown)` + box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.1); + border: 1px solid ${({ theme }) => theme.colors.gray[4]}; +`; diff --git a/frontend/src/components/common/ConfirmModal/ConfirmModal.stories.tsx b/frontend/src/components/common/ConfirmModal/ConfirmModal.stories.tsx new file mode 100644 index 00000000..cb021068 --- /dev/null +++ b/frontend/src/components/common/ConfirmModal/ConfirmModal.stories.tsx @@ -0,0 +1,18 @@ +import { ComponentMeta, ComponentStory } from '@storybook/react'; + +import ConfirmModal from '.'; + +export default { + title: 'Component/ConfirmModal', + component: ConfirmModal, +} as ComponentMeta; + +const Template: ComponentStory = (args) => ; + +export const _ConfirmModal = Template.bind({}); +_ConfirmModal.args = { + open: true, + message: '์‚ญ์ œํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?', + onConfirmButtonClick: () => {}, + onCancelButtonClick: () => {}, +}; diff --git a/frontend/src/components/common/ConfirmModal/index.tsx b/frontend/src/components/common/ConfirmModal/index.tsx new file mode 100644 index 00000000..94950fa2 --- /dev/null +++ b/frontend/src/components/common/ConfirmModal/index.tsx @@ -0,0 +1,59 @@ +import styled from '@emotion/styled'; +import { Modal } from '@mantine/core'; + +interface Props { + message: string; + open: boolean; + onConfirmButtonClick: () => void; + onCancelButtonClick: () => void; +} + +const ConfirmModal = ({ message, open, onConfirmButtonClick, onCancelButtonClick }: Props) => { + return ( + <> + {open && ( + + {message} + + ํ™•์ธ + ์ทจ์†Œ + + + )} + + ); +}; + +export default ConfirmModal; + +const StyledModal = styled(Modal)` + & .mantine-Modal-body { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + } +`; + +const ModalContent = styled.div` + padding: 1.6rem; + text-align: center; +`; + +const ButtonWrapper = styled.div` + display: flex; + gap: 3.6rem; + justify-content: center; + width: 100%; +`; + +const ActionButton = styled.div` + text-align: center; + padding: 1.6rem; + color: ${({ theme }) => theme.colors.indigo[7]}; + background-color: ${({ theme }) => theme.white}; + border: none; + &:hover { + cursor: pointer; + } +`; diff --git a/frontend/src/hooks/queries/useCancelRecruitment.ts b/frontend/src/hooks/queries/useCancelRecruitment.ts new file mode 100644 index 00000000..fefb27b7 --- /dev/null +++ b/frontend/src/hooks/queries/useCancelRecruitment.ts @@ -0,0 +1,17 @@ +import { useMutation, useQueryClient } from '@tanstack/react-query'; + +import { clientAxios } from '@utils/commonAxios'; + +const cancelRecruitment = (articleId: number) => + clientAxios.post(`/v1/group-articles/${articleId}/recruitment-cancel`); + +const useCancelRecruitment = () => { + const queryClient = useQueryClient(); + return useMutation(cancelRecruitment, { + onSuccess: (data, variables, context) => { + void queryClient.invalidateQueries(['article', variables]); + }, + }); +}; + +export default useCancelRecruitment; diff --git a/frontend/src/hooks/queries/useCompleteRecruitment.ts b/frontend/src/hooks/queries/useCompleteRecruitment.ts new file mode 100644 index 00000000..8c9d4606 --- /dev/null +++ b/frontend/src/hooks/queries/useCompleteRecruitment.ts @@ -0,0 +1,17 @@ +import { useMutation, useQueryClient } from '@tanstack/react-query'; + +import { clientAxios } from '@utils/commonAxios'; + +const completeRecruitment = (articleId: number) => + clientAxios.post(`/v1/group-articles/${articleId}/recruitment-complete`); + +const useCompleteRecruitment = () => { + const queryClient = useQueryClient(); + return useMutation(completeRecruitment, { + onSuccess: (data, variables, context) => { + void queryClient.invalidateQueries(['article', variables]); + }, + }); +}; + +export default useCompleteRecruitment; diff --git a/frontend/src/hooks/queries/useDeleteArticle.ts b/frontend/src/hooks/queries/useDeleteArticle.ts new file mode 100644 index 00000000..f067fe51 --- /dev/null +++ b/frontend/src/hooks/queries/useDeleteArticle.ts @@ -0,0 +1,10 @@ +import useAuthMutation from '@hooks/useAuthMutation'; +import { clientAxios } from '@utils/commonAxios'; + +const deleteArticle = (articleId: number) => clientAxios.delete(`/v1/group-articles/${articleId}`); + +const useDeleteArticle = () => { + return useAuthMutation(deleteArticle); +}; + +export default useDeleteArticle; diff --git a/frontend/src/hooks/queries/useEditMyArticle.ts b/frontend/src/hooks/queries/useEditMyArticle.ts new file mode 100644 index 00000000..7f4ae92d --- /dev/null +++ b/frontend/src/hooks/queries/useEditMyArticle.ts @@ -0,0 +1,25 @@ +import useAuthMutation from '@hooks/useAuthMutation'; +import { ArticlePostInputType } from '@typings/types'; +import { clientAxios } from '@utils/commonAxios'; + +const updateArticle = ({ + articleId, + articleInput, +}: { + articleId: number; + articleInput: ArticlePostInputType; +}) => { + const { title, contents, thumbnail, chatUrl } = articleInput; + return clientAxios.put(`/v1/group-articles/${articleId}`, { + title, + contents, + thumbnail, + chatUrl, + }); +}; + +const useEditMyArticle = () => { + return useAuthMutation(updateArticle); +}; + +export default useEditMyArticle; diff --git a/frontend/src/hooks/queries/useFetchChatUrl.ts b/frontend/src/hooks/queries/useFetchChatUrl.ts index e591d7ae..5167ffc5 100644 --- a/frontend/src/hooks/queries/useFetchChatUrl.ts +++ b/frontend/src/hooks/queries/useFetchChatUrl.ts @@ -5,11 +5,11 @@ import { ApiResponse } from '@typings/types'; import { clientAxios } from '@utils/commonAxios'; const useFetchChatUrl = (groupArticleId: number, enabled: boolean) => { - const { data } = useAuthQuery, AxiosError, string>( + const { data } = useAuthQuery, AxiosError, string>( ['chatUrl', groupArticleId], () => clientAxios.get(`/v1/group-articles/${groupArticleId}/chat-url`), { - select: (res) => res.data.data.url, + select: (res) => res.data.data.chatUrl, enabled, } ); diff --git a/frontend/src/hooks/queries/useFetchMyArticle.ts b/frontend/src/hooks/queries/useFetchMyArticle.ts new file mode 100644 index 00000000..fc0e0646 --- /dev/null +++ b/frontend/src/hooks/queries/useFetchMyArticle.ts @@ -0,0 +1,24 @@ +import { AxiosError } from 'axios'; + +import useAuthQuery from '@hooks/useAuthQuery'; +import { ApiResponse, MyArticleType } from '@typings/types'; +import { clientAxios } from '@utils/commonAxios'; + +const getMyArticle = async (id: number) => { + return clientAxios.get(`${process.env.NEXT_PUBLIC_API_URL}/v1/my-group-articles/${id}`, { + params: { id }, + }); +}; + +const useFetchMyArticle = (id: number) => { + const { data, isLoading } = useAuthQuery, AxiosError, MyArticleType>( + ['article', 'my', id], + () => getMyArticle(id), + { + select: (res) => res.data.data, + } + ); + return { data, isLoading }; +}; + +export default useFetchMyArticle; diff --git a/frontend/src/pages/article/[id].tsx b/frontend/src/pages/article/[id].tsx index 7ead7490..2fe9632d 100644 --- a/frontend/src/pages/article/[id].tsx +++ b/frontend/src/pages/article/[id].tsx @@ -6,13 +6,13 @@ import styled from '@emotion/styled'; import { Avatar, Progress, TypographyStylesProvider } from '@mantine/core'; import { IconList } from '@tabler/icons'; +import MenuButton from '@components/article/MenuButton'; import ParticipantsModal from '@components/article/ParticipantsModal'; import ParticipateButton from '@components/article/ParticipateButton'; import ArticleLoading from '@components/common/ArticleLoading'; import ArticleTag from '@components/common/ArticleTag'; import Header from '@components/common/Header'; import DetailTitle from '@components/common/Header/DetailTitle'; -import UserLoginItem from '@components/common/Header/UserLoginItem'; import PageLayout from '@components/common/PageLayout'; import StatCounter from '@components/common/StatCounter'; import { ArticleStatus, ArticleStatusKr } from '@constants/article'; @@ -33,8 +33,8 @@ const ArticleDetail = () => { const { colors: { indigo, gray }, } = useTheme(); - const { query } = useRouter(); - const articleId = Number(query.id); + const router = useRouter(); + const articleId = Number(router.query.id); const { data: myInfo } = useFetchMyInfo(); const { article } = useFetchArticle(articleId); const { isJoined } = useFetchApplicationStatus(articleId); @@ -56,12 +56,19 @@ const ArticleDetail = () => { subTitle={PAGE_TITLE.ARTICLE.subTitle} /> } - rightNode={} + rightNode={ + article && + myInfo && + article.author.id === myInfo.id && ( + + ) + } /> } > <> + {/* TODO ๋กœ๋”ฉ ์ฒ˜๋ฆฌ */} {!article || isJoined === undefined || !myInfo ? ( ) : ( @@ -137,6 +144,7 @@ const ArticleDetail = () => { /> + r ); }; diff --git a/frontend/src/pages/article/edit/[id].tsx b/frontend/src/pages/article/edit/[id].tsx new file mode 100644 index 00000000..013ef9ba --- /dev/null +++ b/frontend/src/pages/article/edit/[id].tsx @@ -0,0 +1,177 @@ +import Head from 'next/head'; +import { useRouter } from 'next/router'; +import { useEffect, useState } from 'react'; + +import styled from '@emotion/styled'; +import { ActionIcon, Slider, Text } from '@mantine/core'; +import { IconCheck } from '@tabler/icons'; + +import ArticlePostInput from '@components/article/ArticlePostInput'; +import DropDown from '@components/common/DropDown'; +import Header from '@components/common/Header'; +import DetailTitle from '@components/common/Header/DetailTitle'; +import PageLayout from '@components/common/PageLayout'; +import { CategoryKr } from '@constants/category'; +import { LocationKr } from '@constants/location'; +import { PAGE_TITLE } from '@constants/pageTitle'; +import useEditMyArticle from '@hooks/queries/useEditMyArticle'; +import useFetchMyArticle from '@hooks/queries/useFetchMyArticle'; +import { ArticlePostInputType } from '@typings/types'; +import { showToast } from '@utils/toast'; + +const ArticleEdit = () => { + const router = useRouter(); + const articleId = Number(router.query.id); + + const { data: article } = useFetchMyArticle(articleId); + const { mutate: editArticle } = useEditMyArticle(); + const [articleInput, setArticleInput] = useState({ + title: '', + contents: '', + chatUrl: '', + thumbnail: '', + }); + const { title, contents, chatUrl, thumbnail } = articleInput; + + useEffect(() => { + if (article) { + const { title, contents, thumbnail, chatUrl } = article; + setArticleInput({ + title, + contents, + chatUrl, + thumbnail, + }); + } + }, [article]); + + const possibleToSubmit = + article && + title.trim().length > 0 && + contents.length > 0 && + chatUrl.trim().length > 0 && + thumbnail; + + const handleClickSubmitBtn = async () => { + if (!possibleToSubmit) return; + editArticle( + { articleId, articleInput }, + { + onSuccess: () => { + showToast({ + title: '๊ฒŒ์‹œ๊ธ€ ์ˆ˜์ • ์™„๋ฃŒ!', + message: '์ด์ œ ๋ชจ์ง‘ ์™„๋ฃŒ ๋˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ ค์ฃผ์„ธ์š”!', + }); + router.back(); + }, + } + ); + }; + + return ( + <> + + ๋ชจ์—ฌ๋ชจ์—ฌ - ๋ชจ์ง‘ ๊ฒŒ์‹œํŒ + + + } + rightNode={ + + + + } + /> + } + > + {/* TODO ๋กœ๋”ฉ์ฒ˜๋ฆฌ */} + {article === undefined ? ( +
    ๋กœ๋”ฉ์ค‘
    + ) : ( + <> + + + ({ + label: value, + value: key, + }))} + value={article.category} + required + disabled + /> + ({ + label: value, + value: key, + }))} + value={article.location} + required + disabled + /> + + + + + ์ธ์›์ œํ•œ + + + {article.maxCapacity}๋ช… + + + + + + { + setArticleInput((prev) => ({ ...prev, [target]: value })); + }} + /> + + )} +
    + + ); +}; + +const TermSection = styled.div` + padding: 1.6rem; + border-bottom: 1px solid ${({ theme }) => theme.colors.gray[4]}; + display: flex; + flex-direction: column; + gap: 1.6rem; ; +`; + +const SelectSection = styled.div` + width: 100%; + display: flex; + gap: 1.6rem; +`; + +const PersonSection = styled.div` + width: 100%; + display: flex; + flex-direction: column; + gap: 0.8rem; +`; + +const PersonSectionHeader = styled.div` + width: 100%; + display: flex; + justify-content: space-between; +`; + +export default ArticleEdit; diff --git a/frontend/src/pages/article/write/index.tsx b/frontend/src/pages/article/write/index.tsx index 3b7188b9..6e37ed24 100644 --- a/frontend/src/pages/article/write/index.tsx +++ b/frontend/src/pages/article/write/index.tsx @@ -3,49 +3,46 @@ import { useRouter } from 'next/router'; import { useState } from 'react'; import styled from '@emotion/styled'; -import { ActionIcon, FileInput, Slider, Text } from '@mantine/core'; -import { IconCheck, IconUpload, IconUser } from '@tabler/icons'; +import { ActionIcon, Slider, Text } from '@mantine/core'; +import { IconCheck, IconUser } from '@tabler/icons'; -import ArticleEditor from '@components/article/ArticleEditor'; -import ImageThumbnail from '@components/article/ImageThumbnail'; +import ArticlePostInput from '@components/article/ArticlePostInput'; import AlertModal from '@components/common/AlertModal'; import DropDown from '@components/common/DropDown'; import Header from '@components/common/Header'; import DetailTitle from '@components/common/Header/DetailTitle'; import PageLayout from '@components/common/PageLayout'; -import TextInput from '@components/common/TextInput'; import { Category, CategoryKr } from '@constants/category'; import { Location, LocationKr } from '@constants/location'; import useAsyncError from '@hooks/useAsyncError'; -import { ImageUploadType } from '@typings/types'; +import { ArticlePostInputType } from '@typings/types'; import { clientAxios } from '@utils/commonAxios'; import { showToast } from '@utils/toast'; -import uploadImage from '@utils/uploadImage'; -interface ArticleInput { +interface ArticleInputType { category: Category | null; location: Location | null; maxCapacity: number; title: string; contents: string; chatUrl: string; - uploadedImage: ImageUploadType | null; + thumbnail: string | null; } const WritePage = () => { const router = useRouter(); const throwAsyncError = useAsyncError(); const [confirmModalOpen, setConfirmModalOpen] = useState(false); - const [articleInput, setArticleInput] = useState({ + const [articleInput, setArticleInput] = useState({ category: null, location: null, maxCapacity: 5, title: '', contents: '', chatUrl: '', - uploadedImage: null, + thumbnail: null, }); - const { category, location, maxCapacity, title, contents, chatUrl, uploadedImage } = articleInput; + const { category, location, maxCapacity, title, contents, chatUrl, thumbnail } = articleInput; const possibleToSubmit = category && @@ -54,16 +51,12 @@ const WritePage = () => { title.trim().length > 0 && contents.length > 0 && chatUrl.trim().length > 0 && - uploadedImage; + thumbnail; const handleClickSubmitBtn = async () => { if (!possibleToSubmit) return; try { - const { uploadedImage, ...rest } = articleInput; - await clientAxios.post('/v1/group-articles', { - ...rest, - thumbnail: uploadedImage.url, - }); + await clientAxios.post('/v1/group-articles', articleInput); // TODO : mutation ๋กœ์ง ์ถ”๊ฐ€? showToast({ title: '๊ฒŒ์‹œ๊ธ€ ๋“ฑ๋ก ์™„๋ฃŒ!', @@ -76,15 +69,6 @@ const WritePage = () => { } }; - const handleChangeImage = async (imageFile: File) => { - try { - const uploadedImage = await uploadImage(imageFile); - setArticleInput((prev) => ({ ...prev, uploadedImage })); - } catch (err) { - throwAsyncError('์ด๋ฏธ์ง€ ์—…๋กœ๋“œ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.'); - } - }; - return ( <> @@ -161,45 +145,17 @@ const WritePage = () => { /> - - setArticleInput((prev) => ({ ...prev, title: e.target.value }))} - /> - setArticleInput((prev) => ({ ...prev, contents }))} - /> - setArticleInput((prev) => ({ ...prev, chatUrl: e.target.value }))} - /> - - - - ์ธ๋„ค์ผ ์ด๋ฏธ์ง€ - - - * - - - - } - /> - - + { + setArticleInput((prev) => ({ ...prev, [target]: value })); + }} + /> ); @@ -232,23 +188,4 @@ const PersonSectionHeader = styled.div` justify-content: space-between; `; -const PostSection = styled.div` - width: 100%; - display: flex; - flex-direction: column; - gap: 1.6rem; - padding: 1.6rem; -`; - -const ImageSection = styled.div` - display: flex; - flex-direction: column; - gap: 0.8rem; -`; -const FileInputLabel = styled.div` - display: flex; - align-items: center; - gap: 0.4rem; -`; - export default WritePage; diff --git a/frontend/src/pages/my/edit.tsx b/frontend/src/pages/my/edit.tsx index 80842aa0..98c552b9 100644 --- a/frontend/src/pages/my/edit.tsx +++ b/frontend/src/pages/my/edit.tsx @@ -40,7 +40,7 @@ const MyEditPage = () => { } }, [myProfile]); - const posibleToSubmit = + const possibleToSubmit = myProfile && profileImage.length > 0 && userName.length > 0 && @@ -62,17 +62,15 @@ const MyEditPage = () => { }; const handleClickProfileChangeBtn = async () => { - try { - updateMyProfile(userDataInput); - - showToast({ - title: 'ํ”„๋กœํ•„ ์ˆ˜์ • ์™„๋ฃŒ!', - message: '๋ฉ‹์ง€๊ฒŒ ๋ฐ”๋€ ํ”„๋กœํ•„์„ ํ™•์ธํ•ด๋ณด์„ธ์š”!', - }); - void router.push('/my'); - } catch (err) { - throwAsyncError('ํ”„๋กœํ•„ ์ˆ˜์ •์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.'); - } + updateMyProfile(userDataInput, { + onSuccess: () => { + showToast({ + title: 'ํ”„๋กœํ•„ ์ˆ˜์ • ์™„๋ฃŒ!', + message: '๋ฉ‹์ง€๊ฒŒ ๋ฐ”๋€ ํ”„๋กœํ•„์„ ํ™•์ธํ•ด๋ณด์„ธ์š”!', + }); + void router.push('/my'); + }, + }); }; if (!myProfile) return null; @@ -84,7 +82,7 @@ const MyEditPage = () => { rightNode={ diff --git a/frontend/src/typings/types.ts b/frontend/src/typings/types.ts index 5aacaa61..1abfb0d9 100644 --- a/frontend/src/typings/types.ts +++ b/frontend/src/typings/types.ts @@ -24,15 +24,13 @@ interface ArticleType extends ArticlePreviewType { author: Partial; } -interface LocationType { - id: number; - name: Location; +interface MyArticleType + extends Omit { + chatUrl: string; } -interface CategoryType { - id: number; - name: Category; -} +interface ArticlePostInputType + extends Pick {} interface CommentType { id: number; @@ -63,6 +61,8 @@ interface ImageUploadType { url: string; } +type ApiResponse = AxiosResponse<{ data: T; message: string; status: string }>; + interface NotificationType { id: number; type: Notification; @@ -71,14 +71,12 @@ interface NotificationType { createdAt: string; } -type ApiResponse = AxiosResponse<{ data: T; messasge: string; status: string }>; - export type { ApiResponse, ArticlePreviewType, ArticleType, - LocationType, - CategoryType, + MyArticleType, + ArticlePostInputType, TestResponseType, CommentType, UserType, diff --git a/frontend/src/utils/toast.tsx b/frontend/src/utils/toast.tsx index 46513554..abba53c7 100644 --- a/frontend/src/utils/toast.tsx +++ b/frontend/src/utils/toast.tsx @@ -12,7 +12,7 @@ const showToast = ({ title, message }: ToastProps) => message, color: 'indigo', icon: , - autoClose: 4000, + autoClose: 2000, styles: (theme) => ({ root: { paddingTop: '1.6rem', From dda7c873391fee388ed204404eaf0655cbb223be Mon Sep 17 00:00:00 2001 From: yangseungchan Date: Wed, 7 Dec 2022 00:12:03 +0900 Subject: [PATCH 098/142] =?UTF-8?q?[Feature]=20=EC=9D=B4=EB=AF=B8=EC=A7=80?= =?UTF-8?q?=20=EC=95=95=EC=B6=95,=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20?= =?UTF-8?q?=EC=97=90=EB=9F=AC=20=EB=8C=80=EC=9D=91,=20=EC=95=84=EB=B0=94?= =?UTF-8?q?=ED=83=80=20=EC=B5=9C=EC=A0=81=ED=99=94=20(#220)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * โœจ feature: ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ์••์ถ• ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * โœจ feature: ๊ณตํ†ต ์ด๋ฏธ์ง€ ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ ๋ฐ ์—๋Ÿฌ์‹œ ๋””ํดํŠธ ์ด๋ฏธ์ง€ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ * โœจ feature: Avatar ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ ๋ฐ ์ ์šฉ์œผ๋กœ ์ด๋ฏธ์ง€ ์ตœ์ ํ™” * ๐Ÿฅ… chore: API ์ŠคํŽ™ ๋ณ€๊ฒฝ์  ๋ฐ˜์˜ * ๐Ÿฅ… chore: ์•„๋ฐ”ํƒ€ ๊ธฐ๋ณธ ์ด๋ฏธ์ง€ ์ œ๊ณต * ๐Ÿฅ… chore: sharp ํŒจํ‚ค์ง€ ์„ค์น˜ ์ ์šฉ * ๐Ÿฅ… chore: ์ฃผ์„ ์ œ๊ฑฐํ•˜๊ธฐ * ๐Ÿฅ… chore: ํƒ€์ดํ•‘ ์ˆ˜์ •ํ•˜๊ธฐ --- frontend/package-lock.json | 694 +++++++++++++++++- frontend/package.json | 4 +- frontend/public/avatar.jpg | Bin 0 -> 7396 bytes frontend/public/default.jpg | Bin 0 -> 26674 bytes .../src/components/article/Comment/index.tsx | 5 +- .../article/ImageThumbnail/index.tsx | 4 +- .../ParticipantItem/index.tsx | 4 +- .../src/components/common/Avatar/index.tsx | 34 + .../common/GroupArticleCard/index.tsx | 5 +- .../common/Header/UserLoginItem/index.tsx | 5 +- .../src/components/common/Image/index.tsx | 17 + .../src/components/common/Profile/index.tsx | 10 +- frontend/src/constants/dummy.ts | 10 +- .../hooks/queries/useFetchMyWriteArticles.ts | 2 +- frontend/src/pages/article/[id].tsx | 9 +- frontend/src/pages/article/write/index.tsx | 1 - frontend/src/pages/my/edit.tsx | 3 +- frontend/src/typings/types.ts | 18 +- frontend/src/utils/uploadImage.ts | 16 +- 19 files changed, 776 insertions(+), 65 deletions(-) create mode 100644 frontend/public/avatar.jpg create mode 100644 frontend/public/default.jpg create mode 100644 frontend/src/components/common/Avatar/index.tsx create mode 100644 frontend/src/components/common/Image/index.tsx diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 1b775704..7478ebe3 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -21,9 +21,11 @@ "@tanstack/react-query": "^4.16.1", "@tanstack/react-query-devtools": "^4.16.1", "axios": "^1.1.3", + "browser-image-compression": "^2.0.0", "next": "^12.3.3", "react": "^17.0.2", "react-dom": "^17.0.2", + "sharp": "^0.31.2", "timeago.js": "^4.0.2", "uuidv4": "^6.2.13" }, @@ -12357,7 +12359,6 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, "funding": [ { "type": "github", @@ -12443,7 +12444,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -12454,7 +12454,6 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, "funding": [ { "type": "github", @@ -12478,7 +12477,6 @@ "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, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -12492,7 +12490,6 @@ "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, "funding": [ { "type": "github", @@ -12512,7 +12509,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, "dependencies": { "safe-buffer": "~5.2.0" } @@ -12731,6 +12727,14 @@ "integrity": "sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==", "dev": true }, + "node_modules/browser-image-compression": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/browser-image-compression/-/browser-image-compression-2.0.0.tgz", + "integrity": "sha512-kBlkZo13yOOfcmrPW0M0K/UdZPogIQj2gRvXIM3FktAnfW6VRq9aY2RI+F6O0x6DMj1Xm+WLGgWcFK8Fu/ddnw==", + "dependencies": { + "uzip": "0.20201231.0" + } + }, "node_modules/browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", @@ -13629,6 +13633,18 @@ "node": ">=0.10.0" } }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -13642,6 +13658,15 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, "node_modules/color-support": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", @@ -13651,6 +13676,22 @@ "color-support": "bin.js" } }, + "node_modules/color/node_modules/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color/node_modules/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==" + }, "node_modules/colorette": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", @@ -14635,6 +14676,20 @@ "node": ">=0.10" } }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", @@ -14667,6 +14722,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -14805,6 +14868,14 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "engines": { + "node": ">=8" + } + }, "node_modules/detect-package-manager": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/detect-package-manager/-/detect-package-manager-2.0.1.tgz", @@ -15141,7 +15212,6 @@ "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==", - "dev": true, "dependencies": { "once": "^1.4.0" } @@ -16443,6 +16513,14 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "engines": { + "node": ">=6" + } + }, "node_modules/expect": { "version": "29.3.1", "resolved": "https://registry.npmjs.org/expect/-/expect-29.3.1.tgz", @@ -17439,6 +17517,11 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, "node_modules/fs-extra": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", @@ -17657,6 +17740,11 @@ "node": ">=0.10.0" } }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" + }, "node_modules/github-slugger": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", @@ -18455,7 +18543,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, "funding": [ { "type": "github", @@ -18563,6 +18650,11 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, "node_modules/inline-style-parser": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", @@ -20919,7 +21011,6 @@ "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, "dependencies": { "yallist": "^4.0.0" }, @@ -21411,6 +21502,17 @@ "node": ">=6" } }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/min-document": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", @@ -21608,6 +21710,11 @@ "node": ">=10" } }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, "node_modules/move-concurrently": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", @@ -21876,6 +21983,11 @@ "node": ">=0.10.0" } }, + "node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -22005,6 +22117,36 @@ "tslib": "^2.0.3" } }, + "node_modules/node-abi": { + "version": "3.30.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.30.0.tgz", + "integrity": "sha512-qWO5l3SCqbwQavymOmtTVuCWZE23++S+rxyoHjXqUmPyzRcaoI4lA2gO55/drddGnedAyjA7sk76SfQ5lfUMnw==", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-abi/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-addon-api": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.0.0.tgz", + "integrity": "sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA==" + }, "node_modules/node-dir": { "version": "0.1.17", "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", @@ -22521,7 +22663,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "dependencies": { "wrappy": "1" } @@ -23362,6 +23503,31 @@ "node": ">=0.10.0" } }, + "node_modules/prebuild-install": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", + "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -23590,7 +23756,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -23850,6 +24015,28 @@ "webpack": "^4.0.0 || ^5.0.0" } }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/react": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", @@ -25409,6 +25596,42 @@ "node": ">=8" } }, + "node_modules/sharp": { + "version": "0.31.2", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.31.2.tgz", + "integrity": "sha512-DUdNVEXgS5A97cTagSLIIp8dUZ/lZtk78iNVZgHdHbx1qnQR7JAHY0BnXnwwH39Iw+VKhO08CTYhIg0p98vQ5Q==", + "hasInstallScript": true, + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.1", + "node-addon-api": "^5.0.0", + "prebuild-install": "^7.1.1", + "semver": "^7.3.8", + "simple-get": "^4.0.1", + "tar-fs": "^2.1.1", + "tunnel-agent": "^0.6.0" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/sharp/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -25450,6 +25673,62 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -26597,6 +26876,77 @@ "node": ">=10" } }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-fs/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-stream/node_modules/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==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/tar-stream/node_modules/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==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/tar-stream/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, "node_modules/telejson": { "version": "6.0.8", "resolved": "https://registry.npmjs.org/telejson/-/telejson-6.0.8.tgz", @@ -27124,6 +27474,17 @@ "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==", "dev": true }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -27764,6 +28125,11 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/uzip": { + "version": "0.20201231.0", + "resolved": "https://registry.npmjs.org/uzip/-/uzip-0.20201231.0.tgz", + "integrity": "sha512-OZeJfZP+R0z9D6TmBgLq2LHzSSptGMGDGigGiEe0pr8UBe/7fdflgHlHBNDASTXB5jnFuxHpNaJywSg8YFeGng==" + }, "node_modules/v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", @@ -28540,8 +28906,7 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/write-file-atomic": { "version": "3.0.3", @@ -28618,8 +28983,7 @@ "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yaml": { "version": "1.10.2", @@ -37892,8 +38256,7 @@ "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, "better-opn": { "version": "2.1.1", @@ -37949,7 +38312,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, "requires": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -37960,7 +38322,6 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, "requires": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -37970,7 +38331,6 @@ "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", @@ -37980,14 +38340,12 @@ "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 + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, "requires": { "safe-buffer": "~5.2.0" } @@ -38169,6 +38527,14 @@ "integrity": "sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==", "dev": true }, + "browser-image-compression": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/browser-image-compression/-/browser-image-compression-2.0.0.tgz", + "integrity": "sha512-kBlkZo13yOOfcmrPW0M0K/UdZPogIQj2gRvXIM3FktAnfW6VRq9aY2RI+F6O0x6DMj1Xm+WLGgWcFK8Fu/ddnw==", + "requires": { + "uzip": "0.20201231.0" + } + }, "browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", @@ -38854,6 +39220,30 @@ "object-visit": "^1.0.0" } }, + "color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "requires": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "dependencies": { + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + } + } + }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -38867,6 +39257,15 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, + "color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, "color-support": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", @@ -39663,6 +40062,14 @@ "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", "dev": true }, + "decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "requires": { + "mimic-response": "^3.1.0" + } + }, "dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", @@ -39692,6 +40099,11 @@ "which-typed-array": "^1.1.8" } }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -39792,6 +40204,11 @@ "repeat-string": "^1.5.4" } }, + "detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==" + }, "detect-package-manager": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/detect-package-manager/-/detect-package-manager-2.0.1.tgz", @@ -40089,7 +40506,6 @@ "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==", - "dev": true, "requires": { "once": "^1.4.0" } @@ -41060,6 +41476,11 @@ } } }, + "expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" + }, "expect": { "version": "29.3.1", "resolved": "https://registry.npmjs.org/expect/-/expect-29.3.1.tgz", @@ -41852,6 +42273,11 @@ } } }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, "fs-extra": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", @@ -42012,6 +42438,11 @@ "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", "dev": true }, + "github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" + }, "github-slugger": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", @@ -42611,8 +43042,7 @@ "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "iferr": { "version": "0.1.5", @@ -42684,6 +43114,11 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, "inline-style-parser": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", @@ -44396,7 +44831,6 @@ "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" } @@ -44791,6 +45225,11 @@ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" + }, "min-document": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", @@ -44954,6 +45393,11 @@ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, "move-concurrently": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", @@ -45168,6 +45612,11 @@ "to-regex": "^3.0.1" } }, + "napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -45257,6 +45706,29 @@ "tslib": "^2.0.3" } }, + "node-abi": { + "version": "3.30.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.30.0.tgz", + "integrity": "sha512-qWO5l3SCqbwQavymOmtTVuCWZE23++S+rxyoHjXqUmPyzRcaoI4lA2gO55/drddGnedAyjA7sk76SfQ5lfUMnw==", + "requires": { + "semver": "^7.3.5" + }, + "dependencies": { + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "node-addon-api": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.0.0.tgz", + "integrity": "sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA==" + }, "node-dir": { "version": "0.1.17", "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", @@ -45664,7 +46136,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "requires": { "wrappy": "1" } @@ -46293,6 +46764,25 @@ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, + "prebuild-install": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", + "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", + "requires": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + } + }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -46473,7 +46963,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -46676,6 +47165,24 @@ "schema-utils": "^3.0.0" } }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" + } + } + }, "react": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", @@ -47893,6 +48400,31 @@ "kind-of": "^6.0.2" } }, + "sharp": { + "version": "0.31.2", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.31.2.tgz", + "integrity": "sha512-DUdNVEXgS5A97cTagSLIIp8dUZ/lZtk78iNVZgHdHbx1qnQR7JAHY0BnXnwwH39Iw+VKhO08CTYhIg0p98vQ5Q==", + "requires": { + "color": "^4.2.3", + "detect-libc": "^2.0.1", + "node-addon-api": "^5.0.0", + "prebuild-install": "^7.1.1", + "semver": "^7.3.8", + "simple-get": "^4.0.1", + "tar-fs": "^2.1.1", + "tunnel-agent": "^0.6.0" + }, + "dependencies": { + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -47925,6 +48457,36 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" + }, + "simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "requires": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + } + } + }, "sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -48830,6 +49392,61 @@ "yallist": "^4.0.0" } }, + "tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + }, + "dependencies": { + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + } + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "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==", + "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==" + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + } + } + }, "telejson": { "version": "6.0.8", "resolved": "https://registry.npmjs.org/telejson/-/telejson-6.0.8.tgz", @@ -49237,6 +49854,14 @@ "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==", "dev": true }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -49708,6 +50333,11 @@ } } }, + "uzip": { + "version": "0.20201231.0", + "resolved": "https://registry.npmjs.org/uzip/-/uzip-0.20201231.0.tgz", + "integrity": "sha512-OZeJfZP+R0z9D6TmBgLq2LHzSSptGMGDGigGiEe0pr8UBe/7fdflgHlHBNDASTXB5jnFuxHpNaJywSg8YFeGng==" + }, "v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", @@ -50337,8 +50967,7 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "write-file-atomic": { "version": "3.0.3", @@ -50388,8 +51017,7 @@ "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yaml": { "version": "1.10.2", diff --git a/frontend/package.json b/frontend/package.json index d53e2099..0bb54322 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -32,16 +32,18 @@ "@mantine/core": "~5.7.2", "@mantine/hooks": "~5.7.2", "@mantine/next": "~5.7.2", - "@mantine/nprogress": "~5.7.2", "@mantine/notifications": "~5.7.2", + "@mantine/nprogress": "~5.7.2", "@mantine/rte": "~5.7.2", "@tabler/icons": "^1.111.0", "@tanstack/react-query": "^4.16.1", "@tanstack/react-query-devtools": "^4.16.1", "axios": "^1.1.3", + "browser-image-compression": "^2.0.0", "next": "^12.3.3", "react": "^17.0.2", "react-dom": "^17.0.2", + "sharp": "^0.31.2", "timeago.js": "^4.0.2", "uuidv4": "^6.2.13" }, diff --git a/frontend/public/avatar.jpg b/frontend/public/avatar.jpg new file mode 100644 index 0000000000000000000000000000000000000000..08e1d87d626b25273f0dcd24e476471cef5fa175 GIT binary patch literal 7396 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 literal 0 HcmV?d00001 diff --git a/frontend/public/default.jpg b/frontend/public/default.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2b147f86b14be4d42b81a8278557afc81a453b4d GIT binary patch literal 26674 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 literal 0 HcmV?d00001 diff --git a/frontend/src/components/article/Comment/index.tsx b/frontend/src/components/article/Comment/index.tsx index e74734d1..08e8968e 100644 --- a/frontend/src/components/article/Comment/index.tsx +++ b/frontend/src/components/article/Comment/index.tsx @@ -1,5 +1,6 @@ -import { Avatar, Text } from '@mantine/core'; +import { Text } from '@mantine/core'; +import Avatar from '@components/common/Avatar'; import { CommentType as CommentItem } from '@typings/types'; import dateTimeFormat from '@utils/dateTime'; @@ -37,7 +38,7 @@ const Comment = ({ comment = mockComment }: Props) => { - + {comment.authorName} diff --git a/frontend/src/components/article/ImageThumbnail/index.tsx b/frontend/src/components/article/ImageThumbnail/index.tsx index f3c3360d..4570cdc8 100644 --- a/frontend/src/components/article/ImageThumbnail/index.tsx +++ b/frontend/src/components/article/ImageThumbnail/index.tsx @@ -1,9 +1,9 @@ -import Image from 'next/image'; - import { useTheme } from '@emotion/react'; import styled from '@emotion/styled'; import { IconPhoto } from '@tabler/icons'; +import Image from '@components/common/Image'; + interface Props { /** * ์ธ๋„ค์ผ๋กœ ์‚ฌ์šฉํ•  ์ด๋ฏธ์ง€์˜ URL์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. diff --git a/frontend/src/components/article/ParticipantsModal/ParticipantItem/index.tsx b/frontend/src/components/article/ParticipantsModal/ParticipantItem/index.tsx index b7059238..94b5bf16 100644 --- a/frontend/src/components/article/ParticipantsModal/ParticipantItem/index.tsx +++ b/frontend/src/components/article/ParticipantsModal/ParticipantItem/index.tsx @@ -1,8 +1,8 @@ import { useTheme } from '@emotion/react'; import styled from '@emotion/styled'; -import { Avatar } from '@mantine/core'; import { IconExternalLink } from '@tabler/icons'; +import Avatar from '@components/common/Avatar'; import { UserType } from '@typings/types'; interface Props { @@ -18,7 +18,7 @@ const ParticipantItem = ({ participant }: Props) => { return ( - + {userName} {description} diff --git a/frontend/src/components/common/Avatar/index.tsx b/frontend/src/components/common/Avatar/index.tsx new file mode 100644 index 00000000..9e33be97 --- /dev/null +++ b/frontend/src/components/common/Avatar/index.tsx @@ -0,0 +1,34 @@ +import { ComponentProps } from 'react'; + +import styled from '@emotion/styled'; + +import Image from '@components/common/Image'; + +const AVATAR_SIZES = { + sm: 26, + md: 38, + lg: 56, + xl: 84, +}; + +interface Props extends ComponentProps { + size: keyof typeof AVATAR_SIZES; +} + +const Avatar = ({ size, ...rest }: Props) => { + return ( + + ); +}; + +const AvatarImage = styled(Image)` + border-radius: 50%; +`; + +export default Avatar; diff --git a/frontend/src/components/common/GroupArticleCard/index.tsx b/frontend/src/components/common/GroupArticleCard/index.tsx index 4ac4ab6a..279f3e51 100644 --- a/frontend/src/components/common/GroupArticleCard/index.tsx +++ b/frontend/src/components/common/GroupArticleCard/index.tsx @@ -1,5 +1,3 @@ -import Image from 'next/image'; - import ArticleTag from '@components/common/ArticleTag'; import { CapacityText, @@ -11,6 +9,7 @@ import { TagWrapper, TitleText, } from '@components/common/GroupArticleCard/styles'; +import Image from '@components/common/Image'; import StatCounter from '@components/common/StatCounter'; import { ArticleStatus, ArticleStatusKr } from '@constants/article'; import { CategoryKr } from '@constants/category'; @@ -32,7 +31,7 @@ const GroupArticleCard = ({ article }: Props) => { )} {'thumbnail-image'} { return myData ? ( - + diff --git a/frontend/src/components/common/Image/index.tsx b/frontend/src/components/common/Image/index.tsx new file mode 100644 index 00000000..5981611d --- /dev/null +++ b/frontend/src/components/common/Image/index.tsx @@ -0,0 +1,17 @@ +// eslint-disable-next-line import/no-named-default +import { ImageProps, default as NextImage } from 'next/image'; +import { useState } from 'react'; + +interface Props extends ImageProps { + defaultImgUrl?: string; + className?: string; +} + +const defaultImgPath = '/default.jpg'; + +const Image = ({ src, defaultImgUrl = defaultImgPath, ...rest }: Props) => { + const [imgSrc, setImgSrc] = useState(src); + return setImgSrc(defaultImgPath)} />; +}; + +export default Image; diff --git a/frontend/src/components/common/Profile/index.tsx b/frontend/src/components/common/Profile/index.tsx index a3714030..d72b7998 100644 --- a/frontend/src/components/common/Profile/index.tsx +++ b/frontend/src/components/common/Profile/index.tsx @@ -1,8 +1,8 @@ import { useTheme } from '@emotion/react'; import styled from '@emotion/styled'; -import { Avatar, AvatarProps } from '@mantine/core'; import { IconBrandGithub, IconLink } from '@tabler/icons'; +import Avatar from '@components/common/Avatar'; import { UserType } from '@typings/types'; interface Props { @@ -18,7 +18,7 @@ const Profile = ({ user }: Props) => { return ( - + {userName} {description} @@ -46,12 +46,6 @@ const ProfileWrapper = styled.div` width: 100%; `; -const StyledAvatar = styled(Avatar)` - width: 8.4rem; - height: 8.4rem; - border-radius: 4.2rem; -`; - const UserWrapper = styled.div` display: flex; flex-direction: column; diff --git a/frontend/src/constants/dummy.ts b/frontend/src/constants/dummy.ts index 06e86a2e..2d7e5214 100644 --- a/frontend/src/constants/dummy.ts +++ b/frontend/src/constants/dummy.ts @@ -11,7 +11,10 @@ const dummyArticlePreview: ArticlePreviewType = { category: Category.STUDY, commentCount: 31, scrapCount: 12, - thumbnail: 'https://avatars.githubusercontent.com/u/90585081?v=4', + thumbnail: { + originUrl: 'https://avatars.githubusercontent.com/u/90585081?v=4', + blurUrl: 'https://avatars.githubusercontent.com/u/90585081?v=4', + }, maxCapacity: 5, currentCapacity: 3, status: ArticleStatus.PROGRESS, @@ -31,7 +34,10 @@ const dummyArticle: ArticleType = { }, commentCount: 31, scrapCount: 12, - thumbnail: 'https://avatars.githubusercontent.com/u/90585081?v=4', + thumbnail: { + originUrl: 'https://avatars.githubusercontent.com/u/90585081?v=4', + blurUrl: 'https://avatars.githubusercontent.com/u/90585081?v=4', + }, maxCapacity: 5, currentCapacity: 3, status: ArticleStatus.PROGRESS, diff --git a/frontend/src/hooks/queries/useFetchMyWriteArticles.ts b/frontend/src/hooks/queries/useFetchMyWriteArticles.ts index de7109da..acb2cade 100644 --- a/frontend/src/hooks/queries/useFetchMyWriteArticles.ts +++ b/frontend/src/hooks/queries/useFetchMyWriteArticles.ts @@ -20,7 +20,7 @@ interface ArticleResponseType { const getMyWriteArticles = async (currentPage: number) => { const { data: { data }, - } = await clientAxios.get('/v1/group-articles/me', { + } = await clientAxios.get('/v1/my-group-articles', { params: { currentPage, countPerPage: 6 }, }); return data; diff --git a/frontend/src/pages/article/[id].tsx b/frontend/src/pages/article/[id].tsx index 2fe9632d..c8f34179 100644 --- a/frontend/src/pages/article/[id].tsx +++ b/frontend/src/pages/article/[id].tsx @@ -3,7 +3,7 @@ import { useState } from 'react'; import { useTheme } from '@emotion/react'; import styled from '@emotion/styled'; -import { Avatar, Progress, TypographyStylesProvider } from '@mantine/core'; +import { Progress, TypographyStylesProvider } from '@mantine/core'; import { IconList } from '@tabler/icons'; import MenuButton from '@components/article/MenuButton'; @@ -11,6 +11,7 @@ import ParticipantsModal from '@components/article/ParticipantsModal'; import ParticipateButton from '@components/article/ParticipateButton'; import ArticleLoading from '@components/common/ArticleLoading'; import ArticleTag from '@components/common/ArticleTag'; +import Avatar from '@components/common/Avatar'; import Header from '@components/common/Header'; import DetailTitle from '@components/common/Header/DetailTitle'; import PageLayout from '@components/common/PageLayout'; @@ -75,7 +76,11 @@ const ArticleDetail = () => { <> - + {article.author.userName} diff --git a/frontend/src/pages/article/write/index.tsx b/frontend/src/pages/article/write/index.tsx index 6e37ed24..4db7d164 100644 --- a/frontend/src/pages/article/write/index.tsx +++ b/frontend/src/pages/article/write/index.tsx @@ -57,7 +57,6 @@ const WritePage = () => { if (!possibleToSubmit) return; try { await clientAxios.post('/v1/group-articles', articleInput); - // TODO : mutation ๋กœ์ง ์ถ”๊ฐ€? showToast({ title: '๊ฒŒ์‹œ๊ธ€ ๋“ฑ๋ก ์™„๋ฃŒ!', message: '์ด์ œ ๋ชจ์ง‘ ์™„๋ฃŒ ๋˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ ค์ฃผ์„ธ์š”!', diff --git a/frontend/src/pages/my/edit.tsx b/frontend/src/pages/my/edit.tsx index 98c552b9..d77270b5 100644 --- a/frontend/src/pages/my/edit.tsx +++ b/frontend/src/pages/my/edit.tsx @@ -1,4 +1,3 @@ -import Image from 'next/image'; import { useRouter } from 'next/router'; import { ChangeEvent, useEffect, useState } from 'react'; @@ -8,6 +7,7 @@ import { IconCheck, IconUpload } from '@tabler/icons'; import Header from '@components/common/Header'; import DetailTitle from '@components/common/Header/DetailTitle'; +import Image from '@components/common/Image'; import PageLayout from '@components/common/PageLayout'; import TextInput from '@components/common/TextInput'; import useEditMyProfile from '@hooks/queries/useEditMyProfile'; @@ -98,6 +98,7 @@ const MyEditPage = () => { alt="profile-image" width={120} height={120} + defaultImgUrl="/avatar.jpg" /> )} diff --git a/frontend/src/typings/types.ts b/frontend/src/typings/types.ts index 1abfb0d9..90f0b1e7 100644 --- a/frontend/src/typings/types.ts +++ b/frontend/src/typings/types.ts @@ -5,6 +5,11 @@ import { Category } from '@constants/category'; import { Location } from '@constants/location'; import { Notification } from '@constants/notification'; +interface ArticleThumbnail { + originUrl: string; + blurUrl: string; +} + interface ArticlePreviewType { id: number; title: string; @@ -12,7 +17,7 @@ interface ArticlePreviewType { category: Category; commentCount: number; scrapCount: number; - thumbnail: string; + thumbnail: ArticleThumbnail; maxCapacity: number; currentCapacity: number; status: ArticleStatus; @@ -25,12 +30,17 @@ interface ArticleType extends ArticlePreviewType { } interface MyArticleType - extends Omit { + extends Omit< + ArticleType, + 'commentCount' | 'scrapCount' | 'currentCapacity' | 'author' | 'thumbnail' + > { chatUrl: string; + thumbnail: string; } -interface ArticlePostInputType - extends Pick {} +interface ArticlePostInputType extends Pick { + thumbnail: string; +} interface CommentType { id: number; diff --git a/frontend/src/utils/uploadImage.ts b/frontend/src/utils/uploadImage.ts index fac4eca3..9ebf8885 100644 --- a/frontend/src/utils/uploadImage.ts +++ b/frontend/src/utils/uploadImage.ts @@ -1,9 +1,23 @@ +import imageCompression from 'browser-image-compression'; + import { ImageUploadType } from '@typings/types'; import { clientAxios } from '@utils/commonAxios'; +const compressImage = async (file: File) => { + const options = { + maxSizeMB: 1, + maxWidthOrHeight: 1920, + useWebWorker: true, + }; + const compressedBlob = await imageCompression(file, options); + return new File([compressedBlob], file.name); +}; + const uploadImage = async (file: File) => { const formData = new FormData(); - formData.append('files', file); + const compressedImage = await compressImage(file); + formData.append('files', compressedImage); + const { data: { data: { 0: imageData }, From d1e12e930d48c97b6a310c775aa4309f4cf513ee Mon Sep 17 00:00:00 2001 From: Gakko <90585081+pythonstrup@users.noreply.github.com> Date: Wed, 7 Dec 2022 11:49:01 +0900 Subject: [PATCH 099/142] =?UTF-8?q?[Feature]=20=EB=82=B4=EA=B0=80=20?= =?UTF-8?q?=EC=B0=B8=EA=B0=80=ED=95=9C=20=EB=AA=A8=EC=9E=84=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20API=20(#216)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * โœจ feature: ๋‚ด๊ฐ€ ์ฐธ๊ฐ€ํ•œ ๋ชจ์ž„ ์กฐํšŒ DTO ์ž‘์„ฑ * โœจ feature: findMyGroup์˜ ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜ * โœจ feature: pagination์„ ์œ„ํ•œ ํ˜•ํƒœ๋กœ ๋ณ€๊ฒฝ * โœจ feature: pagination์„ ์œ„ํ•œ ํ˜•ํƒœ๋กœ ๋ณ€๊ฒฝ * โœจ feature: findMyGroup - pagination ์ ์šฉ - totalCount๋ฅผ ์–ป๋Š” ๋กœ์ง์€ ๋ถ„๋ฆฌ * โœจ feature: findMyGroup service ๋กœ์ง ์ž‘์„ฑ * ๐Ÿฅ… chore: controller pagination ์ ์šฉ * ๐Ÿฅ… chore: ๋ฆฌ๋ทฐ ๋ฐ˜์˜ * ๐Ÿฅ… chore: ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋ฐ˜์˜ * ๐Ÿฅ… chore: ๋ถˆํ•„์š”ํ•œ async/await ์ œ๊ฑฐ * ๐Ÿฅ… chore: ๋ถˆํ•„์š”ํ•œ async/await ์ œ๊ฑฐ * ๐Ÿฅ… chore: currentCapacity๊ฐ€ ๋ฌธ์ž์—ด๋กœ ๋“ค์–ด์˜ค๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ - response์—์„œ number๋กœ ๋ณ€ํ™˜ํ•ด์คŒ * ๐Ÿฅ… chore: ์ž๋ฃŒํ˜• ์—๋Ÿฌ ํ•ด๊ฒฐ --- .../dto/group-article-response.dto.ts | 103 ++++++++++++++++++ .../dto/my-group-request.dto.ts | 3 + .../dto/my-group-response.dto.ts | 12 ++ .../dto/my-group-result.interface.ts | 29 +++++ .../group-application.controller.ts | 19 ++++ .../group-application.repository.ts | 68 ++++++++++++ .../group-application.service.ts | 38 +++++-- 7 files changed, 264 insertions(+), 8 deletions(-) create mode 100644 backend/src/app/group-application/dto/group-article-response.dto.ts create mode 100644 backend/src/app/group-application/dto/my-group-request.dto.ts create mode 100644 backend/src/app/group-application/dto/my-group-response.dto.ts create mode 100644 backend/src/app/group-application/dto/my-group-result.interface.ts diff --git a/backend/src/app/group-application/dto/group-article-response.dto.ts b/backend/src/app/group-application/dto/group-article-response.dto.ts new file mode 100644 index 00000000..ffa3b40c --- /dev/null +++ b/backend/src/app/group-application/dto/group-article-response.dto.ts @@ -0,0 +1,103 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { + CATEGORY, + GROUP_STATUS, + LOCATION, +} from '@src/app/group-article/constants/group-article.constants'; +import { IMyGroupResult } from '@app/group-application/dto/my-group-result.interface'; + +export class GroupArticleResponse { + @ApiProperty({ + example: 1, + description: '๋ชจ์ž„๊ฒŒ์‹œํŒ ์•„์ด๋””', + required: true, + }) + groupArticleId: number; + + @ApiProperty({ + example: 'CS ์Šคํ„ฐ๋”” ๋ชจ์ž„', + description: '๋ชจ์ž„๊ฒŒ์‹œํŒ ์ œ๋ชฉ', + required: true, + }) + title: string; + + @ApiProperty({ + example: LOCATION.ONLINE, + description: '๋ชจ์ž„ ์œ„์น˜', + required: true, + }) + location: LOCATION; + + @ApiProperty({ + example: CATEGORY.STUDY, + description: '๋ชจ์ž„๊ฒŒ์‹œํŒ ์นดํ…Œ๊ณ ๋ฆฌ', + required: true, + }) + category: CATEGORY; + + @ApiProperty({ + example: 5, + description: '๋Œ“๊ธ€ ๊ฐœ์ˆ˜', + required: true, + }) + commentCount: number; + + @ApiProperty({ + example: 10, + description: '์Šคํฌ๋žฉํ•œ ๊ฐœ์ˆ˜', + required: true, + }) + scrapCount: number; + + @ApiProperty({ + example: + 'https://kr.object.ncloudstorage.com/uploads/images/1669276833875-64adca9c-94cd-4162-a53f-f75e951e39db', + description: '์ธ๋„ค์ผ ์ด๋ฏธ์ง€ ์ฃผ์†Œ', + required: true, + }) + thumbnail: string; + + @ApiProperty({ + example: 10, + description: '๋ชจ์ž„ ์ตœ๋Œ€ ์ธ์›', + required: true, + }) + maxCapacity: number; + + @ApiProperty({ + example: 5, + description: '๋ชจ์ž„ ํ˜„์žฌ ์ธ์›', + required: true, + }) + currentCapacity: number; + + @ApiProperty({ + example: GROUP_STATUS.PROGRESS, + description: '๋ชจ์ž„๊ฒŒ์‹œํŒ ๋ชจ์ง‘ ์ƒํƒœ', + required: true, + }) + status: GROUP_STATUS; + + @ApiProperty({ + example: '2022๋…„ 12์›” 1์ผ', + description: '๋ชจ์ž„๊ฒŒ์‹œํŒ ์ƒ์„ฑ ๋‚ ์งœ', + required: true, + }) + createdAt: Date; + + static from(myGroup: IMyGroupResult) { + const response = new GroupArticleResponse(); + response.groupArticleId = myGroup.groupArticleId; + response.title = myGroup.title; + response.location = myGroup.location; + response.category = myGroup.category; + response.commentCount = myGroup.commentCount; + response.scrapCount = myGroup.scrapCount; + response.thumbnail = myGroup.thumbnail; + response.maxCapacity = myGroup.maxCapacity; + response.currentCapacity = Number(myGroup.currentCapacity); + response.status = myGroup.status; + response.createdAt = myGroup.createdAt; + return response; + } +} diff --git a/backend/src/app/group-application/dto/my-group-request.dto.ts b/backend/src/app/group-application/dto/my-group-request.dto.ts new file mode 100644 index 00000000..a5e9a339 --- /dev/null +++ b/backend/src/app/group-application/dto/my-group-request.dto.ts @@ -0,0 +1,3 @@ +import { PageRequest } from '@src/common/util/page-request'; + +export class MyGroupRequest extends PageRequest {} diff --git a/backend/src/app/group-application/dto/my-group-response.dto.ts b/backend/src/app/group-application/dto/my-group-response.dto.ts new file mode 100644 index 00000000..590509bd --- /dev/null +++ b/backend/src/app/group-application/dto/my-group-response.dto.ts @@ -0,0 +1,12 @@ +import { GroupArticleResponse } from '@app/group-application/dto/group-article-response.dto'; +import { ApiProperty } from '@nestjs/swagger'; +import { PageResult } from '@src/common/util/page-result'; +import { Expose } from 'class-transformer'; + +export class MyGroupResponse extends PageResult { + @Expose() + @ApiProperty({ type: GroupArticleResponse, isArray: true }) + get data() { + return this._data; + } +} diff --git a/backend/src/app/group-application/dto/my-group-result.interface.ts b/backend/src/app/group-application/dto/my-group-result.interface.ts new file mode 100644 index 00000000..88ef9391 --- /dev/null +++ b/backend/src/app/group-application/dto/my-group-result.interface.ts @@ -0,0 +1,29 @@ +import { + CATEGORY, + GROUP_STATUS, + LOCATION, +} from '@src/app/group-article/constants/group-article.constants'; + +export interface IMyGroupResult { + groupArticleId: number; + + title: string; + + location: LOCATION; + + category: CATEGORY; + + commentCount: number; + + scrapCount: number; + + thumbnail: string; + + maxCapacity: number; + + currentCapacity: string; + + status: GROUP_STATUS; + + createdAt: Date; +} diff --git a/backend/src/app/group-application/group-application.controller.ts b/backend/src/app/group-application/group-application.controller.ts index 49a8c735..8ac3fc99 100644 --- a/backend/src/app/group-application/group-application.controller.ts +++ b/backend/src/app/group-application/group-application.controller.ts @@ -22,6 +22,8 @@ import { GroupNotFoundException } from '@app/group-application/exception/group-n import { CannotApplicateException } from '@src/app/group-application/exception/cannot-applicate.exception'; import { CheckJoiningGroupResonse } from '@app/group-application/dto/check-joining-group-response.dto'; import { ApplicationNotFoundException } from '@app/group-application/exception/application-not-found.exception'; +import { MyGroupResponse } from '@app/group-application/dto/my-group-response.dto'; +import { MyGroupRequest } from '@app/group-application/dto/my-group-request.dto'; import { ApplicationWithUserInfoResponse } from '@app/group-application/dto/application-with-user-info-response.dto'; @Controller('group-applications') @@ -97,4 +99,21 @@ export class GroupApplicationController { const groupArticleId = groupApplicationRequest.groupArticleId; await this.groupApplicationService.cancelJoinedGroup(user, groupArticleId); } + + @Get('me') + @ApiSuccessResponse(HttpStatus.OK, MyGroupResponse) + async findMyGroup(@CurrentUser() user: User, @Query() query: MyGroupRequest) { + const { response, count } = await this.groupApplicationService.findMyGroup({ + user, + limit: query.getLimit(), + offset: query.getOffset(), + }); + const data = new MyGroupResponse( + count, + query.currentPage, + query.countPerPage, + response, + ); + return ResponseEntity.OK_WITH_DATA(data); + } } diff --git a/backend/src/app/group-application/group-application.repository.ts b/backend/src/app/group-application/group-application.repository.ts index 6cda3614..4f68e184 100644 --- a/backend/src/app/group-application/group-application.repository.ts +++ b/backend/src/app/group-application/group-application.repository.ts @@ -2,7 +2,12 @@ import { Injectable } from '@nestjs/common'; import { DataSource, IsNull, Repository } from 'typeorm'; import { GroupApplication } from '@app/group-application/entity/group-application.entity'; import { GROUP_APPLICATION_STATUS } from '@app/group-article/constants/group-article.constants'; +import { Group } from '@app/group-article/entity/group.entity'; +import { GroupCategory } from '@app/group-article/entity/group-category.entity'; +import { Scrap } from '@app/scrap/entity/scrap.entity'; +import { Comment } from '@app/comment/entity/comment.entity'; import { GroupArticle } from '@app/group-article/entity/group-article.entity'; +import { IMyGroupResult } from '@app/group-application/dto/my-group-result.interface'; @Injectable() export class GroupApplicationRepository extends Repository { @@ -22,6 +27,69 @@ export class GroupApplicationRepository extends Repository { return this.findOneBy({ userId, groupId, status }); } + findMyGroupCount(userId: number) { + return this.countBy({ userId, deletedAt: IsNull() }); + } + + async findMyGroup({ + userId, + limit, + offset, + }: { + userId: number; + limit: number; + offset: number; + }) { + const groupApplications = await this.find({ + where: { + userId, + deletedAt: IsNull(), + }, + take: limit, + skip: offset, + }); + + return this.createQueryBuilder('groupApplication') + .select([ + 'groupArticle.id as groupArticleId', + 'groupArticle.title as title', + 'group.location as location', + 'groupCategory.name as category', + 'COUNT(DISTINCT comment.id) as commentCount', + 'COUNT(DISTINCT scrap.id) as scrapCount', + 'group.thumbnail as thumbnail', + 'group.maxCapacity as maxCapacity', + 'COUNT(DISTINCT groupApplication.id) as currentCapacity', + 'group.status as status', + 'groupArticle.createdAt as createdAt', + ]) + .leftJoin(Group, 'group', 'groupApplication.group_id = group.id') + .leftJoin( + GroupCategory, + 'groupCategory', + 'groupCategory.id = group.category.id AND groupCategory.deletedAt IS NULL', + ) + .leftJoin( + GroupArticle, + 'groupArticle', + 'groupArticle.id = group.article_id', + ) + .leftJoin( + Comment, + 'comment', + 'groupArticle.id = comment.articleId AND comment.deletedAt IS NULL', + ) + .leftJoin(Scrap, 'scrap', 'groupArticle.id = scrap.articleId') + .where('groupArticle.deletedAt IS NULL') + .andWhere('group.id IN (:...ids)', { + ids: groupApplications.map( + (groupApplication) => groupApplication.groupId, + ), + }) + .groupBy('group.id') + .getRawMany(); + } + findAllApplicationByGroupWithUser(groupId: number) { return this.find({ relations: { diff --git a/backend/src/app/group-application/group-application.service.ts b/backend/src/app/group-application/group-application.service.ts index 90cf5447..d0e1e5f2 100644 --- a/backend/src/app/group-application/group-application.service.ts +++ b/backend/src/app/group-application/group-application.service.ts @@ -13,6 +13,7 @@ import { ApplicationNotFoundException } from '@app/group-application/exception/a import { UserInfo } from '@app/group-application/dto/user-info.dto'; import { ApplicationWithUserInfoResponse } from '@app/group-application/dto/application-with-user-info-response.dto'; import { NotAuthorException } from '@app/group-application/exception/not-author.exception'; +import { GroupArticleResponse } from '@app/group-application/dto/group-article-response.dto'; @Injectable() export class GroupApplicationService { @@ -25,7 +26,7 @@ export class GroupApplicationService { const groupArticle = await this.groupArticleRepository.findById( groupArticleId, ); - await this.validateGroupArticle(groupArticle); + this.validateGroupArticle(groupArticle); const group = groupArticle.group; const application = await this.findGroupApplication(user, group); @@ -37,7 +38,7 @@ export class GroupApplicationService { }; } - private async findGroupApplication(user: User, group: Group) { + private findGroupApplication(user: User, group: Group) { return this.groupApplicationRepository.findByUserIdAndGroupIdAndStatus( user.id, group.id, @@ -50,13 +51,13 @@ export class GroupApplicationService { await this.getGroupApplicationContext(user, groupArticleId); this.validateUserTarget(user, groupArticle); - await this.validateRegisterForJoining(application); + this.validateRegisterForJoining(application); const groupApplication = GroupApplication.create(user, group); return this.groupApplicationRepository.save(groupApplication); } - private async validateGroupArticle(groupArticle: GroupArticle) { + private validateGroupArticle(groupArticle: GroupArticle) { if (!groupArticle) { throw new GroupNotFoundException(); } @@ -68,7 +69,7 @@ export class GroupApplicationService { } } - private async validateRegisterForJoining(application: GroupApplication) { + private validateRegisterForJoining(application: GroupApplication) { if (application) { throw new DuplicateApplicationException(); } @@ -90,12 +91,12 @@ export class GroupApplicationService { ); this.validateUserTarget(user, groupArticle); - await this.validateRegisterForCanceling(user, application); + this.validateRegisterForCanceling(user, application); await this.deleteApplication(application); } - private async validateRegisterForCanceling( + private validateRegisterForCanceling( user: User, application: GroupApplication, ) { @@ -113,6 +114,27 @@ export class GroupApplicationService { await this.groupApplicationRepository.save(application); } + public async findMyGroup({ + user, + limit, + offset, + }: { + user: User; + limit: number; + offset: number; + }) { + const result = await this.groupApplicationRepository.findMyGroup({ + userId: user.id, + limit, + offset, + }); + const response = result.map((value) => GroupArticleResponse.from(value)); + const count = await this.groupApplicationRepository.findMyGroupCount( + user.id, + ); + return { response, count }; + } + async getAllParticipants(user: User, groupArticleId: number) { const { group } = await this.getGroupApplicationContext( user, @@ -138,6 +160,6 @@ export class GroupApplicationService { }, ); - return await Promise.all(applicationWithUserInfoList); + return Promise.all(applicationWithUserInfoList); } } From ffd9161a4190e7d2251df3adcae2719c39ac57cc Mon Sep 17 00:00:00 2001 From: Kim Myeongil <67570061+username1103@users.noreply.github.com> Date: Wed, 7 Dec 2022 13:45:31 +0900 Subject: [PATCH 100/142] =?UTF-8?q?[Feature]=20=EC=95=8C=EB=A6=BC=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20API=20=EC=B6=94=EA=B0=80=20=20(#222)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :sparkles: feature: ์•Œ๋ฆผ๋ฐ์ดํ„ฐ ์กฐํšŒ ์ฟผ๋ฆฌ ์ถ”๊ฐ€ * :sparkles: feature: ์•Œ๋ฆผ ์กฐํšŒ API ์ถ”๊ฐ€ * :bug: fix: UserNotificationRepository provider ๋“ฑ๋ก --- .../dto/get-user-notification-result.dto.ts | 43 +++++++++++++++++++ .../get-user-notifications-response.dto.ts | 12 ++++++ .../notification/notification.controller.ts | 34 +++++++++++++++ .../app/notification/notification.module.ts | 2 + .../user-notification.repository.ts | 38 ++++++++++++++++ 5 files changed, 129 insertions(+) create mode 100644 backend/src/app/notification/dto/get-user-notification-result.dto.ts create mode 100644 backend/src/app/notification/dto/get-user-notifications-response.dto.ts create mode 100644 backend/src/app/notification/repository/user-notification.repository.ts diff --git a/backend/src/app/notification/dto/get-user-notification-result.dto.ts b/backend/src/app/notification/dto/get-user-notification-result.dto.ts new file mode 100644 index 00000000..7d11b08f --- /dev/null +++ b/backend/src/app/notification/dto/get-user-notification-result.dto.ts @@ -0,0 +1,43 @@ +import { NOTIFICATION_TYPE } from '@app/notification/constants/notification.constants'; +import { UserNotification } from '@app/notification/entity/user-notification.entity'; +import { ApiProperty } from '@nestjs/swagger'; + +export class GetUserNotificationResult { + @ApiProperty({ example: 1, description: '์•Œ๋ฆผ์•„์ด๋””' }) + id: number; + + @ApiProperty({ + example: NOTIFICATION_TYPE.GROUP_SUCCEED, + description: '์•Œ๋ฆผํƒ€์ž…', + }) + type: NOTIFICATION_TYPE; + + @ApiProperty({ example: '๋ชจ์ž„์ด ์„ฑ์‚ฌ๋˜์—ˆ์–ด์š”', description: '์•Œ๋ฆผ ์ œ๋ชฉ' }) + title: string; + + @ApiProperty({ example: 'ํ› ๊ถˆ ๋จน์์‹œ๋‹ค', description: '์•Œ๋ฆผ ๋ถ€์ œ๋ชฉ' }) + subTitle: string; + + // TODO: ์šฐ์„ ์€ ์•Œ๋ฆผ์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ groupArticleId๋กœ ๊ณ ์ •์ด๋ผ ๊ฐ’์œผ๋กœ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. + // ์ถ”ํ›„ ์œ ๋™์ ์ธ ๋ฐ์ดํ„ฐ๋Š” ๊ทธ ํƒ€์ž…์— ๋งž๊ฒŒ ๋ฐ์ดํ„ฐ ์ •์˜ํ•˜๊ณ  ๋ณ€ํ™˜๋  ์ˆ˜ ์žˆ๋„๋ก ๊ฐœ๋ฐœ ํ•„์š”. + @ApiProperty({ example: 1, description: '๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€ ์•„์ด๋””' }) + groupArticleId: number; + + @ApiProperty({ + example: '2022-11-27T16:19:51.706Z', + description: '์•Œ๋ฆผ ์ƒ์„ฑ ๋‚ ์งœ', + }) + createdAt: Date; + + static async from(userNotification: UserNotification) { + const result = new GetUserNotificationResult(); + result.id = userNotification.id; + const notification = await userNotification.notification; + result.type = notification.type; + result.title = notification.contents.title; + result.subTitle = notification.contents.subTitle; + result.groupArticleId = notification.contents.groupArticleId; + result.createdAt = userNotification.createdAt; + return result; + } +} diff --git a/backend/src/app/notification/dto/get-user-notifications-response.dto.ts b/backend/src/app/notification/dto/get-user-notifications-response.dto.ts new file mode 100644 index 00000000..2f2d0d83 --- /dev/null +++ b/backend/src/app/notification/dto/get-user-notifications-response.dto.ts @@ -0,0 +1,12 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { Expose } from 'class-transformer'; +import { PageResult } from '@common/util/page-result'; +import { GetUserNotificationResult } from '@app/notification/dto/get-user-notification-result.dto'; + +export class GetUserNotificationsResponse extends PageResult { + @Expose() + @ApiProperty({ type: GetUserNotificationResult, isArray: true }) + get data() { + return this._data; + } +} diff --git a/backend/src/app/notification/notification.controller.ts b/backend/src/app/notification/notification.controller.ts index 68130555..71c4b5e6 100644 --- a/backend/src/app/notification/notification.controller.ts +++ b/backend/src/app/notification/notification.controller.ts @@ -6,6 +6,7 @@ import { Param, ParseIntPipe, Patch, + Query, } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; import { NotificationSettingRepository } from '@app/notification/repository/notification-setting.repository'; @@ -20,6 +21,10 @@ import { PatchNotificationSettingRequest } from '@app/notification/dto/patch-not import { ApiErrorResponse } from '@decorator/api-error-response.decorator'; import { NotificationSettingNotFoundException } from '@app/notification/exception/notification-setting-not-found.exception'; import { NotAccessibleException } from '@app/notification/exception/not-accessible.exception'; +import { PageRequest } from '@common/util/page-request'; +import { UserNotificationRepository } from '@app/notification/repository/user-notification.repository'; +import { GetUserNotificationsResponse } from '@app/notification/dto/get-user-notifications-response.dto'; +import { GetUserNotificationResult } from '@app/notification/dto/get-user-notification-result.dto'; @Controller('notifications') @ApiTags('Notification') @@ -27,8 +32,37 @@ export class NotificationController { constructor( private readonly notificationService: NotificationService, private readonly notificationSettingRepository: NotificationSettingRepository, + private readonly userNotificationRepository: UserNotificationRepository, ) {} + @Get('/') + @JwtAuth() + @ApiSuccessResponse(HttpStatus.OK, GetUserNotificationsResponse) + async getNotifications( + @CurrentUser() user: User, + @Query() query: PageRequest, + ) { + const [userNotifications, count] = + await this.userNotificationRepository.getNotifications({ + user, + limit: query.getLimit(), + offset: query.getOffset(), + }); + + return ResponseEntity.OK_WITH_DATA( + new GetUserNotificationsResponse( + count, + query.currentPage, + query.countPerPage, + await Promise.all( + userNotifications.map((userNotification) => + GetUserNotificationResult.from(userNotification), + ), + ), + ), + ); + } + @Get('settings') @JwtAuth() @ApiSuccessResponse(HttpStatus.OK, GetNotificationSettingsResponse, { diff --git a/backend/src/app/notification/notification.module.ts b/backend/src/app/notification/notification.module.ts index 8efb2eef..2b4ae44d 100644 --- a/backend/src/app/notification/notification.module.ts +++ b/backend/src/app/notification/notification.module.ts @@ -5,6 +5,7 @@ import { NotificationService } from '@app/notification/notification.service'; import { NotificationListener } from '@app/notification/notification.listener'; import { GroupApplicationModule } from '@app/group-application/group-application.module'; import { CommentModule } from '@app/comment/comment.module'; +import { UserNotificationRepository } from '@app/notification/repository/user-notification.repository'; @Module({ imports: [GroupApplicationModule, CommentModule], @@ -12,6 +13,7 @@ import { CommentModule } from '@app/comment/comment.module'; providers: [ NotificationService, NotificationSettingRepository, + UserNotificationRepository, NotificationListener, ], }) diff --git a/backend/src/app/notification/repository/user-notification.repository.ts b/backend/src/app/notification/repository/user-notification.repository.ts new file mode 100644 index 00000000..3ab5be2a --- /dev/null +++ b/backend/src/app/notification/repository/user-notification.repository.ts @@ -0,0 +1,38 @@ +import { DataSource, IsNull, Repository } from 'typeorm'; +import { UserNotification } from '@app/notification/entity/user-notification.entity'; +import { Injectable } from '@nestjs/common'; +import { User } from '@app/user/entity/user.entity'; + +@Injectable() +export class UserNotificationRepository extends Repository { + constructor(private readonly dataSource: DataSource) { + const baseRepository = dataSource.getRepository(UserNotification); + super( + baseRepository.target, + baseRepository.manager, + baseRepository.queryRunner, + ); + } + + getNotifications({ + user, + limit, + offset, + }: { + user: User; + limit: number; + offset: number; + }) { + return this.findAndCount({ + relations: { + notification: true, + }, + where: { + userId: user.id, + deletedAt: IsNull(), + }, + take: limit, + skip: offset, + }); + } +} From 8484484d7ae4937f3329bdc9971a1c4bf2c9c7c7 Mon Sep 17 00:00:00 2001 From: MinGyeong Park <37508296+kong430@users.noreply.github.com> Date: Wed, 7 Dec 2022 15:23:00 +0900 Subject: [PATCH 101/142] =?UTF-8?q?:sparkles:=20feature:=20=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=20=ED=8E=98=EC=9D=B4=EC=A7=80=EC=97=90=20ssr=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9=20(#223)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hooks/queries/useFetchGroupArticles.ts | 2 +- frontend/src/pages/_app.tsx | 48 ++++++++++--------- frontend/src/pages/index.tsx | 18 ++++++- 3 files changed, 43 insertions(+), 25 deletions(-) diff --git a/frontend/src/hooks/queries/useFetchGroupArticles.ts b/frontend/src/hooks/queries/useFetchGroupArticles.ts index 3b9772f4..fc9ea0aa 100644 --- a/frontend/src/hooks/queries/useFetchGroupArticles.ts +++ b/frontend/src/hooks/queries/useFetchGroupArticles.ts @@ -19,7 +19,7 @@ interface ArticleResponseType { data: ArticlePagingData; } -const getGroupArticles = async ( +export const getGroupArticles = async ( currentPage: number, category: Category, location: Location, diff --git a/frontend/src/pages/_app.tsx b/frontend/src/pages/_app.tsx index dd53d069..462b6102 100644 --- a/frontend/src/pages/_app.tsx +++ b/frontend/src/pages/_app.tsx @@ -2,7 +2,7 @@ import { AppProps } from 'next/app'; import Head from 'next/head'; import { useEffect, useState } from 'react'; -import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { Hydrate, QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; import { v4 as uuid } from 'uuid'; @@ -16,16 +16,18 @@ import CommonStyles from '@styles/CommonStyles'; const isDevelopment = process.env.NODE_ENV === 'development'; -const queryClient = new QueryClient({ - defaultOptions: { - queries: { - retry: false, - }, - }, -}); - -export default function App({ Component, pageProps }: AppProps) { +export default function App({ Component, pageProps }: AppProps<{ dehydratedState: unknown }>) { const [shouldRender, setShouldRender] = useState(!isDevelopment); + const [queryClient] = useState( + () => + new QueryClient({ + defaultOptions: { + queries: { + retry: false, + }, + }, + }) + ); useEffect(() => { if (isDevelopment) { @@ -45,18 +47,20 @@ export default function App({ Component, pageProps }: AppProps) { - - - - - - - - - - - - + + + + + + + + + + + + + + ); diff --git a/frontend/src/pages/index.tsx b/frontend/src/pages/index.tsx index 4e9d1252..1b9fdb38 100644 --- a/frontend/src/pages/index.tsx +++ b/frontend/src/pages/index.tsx @@ -1,7 +1,8 @@ import Link from 'next/link'; import { useMemo, useState } from 'react'; -import { useQueryClient } from '@tanstack/react-query'; +import { QueryClient, dehydrate, useQueryClient } from '@tanstack/react-query'; +import { GetServerSideProps } from 'next'; import { useTheme } from '@emotion/react'; import styled from '@emotion/styled'; @@ -19,9 +20,22 @@ import PageLayout from '@components/common/PageLayout'; import { Category, CategoryKr } from '@constants/category'; import { Location, LocationKr } from '@constants/location'; import { PAGE_TITLE } from '@constants/pageTitle'; -import useFetchGroupArticles from '@hooks/queries/useFetchGroupArticles'; +import useFetchGroupArticles, { getGroupArticles } from '@hooks/queries/useFetchGroupArticles'; import useIntersect from '@hooks/useIntersect'; +export const getServerSideProps: GetServerSideProps = async () => { + const queryClient = new QueryClient(); + await queryClient.prefetchInfiniteQuery( + ['articles', null, null, false], + ({ pageParam = 1 }) => getGroupArticles(pageParam, null, null, false), + { + getNextPageParam: (lastPage) => + lastPage.totalPage === lastPage.currentPage ? undefined : lastPage.currentPage + 1, + } + ); + return { props: { dehydratedState: JSON.parse(JSON.stringify(dehydrate(queryClient))) } }; +}; + const Main = () => { const { colors: { gray }, From 26f31496fbe18288d62a7049bb125eef842f33d9 Mon Sep 17 00:00:00 2001 From: MinGyeong Park <37508296+kong430@users.noreply.github.com> Date: Wed, 7 Dec 2022 16:10:45 +0900 Subject: [PATCH 102/142] =?UTF-8?q?[Fix]=20ssh-action=20=EB=B2=84=EC=A0=84?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD=20(#237)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :bug: fix: ssh-action version up * :bug: fix: ๋ฒ„์ „ ๋ช…์‹œ --- .github/workflows/backend-dev-cd.yml | 2 +- .github/workflows/frontend-cd.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/backend-dev-cd.yml b/.github/workflows/backend-dev-cd.yml index b426d558..ec2b9696 100644 --- a/.github/workflows/backend-dev-cd.yml +++ b/.github/workflows/backend-dev-cd.yml @@ -63,7 +63,7 @@ jobs: status: ${{ job.status }} steps: - name: deploy - uses: appleboy/ssh-action@master + uses: appleboy/ssh-action@v0.1.4 with: host: ${{secrets.BACKEND_DEV_REMOTE_IP}} username: ${{secrets.BACKEND_DEV_REMOTE_SSH_ID}} diff --git a/.github/workflows/frontend-cd.yml b/.github/workflows/frontend-cd.yml index 21f9bead..8d2687d1 100644 --- a/.github/workflows/frontend-cd.yml +++ b/.github/workflows/frontend-cd.yml @@ -60,7 +60,7 @@ jobs: status: ${{ job.status }} steps: - name: deploy - uses: appleboy/ssh-action@master + uses: appleboy/ssh-action@v0.1.4 with: host: ${{secrets.FRONTEND_DEV_REMOTE_IP}} username: ${{secrets.FRONTEND_DEV_REMOTE_SSH_ID}} From c38f32b8f6dd680ccff090b208f40402f735b05b Mon Sep 17 00:00:00 2001 From: yangseungchan Date: Wed, 7 Dec 2022 19:14:19 +0900 Subject: [PATCH 103/142] =?UTF-8?q?[BUGFIX]=20=ED=97=A4=EB=8D=94=EC=83=81?= =?UTF-8?q?=EB=8B=A8=20=EB=93=9C=EB=9E=8D=EB=8B=A4=EC=9A=B4=20=EB=B2=84?= =?UTF-8?q?=EA=B7=B8=20=ED=95=B4=EA=B2=B0=20(#228)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ๐Ÿ› fix: Avatar๊ฐ€ ref๋ฅผ ๋ฐ›๋„๋ก ์ˆ˜์ • * ๐Ÿฅ… chore: ํƒ€์ดํ•‘ ์ˆ˜์ • --- .../src/components/common/Avatar/index.tsx | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/frontend/src/components/common/Avatar/index.tsx b/frontend/src/components/common/Avatar/index.tsx index 9e33be97..e2c9d578 100644 --- a/frontend/src/components/common/Avatar/index.tsx +++ b/frontend/src/components/common/Avatar/index.tsx @@ -1,4 +1,4 @@ -import { ComponentProps } from 'react'; +import { ComponentProps, forwardRef } from 'react'; import styled from '@emotion/styled'; @@ -15,17 +15,21 @@ interface Props extends ComponentProps { size: keyof typeof AVATAR_SIZES; } -const Avatar = ({ size, ...rest }: Props) => { +const Avatar = forwardRef(({ size, ...rest }, ref) => { return ( - +
    + +
    ); -}; +}); + +Avatar.displayName = 'Avatar'; const AvatarImage = styled(Image)` border-radius: 50%; From 42b83d168789e65556afd8cb96e47872f31488f8 Mon Sep 17 00:00:00 2001 From: yangseungchan Date: Wed, 7 Dec 2022 19:27:36 +0900 Subject: [PATCH 104/142] =?UTF-8?q?[Feature]=20GroupArticle=20=EC=8D=B8?= =?UTF-8?q?=EB=84=A4=EC=9D=BC=EC=97=90=20blur=20=EC=B2=98=EB=A6=AC=20(#231?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * โœจ feature: GroupArticle ์ธ๋„ค์ผ์— blur ํšจ๊ณผ ์ ์šฉ * ๐Ÿฅ… chore: ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ฐœ์ˆ˜๋ฅผ 6๊ฐœ๋กœ ์กฐ์ • --- .../common/GroupArticleCard/index.tsx | 39 +++++++++++-------- .../hooks/queries/useFetchGroupArticles.ts | 2 +- 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/frontend/src/components/common/GroupArticleCard/index.tsx b/frontend/src/components/common/GroupArticleCard/index.tsx index 279f3e51..ad548e58 100644 --- a/frontend/src/components/common/GroupArticleCard/index.tsx +++ b/frontend/src/components/common/GroupArticleCard/index.tsx @@ -22,42 +22,47 @@ interface Props { } const GroupArticleCard = ({ article }: Props) => { + const { + status, + thumbnail: { originUrl, blurUrl }, + + category, + location, + title, + maxCapacity, + currentCapacity, + commentCount, + } = article; return ( - {article.status !== ArticleStatus.PROGRESS && ( + {status !== ArticleStatus.PROGRESS && ( ๋ชจ์ง‘ ์ข…๋ฃŒ )} {'thumbnail-image'} - - - + + + - {article.title} + {title} - {article.maxCapacity}๋ช… ์ค‘ {article.currentCapacity}๋ช… ์ฐธ์—ฌ์ค‘ + {maxCapacity}๋ช… ์ค‘ {currentCapacity}๋ช… ์ฐธ์—ฌ์ค‘ - + ); diff --git a/frontend/src/hooks/queries/useFetchGroupArticles.ts b/frontend/src/hooks/queries/useFetchGroupArticles.ts index fc9ea0aa..cc579565 100644 --- a/frontend/src/hooks/queries/useFetchGroupArticles.ts +++ b/frontend/src/hooks/queries/useFetchGroupArticles.ts @@ -29,7 +29,7 @@ export const getGroupArticles = async ( const { data: { data }, } = await clientAxios('/v1/group-articles/search', { - params: { category, location, status, currentPage, countPerPage: 5 }, + params: { category, location, status, currentPage, countPerPage: 6 }, }); return data; }; From 1bf6dc997930f9159250412cfab9a89c95187425 Mon Sep 17 00:00:00 2001 From: Gakko <90585081+pythonstrup@users.noreply.github.com> Date: Thu, 8 Dec 2022 00:46:16 +0900 Subject: [PATCH 105/142] =?UTF-8?q?[Feature]=20=EB=AA=A8=EC=A7=91=20API=20?= =?UTF-8?q?=EC=98=88=EC=99=B8=EC=B2=98=EB=A6=AC=20=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?=EB=B0=8F=20=EC=95=8C=EB=A6=BC=EB=8B=AC=EA=B8=B0=20(#235)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * โœจ feature: ๋ชจ์ง‘์™„๋ฃŒ, ๋ชจ์ง‘์ค‘๋‹จ ์‹œ์˜ ์‹ ์ฒญ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ * โœจ feature: ๋ชจ์ง‘ ์™„๋ฃŒ ์‹œ ์•Œ๋ฆผ ์„ค์ • * ๐Ÿฅ… chore: ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์˜๊ฒฌ์— ๋”ฐ๋ฅธ ์ฝ”๋“œ ์ˆ˜์ • - Forbidden์€ ๊ถŒํ•œ๊ณผ ๊ด€๋ จ๋œ ์—๋Ÿฌ์ด๊ธฐ ๋•Œ๋ฌธ์— BadRequestException์œผ๋กœ ๋ณ€๊ฒฝ --- .../exception/closed-group.exception.ts | 7 ++ .../group-application.controller.ts | 5 +- .../group-application.repository.ts | 4 + .../group-application.service.ts | 98 ++++++++++++++----- 4 files changed, 91 insertions(+), 23 deletions(-) create mode 100644 backend/src/app/group-application/exception/closed-group.exception.ts diff --git a/backend/src/app/group-application/exception/closed-group.exception.ts b/backend/src/app/group-application/exception/closed-group.exception.ts new file mode 100644 index 00000000..63583a36 --- /dev/null +++ b/backend/src/app/group-application/exception/closed-group.exception.ts @@ -0,0 +1,7 @@ +import { BadRequestException } from '@nestjs/common'; + +export class ClosedGroupException extends BadRequestException { + constructor(message = '๋ชจ์ž„์ด ๋ชจ์ง‘์™„๋ฃŒ ํ˜น์€ ๋ชจ์ง‘์ค‘๋‹จ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.') { + super({ status: 'CLOSED_GROUP', message }); + } +} diff --git a/backend/src/app/group-application/group-application.controller.ts b/backend/src/app/group-application/group-application.controller.ts index 8ac3fc99..c2ea261c 100644 --- a/backend/src/app/group-application/group-application.controller.ts +++ b/backend/src/app/group-application/group-application.controller.ts @@ -25,6 +25,7 @@ import { ApplicationNotFoundException } from '@app/group-application/exception/a import { MyGroupResponse } from '@app/group-application/dto/my-group-response.dto'; import { MyGroupRequest } from '@app/group-application/dto/my-group-request.dto'; import { ApplicationWithUserInfoResponse } from '@app/group-application/dto/application-with-user-info-response.dto'; +import { ClosedGroupException } from '@app/group-application/exception/closed-group.exception'; @Controller('group-applications') @JwtAuth() @@ -40,6 +41,7 @@ export class GroupApplicationController { DuplicateApplicationException, CannotApplicateException, GroupNotFoundException, + ClosedGroupException, ) async joinGroup( @CurrentUser() user: User, @@ -54,7 +56,7 @@ export class GroupApplicationController { return ResponseEntity.CREATED_WITH_DATA(data); } - @Get('/status') + @Get('status') @ApiSuccessResponse(HttpStatus.OK, CheckJoiningGroupResonse) @ApiErrorResponse(GroupNotFoundException) async checkJoinedGroup( @@ -91,6 +93,7 @@ export class GroupApplicationController { CannotApplicateException, GroupNotFoundException, ApplicationNotFoundException, + ClosedGroupException, ) async cancelJoinedGroup( @CurrentUser() user: User, diff --git a/backend/src/app/group-application/group-application.repository.ts b/backend/src/app/group-application/group-application.repository.ts index 4f68e184..288bc52c 100644 --- a/backend/src/app/group-application/group-application.repository.ts +++ b/backend/src/app/group-application/group-application.repository.ts @@ -31,6 +31,10 @@ export class GroupApplicationRepository extends Repository { return this.countBy({ userId, deletedAt: IsNull() }); } + findApplicationCountByGroup(groupId: number) { + return this.countBy({ groupId, deletedAt: IsNull() }); + } + async findMyGroup({ userId, limit, diff --git a/backend/src/app/group-application/group-application.service.ts b/backend/src/app/group-application/group-application.service.ts index d0e1e5f2..d7724ac3 100644 --- a/backend/src/app/group-application/group-application.service.ts +++ b/backend/src/app/group-application/group-application.service.ts @@ -1,7 +1,10 @@ import { Injectable } from '@nestjs/common'; import { GroupApplicationRepository } from '@app/group-application/group-application.repository'; import { GroupApplication } from '@app/group-application/entity/group-application.entity'; -import { GROUP_APPLICATION_STATUS } from '@app/group-article/constants/group-article.constants'; +import { + GROUP_APPLICATION_STATUS, + GROUP_STATUS, +} from '@app/group-article/constants/group-article.constants'; import { DuplicateApplicationException } from '@src/app/group-application/exception/duplicate-application.exception'; import { GroupNotFoundException } from '@app/group-application/exception/group-not-found.exception'; import { CannotApplicateException } from '@app/group-application/exception/cannot-applicate.exception'; @@ -14,12 +17,16 @@ import { UserInfo } from '@app/group-application/dto/user-info.dto'; import { ApplicationWithUserInfoResponse } from '@app/group-application/dto/application-with-user-info-response.dto'; import { NotAuthorException } from '@app/group-application/exception/not-author.exception'; import { GroupArticleResponse } from '@app/group-application/dto/group-article-response.dto'; +import { ClosedGroupException } from '@app/group-application/exception/closed-group.exception'; +import { EventEmitter2 } from '@nestjs/event-emitter'; +import { GroupSucceedEvent } from '@app/notification/event/group-succeed.event'; @Injectable() export class GroupApplicationService { constructor( private readonly groupApplicationRepository: GroupApplicationRepository, private readonly groupArticleRepository: GroupArticleRepository, + private readonly eventEmitter: EventEmitter2, ) {} private async getGroupApplicationContext(user: User, groupArticleId: number) { @@ -38,6 +45,12 @@ export class GroupApplicationService { }; } + private validateGroupArticle(groupArticle: GroupArticle) { + if (!groupArticle) { + throw new GroupNotFoundException(); + } + } + private findGroupApplication(user: User, group: Group) { return this.groupApplicationRepository.findByUserIdAndGroupIdAndStatus( user.id, @@ -49,30 +62,65 @@ export class GroupApplicationService { public async joinGroup(user: User, groupArticleId: number) { const { groupArticle, group, application } = await this.getGroupApplicationContext(user, groupArticleId); - - this.validateUserTarget(user, groupArticle); - this.validateRegisterForJoining(application); + const groupApplicationCount = + await this.groupApplicationRepository.findApplicationCountByGroup( + group.id, + ); + this.validateJoinGroup({ + currentUser: user, + groupArticle, + application, + group, + groupApplicationCount, + }); const groupApplication = GroupApplication.create(user, group); - return this.groupApplicationRepository.save(groupApplication); - } - - private validateGroupArticle(groupArticle: GroupArticle) { - if (!groupArticle) { - throw new GroupNotFoundException(); - } + const result = this.groupApplicationRepository.save(groupApplication); + this.checkGroupComplete(groupArticle, groupApplicationCount); + return result; } - private validateUserTarget(currentUser: User, groupArticle: GroupArticle) { + private validateJoinGroup({ + currentUser, + groupArticle, + application, + group, + groupApplicationCount, + }: { + currentUser: User; + groupArticle: GroupArticle; + application: GroupApplication; + group: Group; + groupApplicationCount: number; + }) { if (groupArticle.isAuthor(currentUser)) { throw new CannotApplicateException(); } - } - private validateRegisterForJoining(application: GroupApplication) { if (application) { throw new DuplicateApplicationException(); } + + if ( + group.maxCapacity <= groupApplicationCount || + group.status !== GROUP_STATUS.PROGRESS + ) { + throw new ClosedGroupException(); + } + } + + private checkGroupComplete( + groupArticle: GroupArticle, + groupApplicationCount: number, + ) { + if (groupArticle.group.maxCapacity >= groupApplicationCount + 1) { + groupArticle.group.complete(); + this.groupArticleRepository.save(groupArticle); + this.eventEmitter.emit( + 'group.succeed', + new GroupSucceedEvent(groupArticle), + ); + } } public async checkJoinedGroup(user: User, groupArticleId: number) { @@ -89,24 +137,30 @@ export class GroupApplicationService { user, groupArticleId, ); - - this.validateUserTarget(user, groupArticle); - this.validateRegisterForCanceling(user, application); - + this.validateForCanceling(user, groupArticle, application); await this.deleteApplication(application); } - private validateRegisterForCanceling( - user: User, + private validateForCanceling( + currentUser: User, + groupArticle: GroupArticle, application: GroupApplication, ) { + if (groupArticle.isAuthor(currentUser)) { + throw new CannotApplicateException(); + } + if (!application) { throw new ApplicationNotFoundException(); } - if (application.userId !== user.id) { + if (application.userId !== currentUser.id) { throw new NotAuthorException(); } + + if (groupArticle.group.status !== GROUP_STATUS.PROGRESS) { + throw new ClosedGroupException(); + } } private async deleteApplication(application: GroupApplication) { @@ -135,7 +189,7 @@ export class GroupApplicationService { return { response, count }; } - async getAllParticipants(user: User, groupArticleId: number) { + public async getAllParticipants(user: User, groupArticleId: number) { const { group } = await this.getGroupApplicationContext( user, groupArticleId, From 57e76b5ad5afb29076500bd0571cb666067e70da Mon Sep 17 00:00:00 2001 From: Kim Myeongil <67570061+username1103@users.noreply.github.com> Date: Thu, 8 Dec 2022 01:16:37 +0900 Subject: [PATCH 106/142] =?UTF-8?q?[Feature]=20=EC=95=8C=EB=A6=BC=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C=20API=20=EC=B6=94=EA=B0=80=20(#227)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :sparkles: feature: ์•Œ๋ฆผ์‚ญ์ œ ๋ฉ”์†Œ๋“œ ์ถ”๊ฐ€ * :sparkles: feature: DELETE /v1/notifications/:id - ์•Œ๋ฆผ ์‚ญ์ œ API ์ถ”๊ฐ€ - ์•Œ๋ฆผ์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ UserNotificationNotFoundException ๋ฐ˜ํ™˜ - ์ž์‹ ์˜ ์•Œ๋ฆผ์ด ์•„๋‹Œ ๊ฒฝ์šฐ NotAccessibleException ๋ฐ˜ํ™˜ --- .../entity/user-notification.entity.ts | 9 +++++++++ .../user-notification-not-found.exception.ts | 7 +++++++ .../notification/notification.controller.ts | 13 +++++++++++++ .../app/notification/notification.service.ts | 18 ++++++++++++++++++ 4 files changed, 47 insertions(+) create mode 100644 backend/src/app/notification/exception/user-notification-not-found.exception.ts diff --git a/backend/src/app/notification/entity/user-notification.entity.ts b/backend/src/app/notification/entity/user-notification.entity.ts index 09c7405b..03b5ac0f 100644 --- a/backend/src/app/notification/entity/user-notification.entity.ts +++ b/backend/src/app/notification/entity/user-notification.entity.ts @@ -10,6 +10,7 @@ import { } from 'typeorm'; import { User } from '@app/user/entity/user.entity'; import { Notification } from '@app/notification/entity/notification.entity'; +import { NotAccessibleException } from '@app/notification/exception/not-accessible.exception'; @Entity({ name: 'user_notification' }) @Index('UNIQUE_user_id_notification_id', ['userId', 'notificationId'], { @@ -50,4 +51,12 @@ export class UserNotification { userNotification.notificationId = notification.id; return userNotification; } + + remove(user: User) { + if (user.id !== this.userId) { + throw new NotAccessibleException(); + } + + this.deletedAt = new Date(); + } } diff --git a/backend/src/app/notification/exception/user-notification-not-found.exception.ts b/backend/src/app/notification/exception/user-notification-not-found.exception.ts new file mode 100644 index 00000000..53e3159d --- /dev/null +++ b/backend/src/app/notification/exception/user-notification-not-found.exception.ts @@ -0,0 +1,7 @@ +import { NotFoundException } from '@nestjs/common'; + +export class UserNotificationNotFoundException extends NotFoundException { + constructor(message = 'ํ•ด๋‹นํ•˜๋Š” ์•Œ๋ฆผ ๋‚ด์—ญ์ด ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค') { + super({ status: 'USER_NOTIFICATION_NOT_FOUND', message }); + } +} diff --git a/backend/src/app/notification/notification.controller.ts b/backend/src/app/notification/notification.controller.ts index 71c4b5e6..40af80ad 100644 --- a/backend/src/app/notification/notification.controller.ts +++ b/backend/src/app/notification/notification.controller.ts @@ -1,6 +1,7 @@ import { Body, Controller, + Delete, Get, HttpStatus, Param, @@ -25,6 +26,7 @@ import { PageRequest } from '@common/util/page-request'; import { UserNotificationRepository } from '@app/notification/repository/user-notification.repository'; import { GetUserNotificationsResponse } from '@app/notification/dto/get-user-notifications-response.dto'; import { GetUserNotificationResult } from '@app/notification/dto/get-user-notification-result.dto'; +import { UserNotificationNotFoundException } from '@app/notification/exception/user-notification-not-found.exception'; @Controller('notifications') @ApiTags('Notification') @@ -95,4 +97,15 @@ export class NotificationController { ) { await this.notificationService.updateStatus(user, id, status); } + + @Delete(':id') + @JwtAuth() + @ApiSuccessResponse(HttpStatus.NO_CONTENT) + @ApiErrorResponse(NotAccessibleException, UserNotificationNotFoundException) + async remove( + @CurrentUser() user: User, + @Param('id', ParseIntPipe) id: number, + ) { + await this.notificationService.remove(user, id); + } } diff --git a/backend/src/app/notification/notification.service.ts b/backend/src/app/notification/notification.service.ts index 4a71cc5f..2aa495dc 100644 --- a/backend/src/app/notification/notification.service.ts +++ b/backend/src/app/notification/notification.service.ts @@ -3,11 +3,15 @@ import { NotificationSettingRepository } from '@app/notification/repository/noti import { User } from '@app/user/entity/user.entity'; import { NotificationSettingNotFoundException } from '@app/notification/exception/notification-setting-not-found.exception'; import { NOTIFICATION_SETTING_STATUS } from '@app/notification/constants/notification.constants'; +import { UserNotificationRepository } from '@app/notification/repository/user-notification.repository'; +import { IsNull } from 'typeorm'; +import { UserNotificationNotFoundException } from '@app/notification/exception/user-notification-not-found.exception'; @Injectable() export class NotificationService { constructor( private readonly notificationSettingRepository: NotificationSettingRepository, + private readonly userNotificationRepository: UserNotificationRepository, ) {} async updateStatus( @@ -28,4 +32,18 @@ export class NotificationService { await this.notificationSettingRepository.save(notificationSetting); } + + async remove(user: User, id: number) { + const userNotification = await this.userNotificationRepository.findOneBy({ + id, + deletedAt: IsNull(), + }); + if (!userNotification) { + throw new UserNotificationNotFoundException(); + } + + userNotification.remove(user); + + await this.userNotificationRepository.save(userNotification); + } } From c1e552d38c72a8e68198f0a79e3968d54553f9c2 Mon Sep 17 00:00:00 2001 From: MinGyeong Park <37508296+kong430@users.noreply.github.com> Date: Thu, 8 Dec 2022 11:00:15 +0900 Subject: [PATCH 107/142] =?UTF-8?q?[Feature]=20=EC=8B=A0=EC=B2=AD=EC=9E=90?= =?UTF-8?q?=20=EB=AA=A9=EB=A1=9D=20=EC=A1=B0=ED=9A=8C=20(#234)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :sparkles: feature: ParticipantType ์ •์˜ ๋ฐ get api ์—ฐ๊ฒฐ * :sparkles: feature: ์ฐธ๊ฐ€ ์‹ ์ฒญ/์ทจ์†Œ ์‹œ ์ฐธ๊ฐ€์ž ๋ชฉ๋ก invalidate * :bug: fix: ์ฐธ๊ฐ€ ์ทจ์†Œ/์‹ ์ฒญ ์‹œ toast ๋ณด์ด์ง€ ์•Š๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ * :sparkles: feature: ๊ฒŒ์‹œ๊ธ€ ๋‚ด author ํ”„๋กœํ•„ ํด๋ฆญ ์‹œ ํ”„๋กœํ•„ํŽ˜์ด์ง€๋กœ ์ด๋™ * :sparkles: feature: ์ธ์› ๋‹ค ์ฐผ์„ ์‹œ [๋ชจ์ง‘ ๋งˆ๊ฐ] button show * :pencil2: fix: url ๊ฐ€์ ธ์˜ค๋Š” ์กฐ๊ฑด ์ˆ˜์ • article, participants, isJoined๊ฐ€ truthyํ•œ ๊ฐ’์ผ ๋•Œ button status๋ฅผ ํ™•์ธํ•˜์—ฌ url fetch * :sparkles: feature: ์ฐธ๊ฐ€ ์‹ ์ฒญ, ์ทจ์†Œ ์‹œ modal * :goal_net: chore: ๋ถˆํ•„์š”ํ•œ type ๋ช…์‹œ ์ œ๊ฑฐ --- .../ParticipantItem/index.tsx | 11 +-- .../article/ParticipantsModal/index.tsx | 4 +- .../ParticipateButton/ApplyButton/index.tsx | 31 ++++----- .../ParticipateButton/CancelButton/index.tsx | 34 ++++------ frontend/src/constants/dummy.ts | 4 +- frontend/src/hooks/queries/useApplyGroup.ts | 6 +- .../src/hooks/queries/useCancelApplication.ts | 6 +- .../queries/useFetchApplicationStatus.ts | 2 +- frontend/src/hooks/queries/useFetchArticle.ts | 2 +- .../src/hooks/queries/useFetchParticipants.ts | 28 ++++++++ frontend/src/pages/article/[id].tsx | 68 ++++++++++--------- frontend/src/pages/user/[id].tsx | 3 +- frontend/src/typings/types.ts | 3 + 13 files changed, 115 insertions(+), 87 deletions(-) create mode 100644 frontend/src/hooks/queries/useFetchParticipants.ts diff --git a/frontend/src/components/article/ParticipantsModal/ParticipantItem/index.tsx b/frontend/src/components/article/ParticipantsModal/ParticipantItem/index.tsx index 94b5bf16..b94c6f4f 100644 --- a/frontend/src/components/article/ParticipantsModal/ParticipantItem/index.tsx +++ b/frontend/src/components/article/ParticipantsModal/ParticipantItem/index.tsx @@ -1,3 +1,5 @@ +import Link from 'next/link'; + import { useTheme } from '@emotion/react'; import styled from '@emotion/styled'; import { IconExternalLink } from '@tabler/icons'; @@ -24,10 +26,11 @@ const ParticipantItem = ({ participant }: Props) => { {description}
    - {/* TODO ํด๋ฆญ ์‹œ ์œ ์ € ํ”„๋กœํ•„ ํŽ˜์ด์ง€๋กœ ์ด๋™ */} - - - + + + + + ); }; diff --git a/frontend/src/components/article/ParticipantsModal/index.tsx b/frontend/src/components/article/ParticipantsModal/index.tsx index d5b2157f..a42f3e21 100644 --- a/frontend/src/components/article/ParticipantsModal/index.tsx +++ b/frontend/src/components/article/ParticipantsModal/index.tsx @@ -4,10 +4,10 @@ import { Modal } from '@mantine/core'; import ParticipantItem from '@components/article/ParticipantsModal/ParticipantItem'; import EmptyMessage from '@components/common/EmptyMessage'; import Joiner from '@components/common/Joiner'; -import { UserType } from '@typings/types'; +import { ParticipantType } from '@typings/types'; interface Props { - participants: Array>; + participants: ParticipantType[]; open: boolean; onClose: () => void; } diff --git a/frontend/src/components/article/ParticipateButton/ApplyButton/index.tsx b/frontend/src/components/article/ParticipateButton/ApplyButton/index.tsx index a5701706..d0e1f04d 100644 --- a/frontend/src/components/article/ParticipateButton/ApplyButton/index.tsx +++ b/frontend/src/components/article/ParticipateButton/ApplyButton/index.tsx @@ -1,8 +1,10 @@ +import { useState } from 'react'; + import { Button } from '@mantine/core'; -import { showNotification } from '@mantine/notifications'; -import { IconCheck } from '@tabler/icons'; +import ConfirmModal from '@components/common/ConfirmModal'; import useApplyGroup from '@hooks/queries/useApplyGroup'; +import { showToast } from '@utils/toast'; interface Props { groupArticleId: number; @@ -10,27 +12,14 @@ interface Props { const ApplyButton = ({ groupArticleId }: Props) => { const { mutate: applyGroup } = useApplyGroup(groupArticleId); + const [confirmModalOpen, setConfirmModalOpen] = useState(false); const applyForRecruitment = () => { applyGroup(groupArticleId, { onSuccess: () => { - // TODO ๊ณตํ†ต toast message ๋กœ์ง ์ ์šฉ - showNotification({ - color: 'indigo', + showToast({ title: '์ฐธ๊ฐ€ ์‹ ์ฒญ ์™„๋ฃŒ!', message: '๋ชจ์ง‘์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์กฐ๊ธˆ๋งŒ ๊ธฐ๋‹ค๋ ค์ฃผ์„ธ์š”.', - icon: , - autoClose: 4000, - styles: (theme) => ({ - root: { - paddingTop: '1.6rem', - paddingBottom: '1.6rem', - }, - title: { - fontSize: theme.fontSizes.lg, - fontWeight: 700, - }, - }), }); }, }); @@ -38,9 +27,15 @@ const ApplyButton = ({ groupArticleId }: Props) => { return ( <> - + setConfirmModalOpen(false)} + /> ); }; diff --git a/frontend/src/components/article/ParticipateButton/CancelButton/index.tsx b/frontend/src/components/article/ParticipateButton/CancelButton/index.tsx index 0b1d66fc..cad4b115 100644 --- a/frontend/src/components/article/ParticipateButton/CancelButton/index.tsx +++ b/frontend/src/components/article/ParticipateButton/CancelButton/index.tsx @@ -1,8 +1,10 @@ +import { useState } from 'react'; + import { Button } from '@mantine/core'; -import { showNotification } from '@mantine/notifications'; -import { IconCheck } from '@tabler/icons'; +import ConfirmModal from '@components/common/ConfirmModal'; import useCancelApplication from '@hooks/queries/useCancelApplication'; +import { showToast } from '@utils/toast'; interface Props { groupArticleId: number; @@ -10,37 +12,27 @@ interface Props { const CancelButton = ({ groupArticleId }: Props) => { const { mutate: cancelApplication } = useCancelApplication(groupArticleId); + const [confirmModalOpen, setConfirmModalOpen] = useState(false); const handleClickCancelButton = () => { cancelApplication(groupArticleId, { onSuccess: () => { - // TODO ๊ณตํ†ต toast message ๋กœ์ง ์ ์šฉ - showNotification({ - color: 'indigo', - title: '์‹ ์ฒญ ์ทจ์†Œ ์™„๋ฃŒ!', - message: '๋‹ค๋ฅธ ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€๋„ ํ™•์ธํ•ด๋ณด์„ธ์š”.', - icon: , - autoClose: 4000, - styles: (theme) => ({ - root: { - paddingTop: '1.6rem', - paddingBottom: '1.6rem', - }, - title: { - fontSize: theme.fontSizes.lg, - fontWeight: 700, - }, - }), - }); + showToast({ title: '์‹ ์ฒญ ์ทจ์†Œ ์™„๋ฃŒ!', message: '๋‹ค๋ฅธ ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€๋„ ํ™•์ธํ•ด๋ณด์„ธ์š”.' }); }, }); }; return ( <> - + setConfirmModalOpen(false)} + /> ); }; diff --git a/frontend/src/constants/dummy.ts b/frontend/src/constants/dummy.ts index 2d7e5214..7e237220 100644 --- a/frontend/src/constants/dummy.ts +++ b/frontend/src/constants/dummy.ts @@ -1,7 +1,7 @@ import { ArticleStatus } from '@constants/article'; import { Category } from '@constants/category'; import { Location } from '@constants/location'; -import { ArticlePreviewType, ArticleType, UserType } from '@typings/types'; +import { ArticlePreviewType, ArticleType, ParticipantType, UserType } from '@typings/types'; // TODO ๊ฐœ๋ฐœ์šฉ dummy data, ์ถ”ํ›„ ์‚ญ์ œ const dummyArticlePreview: ArticlePreviewType = { @@ -44,7 +44,7 @@ const dummyArticle: ArticleType = { createdAt: '2021-04-03T18:45:19Z', }; -const dummyParticipants: Array> = [ +const dummyParticipants: ParticipantType[] = [ { id: 1, userName: 'test1', diff --git a/frontend/src/hooks/queries/useApplyGroup.ts b/frontend/src/hooks/queries/useApplyGroup.ts index a4d315e4..d74bcfb0 100644 --- a/frontend/src/hooks/queries/useApplyGroup.ts +++ b/frontend/src/hooks/queries/useApplyGroup.ts @@ -9,9 +9,9 @@ const applyGroup = (groupArticleId: number) => const useApplyGroup = (groupArticleId: number) => { const queryClient = useQueryClient(); return useAuthMutation(applyGroup, { - onSuccess: async () => { - await queryClient.invalidateQueries(['applicationStatus', groupArticleId]); - // TODO ์‹ ์ฒญ ์ธ์› invalidate + onSuccess: () => { + void queryClient.invalidateQueries(['applicationStatus', groupArticleId]); + void queryClient.invalidateQueries(['participants', groupArticleId]); }, }); }; diff --git a/frontend/src/hooks/queries/useCancelApplication.ts b/frontend/src/hooks/queries/useCancelApplication.ts index 7eb6982f..6c3179c7 100644 --- a/frontend/src/hooks/queries/useCancelApplication.ts +++ b/frontend/src/hooks/queries/useCancelApplication.ts @@ -9,9 +9,9 @@ const cancelApplication = (groupArticleId: number) => const useCancelApplication = (groupArticleId: number) => { const queryClient = useQueryClient(); return useAuthMutation(cancelApplication, { - onSuccess: async () => { - await queryClient.invalidateQueries(['applicationStatus', groupArticleId]); - // TODO ์‹ ์ฒญ ์ธ์› invalidate + onSuccess: () => { + void queryClient.invalidateQueries(['applicationStatus', groupArticleId]); + void queryClient.invalidateQueries(['participants', groupArticleId]); }, }); }; diff --git a/frontend/src/hooks/queries/useFetchApplicationStatus.ts b/frontend/src/hooks/queries/useFetchApplicationStatus.ts index 9ccc1ea9..bc0bdfbc 100644 --- a/frontend/src/hooks/queries/useFetchApplicationStatus.ts +++ b/frontend/src/hooks/queries/useFetchApplicationStatus.ts @@ -17,7 +17,7 @@ const useFetchApplicationStatus = (groupArticleId: number) => { } ); - return { isJoined: data }; + return { data }; }; export default useFetchApplicationStatus; diff --git a/frontend/src/hooks/queries/useFetchArticle.ts b/frontend/src/hooks/queries/useFetchArticle.ts index 2365d993..81700da5 100644 --- a/frontend/src/hooks/queries/useFetchArticle.ts +++ b/frontend/src/hooks/queries/useFetchArticle.ts @@ -23,7 +23,7 @@ const useFetchArticle = (id: number) => { } ); - return { article: data, isLoading }; + return { data, isLoading }; }; export default useFetchArticle; diff --git a/frontend/src/hooks/queries/useFetchParticipants.ts b/frontend/src/hooks/queries/useFetchParticipants.ts new file mode 100644 index 00000000..6982cd80 --- /dev/null +++ b/frontend/src/hooks/queries/useFetchParticipants.ts @@ -0,0 +1,28 @@ +import { AxiosError } from 'axios'; + +import useAuthQuery from '@hooks/useAuthQuery'; +import { ApiResponse, ParticipantType } from '@typings/types'; +import { clientAxios } from '@utils/commonAxios'; + +interface ParticipantsResponseType { + id: number; + user: ParticipantType; +} + +const useFetchParticipants = (groupArticleId: number) => { + const { data } = useAuthQuery< + ApiResponse, + AxiosError, + ParticipantType[] + >( + ['participants', groupArticleId], + () => clientAxios.get(`/v1/group-applications/participants`, { params: { groupArticleId } }), + { + select: (res) => res.data.data.map((participant) => participant.user), + } + ); + + return { data }; +}; + +export default useFetchParticipants; diff --git a/frontend/src/pages/article/[id].tsx b/frontend/src/pages/article/[id].tsx index c8f34179..f9b79a10 100644 --- a/frontend/src/pages/article/[id].tsx +++ b/frontend/src/pages/article/[id].tsx @@ -1,3 +1,4 @@ +import Link from 'next/link'; import { useRouter } from 'next/router'; import { useState } from 'react'; @@ -19,7 +20,6 @@ import StatCounter from '@components/common/StatCounter'; import { ArticleStatus, ArticleStatusKr } from '@constants/article'; import { CategoryKr } from '@constants/category'; import { CATEGORY_COLOR, LOCATION_COLOR, STATUS_COLOR } from '@constants/color'; -import { dummyParticipants } from '@constants/dummy'; import { LocationKr } from '@constants/location'; import { PAGE_TITLE } from '@constants/pageTitle'; import { ParticipateButtonStatus } from '@constants/participateButton'; @@ -27,6 +27,7 @@ import useFetchApplicationStatus from '@hooks/queries/useFetchApplicationStatus' import useFetchArticle from '@hooks/queries/useFetchArticle'; import useFetchChatUrl from '@hooks/queries/useFetchChatUrl'; import useFetchMyInfo from '@hooks/queries/useFetchMyInfo'; +import useFetchParticipants from '@hooks/queries/useFetchParticipants'; import { ArticleType } from '@typings/types'; import dateTimeFormat from '@utils/dateTime'; @@ -37,12 +38,16 @@ const ArticleDetail = () => { const router = useRouter(); const articleId = Number(router.query.id); const { data: myInfo } = useFetchMyInfo(); - const { article } = useFetchArticle(articleId); - const { isJoined } = useFetchApplicationStatus(articleId); - const { url } = useFetchChatUrl( - articleId, - getButtonStatus(article, isJoined) === ParticipateButtonStatus.LINK - ); + const { data: article } = useFetchArticle(articleId); + const { data: isJoined } = useFetchApplicationStatus(articleId); + const { data: participants } = useFetchParticipants(articleId); + + const isUrlAvailable = + !!article && + !!participants && + isJoined && + getButtonStatus(article, participants.length, isJoined) === ParticipateButtonStatus.LINK; + const { url } = useFetchChatUrl(articleId, isUrlAvailable); const [participantsModalOpen, setParticipantsModalOpen] = useState(false); @@ -68,19 +73,20 @@ const ArticleDetail = () => { } > <> - - {/* TODO ๋กœ๋”ฉ ์ฒ˜๋ฆฌ */} - {!article || isJoined === undefined || !myInfo ? ( - - ) : ( - <> + {!article || isJoined === undefined || !myInfo || !participants ? ( + + ) : ( + <> + - + + + {article.author.userName} @@ -108,7 +114,7 @@ const ArticleDetail = () => { ๋ชจ์ง‘ ํ˜„ํ™ฉ - {article.currentCapacity}๋ช… / {article.maxCapacity}๋ช… + {participants.length}๋ช… / {article.maxCapacity}๋ช… setParticipantsModalOpen(true)}> @@ -127,7 +133,7 @@ const ArticleDetail = () => { {article.author.id !== myInfo.id && ( @@ -138,15 +144,14 @@ const ArticleDetail = () => {
    ๋Œ“๊ธ€์˜์—ญ
    - - )} -
    - {/* TODO participants API ์š”์ฒญ */} - setParticipantsModalOpen(false)} - /> +
    + setParticipantsModalOpen(false)} + /> + + )} r @@ -156,8 +161,9 @@ const ArticleDetail = () => { export default ArticleDetail; -const getButtonStatus = (article: ArticleType, isJoined: boolean) => { - if (!article || isJoined === undefined) return ParticipateButtonStatus.CLOSED; +const getButtonStatus = (article: ArticleType, currentCapacity: number, isJoined: boolean) => { + if (!article || isJoined === undefined || article.maxCapacity === currentCapacity) + return ParticipateButtonStatus.CLOSED; switch (article.status) { case ArticleStatus.PROGRESS: diff --git a/frontend/src/pages/user/[id].tsx b/frontend/src/pages/user/[id].tsx index 4b1b131d..b714d181 100644 --- a/frontend/src/pages/user/[id].tsx +++ b/frontend/src/pages/user/[id].tsx @@ -11,7 +11,8 @@ import useFetchProfile from '@hooks/queries/useFetchProfile'; const UserProfile = () => { const { - query: { id, isReady }, + query: { id }, + isReady, } = useRouter(); const { profile, isFetching } = useFetchProfile(Number(id)); diff --git a/frontend/src/typings/types.ts b/frontend/src/typings/types.ts index 90f0b1e7..a8a355f7 100644 --- a/frontend/src/typings/types.ts +++ b/frontend/src/typings/types.ts @@ -66,6 +66,8 @@ interface UserType { blogUrl: string; } +interface ParticipantType extends Omit {} + interface ImageUploadType { key: string; url: string; @@ -92,4 +94,5 @@ export type { UserType, ImageUploadType, NotificationType, + ParticipantType, }; From 41279342396c2d067e011f38c6440c306a3da590 Mon Sep 17 00:00:00 2001 From: Gakko <90585081+pythonstrup@users.noreply.github.com> Date: Thu, 8 Dec 2022 11:02:47 +0900 Subject: [PATCH 108/142] =?UTF-8?q?[Feature]=20=EB=A1=9C=EA=B7=B8=EC=95=84?= =?UTF-8?q?=EC=9B=83=20API=20#247?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ๋กœ๊ทธ์•„์›ƒ API ๊ตฌ์„ฑ - ์ฟ ํ‚ค ์‚ญ์ œ --- backend/src/app/auth/auth.controller.ts | 17 ++++++++++++++++- .../group-application.service.ts | 2 +- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/backend/src/app/auth/auth.controller.ts b/backend/src/app/auth/auth.controller.ts index 6a51a5e6..8770ebb2 100644 --- a/backend/src/app/auth/auth.controller.ts +++ b/backend/src/app/auth/auth.controller.ts @@ -1,4 +1,11 @@ -import { Controller, Get, Res, UseGuards } from '@nestjs/common'; +import { + Controller, + Get, + HttpStatus, + Post, + Res, + UseGuards, +} from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; import { Response } from 'express'; import { GithubAuthGuard } from '@app/auth/github-auth.guard'; @@ -8,6 +15,7 @@ import { AuthService } from '@app/auth/auth.service'; import { JwtTokenService } from '@common/module/jwt-token/jwt-token.service'; import { GithubConfigService } from '@config/github/config.service'; import { CookieConfigService } from '@config/cookie/config.service'; +import { ApiSuccessResponse } from '@src/common/decorator/api-success-resposne.decorator'; @Controller('/auth') @ApiTags('Auth') @@ -59,4 +67,11 @@ export class AuthController { response.redirect(this.githubConfigService.redirectUrl); } + + @Post('logout') + @ApiSuccessResponse(HttpStatus.NO_CONTENT) + logout(@Res({ passthrough: true }) response: Response) { + response.clearCookie('access_token'); + response.clearCookie('refresh_token'); + } } diff --git a/backend/src/app/group-application/group-application.service.ts b/backend/src/app/group-application/group-application.service.ts index d7724ac3..a360824f 100644 --- a/backend/src/app/group-application/group-application.service.ts +++ b/backend/src/app/group-application/group-application.service.ts @@ -113,7 +113,7 @@ export class GroupApplicationService { groupArticle: GroupArticle, groupApplicationCount: number, ) { - if (groupArticle.group.maxCapacity >= groupApplicationCount + 1) { + if (groupArticle.group.maxCapacity <= groupApplicationCount + 1) { groupArticle.group.complete(); this.groupArticleRepository.save(groupArticle); this.eventEmitter.emit( From 549c614db064361285a681356c83417cd8efdfe6 Mon Sep 17 00:00:00 2001 From: MinGyeong Park <37508296+kong430@users.noreply.github.com> Date: Thu, 8 Dec 2022 11:47:31 +0900 Subject: [PATCH 109/142] =?UTF-8?q?[Feature]=20=EB=AA=A8=EB=B0=94=EC=9D=BC?= =?UTF-8?q?=20=ED=8D=BC=EC=8A=A4=ED=8A=B8=3F=20=EB=94=94=EC=9E=90=EC=9D=B8?= =?UTF-8?q?=20=EC=A0=81=EC=9A=A9=20(#242)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :sparkles: feature: max-width๋ฅผ 600์œผ๋กœ ์ง€์ •ํ•˜์—ฌ ๋ชจ๋ฐ”์ผ ํผ์ŠคํŠธ ๋””์ž์ธ ์ ์šฉ * :goal_net: chore: ํ…Œ์ŠคํŠธํ•ด๋ณด๋Š๋ผ ์ ์šฉํ–ˆ๋˜ ์ฝ”๋“œ ๋˜๋Œ๋ฆผ * :recycle: refactor: background width ์ˆ˜์ • * :goal_net: chore: ๋ถˆํ•„์š”ํ•œ media-query ์ œ๊ฑฐ --- .../components/common/PageLayout/index.tsx | 1 + frontend/src/pages/_app.tsx | 14 ++ frontend/src/pages/index.tsx | 140 +++++++++--------- frontend/src/styles/global.css | 3 + 4 files changed, 89 insertions(+), 69 deletions(-) create mode 100644 frontend/src/styles/global.css diff --git a/frontend/src/components/common/PageLayout/index.tsx b/frontend/src/components/common/PageLayout/index.tsx index 0bc80618..719ed679 100644 --- a/frontend/src/components/common/PageLayout/index.tsx +++ b/frontend/src/components/common/PageLayout/index.tsx @@ -24,6 +24,7 @@ const PageLayout = ({ header, footer, hasFloatingUtil, children }: Props) => { }; const PageWrapper = styled.div` + max-width: 600px; width: 100%; height: 100%; min-height: 100vh; diff --git a/frontend/src/pages/_app.tsx b/frontend/src/pages/_app.tsx index 462b6102..864178da 100644 --- a/frontend/src/pages/_app.tsx +++ b/frontend/src/pages/_app.tsx @@ -1,6 +1,7 @@ import { AppProps } from 'next/app'; import Head from 'next/head'; import { useEffect, useState } from 'react'; +import '@styles/global.css'; import { Hydrate, QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; @@ -55,7 +56,9 @@ export default function App({ Component, pageProps }: AppProps<{ dehydratedState + + @@ -65,3 +68,14 @@ export default function App({ Component, pageProps }: AppProps<{ dehydratedState ); } + +const Background = () => { + return ( +
    + ); +}; diff --git a/frontend/src/pages/index.tsx b/frontend/src/pages/index.tsx index 1b9fdb38..ff0b0121 100644 --- a/frontend/src/pages/index.tsx +++ b/frontend/src/pages/index.tsx @@ -64,76 +64,78 @@ const Main = () => { }; return ( - - } - rightNode={} - /> - } - footer={} - hasFloatingUtil - > - - - ({ - value: category, - label: CategoryKr[category], - })), - ]} - value={selectedCategory} - onChange={(value) => setSelectedCategory(value as Category)} - size="md" - maxDropdownHeight={200} + <> + + } + rightNode={} /> - ({ - value: location, - label: LocationKr[location], - })), - ]} - value={selectedLocation} - onChange={(value) => setSelectedLocation(value as Location)} - size="md" - maxDropdownHeight={200} - /> - - - setProgressChecked(event.currentTarget.checked)} - label="๋ชจ์ง‘ ์ค‘์ธ ๋ชจ์ž„๋งŒ ๋ณด๊ธฐ" - size="md" - /> - - - - - {articles.length > 0 ? ( - - {articles.map((article) => ( - - - - - - ))} -
    -
    - ) : ( - - )} -
    -
    + } + footer={} + hasFloatingUtil + > + + + ({ + value: category, + label: CategoryKr[category], + })), + ]} + value={selectedCategory} + onChange={(value) => setSelectedCategory(value as Category)} + size="md" + maxDropdownHeight={200} + /> + ({ + value: location, + label: LocationKr[location], + })), + ]} + value={selectedLocation} + onChange={(value) => setSelectedLocation(value as Location)} + size="md" + maxDropdownHeight={200} + /> + + + setProgressChecked(event.currentTarget.checked)} + label="๋ชจ์ง‘ ์ค‘์ธ ๋ชจ์ž„๋งŒ ๋ณด๊ธฐ" + size="md" + /> + + + + + {articles.length > 0 ? ( + + {articles.map((article) => ( + + + + + + ))} +
    +
    + ) : ( + + )} +
    + + ); }; diff --git a/frontend/src/styles/global.css b/frontend/src/styles/global.css new file mode 100644 index 00000000..a5a39229 --- /dev/null +++ b/frontend/src/styles/global.css @@ -0,0 +1,3 @@ +#__next { + display: flex; +} From 252b9833092a61b2c4bc901a0b9a36fdd92c8b96 Mon Sep 17 00:00:00 2001 From: yangseungchan Date: Thu, 8 Dec 2022 13:02:03 +0900 Subject: [PATCH 110/142] =?UTF-8?q?[Feature]=20=EB=8C=93=EA=B8=80=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80,=20=EC=82=AD=EC=A0=9C,=20=EC=A1=B0=ED=9A=8C?= =?UTF-8?q?=20=EB=A1=9C=EC=A7=81=20(#244)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * โ™ป๏ธ refactor: CommentInput ์Šคํƒ€์ผ ์ˆ˜์ • * โœจ feature: ๋Œ“๊ธ€ ์กฐํšŒ ํ›… ๋งŒ๋“ค์–ด ๋†“๊ธฐ * โ™ป๏ธ refactor: ๊ฒŒ์‹œ๊ธ€ ์กฐํšŒ ๋กœ์ง ๋ฆฌํŒฉํ† ๋ง * ๐Ÿฅ… chore: Comment ์ปดํฌ๋„ŒํŠธ ๋ชจํ‚น ๋ฐ์ดํ„ฐ ์ œ๊ฑฐ * โœจ feature: ๋Œ“๊ธ€ ์ž…๋ ฅ ํ›„ ์ถ”๊ฐ€ + query ๋ฌดํšจํ™” * ๐Ÿฅ… chore: ๋ถˆํ•„์š”ํ•œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ํšจ๊ณผ ์ œ๊ฑฐ * ๐Ÿฅ… chore: ์•„๋ฐ”ํƒ€ ์ปค์„œ ์ˆ˜์ •, priority ์˜ต์…˜ ์ ์šฉ * โœจ feature: ๋Œ“๊ธ€ ์˜์—ญ์— ๋ฌดํ•œ์Šคํฌ๋กค ์ ์šฉ * โœจ feature: ๋Œ“๊ธ€ ์‚ญ์ œ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * ๐Ÿฅ… chore: ์•„๋ฐ”ํƒ€ ์ด๋ฏธ์ง€ ์•„๋ž˜ ๋นˆ๊ณต๊ฐ„ ์ œ๊ฑฐ * ๐Ÿฅ… chore: ๋Œ“๊ธ€ ์ž‘์„ฑ์ž ํด๋ฆญ์‹œ ํ”„๋กœํ•„ ํŽ˜์ด์ง€๋กœ ์ด๋™ * ๐Ÿฅ… chore: ๋Œ“๊ธ€์— ๊ธ€์ž๊ฐ€ ์ž…๋ ฅ๋˜์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ๋ฒ„ํŠผ ํ™œ์„ฑํ™” * ๐Ÿฅ… chore: ๋Œ“๊ธ€์‚ญ์ œ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๊ฐ„์†Œํ™” * ๐Ÿฅ… chore: ์ถฉ๋Œ ์˜ค๋ฅ˜๋‚˜๋Š”๊ฑฐ ์ˆ˜์ • --- .../article/Comment/Comment.stories.tsx | 13 +++ .../src/components/article/Comment/index.tsx | 93 +++++++++++-------- .../src/components/article/Comment/styles.tsx | 3 +- .../components/article/CommentInput/index.tsx | 65 ++++++++++--- .../article/CommentInput/styles.tsx | 2 + .../src/components/common/Avatar/index.tsx | 8 +- .../common/FloatingButton/index.tsx | 2 +- .../common/Header/UserLoginItem/index.tsx | 10 +- .../src/components/common/Profile/index.tsx | 2 +- frontend/src/hooks/queries/useAddComment.ts | 22 +++++ .../src/hooks/queries/useDeleteComment.ts | 18 ++++ .../src/hooks/queries/useFetchComments.ts | 37 ++++++++ .../hooks/queries/useFetchGroupArticles.ts | 8 +- frontend/src/hooks/useAuthInfiniteQuery.ts | 5 +- frontend/src/pages/article/[id].tsx | 68 ++++++++------ frontend/src/pages/index.tsx | 6 +- frontend/src/typings/types.ts | 24 ++++- 17 files changed, 286 insertions(+), 100 deletions(-) create mode 100644 frontend/src/hooks/queries/useAddComment.ts create mode 100644 frontend/src/hooks/queries/useDeleteComment.ts create mode 100644 frontend/src/hooks/queries/useFetchComments.ts diff --git a/frontend/src/components/article/Comment/Comment.stories.tsx b/frontend/src/components/article/Comment/Comment.stories.tsx index f6cc04dd..4d495832 100644 --- a/frontend/src/components/article/Comment/Comment.stories.tsx +++ b/frontend/src/components/article/Comment/Comment.stories.tsx @@ -7,6 +7,19 @@ export default { component: Comment, } as ComponentMeta; +const mockComment = { + id: 1, + authorId: 2, + authorName: 'J999_๊น€์บ ํผ', + authorProfileImage: 'https://avatars.githubusercontent.com/u/90585081?v=4"', + contents: + '์ข‹์€ ๊ธ€ ์ž˜ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค!์ข‹์€ ๊ธ€ ์ž˜ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค์ข‹์€ ๊ธ€ ์ž˜ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค์ข‹์€ ๊ธ€ ์ž˜ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค์ข‹์€ ๊ธ€ ์ž˜ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค', + createdAt: '2022-11-23T08:19:33.899Z', +}; + const Template: ComponentStory = (args) => ; export const Default = Template.bind({}); +Default.args = { + comment: mockComment, +}; diff --git a/frontend/src/components/article/Comment/index.tsx b/frontend/src/components/article/Comment/index.tsx index 08e8968e..77641160 100644 --- a/frontend/src/components/article/Comment/index.tsx +++ b/frontend/src/components/article/Comment/index.tsx @@ -1,7 +1,14 @@ +import Link from 'next/link'; +import { useRouter } from 'next/router'; +import { useState } from 'react'; + import { Text } from '@mantine/core'; import Avatar from '@components/common/Avatar'; -import { CommentType as CommentItem } from '@typings/types'; +import ConfirmModal from '@components/common/ConfirmModal'; +import useDeleteComment from '@hooks/queries/useDeleteComment'; +import useFetchMyInfo from '@hooks/queries/useFetchMyInfo'; +import { CommentType } from '@typings/types'; import dateTimeFormat from '@utils/dateTime'; import { @@ -13,53 +20,59 @@ import { CommentWrapper, } from './styles'; -/** - * mockComment ์ง€์šฐ๋ฉด props์˜ optional ์ง€์šฐ๊ธฐ - */ -const mockComment = { - id: 1, - authorId: 2, - authorName: 'J999_๊น€์บ ํผ', - authorProfileImage: 'https://avatars.githubusercontent.com/u/90585081?v=4"', - contents: - '์ข‹์€ ๊ธ€ ์ž˜ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค!์ข‹์€ ๊ธ€ ์ž˜ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค์ข‹์€ ๊ธ€ ์ž˜ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค์ข‹์€ ๊ธ€ ์ž˜ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค์ข‹์€ ๊ธ€ ์ž˜ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค', - createdAt: '2022-11-23T08:19:33.899Z', -}; - interface Props { /** * ๋Œ“๊ธ€ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. */ - comment?: CommentItem; + comment: CommentType; } -const Comment = ({ comment = mockComment }: Props) => { +const Comment = ({ comment }: Props) => { + const router = useRouter(); + const articleId = Number(router.query.id); + const [confirmModalOpen, setConfirmModalOpen] = useState(false); + const { id: commentId, authorId, authorName, authorProfileImage, createdAt, contents } = comment; + const { data: myData } = useFetchMyInfo(); + const { mutate: deleteComment } = useDeleteComment(articleId); + return ( - - - - - - {comment.authorName} - - - {dateTimeFormat(comment.createdAt)} + <> + + + + + + + {authorName} + + + {dateTimeFormat(createdAt)} + + + + + {myData?.id === authorId && ( + setConfirmModalOpen(true)}> + + ์‚ญ์ œ + + + )} + + + + + {contents} - - - alert('์‚ญ์ œ ํ•˜์‹ค?')}> - - ์‚ญ์ œ - - - - - - - {comment.contents} - - - + + + deleteComment(commentId)} + onCancelButtonClick={() => setConfirmModalOpen(false)} + /> + ); }; diff --git a/frontend/src/components/article/Comment/styles.tsx b/frontend/src/components/article/Comment/styles.tsx index 2076a6f2..91b1cfee 100644 --- a/frontend/src/components/article/Comment/styles.tsx +++ b/frontend/src/components/article/Comment/styles.tsx @@ -3,8 +3,6 @@ import styled from '@emotion/styled'; const CommentWrapper = styled.div` width: 100%; padding: 1.6rem; - border-top: 1px solid ${({ theme }) => theme.colors.gray[2]}; - border-bottom: 1px solid ${({ theme }) => theme.colors.gray[2]}; display: flex; flex-direction: column; `; @@ -20,6 +18,7 @@ const CommentAuthor = styled.div` display: flex; align-items: center; gap: 0.8rem; + cursor: pointer; `; const CommentUtils = styled.div` diff --git a/frontend/src/components/article/CommentInput/index.tsx b/frontend/src/components/article/CommentInput/index.tsx index 1c66c35c..06401368 100644 --- a/frontend/src/components/article/CommentInput/index.tsx +++ b/frontend/src/components/article/CommentInput/index.tsx @@ -1,29 +1,68 @@ -import { useRef } from 'react'; +import { useRouter } from 'next/router'; +import { useCallback, useEffect, useState } from 'react'; import { ActionIcon, TextInput } from '@mantine/core'; import { IconSend } from '@tabler/icons'; +import useAddComment from '@hooks/queries/useAddComment'; + import { CommentInputWrapper } from './styles'; const CommentInput = () => { - const inputRef = useRef(null); - /** - * TODO : ๋Œ“๊ธ€ ์ž…๋ ฅ ํ•ธ๋“ค๋Ÿฌ ์ˆ˜์ • - */ - const handleSubmitComment = () => { - alert('๋Œ“๊ธ€ ์ž…๋ ฅ'); - if (inputRef.current) { - inputRef.current.value = ''; + const { + query: { id }, + } = useRouter(); + + const articleId = Number(id); + + const { mutate: addComment } = useAddComment(articleId); + const [commentInput, setCommentInput] = useState(''); + + const handleAddComment = useCallback(() => { + if (commentInput.trim().length > 0) { + addComment( + { contents: commentInput, articleId }, + { + onSuccess: () => { + setCommentInput(''); + setTimeout(() => window.scrollTo(0, document.body.scrollHeight), 200); + }, + } + ); } - }; + }, [commentInput, articleId, addComment]); + + const handlePressEnter = useCallback( + (e: KeyboardEvent) => { + if (e.key === 'Enter') { + handleAddComment(); + } + }, + [handleAddComment] + ); + + useEffect(() => { + window.addEventListener('keypress', handlePressEnter); + + return () => { + window.removeEventListener('keypress', handlePressEnter); + }; + }, [handlePressEnter]); + return ( setCommentInput(e.currentTarget.value)} rightSection={ - + } diff --git a/frontend/src/components/article/CommentInput/styles.tsx b/frontend/src/components/article/CommentInput/styles.tsx index e9b6de02..4d681a99 100644 --- a/frontend/src/components/article/CommentInput/styles.tsx +++ b/frontend/src/components/article/CommentInput/styles.tsx @@ -5,6 +5,8 @@ const CommentInputWrapper = styled.div` width: 100%; position: sticky; bottom: 0; + background-color: ${({ theme }) => theme.white}; + border-top: 1px solid ${({ theme }) => theme.colors.gray[2]}; `; export { CommentInputWrapper }; diff --git a/frontend/src/components/common/Avatar/index.tsx b/frontend/src/components/common/Avatar/index.tsx index e2c9d578..7d34e2b6 100644 --- a/frontend/src/components/common/Avatar/index.tsx +++ b/frontend/src/components/common/Avatar/index.tsx @@ -17,7 +17,7 @@ interface Props extends ComponentProps { const Avatar = forwardRef(({ size, ...rest }, ref) => { return ( -
    + (({ size, ...rest }, ref) => { height={AVATAR_SIZES[size]} defaultImgUrl="/avatar.jpg" /> -
    + ); }); Avatar.displayName = 'Avatar'; +const AvatarWrapper = styled.div` + font-size: 0; +`; + const AvatarImage = styled(Image)` border-radius: 50%; `; diff --git a/frontend/src/components/common/FloatingButton/index.tsx b/frontend/src/components/common/FloatingButton/index.tsx index 72dca57a..cb5fb88e 100644 --- a/frontend/src/components/common/FloatingButton/index.tsx +++ b/frontend/src/components/common/FloatingButton/index.tsx @@ -21,7 +21,7 @@ const FloatingButton = ({ children }: Props) => { const ref = useClickOutside(() => setOpened(false)); return ( - + { if (isLoading) return null; return myData ? ( - + - + diff --git a/frontend/src/components/common/Profile/index.tsx b/frontend/src/components/common/Profile/index.tsx index d72b7998..15f749c3 100644 --- a/frontend/src/components/common/Profile/index.tsx +++ b/frontend/src/components/common/Profile/index.tsx @@ -18,7 +18,7 @@ const Profile = ({ user }: Props) => { return ( - + {userName} {description} diff --git a/frontend/src/hooks/queries/useAddComment.ts b/frontend/src/hooks/queries/useAddComment.ts new file mode 100644 index 00000000..e16fc48e --- /dev/null +++ b/frontend/src/hooks/queries/useAddComment.ts @@ -0,0 +1,22 @@ +import { useQueryClient } from '@tanstack/react-query'; + +import useAuthMutation from '@hooks/useAuthMutation'; +import { CommentInputType } from '@typings/types'; +import { clientAxios } from '@utils/commonAxios'; + +const addComment = (commentInput: CommentInputType) => + clientAxios.post('/v1/comments', { + ...commentInput, + }); + +const useAddComment = (articleId: number) => { + const queryClient = useQueryClient(); + return useAuthMutation(addComment, { + onSuccess: async () => { + await queryClient.invalidateQueries(['article', articleId]); + await queryClient.invalidateQueries(['comments', articleId]); + }, + }); +}; + +export default useAddComment; diff --git a/frontend/src/hooks/queries/useDeleteComment.ts b/frontend/src/hooks/queries/useDeleteComment.ts new file mode 100644 index 00000000..0a5962c1 --- /dev/null +++ b/frontend/src/hooks/queries/useDeleteComment.ts @@ -0,0 +1,18 @@ +import { useQueryClient } from '@tanstack/react-query'; + +import useAuthMutation from '@hooks/useAuthMutation'; +import { clientAxios } from '@utils/commonAxios'; + +const deleteComment = (commentId: number) => clientAxios.delete(`/v1/comments/${commentId}`); + +const useDeleteComment = (articleId: number) => { + const queryClient = useQueryClient(); + return useAuthMutation(deleteComment, { + onSuccess: async () => { + await queryClient.invalidateQueries(['article', articleId]); + await queryClient.invalidateQueries(['comments', articleId]); + }, + }); +}; + +export default useDeleteComment; diff --git a/frontend/src/hooks/queries/useFetchComments.ts b/frontend/src/hooks/queries/useFetchComments.ts new file mode 100644 index 00000000..fdbc8309 --- /dev/null +++ b/frontend/src/hooks/queries/useFetchComments.ts @@ -0,0 +1,37 @@ +import { useMemo } from 'react'; + +import { AxiosError } from 'axios'; + +import useAuthInfiniteQuery from '@hooks/useAuthInfiniteQuery'; +import { ApiResponseType, CommentType, PagingDataType } from '@typings/types'; +import { clientAxios } from '@utils/commonAxios'; + +const getComments = async (currentPage: number, articleId: number) => { + const { + data: { data }, + } = await clientAxios.get>>('/v1/comments', { + params: { + articleId, + currentPage, + countPerPage: 5, + }, + }); + return data; +}; + +const useFetchComments = (articleId: number) => { + const { data, ...rest } = useAuthInfiniteQuery< + PagingDataType, + AxiosError, + PagingDataType + >(['comments', articleId], ({ pageParam = 1 }) => getComments(pageParam, articleId), { + getNextPageParam: (lastPage) => + lastPage.totalPage === lastPage.currentPage ? undefined : lastPage.currentPage + 1, + }); + + const comments = useMemo(() => (data ? data.pages.flatMap(({ data }) => data) : []), [data]); + + return { comments, ...rest }; +}; + +export default useFetchComments; diff --git a/frontend/src/hooks/queries/useFetchGroupArticles.ts b/frontend/src/hooks/queries/useFetchGroupArticles.ts index cc579565..25c8cf51 100644 --- a/frontend/src/hooks/queries/useFetchGroupArticles.ts +++ b/frontend/src/hooks/queries/useFetchGroupArticles.ts @@ -1,3 +1,5 @@ +import { useMemo } from 'react'; + import { AxiosError } from 'axios'; import { ArticleStatus } from '@constants/article'; @@ -39,7 +41,7 @@ const useFetchGroupArticles = ( location: Location | null, filterProgress: boolean ) => { - const queryResult = useAuthInfiniteQuery( + const { data, ...rest } = useAuthInfiniteQuery( ['articles', category, location, filterProgress], ({ pageParam = 1 }) => getGroupArticles(pageParam, category, location, filterProgress), { @@ -48,7 +50,9 @@ const useFetchGroupArticles = ( } ); - return { ...queryResult }; + const articles = useMemo(() => (data ? data.pages.flatMap(({ data }) => data) : []), [data]); + + return { articles, ...rest }; }; export default useFetchGroupArticles; diff --git a/frontend/src/hooks/useAuthInfiniteQuery.ts b/frontend/src/hooks/useAuthInfiniteQuery.ts index 1c2d7fd3..075e2cc0 100644 --- a/frontend/src/hooks/useAuthInfiniteQuery.ts +++ b/frontend/src/hooks/useAuthInfiniteQuery.ts @@ -1,3 +1,5 @@ +import { useRouter } from 'next/router'; + import { QueryFunction, QueryKey, @@ -21,10 +23,11 @@ const useAuthInfiniteQuery = < 'queryKey' | 'queryFn' > ) => { + const { isReady } = useRouter(); const { error, ...rest } = useInfiniteQuery( queryKey, queryFn, - options + { ...options, enabled: isReady && options.enabled } ); if (error && error instanceof AxiosError) { if (error.response.status === 401) { diff --git a/frontend/src/pages/article/[id].tsx b/frontend/src/pages/article/[id].tsx index f9b79a10..21b8d861 100644 --- a/frontend/src/pages/article/[id].tsx +++ b/frontend/src/pages/article/[id].tsx @@ -7,6 +7,8 @@ import styled from '@emotion/styled'; import { Progress, TypographyStylesProvider } from '@mantine/core'; import { IconList } from '@tabler/icons'; +import Comment from '@components/article/Comment'; +import CommentInput from '@components/article/CommentInput'; import MenuButton from '@components/article/MenuButton'; import ParticipantsModal from '@components/article/ParticipantsModal'; import ParticipateButton from '@components/article/ParticipateButton'; @@ -15,6 +17,7 @@ import ArticleTag from '@components/common/ArticleTag'; import Avatar from '@components/common/Avatar'; import Header from '@components/common/Header'; import DetailTitle from '@components/common/Header/DetailTitle'; +import Joiner from '@components/common/Joiner'; import PageLayout from '@components/common/PageLayout'; import StatCounter from '@components/common/StatCounter'; import { ArticleStatus, ArticleStatusKr } from '@constants/article'; @@ -26,8 +29,10 @@ import { ParticipateButtonStatus } from '@constants/participateButton'; import useFetchApplicationStatus from '@hooks/queries/useFetchApplicationStatus'; import useFetchArticle from '@hooks/queries/useFetchArticle'; import useFetchChatUrl from '@hooks/queries/useFetchChatUrl'; +import useFetchComments from '@hooks/queries/useFetchComments'; import useFetchMyInfo from '@hooks/queries/useFetchMyInfo'; import useFetchParticipants from '@hooks/queries/useFetchParticipants'; +import useIntersect from '@hooks/useIntersect'; import { ArticleType } from '@typings/types'; import dateTimeFormat from '@utils/dateTime'; @@ -38,6 +43,7 @@ const ArticleDetail = () => { const router = useRouter(); const articleId = Number(router.query.id); const { data: myInfo } = useFetchMyInfo(); + const { comments, fetchNextPage, hasNextPage, isFetching } = useFetchComments(articleId); const { data: article } = useFetchArticle(articleId); const { data: isJoined } = useFetchApplicationStatus(articleId); const { data: participants } = useFetchParticipants(articleId); @@ -51,6 +57,13 @@ const ArticleDetail = () => { const [participantsModalOpen, setParticipantsModalOpen] = useState(false); + const ref = useIntersect((entry, observer) => { + observer.unobserve(entry.target); + if (hasNextPage && !isFetching) { + void fetchNextPage(); + } + }); + return ( <> { } /> } + footer={} > <> - {!article || isJoined === undefined || !myInfo || !participants ? ( - - ) : ( - <> - + + {!article || isJoined === undefined || !myInfo || !participants ? ( + + ) : ( + <> @@ -123,7 +137,7 @@ const ArticleDetail = () => { { )} - - -
    ๋Œ“๊ธ€์˜์—ญ
    -
    -
    - setParticipantsModalOpen(false)} - /> - - )} + setParticipantsModalOpen(false)} + /> + + )} +
    + + {/* TODO participants API ์š”์ฒญ */} + + 0 && { before: true })} + components={comments.map((comment) => ( + + ))} + /> +
    - r ); }; @@ -269,14 +288,3 @@ const ContentBox = styled.div` border: 1px solid ${({ theme }) => theme.colors.gray[2]}; border-radius: 8px; `; - -const CommentWrapper = styled.div` - display: flex; - flex-direction: column; -`; - -const Divider = styled.div` - width: 100%; - height: 0.05rem; - background-color: ${({ theme }) => theme.colors.gray[4]}; -`; diff --git a/frontend/src/pages/index.tsx b/frontend/src/pages/index.tsx index ff0b0121..7516f51c 100644 --- a/frontend/src/pages/index.tsx +++ b/frontend/src/pages/index.tsx @@ -1,5 +1,5 @@ import Link from 'next/link'; -import { useMemo, useState } from 'react'; +import { useState } from 'react'; import { QueryClient, dehydrate, useQueryClient } from '@tanstack/react-query'; import { GetServerSideProps } from 'next'; @@ -45,7 +45,7 @@ const Main = () => { const [selectedLocation, setSelectedLocation] = useState(null); const [progressChecked, setProgressChecked] = useState(false); - const { data, fetchNextPage, hasNextPage, isFetching } = useFetchGroupArticles( + const { articles, fetchNextPage, hasNextPage, isFetching } = useFetchGroupArticles( selectedCategory, selectedLocation, progressChecked @@ -57,8 +57,6 @@ const Main = () => { } }); - const articles = useMemo(() => (data ? data.pages.flatMap(({ data }) => data) : []), [data]); - const refreshArticleList = () => { void queryClient.resetQueries(['articles']); }; diff --git a/frontend/src/typings/types.ts b/frontend/src/typings/types.ts index a8a355f7..6dac1d12 100644 --- a/frontend/src/typings/types.ts +++ b/frontend/src/typings/types.ts @@ -5,7 +5,20 @@ import { Category } from '@constants/category'; import { Location } from '@constants/location'; import { Notification } from '@constants/notification'; -interface ArticleThumbnail { +interface PagingDataType { + totalPage: number; + currentPage: number; + countPerPage: number; + data: T; +} + +interface ApiResponseType { + status: string; + message: string; + data: T; +} + +interface ArticleThumbnailType { originUrl: string; blurUrl: string; } @@ -17,7 +30,7 @@ interface ArticlePreviewType { category: Category; commentCount: number; scrapCount: number; - thumbnail: ArticleThumbnail; + thumbnail: ArticleThumbnailType; maxCapacity: number; currentCapacity: number; status: ArticleStatus; @@ -51,6 +64,10 @@ interface CommentType { createdAt: string; } +interface CommentInputType extends Pick { + articleId: number; +} + interface TestResponseType { dataArr: string[]; isLast: boolean; @@ -85,12 +102,15 @@ interface NotificationType { export type { ApiResponse, + ApiResponseType, ArticlePreviewType, ArticleType, MyArticleType, ArticlePostInputType, + PagingDataType, TestResponseType, CommentType, + CommentInputType, UserType, ImageUploadType, NotificationType, From 4b8fd80aced6eb30cb984309d3bba5aae15df219 Mon Sep 17 00:00:00 2001 From: Kim Myeongil <67570061+username1103@users.noreply.github.com> Date: Thu, 8 Dec 2022 13:32:02 +0900 Subject: [PATCH 111/142] =?UTF-8?q?[Feature]=20=EB=82=B4=EA=B0=80=20?= =?UTF-8?q?=EC=B0=B8=EC=97=AC=ED=95=9C=20=EB=AA=A8=EC=9E=84=20thumbnail=20?= =?UTF-8?q?response=20=EC=88=98=EC=A0=95=20(#253)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :goal_net: chore: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” multer ํŒจํ‚ค์ง€ ์ œ๊ฑฐ * :sparkles: feature: ๋‚ด๊ฐ€ ์ฐธ์—ฌํ•œ ๋ชจ์ž„ ์กฐํšŒ thumbnail์— blur์ด๋ฏธ์ง€ url ์ถ”๊ฐ€ --- backend/package-lock.json | 32 ------------------- backend/package.json | 1 - .../dto/group-article-response.dto.ts | 7 ++-- .../group-application.service.ts | 4 ++- 4 files changed, 7 insertions(+), 37 deletions(-) diff --git a/backend/package-lock.json b/backend/package-lock.json index 799dcdc6..74c15968 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -24,7 +24,6 @@ "class-validator": "^0.13.2", "cookie-parser": "^1.4.6", "morgan": "^1.10.0", - "multer": "^1.4.5-lts.1", "mysql2": "^2.3.3", "passport": "^0.6.0", "passport-github": "^1.1.0", @@ -7054,23 +7053,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "node_modules/multer": { - "version": "1.4.5-lts.1", - "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.1.tgz", - "integrity": "sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==", - "dependencies": { - "append-field": "^1.0.0", - "busboy": "^1.0.0", - "concat-stream": "^1.5.2", - "mkdirp": "^0.5.4", - "object-assign": "^4.1.1", - "type-is": "^1.6.4", - "xtend": "^4.0.0" - }, - "engines": { - "node": ">= 6.0.0" - } - }, "node_modules/mute-stream": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", @@ -15319,20 +15301,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "multer": { - "version": "1.4.5-lts.1", - "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.1.tgz", - "integrity": "sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==", - "requires": { - "append-field": "^1.0.0", - "busboy": "^1.0.0", - "concat-stream": "^1.5.2", - "mkdirp": "^0.5.4", - "object-assign": "^4.1.1", - "type-is": "^1.6.4", - "xtend": "^4.0.0" - } - }, "mute-stream": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", diff --git a/backend/package.json b/backend/package.json index 64d3da4a..cde844c5 100644 --- a/backend/package.json +++ b/backend/package.json @@ -40,7 +40,6 @@ "class-validator": "^0.13.2", "cookie-parser": "^1.4.6", "morgan": "^1.10.0", - "multer": "^1.4.5-lts.1", "mysql2": "^2.3.3", "passport": "^0.6.0", "passport-github": "^1.1.0", diff --git a/backend/src/app/group-application/dto/group-article-response.dto.ts b/backend/src/app/group-application/dto/group-article-response.dto.ts index ffa3b40c..ec417851 100644 --- a/backend/src/app/group-application/dto/group-article-response.dto.ts +++ b/backend/src/app/group-application/dto/group-article-response.dto.ts @@ -5,6 +5,7 @@ import { LOCATION, } from '@src/app/group-article/constants/group-article.constants'; import { IMyGroupResult } from '@app/group-application/dto/my-group-result.interface'; +import { ImageWithBlurResponse } from '@common/dto/image-with-blur-response.dto'; export class GroupArticleResponse { @ApiProperty({ @@ -55,7 +56,7 @@ export class GroupArticleResponse { description: '์ธ๋„ค์ผ ์ด๋ฏธ์ง€ ์ฃผ์†Œ', required: true, }) - thumbnail: string; + thumbnail: ImageWithBlurResponse; @ApiProperty({ example: 10, @@ -85,7 +86,7 @@ export class GroupArticleResponse { }) createdAt: Date; - static from(myGroup: IMyGroupResult) { + static async from(myGroup: IMyGroupResult) { const response = new GroupArticleResponse(); response.groupArticleId = myGroup.groupArticleId; response.title = myGroup.title; @@ -93,7 +94,7 @@ export class GroupArticleResponse { response.category = myGroup.category; response.commentCount = myGroup.commentCount; response.scrapCount = myGroup.scrapCount; - response.thumbnail = myGroup.thumbnail; + response.thumbnail = await ImageWithBlurResponse.from(myGroup.thumbnail); response.maxCapacity = myGroup.maxCapacity; response.currentCapacity = Number(myGroup.currentCapacity); response.status = myGroup.status; diff --git a/backend/src/app/group-application/group-application.service.ts b/backend/src/app/group-application/group-application.service.ts index a360824f..6bfe13d9 100644 --- a/backend/src/app/group-application/group-application.service.ts +++ b/backend/src/app/group-application/group-application.service.ts @@ -182,7 +182,9 @@ export class GroupApplicationService { limit, offset, }); - const response = result.map((value) => GroupArticleResponse.from(value)); + const response = await Promise.all( + result.map((value) => GroupArticleResponse.from(value)), + ); const count = await this.groupApplicationRepository.findMyGroupCount( user.id, ); From 61dcd6e72799f3fe6cd9de09eabd7ddcc6551428 Mon Sep 17 00:00:00 2001 From: MinGyeong Park <37508296+kong430@users.noreply.github.com> Date: Thu, 8 Dec 2022 13:32:17 +0900 Subject: [PATCH 112/142] =?UTF-8?q?[Feature]=20=EC=95=8C=EB=A6=BC=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C/=EC=82=AD=EC=A0=9C=20(#251)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :sparkles: feature: notification list get * :sparkles: feature: ์•Œ๋ฆผ ๋ฆฌ์ŠคํŠธ get * :sparkles: feature: ์•Œ๋ฆผ ์‚ญ์ œ ๊ธฐ๋Šฅ * :recycle: refactor: useFetch hook ๋‚ด์—์„œdata์—flatMap ์ ์šฉํ•˜๋„๋ก ๋ณ€๊ฒฝ * :sparkles: feature: ์•Œ๋ฆผ๋ฆฌ์ŠคํŠธ refetchInterval ์ ์šฉ --- .../notification/NotificationIcon/index.tsx | 4 +- .../NotificationItem.stories.tsx | 9 ++- .../notification/NotificationItem/index.tsx | 29 ++++---- frontend/src/constants/article.ts | 2 +- frontend/src/constants/notification.ts | 6 +- .../hooks/queries/useDeleteNotification.ts | 18 +++++ .../hooks/queries/useFetchNotifications.ts | 47 +++++++++++++ frontend/src/pages/notification.tsx | 67 ++++++++----------- frontend/src/typings/types.ts | 1 + 9 files changed, 121 insertions(+), 62 deletions(-) create mode 100644 frontend/src/hooks/queries/useDeleteNotification.ts create mode 100644 frontend/src/hooks/queries/useFetchNotifications.ts diff --git a/frontend/src/components/notification/NotificationIcon/index.tsx b/frontend/src/components/notification/NotificationIcon/index.tsx index 5ac7ce8b..8b54143c 100644 --- a/frontend/src/components/notification/NotificationIcon/index.tsx +++ b/frontend/src/components/notification/NotificationIcon/index.tsx @@ -10,9 +10,9 @@ interface Props { const NotificationIcon = ({ variant }: Props) => { const iconScheme = - variant === Notification.ADD_COMMENT + variant === Notification.COMMENT_ADDED ? { color: 'indigo', icon: } - : variant === Notification.GROUP_SUCCESS + : variant === Notification.GROUP_SUCCEED ? { color: 'cyan', icon: , diff --git a/frontend/src/components/notification/NotificationItem/NotificationItem.stories.tsx b/frontend/src/components/notification/NotificationItem/NotificationItem.stories.tsx index 700f4925..9637792c 100644 --- a/frontend/src/components/notification/NotificationItem/NotificationItem.stories.tsx +++ b/frontend/src/components/notification/NotificationItem/NotificationItem.stories.tsx @@ -15,9 +15,10 @@ export const AddComment = Template.bind({}); AddComment.args = { notification: { id: 1, - type: Notification.ADD_COMMENT, + type: Notification.COMMENT_ADDED, title: '๋ฐ•์ข…ํ˜๋‹˜์ด ๊ฒŒ์‹œ๊ธ€์— ๋Œ“๊ธ€์„ ๋‚จ๊ฒผ์–ด์š”.', subTitle: 'ํ™€๋ฆฌ ์ฎ“', + groupArticleId: 1, createdAt: '2021-08-01T00:00:00.000Z', }, }; @@ -26,9 +27,10 @@ export const GroupSuccess = Template.bind({}); GroupSuccess.args = { notification: { id: 1, - type: Notification.GROUP_SUCCESS, + type: Notification.GROUP_SUCCEED, title: 'ํ› ๊ถˆ ๋จน์์‹œ๋‹ค', subTitle: 'ํ™€๋ฆฌ ์ฎ“', + groupArticleId: 2, createdAt: '2022-02-01T00:00:00.000Z', }, }; @@ -37,9 +39,10 @@ export const GroupFail = Template.bind({}); GroupFail.args = { notification: { id: 1, - type: Notification.GROUP_FAIL, + type: Notification.GROUP_FAILED, title: '๋ชจ์ž„์ด ๋ฌด์‚ฐ๋˜์—ˆ์–ด์š”.', subTitle: '์บ๋Ÿฟ์Šคํ„ฐ๋”” - ์ธ์ฒœ', + groupArticleId: 3, createdAt: '2021-08-01T00:00:00.000Z', }, }; diff --git a/frontend/src/components/notification/NotificationItem/index.tsx b/frontend/src/components/notification/NotificationItem/index.tsx index ab762563..4e3e4c91 100644 --- a/frontend/src/components/notification/NotificationItem/index.tsx +++ b/frontend/src/components/notification/NotificationItem/index.tsx @@ -5,8 +5,9 @@ import styled from '@emotion/styled'; import { ActionIcon, Text } from '@mantine/core'; import { IconX } from '@tabler/icons'; -import AlertModal from '@components/common/AlertModal'; +import ConfirmModal from '@components/common/ConfirmModal'; import NotificationIcon from '@components/notification/NotificationIcon'; +import useDeleteNotification from '@hooks/queries/useDeleteNotification'; import { NotificationType } from '@typings/types'; import dateTimeFormat from '@utils/dateTime'; @@ -19,24 +20,19 @@ interface Props { const NotificationItem = ({ notification }: Props) => { const { type, title, subTitle, createdAt } = notification; + const { mutate: deleteNotification } = useDeleteNotification(); - const [modalOpen, setModalOpen] = useState(false); - - const handleClickCloseButton = () => { - setModalOpen(true); - }; - /** - * TODO : ์•Œ๋ฆผ ๋ฐ์ดํ„ฐ์—์„œ ๋“ค์–ด์˜จ ๋งํฌ๋ฅผ ์‚ฌ์šฉ - */ + const [confirmModalOpen, setConfirmModalOpen] = useState(false); return ( - setModalOpen(false)} + open={confirmModalOpen} + onConfirmButtonClick={() => deleteNotification(notification.id)} + onCancelButtonClick={() => setConfirmModalOpen(false)} /> - + @@ -56,7 +52,12 @@ const NotificationItem = ({ notification }: Props) => { - + setConfirmModalOpen(true)} + > diff --git a/frontend/src/constants/article.ts b/frontend/src/constants/article.ts index 69b1ab0b..d18920e3 100644 --- a/frontend/src/constants/article.ts +++ b/frontend/src/constants/article.ts @@ -7,7 +7,7 @@ enum ArticleStatus { enum ArticleStatusKr { PROGRESS = '๋ชจ์ง‘์ค‘', SUCCEED = '๋ชจ์ง‘์™„๋ฃŒ', - FAIL = '๋ชจ์ง‘์ฆ๋‹จ', + FAIL = '๋ชจ์ง‘์ค‘๋‹จ', } export { ArticleStatus, ArticleStatusKr }; diff --git a/frontend/src/constants/notification.ts b/frontend/src/constants/notification.ts index 8e45b4ea..5194e4a3 100644 --- a/frontend/src/constants/notification.ts +++ b/frontend/src/constants/notification.ts @@ -1,7 +1,7 @@ enum Notification { - ADD_COMMENT = 'ADD_COMMENT', - GROUP_SUCCESS = 'GROUP_SUCCESS', - GROUP_FAIL = 'GROUP_FAIL', + COMMENT_ADDED = 'COMMENT_ADDED', + GROUP_SUCCEED = 'GROUP_SUCCEED', + GROUP_FAILED = 'GROUP_FAILED', } export { Notification }; diff --git a/frontend/src/hooks/queries/useDeleteNotification.ts b/frontend/src/hooks/queries/useDeleteNotification.ts new file mode 100644 index 00000000..b1457eee --- /dev/null +++ b/frontend/src/hooks/queries/useDeleteNotification.ts @@ -0,0 +1,18 @@ +import { useQueryClient } from '@tanstack/react-query'; + +import useAuthMutation from '@hooks/useAuthMutation'; +import { clientAxios } from '@utils/commonAxios'; + +const deleteNotification = (notificationId: number) => + clientAxios.delete(`/v1/notifications/${notificationId}`); + +const useDeleteNotification = () => { + const queryClient = useQueryClient(); + return useAuthMutation(deleteNotification, { + onSuccess: () => { + void queryClient.invalidateQueries(['notifications']); + }, + }); +}; + +export default useDeleteNotification; diff --git a/frontend/src/hooks/queries/useFetchNotifications.ts b/frontend/src/hooks/queries/useFetchNotifications.ts new file mode 100644 index 00000000..5d01cd6d --- /dev/null +++ b/frontend/src/hooks/queries/useFetchNotifications.ts @@ -0,0 +1,47 @@ +import { useMemo } from 'react'; + +import { AxiosError } from 'axios'; + +import useAuthInfiniteQuery from '@hooks/useAuthInfiniteQuery'; +import { NotificationType } from '@typings/types'; +import { clientAxios } from '@utils/commonAxios'; + +interface NotificationPagingData { + totalPage: number; + currentPage: number; + countPerPage: number; + data: NotificationType[]; +} + +interface NotificationResponseType { + status: string; + message: string; + data: NotificationPagingData; +} + +const getNotifications = async (currentPage: number) => { + const { + data: { data }, + } = await clientAxios.get('/v1/notifications', { + params: { currentPage, countPerPage: 15 }, + }); + return data; +}; + +const useFetchNotifications = () => { + const { data, ...queryResult } = useAuthInfiniteQuery< + NotificationPagingData, + AxiosError, + NotificationPagingData + >(['notifications'], ({ pageParam = 1 }) => getNotifications(pageParam), { + getNextPageParam: (lastPage) => + lastPage.totalPage === lastPage.currentPage ? undefined : lastPage.currentPage + 1, + refetchInterval: 3000, + }); + + const notifications = useMemo(() => (data ? data.pages.flatMap(({ data }) => data) : []), [data]); + + return { data: notifications, ...queryResult }; +}; + +export default useFetchNotifications; diff --git a/frontend/src/pages/notification.tsx b/frontend/src/pages/notification.tsx index 6e3bd317..76b2595c 100644 --- a/frontend/src/pages/notification.tsx +++ b/frontend/src/pages/notification.tsx @@ -7,39 +7,20 @@ import UserLoginItem from '@components/common/Header/UserLoginItem'; import NavigationTab from '@components/common/NavigationTab'; import PageLayout from '@components/common/PageLayout'; import NotificationItem from '@components/notification/NotificationItem'; -import { Notification } from '@constants/notification'; import { PAGE_TITLE } from '@constants/pageTitle'; -import { NotificationType } from '@typings/types'; - -const dummyNotifications: NotificationType[] = [ - { - id: 1, - type: Notification.ADD_COMMENT, - title: '๋ฐ•์ข…ํ˜๋‹˜์ด ๊ฒŒ์‹œ๊ธ€์— ๋Œ“๊ธ€์„ ๋‚จ๊ฒผ์–ด์š”.', - subTitle: 'ํ™€๋ฆฌ ์ฎ“', - createdAt: '2021-08-01T00:00:00.000Z', - }, - { - id: 2, - type: Notification.GROUP_SUCCESS, - title: 'ํ› ๊ถˆ ๋จน์์‹œ๋‹ค', - subTitle: 'ํ™€๋ฆฌ ์ฎ“', - createdAt: '2022-02-01T00:00:00.000Z', - }, - { - id: 3, - type: Notification.GROUP_FAIL, - title: '๋ชจ์ž„์ด ๋ฌด์‚ฐ๋˜์—ˆ์–ด์š”.', - subTitle: '์บ๋Ÿฟ์Šคํ„ฐ๋”” - ์ธ์ฒœ', - createdAt: '2021-08-01T00:00:00.000Z', - }, -]; +import useFetchNotifications from '@hooks/queries/useFetchNotifications'; +import useIntersect from '@hooks/useIntersect'; const NotificationPage = () => { - /** - * TODO : API ๋ถ™์ด๊ธฐ - */ - const notifications = dummyNotifications; + const { data: notifications, fetchNextPage, hasNextPage, isFetching } = useFetchNotifications(); + + const ref = useIntersect((entry, observer) => { + observer.unobserve(entry.target); + if (hasNextPage && !isFetching) { + void fetchNextPage(); + } + }); + return ( { } footer={} > - - {notifications.length > 0 ? ( - notifications.map((notification) => ( - - )) - ) : ( - - )} - + {notifications ? ( + + {notifications.length > 0 ? ( + <> + {notifications.map((notification) => ( + + ))} +
    + + ) : ( + + )} + + ) : ( + // TODO ๋กœ๋”ฉ ์ฒ˜๋ฆฌ +
    ๋กœ๋”ฉ์ค‘
    + )} ); }; diff --git a/frontend/src/typings/types.ts b/frontend/src/typings/types.ts index 6dac1d12..edd40156 100644 --- a/frontend/src/typings/types.ts +++ b/frontend/src/typings/types.ts @@ -97,6 +97,7 @@ interface NotificationType { type: Notification; title: string; subTitle: string; + groupArticleId: number; createdAt: string; } From 5ff562152788649a25fec1a15be63e8e6df3d854 Mon Sep 17 00:00:00 2001 From: Gakko <90585081+pythonstrup@users.noreply.github.com> Date: Thu, 8 Dec 2022 13:40:33 +0900 Subject: [PATCH 113/142] =?UTF-8?q?[BUGFIX]=20=EB=82=B4=EA=B0=80=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1=ED=95=9C=20=EB=8C=93=EA=B8=80=EC=97=90=20?= =?UTF-8?q?=EB=8C=80=ED=95=B4=20=EC=95=8C=EB=A6=BC=EC=9D=B4=20=EC=98=A4?= =?UTF-8?q?=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20(#256)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * โœจ feature: ๋ฉ”์‹œ์ง€ ์•Œ๋ฆผ ์–‘์‹ ๋ณ€๊ฒฝ - ๊ทธ๋ƒฅ ๋ฉ”์‹œ์ง€๋งŒ ๋ณด๋‚ด๋Š” ๊ฒƒ์—์„œ userName์„ ์•ž์— ๋ง๋ถ™์ด๋Š” ๊ฒƒ์œผ๋กœ ๋ณ€๊ฒฝ * ๐Ÿ› fix: ๋ณธ์ธ์ด ์“ด ๋Œ“๊ธ€์˜ ์•Œ๋ฆผ์„ ๋ฐ›์ง€ ์•Š๋„๋ก ์กฐ์ • * โœจ feature: ์•Œ๋ฆผ์„ ์ตœ์‹ ์ˆœ์œผ๋กœ ์ •๋ ฌ * ๐Ÿฅ… chore: await ์œ„์น˜ ๋ณ€๊ฒฝ --- backend/src/app/comment/comment.repository.ts | 13 ++++++++++--- .../app/notification/entity/notification.entity.ts | 4 ++-- .../src/app/notification/notification.listener.ts | 7 ++++--- .../repository/user-notification.repository.ts | 3 +++ 4 files changed, 19 insertions(+), 8 deletions(-) diff --git a/backend/src/app/comment/comment.repository.ts b/backend/src/app/comment/comment.repository.ts index 74483e18..c75e3f92 100644 --- a/backend/src/app/comment/comment.repository.ts +++ b/backend/src/app/comment/comment.repository.ts @@ -1,4 +1,4 @@ -import { DataSource, IsNull, Repository } from 'typeorm'; +import { DataSource, IsNull, Not, Repository } from 'typeorm'; import { Injectable } from '@nestjs/common'; import { Comment } from '@app/comment/entity/comment.entity'; @@ -45,7 +45,14 @@ export class CommentRepository extends Repository { return this.findOneBy({ id, deletedAt: IsNull() }); } - findByArticleId(groupArticleId: number) { - return this.findBy({ articleId: groupArticleId, deletedAt: IsNull() }); + findByArticleId(currentUserId: number, groupArticleId: number) { + return this.find({ + relations: { user: true }, + where: { + articleId: groupArticleId, + deletedAt: IsNull(), + userId: Not(currentUserId), + }, + }); } } diff --git a/backend/src/app/notification/entity/notification.entity.ts b/backend/src/app/notification/entity/notification.entity.ts index d5de163e..61c1a55c 100644 --- a/backend/src/app/notification/entity/notification.entity.ts +++ b/backend/src/app/notification/entity/notification.entity.ts @@ -49,7 +49,7 @@ export class Notification { return notification; } - static createCommentAddedNotification( + static async createCommentAddedNotification( groupArticle: GroupArticle, comment: Comment, ) { @@ -57,7 +57,7 @@ export class Notification { notification.type = NOTIFICATION_TYPE.COMMENT_ADDED; notification.contents = { title: groupArticle.title, - subTitle: comment.contents, + subTitle: `${(await comment.user).userName}: ${comment.contents}`, groupArticleId: groupArticle.id, }; return notification; diff --git a/backend/src/app/notification/notification.listener.ts b/backend/src/app/notification/notification.listener.ts index d12afe39..b619c5f0 100644 --- a/backend/src/app/notification/notification.listener.ts +++ b/backend/src/app/notification/notification.listener.ts @@ -94,17 +94,18 @@ export class NotificationListener { async handleCommentAddedEvent(event: CommentAddedEvent) { const { groupArticle, comment } = event; try { - const commentList = this.commentRepository.findByArticleId( + const commentList = await this.commentRepository.findByArticleId( + comment.userId, groupArticle.id, ); const targetUsers = await this.notificationSettingRepository.findTargetUsers({ type: NOTIFICATION_SETTING_TYPE.COMMENT, - userIds: (await commentList).map((comment) => comment.userId), + userIds: commentList.map((comment) => comment.userId), }); - const notification = Notification.createCommentAddedNotification( + const notification = await Notification.createCommentAddedNotification( groupArticle, comment, ); diff --git a/backend/src/app/notification/repository/user-notification.repository.ts b/backend/src/app/notification/repository/user-notification.repository.ts index 3ab5be2a..2e84dbba 100644 --- a/backend/src/app/notification/repository/user-notification.repository.ts +++ b/backend/src/app/notification/repository/user-notification.repository.ts @@ -31,6 +31,9 @@ export class UserNotificationRepository extends Repository { userId: user.id, deletedAt: IsNull(), }, + order: { + id: 'DESC', + }, take: limit, skip: offset, }); From 7017ad9663a0077bf5974114eb1c7192b7c48740 Mon Sep 17 00:00:00 2001 From: Gakko <90585081+pythonstrup@users.noreply.github.com> Date: Thu, 8 Dec 2022 14:10:58 +0900 Subject: [PATCH 114/142] =?UTF-8?q?BUGFIX]=20Group=20Not=20Found=20Excepti?= =?UTF-8?q?on=20=EC=84=9C=EB=B2=84=20=EC=97=90=EB=9F=AC=20#259?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ๐Ÿ› fix: validate async ๋ฌธ์ œ ํ•ด๊ฒฐ --- backend/src/app/comment/comment.controller.ts | 6 +----- backend/src/app/comment/comment.service.ts | 6 +++--- backend/src/app/comment/dto/comment-writing-response.dto.ts | 1 + 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/backend/src/app/comment/comment.controller.ts b/backend/src/app/comment/comment.controller.ts index a5b173f1..6479f127 100644 --- a/backend/src/app/comment/comment.controller.ts +++ b/backend/src/app/comment/comment.controller.ts @@ -22,7 +22,6 @@ import { ApiErrorResponse } from '@src/common/decorator/api-error-response.decor import { GroupNotFoundException } from '@app/comment/exception/group-not-found.exception'; import { GroupArticleCommentGetResponse } from '@src/app/comment/dto/group-article-comment-get-response.dto'; import { GetAllCommentQueryRequest } from '@app/comment/dto/get-all-comment-query-request.dto'; -import { CommentRepository } from '@app/comment/comment.repository'; import { CommentNotFoundException } from '@app/comment/exception/comment-not-found.exception'; import { NotAuthorException } from '@app/comment/exception/not-author.exception'; @@ -30,10 +29,7 @@ import { NotAuthorException } from '@app/comment/exception/not-author.exception' @ApiTags('Comment') @JwtAuth() export class CommentController { - constructor( - private readonly commentService: CommentService, - private readonly commentRepository: CommentRepository, - ) {} + constructor(private readonly commentService: CommentService) {} @Post('/') @ApiSuccessResponse(HttpStatus.CREATED, CommentWritingResponse) diff --git a/backend/src/app/comment/comment.service.ts b/backend/src/app/comment/comment.service.ts index 1d039159..47903fe3 100644 --- a/backend/src/app/comment/comment.service.ts +++ b/backend/src/app/comment/comment.service.ts @@ -40,7 +40,7 @@ export class CommentService { return result; } - async validateArticle(groupArticle: GroupArticle) { + validateArticle(groupArticle: GroupArticle) { if (!groupArticle) { throw new GroupNotFoundException(); } @@ -79,13 +79,13 @@ export class CommentService { async deleteComment(user: User, id: number) { const comment = await this.commentRepository.findById(id); - await this.validateDeleteComment(comment, user); + this.validateDeleteComment(comment, user); comment.delete(); await this.commentRepository.save(comment); } - async validateDeleteComment(comment: Comment, user: User) { + validateDeleteComment(comment: Comment, user: User) { if (!comment) { throw new CommentNotFoundException(); } diff --git a/backend/src/app/comment/dto/comment-writing-response.dto.ts b/backend/src/app/comment/dto/comment-writing-response.dto.ts index 17e089b6..fc3b2e3a 100644 --- a/backend/src/app/comment/dto/comment-writing-response.dto.ts +++ b/backend/src/app/comment/dto/comment-writing-response.dto.ts @@ -11,5 +11,6 @@ export class CommentWritingResponse { static from(comment: Comment) { const response = new CommentWritingResponse(); response.id = comment.id; + return response; } } From d6d0a162c12bad0edf62032fbc8a7855460b65c2 Mon Sep 17 00:00:00 2001 From: Gakko <90585081+pythonstrup@users.noreply.github.com> Date: Thu, 8 Dec 2022 15:45:28 +0900 Subject: [PATCH 115/142] =?UTF-8?q?[BUGFIX]=20=EB=82=B4=EA=B0=80=20?= =?UTF-8?q?=EC=B0=B8=EC=97=AC=ED=95=9C=20=EB=AA=A8=EC=9E=84=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20=ED=8E=98=EC=9D=B4=EC=A7=80=EB=84=A4=EC=9D=B4?= =?UTF-8?q?=EC=85=98=20(#263)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * โœจ feature: IMyApplicationResult ์ž‘์„ฑ * ๐Ÿ› fix: ์‚ญ์ œ ๊ฒŒ์‹œ๊ธ€๋กœ ์ธํ•ด ํŽ˜์ด์ง€๋„ค์ด์…˜์ด ๋ˆ„๋ฝ๋˜๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • * ๐Ÿฅ… chore: comment total count ์ˆ˜์ • --- backend/src/app/comment/comment.controller.ts | 13 ++++--- backend/src/app/comment/comment.repository.ts | 13 ++----- backend/src/app/comment/comment.service.ts | 15 ++++---- .../dto/my-application-result.interface.ts | 5 +++ .../group-application.controller.ts | 13 ++++--- .../group-application.repository.ts | 38 ++++++++++++------- .../group-application.service.ts | 16 ++++---- 7 files changed, 62 insertions(+), 51 deletions(-) create mode 100644 backend/src/app/group-application/dto/my-application-result.interface.ts diff --git a/backend/src/app/comment/comment.controller.ts b/backend/src/app/comment/comment.controller.ts index 6479f127..5753c8f0 100644 --- a/backend/src/app/comment/comment.controller.ts +++ b/backend/src/app/comment/comment.controller.ts @@ -50,14 +50,15 @@ export class CommentController { @ApiSuccessResponse(HttpStatus.OK, GroupArticleCommentGetResponse) @ApiErrorResponse(GroupNotFoundException) async getComment(@Query() query: GetAllCommentQueryRequest) { - const { count, commentResponse } = await this.commentService.getComment({ - limit: query.getLimit(), - offset: query.getOffset(), - articleId: query.articleId, - }); + const { totalCount, commentResponse } = + await this.commentService.getComment({ + limit: query.getLimit(), + offset: query.getOffset(), + articleId: query.articleId, + }); const data = new GroupArticleCommentGetResponse( - count, + totalCount, query.currentPage, query.countPerPage, commentResponse, diff --git a/backend/src/app/comment/comment.repository.ts b/backend/src/app/comment/comment.repository.ts index c75e3f92..6609d66c 100644 --- a/backend/src/app/comment/comment.repository.ts +++ b/backend/src/app/comment/comment.repository.ts @@ -12,14 +12,7 @@ export class CommentRepository extends Repository { ); } - getTotalCount(articleId: number) { - return this.countBy({ - articleId, - deletedAt: IsNull(), - }); - } - - selectAllComments({ + async selectAllComments({ limit, offset, articleId, @@ -28,7 +21,7 @@ export class CommentRepository extends Repository { offset: number; articleId: number; }) { - return this.find({ + const [allCommentList, totalCount] = await this.findAndCount({ relations: { user: true, }, @@ -39,6 +32,8 @@ export class CommentRepository extends Repository { take: limit, skip: offset, }); + + return { allCommentList, totalCount }; } findById(id: number) { diff --git a/backend/src/app/comment/comment.service.ts b/backend/src/app/comment/comment.service.ts index 47903fe3..32c90c65 100644 --- a/backend/src/app/comment/comment.service.ts +++ b/backend/src/app/comment/comment.service.ts @@ -57,15 +57,14 @@ export class CommentService { }) { const groupArticle = await this.groupArticleRepository.findById(articleId); this.validateArticle(groupArticle); - const allCommentList = await this.commentRepository.selectAllComments({ - articleId, - limit, - offset, - }); - - const count = await this.commentRepository.getTotalCount(articleId); + const { allCommentList, totalCount } = + await this.commentRepository.selectAllComments({ + articleId, + limit, + offset, + }); const commentResponse = await this.bindCommentResponse(allCommentList); - return { count, commentResponse }; + return { totalCount, commentResponse }; } bindCommentResponse(allCommentList: Comment[]) { diff --git a/backend/src/app/group-application/dto/my-application-result.interface.ts b/backend/src/app/group-application/dto/my-application-result.interface.ts new file mode 100644 index 00000000..f6b83b1f --- /dev/null +++ b/backend/src/app/group-application/dto/my-application-result.interface.ts @@ -0,0 +1,5 @@ +export interface IMyApplicationResult { + id: number; + + groupId: number; +} diff --git a/backend/src/app/group-application/group-application.controller.ts b/backend/src/app/group-application/group-application.controller.ts index c2ea261c..4f387376 100644 --- a/backend/src/app/group-application/group-application.controller.ts +++ b/backend/src/app/group-application/group-application.controller.ts @@ -106,13 +106,14 @@ export class GroupApplicationController { @Get('me') @ApiSuccessResponse(HttpStatus.OK, MyGroupResponse) async findMyGroup(@CurrentUser() user: User, @Query() query: MyGroupRequest) { - const { response, count } = await this.groupApplicationService.findMyGroup({ - user, - limit: query.getLimit(), - offset: query.getOffset(), - }); + const { response, totalCount } = + await this.groupApplicationService.findMyGroup({ + user, + limit: query.getLimit(), + offset: query.getOffset(), + }); const data = new MyGroupResponse( - count, + totalCount, query.currentPage, query.countPerPage, response, diff --git a/backend/src/app/group-application/group-application.repository.ts b/backend/src/app/group-application/group-application.repository.ts index 288bc52c..2adfb091 100644 --- a/backend/src/app/group-application/group-application.repository.ts +++ b/backend/src/app/group-application/group-application.repository.ts @@ -8,6 +8,7 @@ import { Scrap } from '@app/scrap/entity/scrap.entity'; import { Comment } from '@app/comment/entity/comment.entity'; import { GroupArticle } from '@app/group-article/entity/group-article.entity'; import { IMyGroupResult } from '@app/group-application/dto/my-group-result.interface'; +import { IMyApplicationResult } from '@app/group-application/dto/my-application-result.interface'; @Injectable() export class GroupApplicationRepository extends Repository { @@ -27,10 +28,6 @@ export class GroupApplicationRepository extends Repository { return this.findOneBy({ userId, groupId, status }); } - findMyGroupCount(userId: number) { - return this.countBy({ userId, deletedAt: IsNull() }); - } - findApplicationCountByGroup(groupId: number) { return this.countBy({ groupId, deletedAt: IsNull() }); } @@ -44,16 +41,28 @@ export class GroupApplicationRepository extends Repository { limit: number; offset: number; }) { - const groupApplications = await this.find({ - where: { - userId, - deletedAt: IsNull(), - }, - take: limit, - skip: offset, - }); + const groupApplicationsQuery = this.createQueryBuilder('groupApplication') + .select([ + 'groupApplication.id as id', + 'groupApplication.groupId as groupId', + ]) + .leftJoin(Group, 'group', 'groupApplication.group_id = group.id') + .leftJoin( + GroupArticle, + 'groupArticle', + 'groupArticle.id = group.article_id', + ) + .where('groupApplication.deletedAt IS NULL') + .andWhere('groupApplication.user_id = :id', { id: userId }) + .andWhere('groupArticle.deletedAt IS NULL'); + + const totalCount = await groupApplicationsQuery.clone().getCount(); + const groupApplications = await groupApplicationsQuery + .limit(limit) + .offset(offset) + .getRawMany(); - return this.createQueryBuilder('groupApplication') + const result = await this.createQueryBuilder('groupApplication') .select([ 'groupArticle.id as groupArticleId', 'groupArticle.title as title', @@ -91,7 +100,10 @@ export class GroupApplicationRepository extends Repository { ), }) .groupBy('group.id') + .orderBy('group.id', 'DESC') .getRawMany(); + + return { result, totalCount }; } findAllApplicationByGroupWithUser(groupId: number) { diff --git a/backend/src/app/group-application/group-application.service.ts b/backend/src/app/group-application/group-application.service.ts index 6bfe13d9..036c9072 100644 --- a/backend/src/app/group-application/group-application.service.ts +++ b/backend/src/app/group-application/group-application.service.ts @@ -177,18 +177,16 @@ export class GroupApplicationService { limit: number; offset: number; }) { - const result = await this.groupApplicationRepository.findMyGroup({ - userId: user.id, - limit, - offset, - }); + const { result, totalCount } = + await this.groupApplicationRepository.findMyGroup({ + userId: user.id, + limit, + offset, + }); const response = await Promise.all( result.map((value) => GroupArticleResponse.from(value)), ); - const count = await this.groupApplicationRepository.findMyGroupCount( - user.id, - ); - return { response, count }; + return { response, totalCount }; } public async getAllParticipants(user: User, groupArticleId: number) { From 289bbd742f1995c49ef095b2213b45ce9b70b5d9 Mon Sep 17 00:00:00 2001 From: MinGyeong Park <37508296+kong430@users.noreply.github.com> Date: Thu, 8 Dec 2022 16:25:52 +0900 Subject: [PATCH 116/142] =?UTF-8?q?[Feature]=20=EC=97=90=EB=9F=AC=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=20-=20GET=20=EC=97=90=EB=9F=AC=20=EB=B0=9C?= =?UTF-8?q?=EC=83=9D=20modal=20(#261)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :sparkles: feature: ์—๋Ÿฌ ํŽ˜์ด์ง€ ๋ฌธ๊ตฌ ๊ฐ€์šด๋ฐ์ •๋ ฌ * :sparkles: feature: useAuthInfiniteQuery์—์„œ GET ์—๋Ÿฌ๋ฅผ ๋˜์ง€๋„๋ก ๋ณ€๊ฒฝ --- .../common/ErrorBoundary/ApiErrorBoundary.tsx | 22 ++++++++++++++++--- .../components/common/ErrorMessage/index.tsx | 2 ++ frontend/src/hooks/useAuthInfiniteQuery.ts | 3 ++- frontend/src/pages/_app.tsx | 4 ++-- 4 files changed, 25 insertions(+), 6 deletions(-) diff --git a/frontend/src/components/common/ErrorBoundary/ApiErrorBoundary.tsx b/frontend/src/components/common/ErrorBoundary/ApiErrorBoundary.tsx index 1a7de65b..da36aafd 100644 --- a/frontend/src/components/common/ErrorBoundary/ApiErrorBoundary.tsx +++ b/frontend/src/components/common/ErrorBoundary/ApiErrorBoundary.tsx @@ -1,3 +1,4 @@ +import { useRouter } from 'next/router'; import { Component, PropsWithChildren, useState } from 'react'; import { AxiosError } from 'axios'; @@ -35,13 +36,13 @@ class ApiErrorBoundary extends Component { if (!error) return children; if (error instanceof GetError) { - return ; + return ; } if (error instanceof RequestError) { return ( <> {children} - + ); } @@ -50,7 +51,22 @@ class ApiErrorBoundary extends Component { export default ApiErrorBoundary; -const ApiErrorModal = ({ message }: { message: string }) => { +const GetErrorModal = ({ message }: { message: string }) => { + const router = useRouter(); + const [open, setOpen] = useState(true); + return ( + { + setOpen(false); + router.back(); + }} + message={message} + /> + ); +}; + +const RequestErrorModal = ({ message }: { message: string }) => { const [open, setOpen] = useState(true); return setOpen(false)} message={message} />; }; diff --git a/frontend/src/components/common/ErrorMessage/index.tsx b/frontend/src/components/common/ErrorMessage/index.tsx index ca6c7163..e1c5c74e 100644 --- a/frontend/src/components/common/ErrorMessage/index.tsx +++ b/frontend/src/components/common/ErrorMessage/index.tsx @@ -39,6 +39,8 @@ const MessageWrapper = styled.div` flex-direction: column; align-items: center; justify-content: center; + width: 100%; + max-width: 600px; height: 100vh; `; diff --git a/frontend/src/hooks/useAuthInfiniteQuery.ts b/frontend/src/hooks/useAuthInfiniteQuery.ts index 075e2cc0..ca93ea25 100644 --- a/frontend/src/hooks/useAuthInfiniteQuery.ts +++ b/frontend/src/hooks/useAuthInfiniteQuery.ts @@ -9,6 +9,7 @@ import { import { AxiosError } from 'axios'; import AuthError from '@utils/errors/AuthError'; +import GetError from '@utils/errors/GetError'; const useAuthInfiniteQuery = < TQueryFnData = unknown, @@ -33,7 +34,7 @@ const useAuthInfiniteQuery = < if (error.response.status === 401) { throw new AuthError(); } - throw error; + throw new GetError(error.response.data.message); } return { ...rest }; }; diff --git a/frontend/src/pages/_app.tsx b/frontend/src/pages/_app.tsx index 864178da..5c196017 100644 --- a/frontend/src/pages/_app.tsx +++ b/frontend/src/pages/_app.tsx @@ -52,16 +52,16 @@ export default function App({ Component, pageProps }: AppProps<{ dehydratedState + - - + From 3aa19743c3df5476a406d8fce7664b0bf674e492 Mon Sep 17 00:00:00 2001 From: Gakko <90585081+pythonstrup@users.noreply.github.com> Date: Thu, 8 Dec 2022 16:34:28 +0900 Subject: [PATCH 117/142] =?UTF-8?q?[Feature]=20Group=20Application=20-=20?= =?UTF-8?q?=EC=B0=B8=EC=97=AC=EC=97=AC=EB=B6=80=20=EC=A1=B0=ED=9A=8C=20API?= =?UTF-8?q?=20Test=20=EC=9E=91=EC=84=B1=20(#255)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ๐Ÿฅ… chore: ํ…Œ์ŠคํŠธ ๋”๋ฏธ๋ฐ์ดํ„ฐ๋ฅผ ์œ„ํ•œ faker ์˜์กด์„ฑ ์„ค์น˜ * ๐Ÿฅ… chore: userFixture ๊ฐ€์งœ ๋žœ๋ค๋ฐ์ดํ„ฐ ์ถ”๊ฐ€ * โœจ feature: group category fixture ์ž‘์„ฑ * โœจ feature: group fixture ์ž‘์„ฑ * โœจ feature: group article fixture ์ž‘์„ฑ * ๐Ÿฅ… chore: ํ…Œ์ŠคํŠธ ์‹œ ๋กœ๊ทธ๊ฐ€ ๋œจ์ง€ ์•Š๋„๋ก ์ˆ˜์ • * ๐Ÿฅ… chore: fixture ์ˆ˜์ • - id ์ œ๊ฑฐ * โœจ feature: e2e ํ…Œ์ŠคํŠธ ์ž‘์„ฑ * โœจ feature: JWT ํ† ํฐ์ด ์—†์„ ๋•Œ test * ๐Ÿฅ… chore: fixture์— id๋ฅผ ์ง์ ‘ ๋„ฃ๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ - ์ •ํ™•ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด! --- backend/package-lock.json | 17 +++ backend/package.json | 3 +- backend/src/app.module.ts | 11 +- .../__test__/group-article.fixture.ts | 24 +++ .../__test__/group-category.fixture.ts | 13 ++ .../group-article/__test__/group.fixture.ts | 24 +++ backend/src/app/user/__test__/user.fixture.ts | 15 +- backend/test/group-application.e2e-spec.ts | 138 ++++++++++++++++++ backend/test/utils/jwt-test.utils.ts | 3 + 9 files changed, 237 insertions(+), 11 deletions(-) create mode 100644 backend/src/app/group-article/__test__/group-article.fixture.ts create mode 100644 backend/src/app/group-article/__test__/group-category.fixture.ts create mode 100644 backend/src/app/group-article/__test__/group.fixture.ts create mode 100644 backend/test/group-application.e2e-spec.ts create mode 100644 backend/test/utils/jwt-test.utils.ts diff --git a/backend/package-lock.json b/backend/package-lock.json index 74c15968..8f04d615 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -35,6 +35,7 @@ "typeorm-naming-strategies": "^4.1.0" }, "devDependencies": { + "@faker-js/faker": "^7.6.0", "@nestjs/cli": "^9.0.0", "@nestjs/schematics": "^9.0.0", "@nestjs/testing": "^9.0.0", @@ -873,6 +874,16 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, + "node_modules/@faker-js/faker": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-7.6.0.tgz", + "integrity": "sha512-XK6BTq1NDMo9Xqw/YkYyGjSsg44fbNwYRx7QK2CuoQgyy+f1rrTDHoExVM5PsyXCtfl2vs2vVJ0MN0yN6LppRw==", + "dev": true, + "engines": { + "node": ">=14.0.0", + "npm": ">=6.0.0" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.7", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", @@ -10603,6 +10614,12 @@ } } }, + "@faker-js/faker": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-7.6.0.tgz", + "integrity": "sha512-XK6BTq1NDMo9Xqw/YkYyGjSsg44fbNwYRx7QK2CuoQgyy+f1rrTDHoExVM5PsyXCtfl2vs2vVJ0MN0yN6LppRw==", + "dev": true + }, "@humanwhocodes/config-array": { "version": "0.11.7", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", diff --git a/backend/package.json b/backend/package.json index cde844c5..0b26428b 100644 --- a/backend/package.json +++ b/backend/package.json @@ -22,7 +22,7 @@ "test:watch": "env-cmd -f .env.test jest --watch", "test:cov": "env-cmd -f .env.test jest --coverage", "test:debug": "env-cmd -f .env.test node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", - "test:e2e": "env-cmd -f .env.test jest --config ./test/jest-e2e.json" + "test:e2e": "env-cmd -f .env.test jest -i --config ./test/jest-e2e.json" }, "dependencies": { "@js-joda/core": "^5.4.2", @@ -51,6 +51,7 @@ "typeorm-naming-strategies": "^4.1.0" }, "devDependencies": { + "@faker-js/faker": "^7.6.0", "@nestjs/cli": "^9.0.0", "@nestjs/schematics": "^9.0.0", "@nestjs/testing": "^9.0.0", diff --git a/backend/src/app.module.ts b/backend/src/app.module.ts index 424a364d..9842f253 100644 --- a/backend/src/app.module.ts +++ b/backend/src/app.module.ts @@ -16,6 +16,7 @@ import { CookieConfigModule } from '@config/cookie/config.module'; import { GroupApplicationModule } from '@app/group-application/group-application.module'; import { NotificationModule } from '@app/notification/notification.module'; import { CommentModule } from '@app/comment/comment.module'; +import { AppConfigService } from '@common/config/app/config.service'; @Module({ imports: [ @@ -37,9 +38,13 @@ import { CommentModule } from '@app/comment/comment.module'; providers: [AppService], }) export class AppModule implements NestModule { + constructor(private readonly appConfigSerivce: AppConfigService) {} + configure(consumer: MiddlewareConsumer) { - consumer - .apply(ApiSuccessLoggerMiddleware, ApiExceptionLoggerMiddleware) - .forRoutes('*'); + if (!this.appConfigSerivce.isTest()) { + consumer + .apply(ApiSuccessLoggerMiddleware, ApiExceptionLoggerMiddleware) + .forRoutes('*'); + } } } diff --git a/backend/src/app/group-article/__test__/group-article.fixture.ts b/backend/src/app/group-article/__test__/group-article.fixture.ts new file mode 100644 index 00000000..cc48b838 --- /dev/null +++ b/backend/src/app/group-article/__test__/group-article.fixture.ts @@ -0,0 +1,24 @@ +import { faker } from '@faker-js/faker'; +import { Group } from '@app/group-article/entity/group.entity'; +import { GroupArticle } from '@app/group-article/entity/group-article.entity'; + +export const getGroupArticleFixture = async ( + group: Group, + groupArticle: Partial = {}, +) => { + const fixture = new GroupArticle(); + fixture.id = groupArticle.id || faker.datatype.number(); + fixture.group = group; + group.article = new Promise((res, rej) => { + res(fixture); + }); + fixture.userId = (await groupArticle.user).id; + fixture.user = groupArticle.user; + fixture.title = groupArticle.title || faker.commerce.product(); + fixture.contents = + groupArticle.contents || faker.commerce.productDescription(); + fixture.type = 'GROUP'; + fixture.createdAt = new Date(); + fixture.updatedAt = new Date(); + return fixture; +}; diff --git a/backend/src/app/group-article/__test__/group-category.fixture.ts b/backend/src/app/group-article/__test__/group-category.fixture.ts new file mode 100644 index 00000000..eb67a275 --- /dev/null +++ b/backend/src/app/group-article/__test__/group-category.fixture.ts @@ -0,0 +1,13 @@ +import { GroupCategory } from '@app/group-article/entity/group-category.entity'; + +export const getGroupCategoryFixture = () => { + const categories = ['MEAL', 'STUDY', 'ETC', 'COMPETITION', 'PROJECT']; + return categories.map((category, index) => { + const fixture = new GroupCategory(); + fixture.id = index + 1; + fixture.name = category; + fixture.createdAt = new Date(); + fixture.updatedAt = new Date(); + return fixture; + }); +}; diff --git a/backend/src/app/group-article/__test__/group.fixture.ts b/backend/src/app/group-article/__test__/group.fixture.ts new file mode 100644 index 00000000..16a07628 --- /dev/null +++ b/backend/src/app/group-article/__test__/group.fixture.ts @@ -0,0 +1,24 @@ +import { faker } from '@faker-js/faker'; +import { + GROUP_STATUS, + LOCATION, +} from '@app/group-article/constants/group-article.constants'; +import { GroupCategory } from '@app/group-article/entity/group-category.entity'; +import { Group } from '@app/group-article/entity/group.entity'; + +export const getGroupFixture = ( + groupCategory: GroupCategory, + group: Partial = {}, +) => { + const fixture = new Group(); + fixture.id = group.id || faker.datatype.number(); + fixture.category = groupCategory; + fixture.location = LOCATION.ONLINE; + fixture.maxCapacity = group.maxCapacity || 10; + fixture.status = group.status || GROUP_STATUS.PROGRESS; + fixture.chatUrl = group.chatUrl || faker.internet.url(); + fixture.thumbnail = group.thumbnail || faker.internet.url(); + fixture.createdAt = new Date(); + fixture.updatedAt = new Date(); + return fixture; +}; diff --git a/backend/src/app/user/__test__/user.fixture.ts b/backend/src/app/user/__test__/user.fixture.ts index 0489d4ff..80701d2b 100644 --- a/backend/src/app/user/__test__/user.fixture.ts +++ b/backend/src/app/user/__test__/user.fixture.ts @@ -1,13 +1,14 @@ import { User } from '@app/user/entity/user.entity'; +import { faker } from '@faker-js/faker'; -export const getUserFixture = (user: Partial) => { +export const getUserFixture = (user: Partial = {}) => { const fixture = new User(); - fixture.id = user.id || 1; - fixture.userName = user.userName || 'tester001'; - fixture.githubUrl = user.githubUrl || ''; - fixture.blogUrl = user.blogUrl || ''; - fixture.description = user.description || ''; - fixture.profileImage = user.profileImage || ''; + fixture.id = user.id || faker.datatype.number({ min: 1, max: 10000 }); + fixture.userName = user.userName || faker.name.fullName(); + fixture.githubUrl = user.githubUrl || faker.internet.url(); + fixture.blogUrl = user.blogUrl || faker.internet.url(); + fixture.description = user.description || faker.commerce.productDescription(); + fixture.profileImage = user.profileImage || faker.internet.url(); fixture.socialId = user.socialId || '123'; fixture.socialType = user.socialType || 'GITHUB'; fixture.createdAt = new Date(); diff --git a/backend/test/group-application.e2e-spec.ts b/backend/test/group-application.e2e-spec.ts new file mode 100644 index 00000000..2581d7a9 --- /dev/null +++ b/backend/test/group-application.e2e-spec.ts @@ -0,0 +1,138 @@ +import { INestApplication } from '@nestjs/common'; +import { Test } from '@nestjs/testing'; +import { AppModule } from '@src/app.module'; +import { GroupArticle } from '@src/app/group-article/entity/group-article.entity'; +import { GroupCategory } from '@src/app/group-article/entity/group-category.entity'; +import { getGroupArticleFixture } from '@src/app/group-article/__test__/group-article.fixture'; +import { getGroupCategoryFixture } from '@src/app/group-article/__test__/group-category.fixture'; +import { getGroupFixture } from '@src/app/group-article/__test__/group.fixture'; +import { User } from '@src/app/user/entity/user.entity'; +import { getUserFixture } from '@src/app/user/__test__/user.fixture'; +import { setNestApp } from '@src/setNestApp'; +import { DataSource } from 'typeorm'; +import * as request from 'supertest'; +import { JwtTokenService } from '@src/common/module/jwt-token/jwt-token.service'; +import { setCookie } from './utils/jwt-test.utils'; + +describe('Group Application (e2e)', () => { + let app: INestApplication; + let dataSource: DataSource; + + beforeAll(async () => { + const moduleFixture = await Test.createTestingModule({ + imports: [AppModule], + }).compile(); + + app = moduleFixture.createNestApplication(); + + setNestApp(app); + + dataSource = app.get(DataSource); + + await app.init(); + }); + + beforeEach(async () => { + const groupCategoryRepository = dataSource.getRepository(GroupCategory); + const categories = getGroupCategoryFixture(); + await groupCategoryRepository.save(categories); + + const userRepository = dataSource.getRepository(User); + const user1 = getUserFixture({ id: 1 }); + const user2 = getUserFixture({ id: 2 }); + await userRepository.save([user1, user2]); + + const group1 = getGroupFixture(categories[1], { id: 1, maxCapacity: 2 }); + const group2 = getGroupFixture(categories[1], { id: 2 }); + + const groupArticleRepository = dataSource.getRepository(GroupArticle); + const groupArticle1 = await getGroupArticleFixture(group1, { + id: 1, + user: new Promise((res) => res(user1)), + userId: user1.id, + }); + const groupArticle2 = await getGroupArticleFixture(group2, { + id: 2, + user: new Promise((res) => res(user1)), + userId: user1.id, + }); + await groupArticleRepository.save([groupArticle1, groupArticle2]); + }); + + afterEach(async () => { + await dataSource.synchronize(true); + }); + + afterAll(async () => { + await dataSource.destroy(); + }); + + describe('GET /v1/group-applications/status?groupArticleId={id}', () => { + const url = (id: number) => + `/v1/group-applications/status?groupArticleId=${id}`; + + test('์ž์‹ ์ด ๋งŒ๋“  ๋ชจ์ง‘๊ฒŒ์‹œ๊ธ€ ์ฐธ์—ฌ์—ฌ๋ถ€ ์กฐํšŒ', async () => { + // given + const jwtService = app.get(JwtTokenService); + const user = await dataSource.getRepository(User).findOneBy({ id: 1 }); + const accessToken = jwtService.generateAccessToken(user); + const groupArticleId = 1; + + // when + const result = await request(app.getHttpServer()) + .get(url(groupArticleId)) + .set({ Cookie: setCookie(accessToken.accessToken) }); + + // then + expect(result.status).toEqual(200); + expect(result.body.data.isJoined).toEqual(true); + }); + + test('๋‚ด๊ฐ€ ์ฐธ์—ฌํ•œ ๋ชจ์ž„ ์ฐธ์—ฌ์—ฌ๋ถ€ ์กฐํšŒ', async () => { + // given + const jwtService = app.get(JwtTokenService); + const user = await dataSource.getRepository(User).findOneBy({ id: 2 }); + const accessToken = jwtService.generateAccessToken(user); + const groupArticleId = 1; + + // when + const result = await request(app.getHttpServer()) + .get(url(groupArticleId)) + .set({ Cookie: setCookie(accessToken.accessToken) }); + + // then + expect(result.status).toEqual(200); + expect(result.body.data.isJoined).toEqual(false); + }); + + test('์‹ ์ฒญํ•˜์ง€ ์•Š์€ ๋ชจ์ž„ ์ฐธ์—ฌ์—ฌ๋ถ€ ์กฐํšŒ', async () => { + // given + const jwtService = app.get(JwtTokenService); + const user = await dataSource.getRepository(User).findOneBy({ id: 2 }); + const accessToken = jwtService.generateAccessToken(user); + const groupArticleId = 1; + + // when + const result = await request(app.getHttpServer()) + .get(url(groupArticleId)) + .set({ Cookie: setCookie(accessToken.accessToken) }); + + // then + expect(result.status).toEqual(200); + expect(result.body.data.isJoined).toEqual(false); + }); + + test('JWT ํ† ํฐ์ด ์—†์„ ๋•Œ', async () => { + // given + const groupArticleId = 1; + + // when + const result = await request(app.getHttpServer()).get( + url(groupArticleId), + ); + + // then + expect(result.status).toEqual(401); + }); + }); +}); diff --git a/backend/test/utils/jwt-test.utils.ts b/backend/test/utils/jwt-test.utils.ts new file mode 100644 index 00000000..47b60fad --- /dev/null +++ b/backend/test/utils/jwt-test.utils.ts @@ -0,0 +1,3 @@ +export const setCookie = (accessToken: string) => { + return `access_token=${accessToken}`; +}; From 6308aa8c3dd41b4e40e9d8eb6512d550b88b5c31 Mon Sep 17 00:00:00 2001 From: yangseungchan Date: Thu, 8 Dec 2022 16:34:41 +0900 Subject: [PATCH 118/142] =?UTF-8?q?[Feature]=20=20=EC=B0=B8=EA=B0=80?= =?UTF-8?q?=ED=95=9C=20=EB=AA=A8=EC=9E=84=20=EC=A1=B0=ED=9A=8C=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=B6=94=EA=B0=80=20(#264)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ๐Ÿฅ… chore: ๊ฒŒ์‹œ๊ธ€ ๋ทฐ ๋กœ๋”ฉ ์ด๋ฆ„ ๋ณ€๊ฒฝ * :goal_net: chore: ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก ๋กœ๋”ฉ ์ปดํฌ๋„ŒํŠธ * :sparkles: feature: ๋‚ด๊ฐ€ ์ฐธ์—ฌํ•œ ๋ชจ์ž„ ํŽ˜์ด์ง€ ๊ตฌ์„ฑ, ๋ชฉ๋ก ๋กœ๋”ฉ ์ถ”๊ฐ€ * :goal_net: chore: ํ•„ํ„ฐ ์ ์šฉ์‹œ skeleton ๋ณด์ด๋„๋ก ์ˆ˜์ • * :goal_net: chore: ํŽ˜์ด์ง€๋‹น ๊ฒŒ์‹œ๊ธ€ ๊ฐ€์ ธ์˜ค๋Š” ๊ฐœ์ˆ˜ ์กฐ์ • * :bug: fix: ๋ฌดํ•œ์Šคํฌ๋กค ๋ฒ„๊ทธ ์ˆ˜์ • --- .../common/ArticleListLoading/index.tsx | 13 ++++++ .../index.tsx | 4 +- .../src/hooks/queries/useFetchComments.ts | 8 ++-- .../hooks/queries/useFetchGroupArticles.ts | 4 +- .../src/hooks/queries/useFetchMyArticles.ts | 26 ----------- .../queries/useFetchMyParticipateArticles.ts | 45 +++++++++++++++++++ .../hooks/queries/useFetchMyWriteArticles.ts | 13 ++++-- .../hooks/queries/useFetchNotifications.ts | 2 +- frontend/src/pages/article/[id].tsx | 4 +- frontend/src/pages/index.tsx | 9 +++- frontend/src/pages/my/participate.tsx | 25 ++++++----- frontend/src/pages/my/write.tsx | 12 ++--- frontend/src/styles/theme.ts | 3 -- 13 files changed, 107 insertions(+), 61 deletions(-) create mode 100644 frontend/src/components/common/ArticleListLoading/index.tsx rename frontend/src/components/common/{ArticleLoading => ArticleViewLoading}/index.tsx (94%) delete mode 100644 frontend/src/hooks/queries/useFetchMyArticles.ts create mode 100644 frontend/src/hooks/queries/useFetchMyParticipateArticles.ts diff --git a/frontend/src/components/common/ArticleListLoading/index.tsx b/frontend/src/components/common/ArticleListLoading/index.tsx new file mode 100644 index 00000000..ed3e655a --- /dev/null +++ b/frontend/src/components/common/ArticleListLoading/index.tsx @@ -0,0 +1,13 @@ +import { Skeleton } from '@mantine/core'; + +const ArticleListLoading = () => { + return ( + <> + {new Array(8).fill(0).map((_, index) => ( + + ))} + + ); +}; + +export default ArticleListLoading; diff --git a/frontend/src/components/common/ArticleLoading/index.tsx b/frontend/src/components/common/ArticleViewLoading/index.tsx similarity index 94% rename from frontend/src/components/common/ArticleLoading/index.tsx rename to frontend/src/components/common/ArticleViewLoading/index.tsx index 2f04fa51..ff4113ff 100644 --- a/frontend/src/components/common/ArticleLoading/index.tsx +++ b/frontend/src/components/common/ArticleViewLoading/index.tsx @@ -1,7 +1,7 @@ import styled from '@emotion/styled'; import { Skeleton, Space } from '@mantine/core'; -const ArticleLoading = () => { +const ArticleViewLoading = () => { return ( <> @@ -46,4 +46,4 @@ const ArticleApplicationStatus = styled.div` justify-content: space-between; `; -export default ArticleLoading; +export default ArticleViewLoading; diff --git a/frontend/src/hooks/queries/useFetchComments.ts b/frontend/src/hooks/queries/useFetchComments.ts index fdbc8309..2d1543ec 100644 --- a/frontend/src/hooks/queries/useFetchComments.ts +++ b/frontend/src/hooks/queries/useFetchComments.ts @@ -9,7 +9,7 @@ import { clientAxios } from '@utils/commonAxios'; const getComments = async (currentPage: number, articleId: number) => { const { data: { data }, - } = await clientAxios.get>>('/v1/comments', { + } = await clientAxios.get>>('/v1/comments', { params: { articleId, currentPage, @@ -21,12 +21,12 @@ const getComments = async (currentPage: number, articleId: number) => { const useFetchComments = (articleId: number) => { const { data, ...rest } = useAuthInfiniteQuery< - PagingDataType, + PagingDataType, AxiosError, - PagingDataType + PagingDataType >(['comments', articleId], ({ pageParam = 1 }) => getComments(pageParam, articleId), { getNextPageParam: (lastPage) => - lastPage.totalPage === lastPage.currentPage ? undefined : lastPage.currentPage + 1, + lastPage.data.length === 0 ? undefined : lastPage.currentPage + 1, }); const comments = useMemo(() => (data ? data.pages.flatMap(({ data }) => data) : []), [data]); diff --git a/frontend/src/hooks/queries/useFetchGroupArticles.ts b/frontend/src/hooks/queries/useFetchGroupArticles.ts index 25c8cf51..b81c10c4 100644 --- a/frontend/src/hooks/queries/useFetchGroupArticles.ts +++ b/frontend/src/hooks/queries/useFetchGroupArticles.ts @@ -31,7 +31,7 @@ export const getGroupArticles = async ( const { data: { data }, } = await clientAxios('/v1/group-articles/search', { - params: { category, location, status, currentPage, countPerPage: 6 }, + params: { category, location, status, currentPage, countPerPage: 8 }, }); return data; }; @@ -46,7 +46,7 @@ const useFetchGroupArticles = ( ({ pageParam = 1 }) => getGroupArticles(pageParam, category, location, filterProgress), { getNextPageParam: (lastPage) => - lastPage.totalPage === lastPage.currentPage ? undefined : lastPage.currentPage + 1, + lastPage.data.length === 0 ? undefined : lastPage.currentPage + 1, } ); diff --git a/frontend/src/hooks/queries/useFetchMyArticles.ts b/frontend/src/hooks/queries/useFetchMyArticles.ts deleted file mode 100644 index 068178e5..00000000 --- a/frontend/src/hooks/queries/useFetchMyArticles.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { useInfiniteQuery } from '@tanstack/react-query'; -import { AxiosResponse } from 'axios'; - -import getTestMyGroupArticles from '@apis/test/getTestMyGroupArticles'; -import { ArticleType } from '@typings/types'; - -interface ArticleResponseType { - articles: ArticleType[]; - isLast: boolean; - currentId: number; -} - -const useFetchMyArticles = () => { - const { data, fetchNextPage, hasNextPage, isFetching, isError } = useInfiniteQuery( - ['articles', 'myparticipate'], - ({ pageParam = 0 }) => getTestMyGroupArticles(pageParam), - { - getNextPageParam: (lastPage: AxiosResponse) => - lastPage.data.isLast ? undefined : lastPage.data.currentId + 1, - } - ); - - return { data, fetchNextPage, hasNextPage, isFetching, isError }; -}; - -export default useFetchMyArticles; diff --git a/frontend/src/hooks/queries/useFetchMyParticipateArticles.ts b/frontend/src/hooks/queries/useFetchMyParticipateArticles.ts new file mode 100644 index 00000000..da045afe --- /dev/null +++ b/frontend/src/hooks/queries/useFetchMyParticipateArticles.ts @@ -0,0 +1,45 @@ +import { useMemo } from 'react'; + +import { useInfiniteQuery } from '@tanstack/react-query'; + +import { ArticlePreviewType } from '@typings/types'; +import { clientAxios } from '@utils/commonAxios'; + +interface ArticlePagingData { + totalPage: number; + currentPage: number; + countPerPage: number; + data: ArticlePreviewType[]; +} + +interface ArticleResponseType { + status: string; + message: string; + data: ArticlePagingData; +} + +const getMyParticipateArticles = async (currentPage: number) => { + const { + data: { data }, + } = await clientAxios.get('/v1/group-applications/me', { + params: { currentPage, countPerPage: 8 }, + }); + return data; +}; + +const useFetchMyParticipateArticles = () => { + const { data, ...rest } = useInfiniteQuery( + ['articles', 'myparticipate'], + ({ pageParam = 1 }) => getMyParticipateArticles(pageParam), + { + getNextPageParam: (lastPage) => + lastPage.data.length === 0 ? undefined : lastPage.currentPage + 1, + } + ); + + const articles = useMemo(() => (data ? data.pages.flatMap(({ data }) => data) : []), [data]); + + return { articles, ...rest }; +}; + +export default useFetchMyParticipateArticles; diff --git a/frontend/src/hooks/queries/useFetchMyWriteArticles.ts b/frontend/src/hooks/queries/useFetchMyWriteArticles.ts index acb2cade..2841df9a 100644 --- a/frontend/src/hooks/queries/useFetchMyWriteArticles.ts +++ b/frontend/src/hooks/queries/useFetchMyWriteArticles.ts @@ -1,3 +1,5 @@ +import { useMemo } from 'react'; + import { AxiosError } from 'axios'; import useAuthInfiniteQuery from '@hooks/useAuthInfiniteQuery'; @@ -21,21 +23,24 @@ const getMyWriteArticles = async (currentPage: number) => { const { data: { data }, } = await clientAxios.get('/v1/my-group-articles', { - params: { currentPage, countPerPage: 6 }, + params: { currentPage, countPerPage: 8 }, }); return data; }; const useFetchMyWriteArticles = () => { - const queryResult = useAuthInfiniteQuery( + const { data, ...rest } = useAuthInfiniteQuery( ['articles', 'mywrite'], ({ pageParam = 1 }) => getMyWriteArticles(pageParam), { getNextPageParam: (lastPage) => - lastPage.totalPage === lastPage.currentPage ? undefined : lastPage.currentPage + 1, + lastPage.data.length === 0 ? undefined : lastPage.currentPage + 1, } ); - return { ...queryResult }; + + const articles = useMemo(() => (data ? data.pages.flatMap(({ data }) => data) : []), [data]); + + return { articles, ...rest }; }; export default useFetchMyWriteArticles; diff --git a/frontend/src/hooks/queries/useFetchNotifications.ts b/frontend/src/hooks/queries/useFetchNotifications.ts index 5d01cd6d..18202dce 100644 --- a/frontend/src/hooks/queries/useFetchNotifications.ts +++ b/frontend/src/hooks/queries/useFetchNotifications.ts @@ -35,7 +35,7 @@ const useFetchNotifications = () => { NotificationPagingData >(['notifications'], ({ pageParam = 1 }) => getNotifications(pageParam), { getNextPageParam: (lastPage) => - lastPage.totalPage === lastPage.currentPage ? undefined : lastPage.currentPage + 1, + lastPage.data.length === 0 ? undefined : lastPage.currentPage + 1, refetchInterval: 3000, }); diff --git a/frontend/src/pages/article/[id].tsx b/frontend/src/pages/article/[id].tsx index 21b8d861..c7e5fa14 100644 --- a/frontend/src/pages/article/[id].tsx +++ b/frontend/src/pages/article/[id].tsx @@ -12,8 +12,8 @@ import CommentInput from '@components/article/CommentInput'; import MenuButton from '@components/article/MenuButton'; import ParticipantsModal from '@components/article/ParticipantsModal'; import ParticipateButton from '@components/article/ParticipateButton'; -import ArticleLoading from '@components/common/ArticleLoading'; import ArticleTag from '@components/common/ArticleTag'; +import ArticleViewLoading from '@components/common/ArticleViewLoading'; import Avatar from '@components/common/Avatar'; import Header from '@components/common/Header'; import DetailTitle from '@components/common/Header/DetailTitle'; @@ -89,7 +89,7 @@ const ArticleDetail = () => { <> {!article || isJoined === undefined || !myInfo || !participants ? ( - + ) : ( <> diff --git a/frontend/src/pages/index.tsx b/frontend/src/pages/index.tsx index 7516f51c..fd4978da 100644 --- a/frontend/src/pages/index.tsx +++ b/frontend/src/pages/index.tsx @@ -9,6 +9,7 @@ import styled from '@emotion/styled'; import { Checkbox } from '@mantine/core'; import { IconRefresh } from '@tabler/icons'; +import ArticleListLoading from '@components/common/ArticleListLoading'; import DropDown from '@components/common/DropDown'; import EmptyMessage from '@components/common/EmptyMessage'; import GroupArticleCard from '@components/common/GroupArticleCard'; @@ -45,7 +46,7 @@ const Main = () => { const [selectedLocation, setSelectedLocation] = useState(null); const [progressChecked, setProgressChecked] = useState(false); - const { articles, fetchNextPage, hasNextPage, isFetching } = useFetchGroupArticles( + const { articles, fetchNextPage, hasNextPage, isFetching, isLoading } = useFetchGroupArticles( selectedCategory, selectedLocation, progressChecked @@ -117,7 +118,11 @@ const Main = () => { - {articles.length > 0 ? ( + {isLoading ? ( + + + + ) : articles.length > 0 ? ( {articles.map((article) => ( diff --git a/frontend/src/pages/my/participate.tsx b/frontend/src/pages/my/participate.tsx index e8359082..4f86522e 100644 --- a/frontend/src/pages/my/participate.tsx +++ b/frontend/src/pages/my/participate.tsx @@ -1,18 +1,19 @@ import Link from 'next/link'; -import { useMemo } from 'react'; import styled from '@emotion/styled'; +import ArticleListLoading from '@components/common/ArticleListLoading'; import EmptyMessage from '@components/common/EmptyMessage'; import GroupArticleCard from '@components/common/GroupArticleCard'; import Header from '@components/common/Header'; import DetailTitle from '@components/common/Header/DetailTitle'; import PageLayout from '@components/common/PageLayout'; -import useFetchMyArticles from '@hooks/queries/useFetchMyArticles'; +import useFetchMyParticipateArticles from '@hooks/queries/useFetchMyParticipateArticles'; import useIntersect from '@hooks/useIntersect'; const MyParcipatePage = () => { - const { data, fetchNextPage, hasNextPage, isFetching } = useFetchMyArticles(); + const { articles, fetchNextPage, hasNextPage, isFetching, isLoading } = + useFetchMyParticipateArticles(); const ref = useIntersect((entry, observer) => { observer.unobserve(entry.target); @@ -21,10 +22,6 @@ const MyParcipatePage = () => { } }); - const articles = useMemo( - () => (data ? data.pages.flatMap(({ data }) => data.articles) : []), - [data] - ); return ( { } > - {articles.length ? ( + {isLoading ? ( + + + + ) : articles.length ? ( {articles.map((article) => ( -
    + -
    + ))}
    @@ -68,4 +69,8 @@ const ArticleList = styled.div` grid-gap: 1.3rem; `; +const CardLink = styled.div` + overflow: auto; +`; + export default MyParcipatePage; diff --git a/frontend/src/pages/my/write.tsx b/frontend/src/pages/my/write.tsx index f5ada256..61374d82 100644 --- a/frontend/src/pages/my/write.tsx +++ b/frontend/src/pages/my/write.tsx @@ -1,8 +1,8 @@ import Link from 'next/link'; -import { useMemo } from 'react'; import styled from '@emotion/styled'; +import ArticleListLoading from '@components/common/ArticleListLoading'; import EmptyMessage from '@components/common/EmptyMessage'; import GroupArticleCard from '@components/common/GroupArticleCard'; import Header from '@components/common/Header'; @@ -13,7 +13,7 @@ import useFetchMyWriteArticles from '@hooks/queries/useFetchMyWriteArticles'; import useIntersect from '@hooks/useIntersect'; const MyWriteArticlesPage = () => { - const { data, fetchNextPage, hasNextPage, isFetching } = useFetchMyWriteArticles(); + const { articles, fetchNextPage, hasNextPage, isFetching, isLoading } = useFetchMyWriteArticles(); const { OWN_GROUP: { title, subTitle }, @@ -26,12 +26,14 @@ const MyWriteArticlesPage = () => { } }); - const articles = useMemo(() => (data ? data.pages.flatMap(({ data }) => data) : []), [data]); - return ( } />}> - {articles.length ? ( + {isLoading ? ( + + + + ) : articles.length ? ( {articles.map((article) => ( diff --git a/frontend/src/styles/theme.ts b/frontend/src/styles/theme.ts index 3cde55c2..353332d8 100644 --- a/frontend/src/styles/theme.ts +++ b/frontend/src/styles/theme.ts @@ -5,9 +5,6 @@ const theme: MantineThemeOverride = { focusRing: 'auto', defaultRadius: 'sm', primaryColor: 'indigo', - activeStyles: { - transform: 'scale(0.95)', - }, defaultGradient: { from: 'indigo', to: 'cyan', From d839638eed17b9fba23bfde30c6320350b4db4b3 Mon Sep 17 00:00:00 2001 From: Gakko <90585081+pythonstrup@users.noreply.github.com> Date: Thu, 8 Dec 2022 18:50:11 +0900 Subject: [PATCH 119/142] =?UTF-8?q?[BUGFIX]=20=EC=B0=B8=EC=97=AC=ED=95=9C?= =?UTF-8?q?=20=EB=AA=A8=EC=A7=91=20=EA=B2=8C=EC=8B=9C=EA=B8=80=20=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=20=EC=A1=B0=ED=9A=8C=20500=EC=97=90=EB=9F=AC=20?= =?UTF-8?q?=EB=B0=9C=EC=83=9D=20(#268)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ๐Ÿ› fix: internal error ํ•ด๊ฒฐ - ํ•ด๋‹นํ•˜๋Š” ๊ฒฐ๊ณผ๊ฐ€ ์—†์„ ๋•Œ ๋นˆ๋ฐฐ์—ด ๋ฐ˜ํ™˜ * ๐Ÿฅ… chore: API ๋ช…์„ธ ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ์ˆ˜์ • - groupArticleId -> id * ๐Ÿฅ… chore: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” rej ์ œ๊ฑฐ --- .../group-application/dto/group-article-response.dto.ts | 4 ++-- .../app/group-application/group-application.repository.ts | 7 +++++++ .../app/group-article/__test__/group-article.fixture.ts | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/backend/src/app/group-application/dto/group-article-response.dto.ts b/backend/src/app/group-application/dto/group-article-response.dto.ts index ec417851..7abb0a44 100644 --- a/backend/src/app/group-application/dto/group-article-response.dto.ts +++ b/backend/src/app/group-application/dto/group-article-response.dto.ts @@ -13,7 +13,7 @@ export class GroupArticleResponse { description: '๋ชจ์ž„๊ฒŒ์‹œํŒ ์•„์ด๋””', required: true, }) - groupArticleId: number; + id: number; @ApiProperty({ example: 'CS ์Šคํ„ฐ๋”” ๋ชจ์ž„', @@ -88,7 +88,7 @@ export class GroupArticleResponse { static async from(myGroup: IMyGroupResult) { const response = new GroupArticleResponse(); - response.groupArticleId = myGroup.groupArticleId; + response.id = myGroup.groupArticleId; response.title = myGroup.title; response.location = myGroup.location; response.category = myGroup.category; diff --git a/backend/src/app/group-application/group-application.repository.ts b/backend/src/app/group-application/group-application.repository.ts index 2adfb091..d1cfd104 100644 --- a/backend/src/app/group-application/group-application.repository.ts +++ b/backend/src/app/group-application/group-application.repository.ts @@ -62,6 +62,13 @@ export class GroupApplicationRepository extends Repository { .offset(offset) .getRawMany(); + if (groupApplications.length < 1) { + return { + result: [], + totalCount, + }; + } + const result = await this.createQueryBuilder('groupApplication') .select([ 'groupArticle.id as groupArticleId', diff --git a/backend/src/app/group-article/__test__/group-article.fixture.ts b/backend/src/app/group-article/__test__/group-article.fixture.ts index cc48b838..477c6f73 100644 --- a/backend/src/app/group-article/__test__/group-article.fixture.ts +++ b/backend/src/app/group-article/__test__/group-article.fixture.ts @@ -9,7 +9,7 @@ export const getGroupArticleFixture = async ( const fixture = new GroupArticle(); fixture.id = groupArticle.id || faker.datatype.number(); fixture.group = group; - group.article = new Promise((res, rej) => { + group.article = new Promise((res) => { res(fixture); }); fixture.userId = (await groupArticle.user).id; From dec42a2716df65f7fc6ed12c3933533c6f85f35f Mon Sep 17 00:00:00 2001 From: Kim Myeongil <67570061+username1103@users.noreply.github.com> Date: Fri, 9 Dec 2022 10:57:50 +0900 Subject: [PATCH 120/142] =?UTF-8?q?[Feature]=20limit,=20offset=20=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=EB=84=A4=EC=9D=B4=EC=85=98=20=EB=B0=A9?= =?UTF-8?q?=EC=8B=9D=EC=97=90=EC=84=9C=20=EC=A0=84=EC=B2=B4=20=EA=B0=9C?= =?UTF-8?q?=EC=88=98=20=EC=A0=84=EB=8B=AC=ED=95=98=EA=B8=B0=20(#271)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit :sparkles: feature: ํŽ˜์ด์ง• ๊ฒฐ๊ณผ๊ฐ’์— ์ „์ฒด ๊ฐœ์ˆ˜๋„ ํฌํ•จํ•˜๊ธฐ --- backend/src/common/util/page-result.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/backend/src/common/util/page-result.ts b/backend/src/common/util/page-result.ts index 77995dd3..7fbbd146 100644 --- a/backend/src/common/util/page-result.ts +++ b/backend/src/common/util/page-result.ts @@ -25,6 +25,12 @@ export abstract class PageResult { return Math.ceil(this._totalCount / this._countPerPage); } + @Expose() + @ApiProperty({ example: 1991, description: '์ „์ฒด ๋ฐ์ดํ„ฐ ์ˆ˜' }) + get totalCount() { + return this._totalCount; + } + @Expose() @ApiProperty({ example: 1, description: 'ํ˜„์žฌ ํŽ˜์ด์ง€' }) get currentPage() { From 3e50803c626e23c6c293feef060c8375a2460759 Mon Sep 17 00:00:00 2001 From: yangseungchan Date: Fri, 9 Dec 2022 10:59:54 +0900 Subject: [PATCH 121/142] =?UTF-8?q?[Feature]=20=ED=94=84=EB=A1=9C=ED=95=84?= =?UTF-8?q?=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EB=B3=80=EA=B2=BD=20=EB=8C=80?= =?UTF-8?q?=EC=9D=91=20(#269)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/components/common/Image/index.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/frontend/src/components/common/Image/index.tsx b/frontend/src/components/common/Image/index.tsx index 5981611d..421848d7 100644 --- a/frontend/src/components/common/Image/index.tsx +++ b/frontend/src/components/common/Image/index.tsx @@ -1,6 +1,6 @@ // eslint-disable-next-line import/no-named-default import { ImageProps, default as NextImage } from 'next/image'; -import { useState } from 'react'; +import { useEffect, useState } from 'react'; interface Props extends ImageProps { defaultImgUrl?: string; @@ -11,6 +11,10 @@ const defaultImgPath = '/default.jpg'; const Image = ({ src, defaultImgUrl = defaultImgPath, ...rest }: Props) => { const [imgSrc, setImgSrc] = useState(src); + + useEffect(() => { + setImgSrc(src); + }, [src]); return setImgSrc(defaultImgPath)} />; }; From a2225b322149bf32b3abd173164099cd7ff7d1f2 Mon Sep 17 00:00:00 2001 From: MinGyeong Park <37508296+kong430@users.noreply.github.com> Date: Fri, 9 Dec 2022 19:42:36 +0900 Subject: [PATCH 122/142] =?UTF-8?q?:pencil2:=20fix:=20=EC=8B=A0=EC=B2=AD?= =?UTF-8?q?=ED=95=9C=20=EB=AA=A8=EC=9E=84=20=EB=AA=A8=EC=A7=91=EC=84=B1?= =?UTF-8?q?=EA=B3=B5=20=EC=8B=9C=20=EC=B1=84=ED=8C=85=EB=A7=81=ED=81=AC=20?= =?UTF-8?q?=EB=B3=B5=EC=82=AC=EB=B2=84=ED=8A=BC=20=EB=8C=80=EC=8B=A0=20?= =?UTF-8?q?=EB=AA=A8=EC=A7=91=EB=A7=88=EA=B0=90=20=EB=B2=84=ED=8A=BC?= =?UTF-8?q?=EC=9D=B4=20=EB=B3=B4=EC=9D=B4=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20(#273)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/pages/article/[id].tsx | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/frontend/src/pages/article/[id].tsx b/frontend/src/pages/article/[id].tsx index c7e5fa14..521c6cf2 100644 --- a/frontend/src/pages/article/[id].tsx +++ b/frontend/src/pages/article/[id].tsx @@ -48,11 +48,7 @@ const ArticleDetail = () => { const { data: isJoined } = useFetchApplicationStatus(articleId); const { data: participants } = useFetchParticipants(articleId); - const isUrlAvailable = - !!article && - !!participants && - isJoined && - getButtonStatus(article, participants.length, isJoined) === ParticipateButtonStatus.LINK; + const isUrlAvailable = getButtonStatus(article, isJoined) === ParticipateButtonStatus.LINK; const { url } = useFetchChatUrl(articleId, isUrlAvailable); const [participantsModalOpen, setParticipantsModalOpen] = useState(false); @@ -147,7 +143,7 @@ const ArticleDetail = () => { {article.author.id !== myInfo.id && ( @@ -162,9 +158,6 @@ const ArticleDetail = () => { )} - - {/* TODO participants API ์š”์ฒญ */} - 0 && { before: true })} components={comments.map((comment) => ( @@ -180,10 +173,8 @@ const ArticleDetail = () => { export default ArticleDetail; -const getButtonStatus = (article: ArticleType, currentCapacity: number, isJoined: boolean) => { - if (!article || isJoined === undefined || article.maxCapacity === currentCapacity) - return ParticipateButtonStatus.CLOSED; - +const getButtonStatus = (article: ArticleType, isJoined: boolean) => { + if (!article || isJoined === undefined) return ParticipateButtonStatus.CLOSED; switch (article.status) { case ArticleStatus.PROGRESS: return isJoined ? ParticipateButtonStatus.CANCEL : ParticipateButtonStatus.APPLY; From cc36dd15679ae5f8406c726db39a0c11322f8470 Mon Sep 17 00:00:00 2001 From: Gakko <90585081+pythonstrup@users.noreply.github.com> Date: Sun, 11 Dec 2022 14:08:21 +0900 Subject: [PATCH 123/142] =?UTF-8?q?[Feature]=20Group=20Application=20-=20?= =?UTF-8?q?=EC=B0=B8=EA=B0=80=20=EC=8B=A0=EC=B2=AD=20API=20Test=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1=20(#274)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * โœจ feature: group application fixture ์ž‘์„ฑ * โœจ feature: ์ฐธ๊ฐ€ ์‹ ์ฒญ API Test ์ž‘์„ฑ --- .../__test__/group-application.fixture.ts | 20 ++ .../__test__/group-article.fixture.ts | 2 +- .../group-article/__test__/group.fixture.ts | 2 +- backend/test/group-application.e2e-spec.ts | 192 ++++++++++++++++-- 4 files changed, 200 insertions(+), 16 deletions(-) create mode 100644 backend/src/app/group-application/__test__/group-application.fixture.ts diff --git a/backend/src/app/group-application/__test__/group-application.fixture.ts b/backend/src/app/group-application/__test__/group-application.fixture.ts new file mode 100644 index 00000000..b63588d6 --- /dev/null +++ b/backend/src/app/group-application/__test__/group-application.fixture.ts @@ -0,0 +1,20 @@ +import { faker } from '@faker-js/faker'; +import { Group } from '@app/group-article/entity/group.entity'; +import { GroupApplication } from '@app/group-application/entity/group-application.entity'; +import { GROUP_APPLICATION_STATUS } from '@src/app/group-article/constants/group-article.constants'; + +export const getGroupApplicationRegisterFixture = async ( + group: Group, + groupApplication: Partial = {}, +) => { + const fixture = new GroupApplication(); + fixture.id = groupApplication.id || faker.datatype.number(); + fixture.userId = (await groupApplication.user).id; + fixture.user = groupApplication.user; + fixture.groupId = group.id; + fixture.group = new Promise((res) => res(group)); + fixture.status = groupApplication.status || GROUP_APPLICATION_STATUS.REGISTER; + fixture.createdAt = new Date(); + fixture.updatedAt = new Date(); + return fixture; +}; diff --git a/backend/src/app/group-article/__test__/group-article.fixture.ts b/backend/src/app/group-article/__test__/group-article.fixture.ts index 477c6f73..74fd8430 100644 --- a/backend/src/app/group-article/__test__/group-article.fixture.ts +++ b/backend/src/app/group-article/__test__/group-article.fixture.ts @@ -7,7 +7,7 @@ export const getGroupArticleFixture = async ( groupArticle: Partial = {}, ) => { const fixture = new GroupArticle(); - fixture.id = groupArticle.id || faker.datatype.number(); + fixture.id = groupArticle.id || faker.datatype.number({ min: 1, max: 10000 }); fixture.group = group; group.article = new Promise((res) => { res(fixture); diff --git a/backend/src/app/group-article/__test__/group.fixture.ts b/backend/src/app/group-article/__test__/group.fixture.ts index 16a07628..e180c509 100644 --- a/backend/src/app/group-article/__test__/group.fixture.ts +++ b/backend/src/app/group-article/__test__/group.fixture.ts @@ -11,7 +11,7 @@ export const getGroupFixture = ( group: Partial = {}, ) => { const fixture = new Group(); - fixture.id = group.id || faker.datatype.number(); + fixture.id = group.id || faker.datatype.number({ min: 1, max: 10000 }); fixture.category = groupCategory; fixture.location = LOCATION.ONLINE; fixture.maxCapacity = group.maxCapacity || 10; diff --git a/backend/test/group-application.e2e-spec.ts b/backend/test/group-application.e2e-spec.ts index 2581d7a9..1b5441c9 100644 --- a/backend/test/group-application.e2e-spec.ts +++ b/backend/test/group-application.e2e-spec.ts @@ -1,18 +1,22 @@ import { INestApplication } from '@nestjs/common'; import { Test } from '@nestjs/testing'; import { AppModule } from '@src/app.module'; -import { GroupArticle } from '@src/app/group-article/entity/group-article.entity'; -import { GroupCategory } from '@src/app/group-article/entity/group-category.entity'; -import { getGroupArticleFixture } from '@src/app/group-article/__test__/group-article.fixture'; -import { getGroupCategoryFixture } from '@src/app/group-article/__test__/group-category.fixture'; -import { getGroupFixture } from '@src/app/group-article/__test__/group.fixture'; -import { User } from '@src/app/user/entity/user.entity'; -import { getUserFixture } from '@src/app/user/__test__/user.fixture'; +import { GroupArticle } from '@app/group-article/entity/group-article.entity'; +import { GroupCategory } from '@app/group-article/entity/group-category.entity'; +import { getGroupArticleFixture } from '@app/group-article/__test__/group-article.fixture'; +import { getGroupCategoryFixture } from '@app/group-article/__test__/group-category.fixture'; +import { getGroupFixture } from '@app/group-article/__test__/group.fixture'; +import { User } from '@app/user/entity/user.entity'; +import { getUserFixture } from '@app/user/__test__/user.fixture'; import { setNestApp } from '@src/setNestApp'; import { DataSource } from 'typeorm'; import * as request from 'supertest'; -import { JwtTokenService } from '@src/common/module/jwt-token/jwt-token.service'; +import { JwtTokenService } from '@common/module/jwt-token/jwt-token.service'; import { setCookie } from './utils/jwt-test.utils'; +import { GroupApplication } from '@app/group-application/entity/group-application.entity'; +import { getGroupApplicationRegisterFixture } from '@app/group-application/__test__/group-application.fixture'; +import { GROUP_STATUS } from '@app/group-article/constants/group-article.constants'; +import { Group } from '@app/group-article/entity/group.entity'; describe('Group Application (e2e)', () => { let app: INestApplication; @@ -67,11 +71,11 @@ describe('Group Application (e2e)', () => { await dataSource.destroy(); }); - describe('GET /v1/group-applications/status?groupArticleId={id}', () => { + describe('์‹ ์ฒญ ์—ฌ๋ถ€ ์กฐํšŒ GET /v1/group-applications/status?groupArticleId={id}', () => { const url = (id: number) => `/v1/group-applications/status?groupArticleId=${id}`; - test('์ž์‹ ์ด ๋งŒ๋“  ๋ชจ์ง‘๊ฒŒ์‹œ๊ธ€ ์ฐธ์—ฌ์—ฌ๋ถ€ ์กฐํšŒ', async () => { + test('์ž์‹ ์ด ๋งŒ๋“  ๋ชจ์ง‘๊ฒŒ์‹œ๊ธ€ ์ฐธ์—ฌ์—ฌ๋ถ€ ์กฐํšŒ ์‹œ 200 ์ฝ”๋“œ์™€ isJoined true๋ฅผ ๋˜์ง„๋‹ค.', async () => { // given const jwtService = app.get(JwtTokenService); const user = await dataSource.getRepository(User).findOneBy({ id: 1 }); @@ -88,12 +92,27 @@ describe('Group Application (e2e)', () => { expect(result.body.data.isJoined).toEqual(true); }); - test('๋‚ด๊ฐ€ ์ฐธ์—ฌํ•œ ๋ชจ์ž„ ์ฐธ์—ฌ์—ฌ๋ถ€ ์กฐํšŒ', async () => { + test('๋‚ด๊ฐ€ ์ฐธ์—ฌํ•œ ๋ชจ์ž„ ์ฐธ์—ฌ์—ฌ๋ถ€ ์กฐํšŒํ•  ์‹œ 200์ฝ”๋“œ์™€ isJoined true๋ฅผ ๋˜์ง„๋‹ค.', async () => { // given const jwtService = app.get(JwtTokenService); const user = await dataSource.getRepository(User).findOneBy({ id: 2 }); const accessToken = jwtService.generateAccessToken(user); + + const groupApplicationRepository = + dataSource.getRepository(GroupApplication); + const groupArticleRepository = dataSource.getRepository(GroupArticle); const groupArticleId = 1; + const groupArticle = await groupArticleRepository.findOneBy({ + id: groupArticleId, + }); + const group = groupArticle.group; + + const groupApplication = await getGroupApplicationRegisterFixture(group, { + id: 1, + user: new Promise(async (res) => res(user)), + userId: user.id, + }); + await groupApplicationRepository.save(groupApplication); // when const result = await request(app.getHttpServer()) @@ -102,10 +121,10 @@ describe('Group Application (e2e)', () => { // then expect(result.status).toEqual(200); - expect(result.body.data.isJoined).toEqual(false); + expect(result.body.data.isJoined).toEqual(true); }); - test('์‹ ์ฒญํ•˜์ง€ ์•Š์€ ๋ชจ์ž„ ์ฐธ์—ฌ์—ฌ๋ถ€ ์กฐํšŒ', async () => { + test('์‹ ์ฒญํ•˜์ง€ ์•Š์€ ๋ชจ์ž„ ์ฐธ์—ฌ์—ฌ๋ถ€ ์กฐํšŒํ•  ์‹œ 200 ์ฝ”๋“œ์™€ isJoined false๋ฅผ ๋˜์ง„๋‹ค.', async () => { // given const jwtService = app.get(JwtTokenService); const user = await dataSource.getRepository(User).findOneBy({ id: 2 }); @@ -122,7 +141,7 @@ describe('Group Application (e2e)', () => { expect(result.body.data.isJoined).toEqual(false); }); - test('JWT ํ† ํฐ์ด ์—†์„ ๋•Œ', async () => { + test('JWT ํ† ํฐ์ด ์—†์„ ๋•Œ 401 ์—๋Ÿฌ๋ฅผ ๋˜์ง„๋‹ค.', async () => { // given const groupArticleId = 1; @@ -135,4 +154,149 @@ describe('Group Application (e2e)', () => { expect(result.status).toEqual(401); }); }); + + describe('๋ชจ์ง‘ ์‹ ์ฒญํ•˜๊ธฐ POST /group-applications', () => { + const url = () => `/v1/group-applications`; + + test('๋ชจ์ง‘ ์‹ ์ฒญํ•˜๊ธฐ ์ •์ƒ ์ž‘๋™ ์‹œ 201 ์ฝ”๋“œ๋ฅผ ๋˜์ง„๋‹ค.', async () => { + // given + const jwtService = app.get(JwtTokenService); + const user = await dataSource.getRepository(User).findOneBy({ id: 2 }); + const accessToken = jwtService.generateAccessToken(user); + const groupArticleId = 1; + + // when + const result = await request(app.getHttpServer()) + .post(url()) + .send({ + groupArticleId, + }) + .set({ Cookie: setCookie(accessToken.accessToken) }); + + // then + const groupArticle = await dataSource + .getRepository(GroupArticle) + .findOneBy({ id: groupArticleId }); + const application = await dataSource + .getRepository(GroupApplication) + .findOneBy({ userId: user.id, groupId: groupArticle.group.id }); + + expect(result.status).toEqual(201); + expect(result.body.data.id).toEqual(application.id); + }); + + test('์ด๋ฏธ ์‹ ์ฒญ๋œ ์œ ์ €์ผ ๋•Œ 400์—๋Ÿฌ๋ฅผ ๋˜์ง„๋‹ค.', async () => { + // given + const jwtService = app.get(JwtTokenService); + const user = await dataSource.getRepository(User).findOneBy({ id: 2 }); + const accessToken = jwtService.generateAccessToken(user); + + const groupApplicationRepository = + dataSource.getRepository(GroupApplication); + const groupArticleRepository = dataSource.getRepository(GroupArticle); + const groupArticleId = 1; + const groupArticle = await groupArticleRepository.findOneBy({ + id: groupArticleId, + }); + const group = groupArticle.group; + + const groupApplication = await getGroupApplicationRegisterFixture(group, { + id: 1, + user: new Promise(async (res) => res(user)), + userId: user.id, + }); + await groupApplicationRepository.save(groupApplication); + + // when + const result = await request(app.getHttpServer()) + .post(url()) + .send({ + groupArticleId, + }) + .set({ Cookie: setCookie(accessToken.accessToken) }); + + // then + expect(result.status).toEqual(400); + }); + + test('๋‹น์‹ ์ด ๋งŒ๋“  ๊ทธ๋ฃน์— ์ฐธ๊ฐ€ ์‹ ์ฒญ์„ ํ•˜๋ฉด 400 ์—๋Ÿฌ๋ฅผ ๋˜์ง„๋‹ค.', async () => { + // given + const jwtService = app.get(JwtTokenService); + const user = await dataSource.getRepository(User).findOneBy({ id: 1 }); + const accessToken = jwtService.generateAccessToken(user); + const groupArticleId = 1; + + // when + const result = await request(app.getHttpServer()) + .post(url()) + .send({ + groupArticleId, + }) + .set({ Cookie: setCookie(accessToken.accessToken) }); + + // then + expect(result.status).toEqual(400); + }); + + test('๋ชจ์ž„์ด ๋ชจ์ง‘์ด ๋งˆ๊ฐ๋œ ๊ทธ๋ฃน์— ์ฐธ๊ฐ€ ์‹ ์ฒญ์„ ํ•˜๋ฉด 400 ์—๋Ÿฌ๋ฅผ ๋˜์ง„๋‹ค.', async () => { + // given + const jwtService = app.get(JwtTokenService); + const user = await dataSource.getRepository(User).findOneBy({ id: 2 }); + const accessToken = jwtService.generateAccessToken(user); + + const groupArticleRepository = dataSource.getRepository(GroupArticle); + const groupRepository = dataSource.getRepository(Group); + const groupArticleId = 1; + const groupArticle = await groupArticleRepository.findOneBy({ + id: groupArticleId, + }); + + const group = groupArticle.group; + group.status = GROUP_STATUS.FAIL; + await groupRepository.save(group); + + // when + const result = await request(app.getHttpServer()) + .post(url()) + .send({ + groupArticleId, + }) + .set({ Cookie: setCookie(accessToken.accessToken) }); + + // then + expect(result.status).toEqual(400); + }); + + test('JWT ํ† ํฐ์ด ์กด์žฌํ•˜์ง€ ์•Š์„ ๋•Œ 401์—๋Ÿฌ๋ฅผ ๋˜์ง„๋‹ค.', async () => { + // given + const groupArticleId = 1; + + // when + const result = await request(app.getHttpServer()).post(url()).send({ + groupArticleId, + }); + + // then + expect(result.status).toEqual(401); + }); + + test('์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ทธ๋ฃน์— ์ฐธ๊ฐ€์‹ ์ฒญ์„ ํ•˜๋ฉด 404 ์—๋Ÿฌ๋ฅผ ๋˜์ง„๋‹ค.', async () => { + // given + const jwtService = app.get(JwtTokenService); + const user = await dataSource.getRepository(User).findOneBy({ id: 2 }); + const accessToken = jwtService.generateAccessToken(user); + const groupArticleId = 1000; + + // when + const result = await request(app.getHttpServer()) + .post(url()) + .send({ + groupArticleId, + }) + .set({ Cookie: setCookie(accessToken.accessToken) }); + + // then + expect(result.status).toEqual(404); + }); + }); }); From 12ff70d4cc93a67c97861cd6bef03ad30408fd87 Mon Sep 17 00:00:00 2001 From: MinGyeong Park <37508296+kong430@users.noreply.github.com> Date: Sun, 11 Dec 2022 14:22:04 +0900 Subject: [PATCH 124/142] =?UTF-8?q?:sparkles:=20feature:=20useDefferedResp?= =?UTF-8?q?onse=20hook=20=EC=83=9D=EC=84=B1=20=EB=B0=8F=20skeleton=20?= =?UTF-8?q?=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=EC=97=90=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9=20(#278)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/ArticleListLoading/index.tsx | 8 ++++++++ .../common/ArticleViewLoading/index.tsx | 8 ++++++++ frontend/src/hooks/useDeferredResponse.ts | 16 ++++++++++++++++ 3 files changed, 32 insertions(+) create mode 100644 frontend/src/hooks/useDeferredResponse.ts diff --git a/frontend/src/components/common/ArticleListLoading/index.tsx b/frontend/src/components/common/ArticleListLoading/index.tsx index ed3e655a..43efa435 100644 --- a/frontend/src/components/common/ArticleListLoading/index.tsx +++ b/frontend/src/components/common/ArticleListLoading/index.tsx @@ -1,6 +1,14 @@ import { Skeleton } from '@mantine/core'; +import useDeferredResponse from '@hooks/useDeferredResponse'; + const ArticleListLoading = () => { + const isDeferred = useDeferredResponse(); + + if (!isDeferred) { + return <>; + } + return ( <> {new Array(8).fill(0).map((_, index) => ( diff --git a/frontend/src/components/common/ArticleViewLoading/index.tsx b/frontend/src/components/common/ArticleViewLoading/index.tsx index ff4113ff..7e48fe17 100644 --- a/frontend/src/components/common/ArticleViewLoading/index.tsx +++ b/frontend/src/components/common/ArticleViewLoading/index.tsx @@ -1,7 +1,15 @@ import styled from '@emotion/styled'; import { Skeleton, Space } from '@mantine/core'; +import useDeferredResponse from '@hooks/useDeferredResponse'; + const ArticleViewLoading = () => { + const isDeferred = useDeferredResponse(); + + if (!isDeferred) { + return <>; + } + return ( <> diff --git a/frontend/src/hooks/useDeferredResponse.ts b/frontend/src/hooks/useDeferredResponse.ts new file mode 100644 index 00000000..8c4346ed --- /dev/null +++ b/frontend/src/hooks/useDeferredResponse.ts @@ -0,0 +1,16 @@ +import { useEffect, useState } from 'react'; + +const useDeferredResponse = () => { + const [isDeferred, setIsDeferred] = useState(false); + + useEffect(() => { + const timeout = setTimeout(() => { + setIsDeferred(true); + }, 200); + return () => clearTimeout(timeout); + }, []); + + return isDeferred; +}; + +export default useDeferredResponse; From c4e5f44fe74bd565a01eb7d5a3daf542c035b8ef Mon Sep 17 00:00:00 2001 From: yangseungchan Date: Sun, 11 Dec 2022 14:32:13 +0900 Subject: [PATCH 125/142] =?UTF-8?q?[Feature]=20=ED=94=8C=EB=A1=9C=ED=8C=85?= =?UTF-8?q?=20=EB=B2=84=ED=8A=BC=20=EC=9C=84=EC=B9=98=EB=A5=BC=20=EB=AA=A8?= =?UTF-8?q?=EB=B0=94=EC=9D=BC=20=ED=99=94=EB=A9=B4=20=EC=95=88=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EB=84=A3=EA=B8=B0=20(#283)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ๐Ÿฅ… chore: ํ”Œ๋กœํŒ… ํ™”๋ฉด ์œ„์น˜๋ฅผ ๋ชจ๋ฐ”์ผ ํ™”๋ฉด ์•ˆ์œผ๋กœ ๋„ฃ๊ธฐ --- frontend/src/components/common/FloatingButton/styles.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/frontend/src/components/common/FloatingButton/styles.tsx b/frontend/src/components/common/FloatingButton/styles.tsx index 2337f4e2..4a5dd16e 100644 --- a/frontend/src/components/common/FloatingButton/styles.tsx +++ b/frontend/src/components/common/FloatingButton/styles.tsx @@ -9,7 +9,10 @@ const _FABWrapper = styled(ActionIcon)` position: fixed; bottom: 7.2rem; right: 1.6rem; - z-index: 100; + z-index: 200; + @media screen and (min-width: 600px) { + right: calc(50vw - 300px + 1.6rem); + } `; const FABWrapper = createPolymorphicComponent<'button', ActionIconProps>(_FABWrapper); From 45637169cbccd6e354aa410ba538090d7e257a51 Mon Sep 17 00:00:00 2001 From: Gakko <90585081+pythonstrup@users.noreply.github.com> Date: Sun, 11 Dec 2022 14:35:06 +0900 Subject: [PATCH 126/142] =?UTF-8?q?[Feature]=20=EA=B2=8C=EC=8B=9C=EB=AC=BC?= =?UTF-8?q?=20=EC=9E=91=EC=84=B1=EC=9E=90=EC=97=90=EA=B2=8C=EB=8F=84=20?= =?UTF-8?q?=EB=8C=93=EA=B8=80=20=EC=95=8C=EB=A6=BC=EC=9D=B4=20=EA=B0=80?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EC=84=A4=EC=A0=95=20(#280)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit โœจ feature: ๊ฒŒ์‹œ๋ฌผ ์ž‘์„ฑ์ž์—๊ฒŒ๋„ ๋Œ“๊ธ€ ์•Œ๋ฆผ์ด ๊ฐ€๋„๋ก ์„ค์ • (#280) --- backend/src/app/notification/notification.listener.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/backend/src/app/notification/notification.listener.ts b/backend/src/app/notification/notification.listener.ts index b619c5f0..3dd2c07c 100644 --- a/backend/src/app/notification/notification.listener.ts +++ b/backend/src/app/notification/notification.listener.ts @@ -102,7 +102,9 @@ export class NotificationListener { const targetUsers = await this.notificationSettingRepository.findTargetUsers({ type: NOTIFICATION_SETTING_TYPE.COMMENT, - userIds: commentList.map((comment) => comment.userId), + userIds: commentList + .map((comment) => comment.userId) + .concat(groupArticle.userId), }); const notification = await Notification.createCommentAddedNotification( From 72cfe211c250cdfdc805239047b9c1eda8337400 Mon Sep 17 00:00:00 2001 From: Gakko <90585081+pythonstrup@users.noreply.github.com> Date: Sun, 11 Dec 2022 14:38:56 +0900 Subject: [PATCH 127/142] =?UTF-8?q?[BUGFIX]=20=EB=AA=A8=EC=A7=91=EC=99=84?= =?UTF-8?q?=EB=A3=8C=EC=8B=9C=20=EB=A7=88=EC=A7=80=EB=A7=89=20=EC=B0=B8?= =?UTF-8?q?=EA=B0=80=EC=8B=A0=EC=B2=AD=EC=9E=90=EC=97=90=EA=B2=8C=20?= =?UTF-8?q?=EC=95=8C=EB=A6=BC=EC=9D=B4=20=EA=B0=80=EC=A7=80=20=EC=95=8A?= =?UTF-8?q?=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20(#281)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ๐Ÿ› fix: ๋ชจ์ง‘์™„๋ฃŒ์‹œ ๋งˆ์ง€๋ง‰ ์ฐธ๊ฐ€์‹ ์ฒญ์ž์—๊ฒŒ ์•Œ๋ฆผ์ด ๊ฐ€์ง€ ์•Š๋Š” ๋ฌธ์ œํ•ด๊ฒฐ - ๋น„๋™๊ธฐ ๋ฌธ์ œ --- .../app/group-application/group-application.service.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/backend/src/app/group-application/group-application.service.ts b/backend/src/app/group-application/group-application.service.ts index 036c9072..25cedefe 100644 --- a/backend/src/app/group-application/group-application.service.ts +++ b/backend/src/app/group-application/group-application.service.ts @@ -75,8 +75,8 @@ export class GroupApplicationService { }); const groupApplication = GroupApplication.create(user, group); - const result = this.groupApplicationRepository.save(groupApplication); - this.checkGroupComplete(groupArticle, groupApplicationCount); + const result = await this.groupApplicationRepository.save(groupApplication); + await this.checkGroupComplete(groupArticle, groupApplicationCount); return result; } @@ -109,13 +109,13 @@ export class GroupApplicationService { } } - private checkGroupComplete( + private async checkGroupComplete( groupArticle: GroupArticle, groupApplicationCount: number, ) { if (groupArticle.group.maxCapacity <= groupApplicationCount + 1) { groupArticle.group.complete(); - this.groupArticleRepository.save(groupArticle); + await this.groupArticleRepository.save(groupArticle); this.eventEmitter.emit( 'group.succeed', new GroupSucceedEvent(groupArticle), From 0cd8102e851b3740ee10d9eb2c8f08d1c2609a1f Mon Sep 17 00:00:00 2001 From: Gakko <90585081+pythonstrup@users.noreply.github.com> Date: Mon, 12 Dec 2022 11:41:51 +0900 Subject: [PATCH 128/142] =?UTF-8?q?[Feature]=20Group=20Application=20-=20?= =?UTF-8?q?=EC=B0=B8=EA=B0=80=20=EC=8B=A0=EC=B2=AD=EC=9E=90=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20API=20Test=20(#290)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit โœจ feature: ์ฐธ๊ฐ€ ์‹ ์ฒญ์ž ์กฐํšŒ API ํ…Œ์ŠคํŠธ ์ž‘์„ฑ --- backend/test/group-application.e2e-spec.ts | 201 ++++++++++++++++++++- 1 file changed, 199 insertions(+), 2 deletions(-) diff --git a/backend/test/group-application.e2e-spec.ts b/backend/test/group-application.e2e-spec.ts index 1b5441c9..3acd485e 100644 --- a/backend/test/group-application.e2e-spec.ts +++ b/backend/test/group-application.e2e-spec.ts @@ -61,6 +61,26 @@ describe('Group Application (e2e)', () => { userId: user1.id, }); await groupArticleRepository.save([groupArticle1, groupArticle2]); + + const groupApplication1 = await getGroupApplicationRegisterFixture( + groupArticle1.group, + { + id: 1, + user: new Promise(async (res) => res(user1)), + userId: user1.id, + }, + ); + const groupApplication2 = await getGroupApplicationRegisterFixture( + groupArticle2.group, + { + id: 2, + user: new Promise(async (res) => res(user1)), + userId: user1.id, + }, + ); + await dataSource + .getRepository(GroupApplication) + .save([groupApplication1, groupApplication2]); }); afterEach(async () => { @@ -108,7 +128,7 @@ describe('Group Application (e2e)', () => { const group = groupArticle.group; const groupApplication = await getGroupApplicationRegisterFixture(group, { - id: 1, + id: 3, user: new Promise(async (res) => res(user)), userId: user.id, }); @@ -201,7 +221,7 @@ describe('Group Application (e2e)', () => { const group = groupArticle.group; const groupApplication = await getGroupApplicationRegisterFixture(group, { - id: 1, + id: 3, user: new Promise(async (res) => res(user)), userId: user.id, }); @@ -299,4 +319,181 @@ describe('Group Application (e2e)', () => { expect(result.status).toEqual(404); }); }); + + describe('๋‚ด๊ฐ€ ์ฐธ์—ฌํ•œ ๋ชจ์ž„ ์กฐํšŒ GET /group-applications/me', () => { + const url = (id: number) => + `/v1/group-applications/participants?groupArticleId=${id}`; + + test('๋ชจ์ง‘ ์‹ ์ฒญํ•˜๊ธฐ ์ •์ƒ ์ž‘๋™ ์‹œ 200 ์ฝ”๋“œ๋ฅผ ๋˜์ง€๊ณ  ์‹ ์ฒญํ•œ ์œ ์ €๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.(์‹ ์ฒญ์ž๊ฐ€ ๊ธ€ ์ž‘์„ฑ์ž๋งŒ ์žˆ๋Š” ๊ฒฝ์šฐ)', async () => { + // given + const jwtService = app.get(JwtTokenService); + const userRepository = dataSource.getRepository(User); + const user = await userRepository.findOneBy({ id: 2 }); + const accessToken = jwtService.generateAccessToken(user); + const groupArticleId = 1; + + // when + const result = await request(app.getHttpServer()) + .get(url(groupArticleId)) + .set({ Cookie: setCookie(accessToken.accessToken) }); + + // then + const groupArticle = await dataSource + .getRepository(GroupArticle) + .findOneBy({ id: groupArticleId }); + const group = groupArticle.group; + const participantsApplications = await dataSource + .getRepository(GroupApplication) + .find({ where: { groupId: group.id }, relations: { user: true } }); + expect(result.status).toEqual(200); + const testList = participantsApplications.map( + async (participantsApplication, index) => { + const participant = await participantsApplication.user; + expect(result.body.data[index].user).toEqual({ + id: participant.id, + userName: participant.userName, + description: participant.description, + profileImage: participant.profileImage, + }); + }, + ); + Promise.all(testList); + }); + + test('๋ชจ์ง‘ ์‹ ์ฒญํ•˜๊ธฐ ์ •์ƒ ์ž‘๋™ ์‹œ 200 ์ฝ”๋“œ๋ฅผ ๋˜์ง€๊ณ  ์‹ ์ฒญํ•œ ์œ ์ €๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.(๋ณธ์ธ์ด ์‹ ์ฒญํ•˜๊ณ  ๋ณธ์ธ์ด ์กฐํšŒํ•˜๋Š” ๊ฒฝ์šฐ)', async () => { + // given + const jwtService = app.get(JwtTokenService); + const userRepository = dataSource.getRepository(User); + const participant = await userRepository.findOneBy({ id: 2 }); + const groupArticleId = 1; + const groupApplicationRepository = + dataSource.getRepository(GroupApplication); + const groupArticleRepository = dataSource.getRepository(GroupArticle); + const groupArticle = await groupArticleRepository.findOneBy({ + id: groupArticleId, + }); + const group = groupArticle.group; + const groupApplication = await getGroupApplicationRegisterFixture(group, { + id: 3, + user: new Promise(async (res) => res(participant)), + userId: participant.id, + }); + await groupApplicationRepository.save(groupApplication); + const accessToken = jwtService.generateAccessToken(participant); + + // when + const result = await request(app.getHttpServer()) + .get(url(groupArticleId)) + .set({ Cookie: setCookie(accessToken.accessToken) }); + + // then + const participantsApplications = await dataSource + .getRepository(GroupApplication) + .find({ where: { groupId: group.id }, relations: { user: true } }); + expect(result.status).toEqual(200); + const testList = participantsApplications.map( + async (participantsApplication, index) => { + const participant = await participantsApplication.user; + expect(result.body.data[index].user).toEqual({ + id: participant.id, + userName: participant.userName, + description: participant.description, + profileImage: participant.profileImage, + }); + }, + ); + Promise.all(testList); + }); + + test('JWT ํ† ํฐ์ด ์กด์žฌํ•˜์ง€ ์•Š์„ ๋•Œ 401์—๋Ÿฌ๋ฅผ ๋˜์ง„๋‹ค.', async () => { + // given + const groupArticleId = 1; + + // when + const result = await request(app.getHttpServer()).get( + url(groupArticleId), + ); + + // then + expect(result.status).toEqual(401); + }); + + test('๋ชจ์ง‘ ์‹ ์ฒญํ•˜๊ธฐ ์ •์ƒ ์ž‘๋™ ์‹œ 200 ์ฝ”๋“œ๋ฅผ ๋˜์ง€๊ณ  ์‹ ์ฒญํ•œ ์œ ์ €๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.(์‹ ์ฒญ์ž๊ฐ€ ์žˆ์„ ๋•Œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์กฐํšŒํ•˜๋Š” ๊ฒฝ์šฐ)', async () => { + // given + const jwtService = app.get(JwtTokenService); + const userRepository = dataSource.getRepository(User); + const participant = await userRepository.findOneBy({ id: 2 }); + const groupArticleId = 1; + const groupApplicationRepository = + dataSource.getRepository(GroupApplication); + const groupArticleRepository = dataSource.getRepository(GroupArticle); + const groupArticle = await groupArticleRepository.findOneBy({ + id: groupArticleId, + }); + const group = groupArticle.group; + const groupApplication = await getGroupApplicationRegisterFixture(group, { + id: 3, + user: new Promise(async (res) => res(participant)), + userId: participant.id, + }); + await groupApplicationRepository.save(groupApplication); + + // ๋ฐฉ๋ฌธ์ž๊ฐ€ ์กฐํšŒ + const visitor = getUserFixture({ id: 3 }); + await userRepository.save(visitor); + const accessToken = jwtService.generateAccessToken(visitor); + + // when + const result = await request(app.getHttpServer()) + .get(url(groupArticleId)) + .set({ Cookie: setCookie(accessToken.accessToken) }); + + // then + const participantsApplications = await dataSource + .getRepository(GroupApplication) + .find({ where: { groupId: group.id }, relations: { user: true } }); + expect(result.status).toEqual(200); + const testList = participantsApplications.map( + async (participantsApplication, index) => { + const participant = await participantsApplication.user; + expect(result.body.data[index].user).toEqual({ + id: participant.id, + userName: participant.userName, + description: participant.description, + profileImage: participant.profileImage, + }); + }, + ); + Promise.all(testList); + }); + + test('JWT ํ† ํฐ์ด ์กด์žฌํ•˜์ง€ ์•Š์„ ๋•Œ 401์—๋Ÿฌ๋ฅผ ๋˜์ง„๋‹ค.', async () => { + // given + const groupArticleId = 1; + + // when + const result = await request(app.getHttpServer()).get( + url(groupArticleId), + ); + + // then + expect(result.status).toEqual(401); + }); + + test('์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ทธ๋ฃน์— ์ฐธ๊ฐ€์‹ ์ฒญ์„ ํ•˜๋ฉด 404 ์—๋Ÿฌ๋ฅผ ๋˜์ง„๋‹ค.', async () => { + // given + const jwtService = app.get(JwtTokenService); + const user = await dataSource.getRepository(User).findOneBy({ id: 2 }); + const accessToken = jwtService.generateAccessToken(user); + const groupArticleId = 1000; + + // when + const result = await request(app.getHttpServer()) + .get(url(groupArticleId)) + .set({ Cookie: setCookie(accessToken.accessToken) }); + + // then + expect(result.status).toEqual(404); + }); + }); }); From 9fade1f0cc98cd18089c734c062452afdce0bda2 Mon Sep 17 00:00:00 2001 From: yangseungchan Date: Mon, 12 Dec 2022 11:58:38 +0900 Subject: [PATCH 129/142] =?UTF-8?q?[Feature]=20=EB=A1=9C=EA=B7=B8=EC=95=84?= =?UTF-8?q?=EC=9B=83=20=EC=97=B0=EB=8F=99=20=EB=B0=8F=20=EC=B6=94=EA=B0=80?= =?UTF-8?q?=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EC=B5=9C=EC=A0=81=ED=99=94,?= =?UTF-8?q?=20Favicon=20+=20OG=20=EB=B3=80=EA=B2=BD=20(#286)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ๐Ÿฅ… chore: ๋ถˆํ•„์š”ํ•œ axios ๋กœ์ง ๊ฐ„์†Œํ™” * โœจ feature: ๋กœ๊ทธ์•„์›ƒ API ์—ฐ๋™ * โœจ feature: ๋กœ๊ทธ์•„์›ƒ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * โœจ feature: favicon ์ถ”๊ฐ€ ๋ฐ ์ ์šฉ * ๐Ÿฅ… chore: lang ์†์„ฑ ์ถ”๊ฐ€ * โœจ feature: openGraph ์ถ”๊ฐ€ * ๐Ÿฅ… chore: OG์ด๋ฏธ์ง€ url ๋ณ€๊ฒฝ --- frontend/package-lock.json | 16 ++++ frontend/package.json | 1 + frontend/public/android-icon-144x144.png | Bin 0 -> 9111 bytes frontend/public/android-icon-192x192.png | Bin 0 -> 12245 bytes frontend/public/android-icon-36x36.png | Bin 0 -> 1668 bytes frontend/public/android-icon-48x48.png | Bin 0 -> 2240 bytes frontend/public/android-icon-72x72.png | Bin 0 -> 3690 bytes frontend/public/android-icon-96x96.png | Bin 0 -> 5326 bytes frontend/public/apple-icon-114x114.png | Bin 0 -> 6609 bytes frontend/public/apple-icon-120x120.png | Bin 0 -> 6991 bytes frontend/public/apple-icon-144x144.png | Bin 0 -> 9111 bytes frontend/public/apple-icon-152x152.png | Bin 0 -> 9751 bytes frontend/public/apple-icon-180x180.png | Bin 0 -> 12060 bytes frontend/public/apple-icon-57x57.png | Bin 0 -> 2754 bytes frontend/public/apple-icon-60x60.png | Bin 0 -> 2889 bytes frontend/public/apple-icon-72x72.png | Bin 0 -> 3690 bytes frontend/public/apple-icon-76x76.png | Bin 0 -> 3964 bytes frontend/public/apple-icon-precomposed.png | Bin 0 -> 12785 bytes frontend/public/apple-icon.png | Bin 0 -> 12785 bytes frontend/public/browserconfig.xml | 2 + frontend/public/favicon-16x16.png | Bin 0 -> 948 bytes frontend/public/favicon-32x32.png | Bin 0 -> 1488 bytes frontend/public/favicon-96x96.png | Bin 0 -> 5326 bytes frontend/public/favicon.ico | Bin 25931 -> 1150 bytes frontend/public/manifest.json | 41 ++++++++++ frontend/public/ms-icon-144x144.png | Bin 0 -> 9111 bytes frontend/public/ms-icon-150x150.png | Bin 0 -> 9510 bytes frontend/public/ms-icon-310x310.png | Bin 0 -> 25256 bytes frontend/public/ms-icon-70x70.png | Bin 0 -> 3531 bytes frontend/public/vercel.svg | 4 - .../components/common/FaviconConfig/index.tsx | 25 ++++++ .../common/GroupArticleCard/index.tsx | 3 +- .../src/components/common/HeadMeta/index.tsx | 41 ++++++++++ .../common/Header/UserLoginItem/index.tsx | 73 +++++++++++------- .../src/hooks/queries/useFetchMyArticle.ts | 4 +- frontend/src/hooks/queries/useLogout.ts | 19 +++++ frontend/src/pages/_document.tsx | 10 ++- 37 files changed, 201 insertions(+), 38 deletions(-) create mode 100644 frontend/public/android-icon-144x144.png create mode 100644 frontend/public/android-icon-192x192.png create mode 100644 frontend/public/android-icon-36x36.png create mode 100644 frontend/public/android-icon-48x48.png create mode 100644 frontend/public/android-icon-72x72.png create mode 100644 frontend/public/android-icon-96x96.png create mode 100644 frontend/public/apple-icon-114x114.png create mode 100644 frontend/public/apple-icon-120x120.png create mode 100644 frontend/public/apple-icon-144x144.png create mode 100644 frontend/public/apple-icon-152x152.png create mode 100644 frontend/public/apple-icon-180x180.png create mode 100644 frontend/public/apple-icon-57x57.png create mode 100644 frontend/public/apple-icon-60x60.png create mode 100644 frontend/public/apple-icon-72x72.png create mode 100644 frontend/public/apple-icon-76x76.png create mode 100644 frontend/public/apple-icon-precomposed.png create mode 100644 frontend/public/apple-icon.png create mode 100644 frontend/public/browserconfig.xml create mode 100644 frontend/public/favicon-16x16.png create mode 100644 frontend/public/favicon-32x32.png create mode 100644 frontend/public/favicon-96x96.png create mode 100644 frontend/public/manifest.json create mode 100644 frontend/public/ms-icon-144x144.png create mode 100644 frontend/public/ms-icon-150x150.png create mode 100644 frontend/public/ms-icon-310x310.png create mode 100644 frontend/public/ms-icon-70x70.png delete mode 100644 frontend/public/vercel.svg create mode 100644 frontend/src/components/common/FaviconConfig/index.tsx create mode 100644 frontend/src/components/common/HeadMeta/index.tsx create mode 100644 frontend/src/hooks/queries/useLogout.ts diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 7478ebe3..85ed1718 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -23,6 +23,7 @@ "axios": "^1.1.3", "browser-image-compression": "^2.0.0", "next": "^12.3.3", + "next-seo": "^5.15.0", "react": "^17.0.2", "react-dom": "^17.0.2", "sharp": "^0.31.2", @@ -22073,6 +22074,16 @@ } } }, + "node_modules/next-seo": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/next-seo/-/next-seo-5.15.0.tgz", + "integrity": "sha512-LGbcY91yDKGMb7YI+28n3g+RuChUkt6pXNpa8FkfKkEmNiJkeRDEXTnnjVtwT9FmMhG6NH8qwHTelGrlYm9rgg==", + "peerDependencies": { + "next": "^8.1.1-canary.54 || >=9.0.0", + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, "node_modules/next/node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -45690,6 +45701,11 @@ } } }, + "next-seo": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/next-seo/-/next-seo-5.15.0.tgz", + "integrity": "sha512-LGbcY91yDKGMb7YI+28n3g+RuChUkt6pXNpa8FkfKkEmNiJkeRDEXTnnjVtwT9FmMhG6NH8qwHTelGrlYm9rgg==" + }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", diff --git a/frontend/package.json b/frontend/package.json index 0bb54322..dc926e90 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -41,6 +41,7 @@ "axios": "^1.1.3", "browser-image-compression": "^2.0.0", "next": "^12.3.3", + "next-seo": "^5.15.0", "react": "^17.0.2", "react-dom": "^17.0.2", "sharp": "^0.31.2", diff --git a/frontend/public/android-icon-144x144.png b/frontend/public/android-icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..751f3da8c020deb38fe6498280d0c14c8e60f8f7 GIT binary patch literal 9111 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 C1UXLt literal 0 HcmV?d00001 diff --git a/frontend/public/android-icon-192x192.png b/frontend/public/android-icon-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..05242074ea687f0df06c28bdd323af962b977a9e GIT binary patch literal 12245 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 W{=65mg82EkK0sMsO|DwjEaZQyc)A1t literal 0 HcmV?d00001 diff --git a/frontend/public/android-icon-36x36.png b/frontend/public/android-icon-36x36.png new file mode 100644 index 0000000000000000000000000000000000000000..b973ef4e73b6a855ffa4596ea4dc719ad9b89c21 GIT binary patch literal 1668 zcmZ{i2UL?+6vv;dTB(ZE7A@9Ns?{Tv3=}Z76*Lj3g2={6@{uKwFamC-2r5HRWE4R} z1d%ByxD{{!0ty&K5tN}ocD|7D4)KLHsY$<9OfG|7& zqrL!;G666S%DK7iR{*B&cG==i+2|+O0DWp3X~KWTP65K|2dces5;9HL(54AXmSQ10 zn!uJSz$ELb0y{|Hz!K7?hcBNStw5@vvR<>=m-bUzn5+zv|NpBswiRJ}``iCdzDSf|>^^rAn_x^c035B3;Js z)joWtY3k6xWBLbAHQr$&PoAi_R@wPR+ts5LN_70U+Pz05&7GQ7K5{%)E|Th!FTjp$ zAy#~Pk)r#Z_DP3kRIJM`Rd|GmF4rmFe?(I*!0|cq_aD%=16o$BgqJ97Xw{r8R`m31 zdk3`K1nDM*p#LL!^O1VbVR6xQr4-iHHmcl$MV_Ie-a&0j0et1AQlZq}daR}$5%&$D zk!R(*4~oSy-O2Ot&?s7dTd7j((+U;#OyQ{lxca_o|0!9(G0BZb>aI6P$Vq8*hJ0A4 z`zS!elcmj_NO-c0dPID_a?FJz%&izxYxLM{`yLkOlq=3xjs3wER^C-1T76xks=igz z(uF_~lI{CMcbe21M4wkN_PiTm#YkL(M0cCirMHxQgD59K`m$Fmh4n|XntD+IMT*IEK|q}3=?i3N z1daPs-rS`bA0OX&K%7F3;83&9hnm)T2rEL=QjpX!lwiOuK?brqDLqldqS| zG>~DFFM}L>LNU5=!ltB~&o#joXYw4KC^J8NWiSVaH(ORvhG{Y#$#(8GEs(FTUw^~A zOrM3`-Ls0{LlD!{Z>}MpVCdQK*t&$}K7R=Xoq9M1H9Tf$L8&*pKXWfV^j7qHCc`T>Gvjpz^^J%_XDRuSo&XSw7r8m&LhP z_}-%KuAYw9e2b|3guXi)^Q$*syj5gfQW06-=ylVt;Q&7#&^ z%Y94MZ<-G87-`>A>B4>9&tJAVW0moCYHdh5xM>zq@L~-k3q?i#H7^-uf_@yqW!F6S zquUh$uj<(FxAP++hRWV_K((-ec*V|Y%dFVwMK=sX`(Avwx9)geN@RQQ5p$J^4F17p z|1f^J@ic4m`d{w+_94$ju{*Bx8Q~_Z?}Jc4r3Qiu3A0Kqwl&h5L+goXA2VIndcm77q~C5^Z+{dti+5q&%M(FSZ|#HGy=N{x}Om7EMB& z*nxE3fgn2gyDD4|hq?Z$r}JldoZK-A5Ui~6)>c-lt%%@8%o7ZmHz|)B`yd_QH*7d_ z;ddbx@|+a%aCHO>b^skaIxdjI3*a(w3~D$V;&MW9|6Vz6EuCRSq^+@p2$n=EniZb0 l7P4Y6@B|wgL?uwE))tt;0;|uP;GpM5&!^5 zTaZj0K#$%sm>BqX7G916oe167#uxx9k|fv2qTpP`ljL9n02dAd06PW%R=^N@3IIYu z;j{+;;4=Y0fqA>$-VjWPQLM~Ofz7SKZ7fOyBjQYwYX|_y@V87T9U-#^3_@8JHbm%z zl%zBYyN5Izn|p{1-P~CjBU;uh)k0YRU_tT4ppkT)wo+E-tM>UeJ6r^ zJ!EK-(&TWxi8vSOtWvG?d$qb%g{fPmcW0iA8u6>zT&p!IHjE-dOySAxARH&iitK9N z%y#vqX;Q9tHygV2nXQSpDi9KWiM4$CC7rM_fJylw*V0CyH=JFEso(Ul&)=Lpr8KLGv6d#Q`OIxfiEG zn%eHSluht6TS1YTR>HW>-J)&?-ay0{HsIcVNp=4Xzg(F`gpu1qW)`z!{6N^Y{e}v* zKCy57m`%XbC++O9`AE#cHaITar2kyZVew++4o2@6KZAnvCB}sCBCn15PJwHZF z9}9`*^th1@GeU11tK1Z3JnHhOZb!~Owj3^WuIpKRo5r#l)IOX@NaGx=Rj}9VpM<_1KD7L%s`W1(rJ3t`MqIC0 z>3OU?gkf=ycK(iJv5wRo$wz6(aGJYMXqWCuh)-$G^la)U1?_>HWExY3=qKrnHu(7M z51S;j9m=K4k6*+su*AiB<+^t|fxQco3j^B=~PBM_b>} zFR1s={R}7WP1m+(^$YG-9D4=ckSy_x4?DU(NZ)RZ6`{$!iP|N6B-BQWT^tmL$d`dWi?3D?iX+-! zRe6RbB)*8vKAG#Bo{sR+#VkM(vfc=N5sJ$NmV=fORhrzW4Mb4X|XJ$L@{tl78sLfs z5xMVM`FHl3{X&4d{L{rH2MLiHvK3!+@JUZXcc*TR?X8&e)>UWddS%`|(vS(MgV-zU zJ-Jn5ABL1AwU9+kqcd$r1MVa(K;wN}ly5<^^BDf&AcvobSP@)2dQYIP>gTI@Pi4CT z|CsT5-z$i^N(a=)XGDL|y;*ni>yT)6=WvOr;Tg%pIa5n7eIYi(vSzs5dqwY6PJnd- zWe%`rVk&}gHMNex5&Y3d#H1ldnK$*~8+FspaPp5AuwB1?yemvTGf{p+?_%Z1*N$lO z2j-O=>E)qT$HgXkd_R(yGRmXe?~^iyJ*%AfsmmQ`RNqn_Oj>x6SV`kWdcjx%S8QCSxFot%s*1~Cf zulZ%}{o;P@?hw^&&YWAnuQWDW$FN%|{GJEh8!7NF>GGcxSW)v-p5Kk-nahBG=GdrI z?8+?o;;6HTE-WuHi;DLQrh*Q@qOn*_4ESN3Fj{zRUA#6Hfkxxe=tw?x>lOS*;2-G4 zphf(Dfkak<0Vq(}S|KEm#tJ6~Qvq)liy4APp&0&TIu$gAr!O)vnEtpMo&&OqTdb3J zs6PddHx2X*^`{1~@OV2A4FNDkn+>RcF&0}@@OToHLHA|>7=0|^Y|tr?QTVCOe;H?n z7t4DK=`B%(fynNk5F3U+l@-CH0{`g>#SEYyuRLx0uR1nPAO&D>x@cV-P8){>>Z030 zWZO@592pm=0NTXlR-Vx(Fm?K;)F}rGfX48nf?G%V2eAAC=_ndGjNus=5Q6&W$Wi)K z8V*a*(elJ-VQ~~3nx^lGqtVb9J&Gq8LniAYK?M@*&sq2OR)2s6(blxg#3TA|PASnc literal 0 HcmV?d00001 diff --git a/frontend/public/android-icon-72x72.png b/frontend/public/android-icon-72x72.png new file mode 100644 index 0000000000000000000000000000000000000000..9c0170697d2c5f18a4b4301613bea5456062bf8d GIT binary patch literal 3690 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 literal 0 HcmV?d00001 diff --git a/frontend/public/android-icon-96x96.png b/frontend/public/android-icon-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..a69293d6d49e314a60fadd75b751e73c056b836b GIT binary patch literal 5326 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 literal 0 HcmV?d00001 diff --git a/frontend/public/apple-icon-114x114.png b/frontend/public/apple-icon-114x114.png new file mode 100644 index 0000000000000000000000000000000000000000..5cb610b0da8fe12640fdfb6bb2230b344aca34ba GIT binary patch literal 6609 zcmdUTg;!M3*Y+J6q`N^v8it+$BqgP!OPV2u?vxP(6eJ`BBm`-gp+*p;yF*1nX(VLm z5K!VBzxA#4{l0gt_YZj2z5ASX&w2K~`=0fjz4tvY4D~h1NSH|g03g%WdSHa@{r?FO z0k%zDjEll{c&;jXDge-sdgsakAN$Pdq-CTB0O9ul0Pzd}{$Pg?+W-&*27n!V0FcW8 z00!UuPmdI^69kSAH6H-C|E{9;iVW-sv9Fe8005Bp{S#1@5IGBWkT6hNPn~d+^bVOA zn2Warg|*ZGry!&4Hd1~PGWaORY0zZd;rrd>USHwcfJfih`1EywOZQFE|MU;_8W z1CKfg>pYddtN&?y%_|6eH~*|#J2{7;kq{Cym69s2XOV)*u2NO6`V^@>hU zKw0RgcTQNv6&oOexQe^CW_J@(Li}z9VI&xx8iccTv8;1+_HZWr^o09B0C7d9E5r#_ zrWM2kso(?fr%~@XRl(6!0zq>`TpUUvcQ|jeUx#IVMu?L*0GXpX|X0y5C{E6Mnq(6Bjt7tmSZA=Cmb0CBjjw|%Kre5<( zY^1BU7W*xI4OJvLyvi?x?7F{aVa_4~gH%cd825TBqUVk!F;Gp;62syj(~tu=X#|1m z<75@{k{{D<(@a#VB^S9kLvO{Qp_)*x=OrBjA=#jtRl291vQj#{ar}l;n`#sR#yWHD)fmaVFBf35su7ZU%7?Flj^MwG6F6Ij7f;p?#Wy?51=Jum+w;?UZa7t>X?8oM?C{;ujkL6Ym}8z zs$Zo*s62yX`bQj^eJzl`UfHZr+DcB=nIcXK2PnjFBSV<%r(KPlNZZ5FGI3TnsfH;4EAv$#2s9&Ib7Bxob zEp^uknm03umaJT)Mr%)EsN} zV$d99`v+j1@2j|KoXJQ~(3axnL zyZZKsaMN{U#nDwh3rq^^HccxN(H%H3PR$tSpDS#%LY3s?o%yTBfrEjac*U@jiNXgb4uC&anbZAYE9{<}*gkUrJkMk1zc?r~X&J{~f`Jjj3&)Qmx?4Q(Uz}b^$FVossl@Hb}-xNA-Imx0W zd5WCok5jIx^%bAiz19TD>BTo(>i7n^9({l(9rg74MlV6Sq8@*7% zqW(($PpJYk(yXof$=TeoNyRD^#r7|IJcL?4hJ-4?w8&qow)c!v6A;Sq=~<==%f`&d zux#d$p_okR@r3_OhBGtta&GBAELKeqr^r3_WHn%Y3HsDQ(|yk7p$h*cP=m5>fc?pZB9r(vCA*$=h#>fPAfc`@^*VbH4Mk(lp;UGoW(1JM5v^* z|4A$(sx+VPZDVA#A>F?GUVpFc?H9}-P0}pNrJ9XvQIOIB*8 z%N33q%ypubC{3v#_wg34-4}*`dO*osWV+5Yi~QSB#O-#%iyr@GR&Riq#+hjFqKhNh zle@o*9Q16l{5ti5f#d(={5=>agTQ>qn#B zeLhEyY#5e&odPpschIa;QfE6lG-MP_1qjlmZx@tnlxR$$%yD(;g`qPnPxUCGg!X9i zpJ=YngAWTUsp3xS8_xS$36nP7ki_`o1v29`+HNqt;pvLhuCKV0u$RIqc$N$j(44jq zaBTeIB|!S=G&5LDvRfN5|7CTvd-Zy5&0&+0FFl)VT&|r*h%g@;P81h@R83C>th@z()wiWxwgd*TN1jv13KLqUYFLYS zIR?R)`hUoFCBPES%Cr~SJthe;#}YJa@;RKeHA{k$y{trgq;K=d02zAGk7m{SWN54h z*p>WtM<`Pg|pF&Ln!KaPp@d#G0y3wm1{`UAV!x!S4RrWMj&jWpF5D&{TVCS~^2=V5mC*JiVN_R7HQY?ZjPBIe)oJS zNSp_M*307ol{~|_aYBuC0;Zwgb6A4+c-QE|Fd2;kNllmcAal?!IzsJo$OXNE#JW+| zJH_{ArrT0df4s!pJYGSm95$haQ`|o67B$epFU7VS^QJWt$ZGCK)q0j{qO!tYLL#0* zMjl8QU194TB;2j6et~Eym11GfW1W+$GBc=obb*R+`=4NRFmSlfPbH ze0vL3P(4O24b%$?5SzuupB4w(W?9rz-X4Kg%xBdal;BeD^FtnlJR&C?zu-d#;g_(z zir=|AZbORe^@BHs0lS#RrLXdH4ZgOj-Qm1MEyT>GGHJal%IODA-7ulK-LQB|p|FG! z+l`N*Gm_g)p)#<=gw>kf z{kj66;s-XmRxY7cE&kefeIL*AY9J~&V5j4)8g$pWigQ^EU$aja2>Pl-%Qf%ga z_f8wZ{C%g$!ksh0w(m-xfj{i0(rlUYQwl!zuDIpV3=8!+x{Pl%YA=*@V>rUu3}<@8 zlbIrdXULi?zE(IQGQ{=hCPf+6*l#1r417z}_==lb)t2$IDDQ3>@)5=~StUWiy{_z0 zU44`^7B@A4rnyLc3miB$-i;7ij8eIOC#7E=zwd883`U<9Nw5&qi>X&c8Nac}+8V-+%B+uayd|(bC+> zS7RP#+U5xRW@jRf$;dB_70yLAj!{^043<%^tfW_|iw4@({<@s6pKK`LNwdmeugRqS zP8RoyZ}6`dELM9&`0%=*zg7M<;J2m}$zw@MHvgL6e_`KV z9I~Lu8d$7de*es#Y59quI!PI2s>HBoJLKu48Fc!)dzyLK2;vG8>T$FwSLO@vACu{v z?uNV9(4AFw3gGlrWhXl``R!PnX=bi#;|y1fE?S9XtdEt(qX=4A+yyOap{;&O0Xf2v z>Fc>!3dk4==pB?pk^Sj94-bp(cxlR6^?;?4wSkII+}XtCerN9@F4T1EnQM{UgH(@P zUahiB>1qMGVGonz>QwlTieM|((ltuAb{)(0q*r`3@D5J9JKh8IK0e6k`X{2j_wTk% z7h9)~Tf1HVlI}%#V2cr9edxO_v8#DVq5oIU^Fj_&fb()r8RegLpINQ(ZVG;$*8qw= zr`%wE7^tG7+*VtJ?64>(QTQ(LfyPfpR`*c-m~&_IX8C9{_p|PE7iEG?uH6}eoL6y zZ6m@dVr{^e+D?yW2@JHAt#$OzpLH_mA5W!bJ!|RAxmH3AH8P?OY2kZinaOW7?C}cj zLBD`aENXwfkfq>RHMdYFlbHp6W^ z{-_8u_*H`-R@9Xgbde{`xV9e|gSOy+d^4Ch#q?rub;f|EYK_kE`F`(*B{p2La=CYw z7A)G@H@ha6VxN~p>ReI_92Wm=dGD7pJOLB?mx_~3fn%d{x8A5TW!Nn{N`RT23}Sh; z(^E8SL=-g}-K?M`xbI5K>=S(4-FpFO10;&WVaMzx0;3QNQ>ochH97|y3cdO0>y|4* zBYM-hM@>%ZW)P1wKUhZbywWj_pM^NI@35;UQrs@oQENf}XsQ>|9yDWrQBQ{gmXpny z=aA@HC6`+??>ATX5yI+k6|=eTK2bXT# zP?4Nw8#E(KX&PT+>4<70Q4IGsvhhIAaf)mm(p88R34K3xv{F^XY`o#TIU8BKo^$*N zwHZ3hV36LFg(;9HLDM>HzrA7FR0Pq(Ws(MI!q+@7l!J=gW*32bhkcC?lFBHKM|ts- ze;!h2G@O7ZhAmvDifi^Tz_khIwZ+hEX-a1h9wj{CCN2+ zXKgVyHLRl|LX001OP)t~DAs3VID94KIflR=p>-+KOiEdDfbKN83Fi2ET z_b9VQVWK3#B~pndMaqYT_r;ZG;Ajoya+sEp!n?u3Hz#jq5}@$u8kY3KzkEDb#+?0Z z9nl=<0c2)Y=XGMxM$to!YRlQsAcvJ_$v_#WEQJjImpu>6?^Z?`!!Bzgu1DB|z8LmP z^@4&_QE+ubXDGB(=PK*%*@2XRcOp$!o@2#rJ38iv?ervB6BGAluPY6JQy>T@Niw{Y`Jcm2ppUsT}*@Uxy#CerEvrN|XLE#sCbF7LNPR`3OlSAXD?mFHX*gd{r@fE>=H z3h@J4u1+(2<>$-bG1zrRwh*;X;kTyP65b&`p?@X7>U$e$&fi+4D`K~6*_>^{s*Sq%O{ensQr!17=s1HdF%|WSr!61cx+C0bEqYs6Ld~mv zH?Lssa-{zx%X3CPw`?Lg`s!q7KN@)Vd+m)K9`z#j2%a}k-6GK0A<#w6$=?Or0TN&d z2@!GZEp8$%DJLZ>CnX^S2FroL5q%N~|DS@FkFz^0?0;4u$xW2UDscXLLx2w~FvP*% z1#k-t^bL>`6La@+aCO0oyAxd0$KSPWlC1!XW&DRVaSQTtl#_el;}qoO;vFa_XNZLc z0OA$5tz!QTqy5i{oSc@6yQ^CuAP$vKe(Yz8#W4Jbo&Sq5cXtkS`v>`oyi0_IF#QKa z&)v%SJSQH>GBMX+5k&%*-06xYHVIdU%VaM1#+ywxu zs%E}Z+{I3r{l}E4kv0Hx_jJL2x|o-Dpr?z?!3`^4JkoPE!IrK_z7JYt<>VD0XNv{G4)I5iEwQ!=(5^z`IP*Z>QWvkqo=G{IM;X`~#Z_`EL6~UMAtFziaB19Zwu-k``;rIsv zKnv2EFo%d$j@|0(bHJ880PjFLLKeOu3nsdm`?ec{sU+cm1d+A_a*T3h5ulv8{A2+$ zYJkkv5OE00JvpVLK>rU1wjV{cL@dY9})xC!o@Svcju5-O*m&~4~T2NEtKKZ zv>5@vfHoNL`XJ8DAnhuc2LF)*-AP|45Xef*_D;J2i}Eo)|C9on22N_Xrt^~*iq|ZOfd}u=WNX(@@{_1= zWxXHLzzrLF+Y#df3(z&}9_5*5w#%LJiR&p`SNzIvA!Qu`u-O|9?kw4(G-6CElF21s zjmVWAK_$vqjiaMMRmAXC4d#@bSRKF(J1q%}uE_i0~s#Kn?4aw3Lw! zBDy8qCo{zBY*8iNQE^q>l|>`&M@y49IJG*+>5ipcw*>z)@jVtkW+Pe?OPp(c$5>q# z7o>%vez&N-d>rX5Wh8Oq(vMrb%7(B@!GqAl)odjJL~=f(qB z*f!Dm%!-%N?C8rk(Ye~m@!(T}#)>Sy;_#uwi2vN(K+~v%W_gQ^rI3mS-A4)PR(``d zcZ`GeKLK^8uK4NOj7`?jyO?J&nCp;PYLX4Ag6BV|G#B1YDRQVaG3uJsXuW`Qx@LYB zC2$fWT&gUB?omx0CbCd8_)ww%qXY z2$%pVKL=jz>_lc4Ns z9gt_6pezc8~OL4|hlma1%ma%rHE1xUYI&X^)TBaR{7l~Q8C zbrAl6qZ&QeNh9&(IzdH6yl_8wAi5(=pe}tqMSzc-0bM@MDh(H5g*;}W7WKEQS};|T zY`hKB@%3tel!$s_sT5_i#I zTVFNBKKPo2l5v4%Oc5n-w2V*~4GDD@+<=cMv<$i09NsM0w*2(!eUVYirjK{y@HN2L zcy7QA|G=9vxIkSCbqqysV7+TKwL7OI7u~_}wJsQ=Y+lN@BrSiuW0*e(XvkR`GPZZd z0{c`dgAvD#2}9+Ry|M8Y#D3DEDWqyCOhT8t7eYNDUDo6{V=gsX78aVpxpin)zJ7&N8z-EJKk(>-uSTc!DKO1naT$IZHAEfgZPBm zXCRE9x1GCYt7%F=04Kzo2D7D^Kl-bZ*4T}AVSfF*b(V>OBuen4hSRt#e!6{R26b(ws& zzF+mS%G^kXUXB67HDrJmi4KjgPU^l$$?&Kx%M~>#?m>4AM0E}D_DI}wDjRmwpG`w2 zdjb(sXTT`TolQQC**E;L|1g|evj;37V3Gtr4ak4^8MAOP-}4@YCLV}ZX;f#a(7KRh z5)yiz{!)J4){cklbgAESprNC3h;`jofo00=bEGlX^{isTbVr9%&LW4~IDYiofmq%JW7s=1mbj5X?;PN>~&fO1OnCU-ZQ*+Ob7kR8^Bt3DhWM3G2N2# zHFV#D<3hKLIdrd_MW2P-uBNt+GvuEP!}o37yd?807WeS}fCCS_vPshnna!;m+3H5J zj0sOJN^?;JeWu6EwX$159Ve3s zDBFpzQY8h$RqLY&JzALD%_Nutr&?-s2OCH2WCMH>p`xgMjH<*$wOCpEda> z9WN&jUA=JR4p{}Rn8xVWlIO+LsS+lcoCCw)&o=LL+wxij7n9{7}wxbQfYRchc>;}4}tuf6nZ;sJ}^48}Ah=3PsF*WfFd?>Gdi7yd zW+D&s+K5DuI!6S#g%;)SRt>Aws?57zznFd}?n>2JH3)-pnNUCRH(y`z z+JE1MZ_-l9Ql&yF$nGqSC| zwX`=5OZ(^JIHfdq!8s=0Yk`_tNBAMYOItIg!CDG&F@C-y_I7QvBu`I1VN0cm6F>>d zP^zVwO_pO_iVY>!%Zt947*%#KUG0r5`R$qTe4sMZvL3b*oGku$9|Dm}gWjL{{_t^L zChNeH!krSF^SY-ieSfv%P}kKD%sir{RXPI6OWE3Y6%%UxcWe^;nmqr2|GHO{jW{R! z%edE9eE>6cX`1C3XRM9h&v=uum`UH0$gNa`ao;=NjbYm6;~qAZBN5(#5|&KT7lY*7 z;R*i1H?AXlTtlZfH~XO@;odLw#D;w5QH&I+QREE|_sR}z`6g(qRpYLDGTNUh5XACT zgXhISByZ{*BkK8Q;dqCGw(FNQIJiDD1+o=G(=^l0zeFn7%;q#}DM){oo)c63^{B{? z16LQx5%J0|6!9LdtD;_45L+(_lu`#5a^Rx+g`+lmMdM?L1NZt7C&-;lh+dLCK&|T? zRx_F>PJzp$7oA}}#rcpanYvdvtzU2j@B6f_okZ?_8H%)Yg7Ve7S(AjAPt~*&>ubcF zSqN}x4mF=bP5zt3?~$Qfv!1JcP6Lzpf+1xe+ef;-PX@vtfqsQz`*S9Ix#;^nF4c@K zHBxlZFKTT*9s8w|!c>g*f~c9BkyE>LmNh7}b}n_LrYjB4OvdpsGsB@D${C|v=>oUp zC(*qVDNoqB+btd!@~U^O{?RGxGs3U*a4JE`RdgDTZF@&mQyyDVS~HUDG4m}9ZTQzh z8D|qX89NfMy=!~J1Fx8boFxJsv&#h??N>BuoyRy$^hjvP@8F19CH*mVzhIsq#+j5F zh9~K{G&s%syO**pkfs;E&WJ-ESCC;4D=+987spdb=|w3Tz-VyjB*(ou*@oYh$_Z|~ zz2;Uf&}pNe4+B;D&?OF^tmbx8!LJgL;8U7HJJ?@L$mRpwI3f!1y>-=jW@{ep5_ysl z*I|RJlb3M%*smB4{-K}+S#0P&0X<`+M;YR7_=~DYqx7=zBMqafn>X8SX`s*QQ=u&L zyV<^05%s08kzIl){+F1<>LBXf;&!;oP2IFXN`j_d+s3!g4zsWmE(?C=Rak>hhqyZ0s8VM$U% zrGRRJ)8(S6n$;fXS@U!8#D~1PSZ}bX2AxQP-y*qV=^+L3bc_wii(j_Qt3L(bN%e&` z@>yu^1s{%Fig742>@qx;Ww5-(R%W4~u>&gY-I z)mf{Y7$HZowO)Z(lCMwG9C`4*EZU4o?Hm%2kPe*NYFX2{JWV~!l9U9<1N=>Y21{yX zZBFyZF25__Qn5KDdPObE<BLQ3-sH~rL|1!2_Y>8%t9=kJKPX%5yz z1;H@gI{vCkKOXP|*Jt;uF8BFNKNKaT4u|?^FUNW6zTy{fhvf zKm(l!(&6*Wd^>cVr}Org!CkzcXii*Op$4~>0LHhA4l5aKvFg|@P-aL5^3<99)6bE& zhY2?l+=MAQRxxk!r=otj3puw)**%=y7rKM)aPr^WD)xr?R{D-2bu=@B3fn=Um)_nf zW|4`Kv0hTvZ1dB-Ov;0#YYRgNDJj$MulVwOB6gnLO&r^J3}Gj|2#+Zh=|5Z$c4Zj~ zZ_cQpAjbwFN!9`4WS-(;8@?hnAirSimgg_L{O29nUOtx2MH1%&3~fbWI5hZ4zv*UhPV85>+ln>QgYRm}`?- znpa9q!jt;vm0Vw4{0>b>zauuXD&Bg5yJPMh0VPd-{d=87^5ZH( zr_merdbxMDwfnZzQkwwtmAZHB&-Ul;beE`)`hM^iAV>dilI|%K-@T`8ItEW96eVIaThHY^Q|a9m@Z}l7NFsEePu6B zL|*Q6eiEIvERadsHgnPE5Y@7OIfwZ};}{g2`4!)<%9eV2lF;4OS>PbokeNiQc#-7# zHwoHSa=W-9Nkkoi2MYf3(cO6WuXGWmG<%@yT3mWhSr|s^=L-nR>(<5wH#eDHAcIOS6d!*9QMI(lY<=L_$dDJ#AFo#_1{o6{4=Qt z@CoUK@dvDS>oC&>dMSR&F1~(uHV^|#JR9jQ(|8&?&scxV6P8Uor)6Ds-D1RW>9UJk zQkcHpEFs**)mt|d!AVNEhp;=`Gu?_o>HNmVCLJo>8nm*o6R2?vctovg=_O% z&W}$logyug-;`?{1)Mh;r=0dFW)mAp9jKI}h*fyFxbRf!AR}ab?4L1-hs!|3wn)&? z`I0gZP>AP0%rlx>;*A)X|E6+R@bUEbm9W3&`<=fko}M?wZ{r}*Kj1y1yL)YV)ULpC z$ZCjsb;wzwT|KwPOJ?)iP-dM)VTaXD>0e=vFRjA1U_ZY)cQMxM;hu6oZ${tSRU(hT z18fB?gaC!JYvrh&zVKU;Gs)*)EG-avKgR1-TDPAd6JoKk;!x~r8$#i?H|QH}Z^msu zA|#pFAeKWY7XQpUc#IwH)%%3_*y*ImbOY#82H`KCl_+;c$wGWnC~6*%C<#o7%CFufE2fK~yUbR=tm+ zhHdCDJ=0BtRWoJM=7-Dv*y=IVY~#!CP?1;HukwP#ghICGe$2LEB;7oDAbL4Dw}fg| z5gs7qJrSh`o;k8Sv41lGzuWWNP3-wrmw0=qZ=cGyFr)h4aB`Q$K?dlpXQ$iaGjD#) z!>Fk?o%D4GfGE_D<=b^%e9r4Mfi&e(Bi~89{>{(7N^?HtY^Q9xQ7l&Gu zsFOBCj@6HP@3DpB`poP=DMY^rXaAu?6<8KM<0)*|#$?*Rm8fvS;|>K|ioRK-hhhjeVZm_}EL> zA?&dUAS5Ux#0SORPy?v2ga}MRM2JUFP(n~J_`6Wd|EJ*Q@f_|D_&+NUr^ZTR69?q_0I`hTo}ldqetgoKiZov)j{ zyN`r~E*A9$phdTh0{@Ls|7S%)Ld_oT=;Q-H#f9W7yq;khy8p2Ae;FhAb04RF$Y|*U zLM+1YABYy*&E6-_(;oOgtrGBbca;5VsQusUXc=HB04fF(go%lXhzSApk-b=i;y>)@ z!-MPrK?Q|(c``fLBE$bEdiGQuaDcnoW4kWk=I-O_;V9r>;|I6%aQ7DYe?u-HZtox_ zWGgCc2Nf0)vlSC`5VsR^a1ew(wzac?+StJOu^Rl?_8Gx4{i_@% literal 0 HcmV?d00001 diff --git a/frontend/public/apple-icon-144x144.png b/frontend/public/apple-icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..751f3da8c020deb38fe6498280d0c14c8e60f8f7 GIT binary patch literal 9111 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 C1UXLt literal 0 HcmV?d00001 diff --git a/frontend/public/apple-icon-152x152.png b/frontend/public/apple-icon-152x152.png new file mode 100644 index 0000000000000000000000000000000000000000..2a8efa8b8d3be3a819f83d984d8c13a8a98b71ca GIT binary patch literal 9751 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 literal 0 HcmV?d00001 diff --git a/frontend/public/apple-icon-180x180.png b/frontend/public/apple-icon-180x180.png new file mode 100644 index 0000000000000000000000000000000000000000..c4406369e5060393853421062765c167690150da GIT binary patch literal 12060 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 CTg)o} literal 0 HcmV?d00001 diff --git a/frontend/public/apple-icon-57x57.png b/frontend/public/apple-icon-57x57.png new file mode 100644 index 0000000000000000000000000000000000000000..1812643429d4daed5203e81208a2c0dfd7828351 GIT binary patch literal 2754 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 C9M-4+ literal 0 HcmV?d00001 diff --git a/frontend/public/apple-icon-60x60.png b/frontend/public/apple-icon-60x60.png new file mode 100644 index 0000000000000000000000000000000000000000..599aaaf271061a09be3699e71bc999e1efbb4b03 GIT binary patch literal 2889 zcmb7`dpK167RNU!BzGd$h%zB#G{X$zI$pPTgL;d+q(lzF}o)!h2NWC;$Mw zW~LY$(CZu+*AeiJ`Z*j3Iu5b{)&KyiQh9#59tQU(Nv1Yf00=t`0MT&(umgso=K&xX z3IK})Fe@7X#QYgAtPg~a5G_nF!2ZEi*j$@gl*HK@Geg9-rP8a2Zh;5^1x?hRX#hD8%v&yBlnK||*u z1^%?rnc5v*)S3XqT)ConHi4)z`+jI>=tu#2ny7)hIDuKDT4R4GD(IsUzpvDON>Yj1 zzdI(lG%XvWHauY~!H^<8R%^0Z}XKtj|0pG4r`?FL}n43mp&Tl-JE3g0Rbn4%$a}i~%ko|BwA+f^A=6uV6az z$AE;*ZGBTyp$p1v97+3=4*RyiX0%Y6B@b#uam+ck_c4Y`$xcdJ(W3cl)#`3vz*YU6 z%##^HrrW}Ry%4H8eO;S=VXZxxpYlzbeeTP5o3>ACmwGD1J%dwe9q-ta|bX+gLjP=+se(rmAF14g8$6?wOA!mR@mi(x8Sw zjy9y_ZJB4~9kQrct=c?>P!(@^uswV|Xl7qkVdJ$Fe<4~2yCoZY>5uVSD)I9|$ZZnviSjXS#w-f8&H_Fmp|r zZ%bT#k*#>~7k|um9;um1AV-ealxdCHu@z{>4kKC#1qYvGsfCShV3U(6e(af&;{1v= z*r6fU;|-i=O0!X-I-93EO#YLc!$g(NwG4l&0BUVwNQrIiYua0QM-(!S%}KP9e`eaU zW%4~0<6>Zq-0XRp5NG=cImxvXF4E9TAU-&8sVj_`L4V#kZ`1bEk=eZ+7sj&fQBLrM z*r?;m@>e1)YNL?W&fJv(X_nk?IN=%@fWGI*(+YpkNtCfl$3P|S_@?4BVhQxLX(tc826@7o(XLj1dA9h#F%eN!;ilb{ zXGI_Vx#UcZV~Lm3mjo0}_p}U#d5G%e(8VP`Fc@t&x8wf!-tV%xsYKtd?&^%c;px>k z5K%g@_vKZu5xMb8#-pT1g1l|jHSTykJo79c$-u(Hf+tWq7H8fM%V(BN)yyoc@CDbW z-Ce$``t-OkVoN1}<9a0BQ1=RTuFxsiTQ*Li!;Y<#B(8MU{WQEjTy&7s2NtdMxmopf zvHkYRdxFKp7$BV^#WNqzlfWqg=Gu2x*SLa1{~(c~CG^)8<1Vz7!hR?Bfm5&ox9pyI z!I?5g% zp6W)6kQ3qk<=~*i=NvvmRh~#nyb~x05b+En+oxw+ReJ>|hTq*ZVk-zI6h3^eCo^lu z*3%5v$+LJU<8oS*%|jIEjk&(1z&w=e{aa<7j{_bqh10pgJCdv=M0G#BkohY6%h#!d zIrKPxJpjJb3+_a4LYG=U*STHos(j&g?%8}pfDOIc+0H859*P#ajpaED?`V06#XD7t z3llFxlBNJ&g35=*lsA;2zN4+}yVr311#8zEQ3|%q+zwW5Ym{;ADs8W%y)CzB{O3!t zrmY_#Q8{MZJ3K-hDn9tx2?@T`(RL3A=J_|VdQ2Sm?~KTTcU-WAG~x68(&AmtPUtJg%s%QEvMBT%)7by`r)R4bdT(`h4CRqe<4bL0Fz6h@Mn!sl3>u?jZ)$s? zb+u^Z6Z^X2xZZl~1kkJ}@_ARlw!LX`o%&iVl~|H+-kO7_JfTI;XZY8RGg1_A5B7oC4I z7b#b$9tQ~Pu^bnOocIO7QheN~q5f{bzq(TM_a*B+v$y=44i*PefI31Gs)<0HN5FuF z*iI1P|3$}^66OX#4GlBz>n?*w_P-q2*_Z+D6mK{1(bar>sos8MHFwvm6q28BklKGn zu7-4TN5F`14U)PB3_(Od-H{}OyE{}}i%4=+cXib~2WFfD`@5*gIOq>BGq%J$F(kzP E6WO{Kg#Z8m literal 0 HcmV?d00001 diff --git a/frontend/public/apple-icon-72x72.png b/frontend/public/apple-icon-72x72.png new file mode 100644 index 0000000000000000000000000000000000000000..9c0170697d2c5f18a4b4301613bea5456062bf8d GIT binary patch literal 3690 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 literal 0 HcmV?d00001 diff --git a/frontend/public/apple-icon-76x76.png b/frontend/public/apple-icon-76x76.png new file mode 100644 index 0000000000000000000000000000000000000000..eb3c3638a42c039587ee390bda691f7f75e816dd GIT binary patch literal 3964 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 literal 0 HcmV?d00001 diff --git a/frontend/public/apple-icon-precomposed.png b/frontend/public/apple-icon-precomposed.png new file mode 100644 index 0000000000000000000000000000000000000000..edbe65ac57323d2a5e32ad4c40003752c2054961 GIT binary patch literal 12785 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 +#ffffff \ No newline at end of file diff --git a/frontend/public/favicon-16x16.png b/frontend/public/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..7156235e6093644a91fefa57ef4f1eb6928de79f GIT binary patch literal 948 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>94a|-Y3?)^UQdYQ2ov=?RC$B&vzgHp0@IfPxhO6>%ZQ9_`7=2 z$E}CHpS||0u=B&Q3qMa^`59jFcH{o<(^r1kck)MR?}v4JzU@8vW9F(aQ{XE)7O>#84owF zzJZeJ;Dah+43XQXSWZ;Y(gfi(+PE?v8L_40fM!31Fg6C*Q2 z(_rK64HeUm2c0@_>ejJq=jI7Agoko*P2iKL09vhD;u=wsl30>zm0Xkxq!^40jEr;* zfygk#(Adhv+{(mA+rYrez@YkwQ9Fu;-29Zxv`X9>xMp@)12rgsY$(o8D=AMbN@d6> zDJdwn($~+-O-xS(;>_f1z5Jr|J?CZT0@X@@)P`h~<|bKLx#TC8=BDPASXl)Cl@>D? zF8{wI@j literal 0 HcmV?d00001 diff --git a/frontend/public/favicon-32x32.png b/frontend/public/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..99d5e452de7c585d918bf36fe82cf9abc5ea1992 GIT binary patch literal 1488 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 literal 0 HcmV?d00001 diff --git a/frontend/public/favicon.ico b/frontend/public/favicon.ico index 718d6fea4835ec2d246af9800eddb7ffb276240c..3d75a2af2e8903e0182cd53e894cfc3698c56680 100644 GIT binary patch literal 1150 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 LrJugUA?W`A8`#=m diff --git a/frontend/public/manifest.json b/frontend/public/manifest.json new file mode 100644 index 00000000..013d4a6a --- /dev/null +++ b/frontend/public/manifest.json @@ -0,0 +1,41 @@ +{ + "name": "App", + "icons": [ + { + "src": "\/android-icon-36x36.png", + "sizes": "36x36", + "type": "image\/png", + "density": "0.75" + }, + { + "src": "\/android-icon-48x48.png", + "sizes": "48x48", + "type": "image\/png", + "density": "1.0" + }, + { + "src": "\/android-icon-72x72.png", + "sizes": "72x72", + "type": "image\/png", + "density": "1.5" + }, + { + "src": "\/android-icon-96x96.png", + "sizes": "96x96", + "type": "image\/png", + "density": "2.0" + }, + { + "src": "\/android-icon-144x144.png", + "sizes": "144x144", + "type": "image\/png", + "density": "3.0" + }, + { + "src": "\/android-icon-192x192.png", + "sizes": "192x192", + "type": "image\/png", + "density": "4.0" + } + ] +} \ No newline at end of file diff --git a/frontend/public/ms-icon-144x144.png b/frontend/public/ms-icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..751f3da8c020deb38fe6498280d0c14c8e60f8f7 GIT binary patch literal 9111 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 C1UXLt literal 0 HcmV?d00001 diff --git a/frontend/public/ms-icon-150x150.png b/frontend/public/ms-icon-150x150.png new file mode 100644 index 0000000000000000000000000000000000000000..3b59053693ecad8bb9b65cecc8fad939f25d71b8 GIT binary patch literal 9510 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 literal 0 HcmV?d00001 diff --git a/frontend/public/ms-icon-310x310.png b/frontend/public/ms-icon-310x310.png new file mode 100644 index 0000000000000000000000000000000000000000..9cda2731895e89e00b087c7bfeb13c9fc36bdb37 GIT binary patch literal 25256 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 - - \ No newline at end of file diff --git a/frontend/src/components/common/FaviconConfig/index.tsx b/frontend/src/components/common/FaviconConfig/index.tsx new file mode 100644 index 00000000..bdea6ffa --- /dev/null +++ b/frontend/src/components/common/FaviconConfig/index.tsx @@ -0,0 +1,25 @@ +const FaviconConfig = () => { + return ( + <> + + + + + + + + + + + + + + + + + + + ); +}; + +export default FaviconConfig; diff --git a/frontend/src/components/common/GroupArticleCard/index.tsx b/frontend/src/components/common/GroupArticleCard/index.tsx index ad548e58..1966516c 100644 --- a/frontend/src/components/common/GroupArticleCard/index.tsx +++ b/frontend/src/components/common/GroupArticleCard/index.tsx @@ -25,7 +25,6 @@ const GroupArticleCard = ({ article }: Props) => { const { status, thumbnail: { originUrl, blurUrl }, - category, location, title, @@ -46,7 +45,7 @@ const GroupArticleCard = ({ article }: Props) => { alt={'thumbnail-image'} layout="fill" objectFit="cover" - sizes="400px" + sizes="(min-width: 800px) 300px,150px" placeholder="blur" blurDataURL={blurUrl} style={{ transition: '0.3s ease-in-out' }} diff --git a/frontend/src/components/common/HeadMeta/index.tsx b/frontend/src/components/common/HeadMeta/index.tsx new file mode 100644 index 00000000..5d274cdf --- /dev/null +++ b/frontend/src/components/common/HeadMeta/index.tsx @@ -0,0 +1,41 @@ +import Head from 'next/head'; + +import { NextSeo } from 'next-seo'; + +interface Props { + title?: string; + description?: string; + url?: string; + image?: string; +} + +const HeadMeta = ({ title, description, url, image }: Props) => { + return ( + <> + + + + + + ); +}; + +export default HeadMeta; diff --git a/frontend/src/components/common/Header/UserLoginItem/index.tsx b/frontend/src/components/common/Header/UserLoginItem/index.tsx index b21a70d4..1e6ee47b 100644 --- a/frontend/src/components/common/Header/UserLoginItem/index.tsx +++ b/frontend/src/components/common/Header/UserLoginItem/index.tsx @@ -1,47 +1,66 @@ import Link from 'next/link'; +import { useState } from 'react'; import { Menu, Text } from '@mantine/core'; +import AlertModal from '@components/common/AlertModal'; import Avatar from '@components/common/Avatar'; import LoginButton from '@components/common/Header/LoginButton'; import useFetchMyInfo from '@hooks/queries/useFetchMyInfo'; - -/** - * TODO - * ๋กœ๊ทธ์•„์›ƒ API ์—ฐ๋™ํ•˜๊ธฐ - */ +import useLogout from '@hooks/queries/useLogout'; +import { showToast } from '@utils/toast'; const UserLoginItem = () => { const { data: myData, isLoading } = useFetchMyInfo(); + const { mutate: logout } = useLogout(); + const [modalOpen, setModalOpen] = useState(false); + + const handleClickLogoutItem = async () => { + logout( + {}, + { + onSuccess: () => { + showToast({ title: '๋กœ๊ทธ์•„์›ƒ ์™„๋ฃŒ!', message: '๋‹ค์Œ์—๋„ ๊ผญ ์ด์šฉํ•ด์ฃผ์„ธ์š”!' }); + }, + } + ); + }; if (isLoading) return null; return myData ? ( -

    - - - - - - + <> + setModalOpen(false)} + /> + + + + + + + + + ๋‚ด ํ”„๋กœํ•„ + + + + - ๋‚ด ํ”„๋กœํ•„ + ๋กœ๊ทธ์•„์›ƒ - - - - ๋กœ๊ทธ์•„์›ƒ - - - - + + + ) : ( ); diff --git a/frontend/src/hooks/queries/useFetchMyArticle.ts b/frontend/src/hooks/queries/useFetchMyArticle.ts index fc0e0646..c2b142e3 100644 --- a/frontend/src/hooks/queries/useFetchMyArticle.ts +++ b/frontend/src/hooks/queries/useFetchMyArticle.ts @@ -5,9 +5,7 @@ import { ApiResponse, MyArticleType } from '@typings/types'; import { clientAxios } from '@utils/commonAxios'; const getMyArticle = async (id: number) => { - return clientAxios.get(`${process.env.NEXT_PUBLIC_API_URL}/v1/my-group-articles/${id}`, { - params: { id }, - }); + return clientAxios.get(`/v1/my-group-articles/${id}`); }; const useFetchMyArticle = (id: number) => { diff --git a/frontend/src/hooks/queries/useLogout.ts b/frontend/src/hooks/queries/useLogout.ts new file mode 100644 index 00000000..9904798e --- /dev/null +++ b/frontend/src/hooks/queries/useLogout.ts @@ -0,0 +1,19 @@ +import { useQueryClient } from '@tanstack/react-query'; + +import useAuthMutation from '@hooks/useAuthMutation'; +import { clientAxios } from '@utils/commonAxios'; + +const postLogout = () => { + return clientAxios.post('/v1/auth/logout'); +}; + +const useLogout = () => { + const queryClient = useQueryClient(); + return useAuthMutation(postLogout, { + onSuccess: async () => { + await queryClient.resetQueries(['my']); + }, + }); +}; + +export default useLogout; diff --git a/frontend/src/pages/_document.tsx b/frontend/src/pages/_document.tsx index a33511ad..7f2e6115 100644 --- a/frontend/src/pages/_document.tsx +++ b/frontend/src/pages/_document.tsx @@ -2,6 +2,9 @@ import Document, { Head, Html, Main, NextScript } from 'next/document'; import { createGetInitialProps } from '@mantine/next'; +import FaviconConfig from '@components/common/FaviconConfig'; +import HeadMeta from '@components/common/HeadMeta'; + const getInitialProps = createGetInitialProps(); export default class _Document extends Document { @@ -9,8 +12,11 @@ export default class _Document extends Document { render() { return ( - - + + + + +
    From 615b7ead5c7362bca70c815e71e14f89e1bb7118 Mon Sep 17 00:00:00 2001 From: Gakko <90585081+pythonstrup@users.noreply.github.com> Date: Mon, 12 Dec 2022 13:47:37 +0900 Subject: [PATCH 130/142] =?UTF-8?q?[Feature]=20Group=20Application=20-=20?= =?UTF-8?q?=EC=B0=B8=EA=B0=80=20=EC=B7=A8=EC=86=8C=20API=20Test=20(#288)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit โœจ feature: ์ฐธ๊ฐ€ ์‹ ์ฒญ ์ทจ์†Œ API ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ์ž‘์„ฑ --- backend/test/group-application.e2e-spec.ts | 136 ++++++++++++++++++++- 1 file changed, 135 insertions(+), 1 deletion(-) diff --git a/backend/test/group-application.e2e-spec.ts b/backend/test/group-application.e2e-spec.ts index 3acd485e..5739d1bf 100644 --- a/backend/test/group-application.e2e-spec.ts +++ b/backend/test/group-application.e2e-spec.ts @@ -320,7 +320,7 @@ describe('Group Application (e2e)', () => { }); }); - describe('๋‚ด๊ฐ€ ์ฐธ์—ฌํ•œ ๋ชจ์ž„ ์กฐํšŒ GET /group-applications/me', () => { + describe('์‹ ์ฒญ์ž ์กฐํšŒ GET /group-applications/participants?groupArticleId={id}', () => { const url = (id: number) => `/v1/group-applications/participants?groupArticleId=${id}`; @@ -496,4 +496,138 @@ describe('Group Application (e2e)', () => { expect(result.status).toEqual(404); }); }); + + describe('์‹ ์ฒญ ์ทจ์†Œ POST /group-applications/cancel', () => { + const url = () => `/v1/group-applications/cancel`; + + test('๋‚ด๊ฐ€ ์ฐธ์—ฌํ•œ ๋ชจ์ž„์— ์ทจ์†Œ ์‹ ์ฒญ์„ ํ•˜๋ฉด 204์ฝ”๋“œ๋ฅผ ๋ฐ›๋Š”๋‹ค.', async () => { + // given + const jwtService = app.get(JwtTokenService); + const user = await dataSource.getRepository(User).findOneBy({ id: 2 }); + const accessToken = jwtService.generateAccessToken(user); + + const groupApplicationRepository = + dataSource.getRepository(GroupApplication); + const groupArticleRepository = dataSource.getRepository(GroupArticle); + const groupArticleId = 2; + const groupArticle = await groupArticleRepository.findOneBy({ + id: groupArticleId, + }); + const group = groupArticle.group; + + const groupApplication = await getGroupApplicationRegisterFixture(group, { + id: 3, + user: new Promise(async (res) => res(user)), + userId: user.id, + }); + await groupApplicationRepository.save(groupApplication); + + // when + const result = await request(app.getHttpServer()) + .post(url()) + .send({ groupArticleId }) + .set({ Cookie: setCookie(accessToken.accessToken) }); + + // then + expect(result.status).toEqual(204); + }); + + test('๋‚ด๊ฐ€ ์ฐธ์—ฌํ•œ ๋ชจ์ž„์ด์ง€๋งŒ ๋งˆ๊ฐ๋œ ๋ชจ์ง‘์ผ ๋•Œ ์ทจ์†Œ ์‹ ์ฒญ์„ ํ•˜๋ฉด 400 ์ฝ”๋“œ๋ฅผ ๋ฐ›๋Š”๋‹ค.', async () => { + // given + const jwtService = app.get(JwtTokenService); + const user = await dataSource.getRepository(User).findOneBy({ id: 2 }); + const accessToken = jwtService.generateAccessToken(user); + + const groupApplicationRepository = + dataSource.getRepository(GroupApplication); + const groupArticleRepository = dataSource.getRepository(GroupArticle); + const groupArticleId = 1; + const groupArticle = await groupArticleRepository.findOneBy({ + id: groupArticleId, + }); + const group = groupArticle.group; + group.status = GROUP_STATUS.SUCCEED; + + const groupApplication = await getGroupApplicationRegisterFixture(group, { + id: 3, + user: new Promise(async (res) => res(user)), + userId: user.id, + }); + await groupApplicationRepository.save(groupApplication); + await groupArticleRepository.save(groupArticle); + + // when + const result = await request(app.getHttpServer()) + .post(url()) + .send({ groupArticleId }) + .set({ Cookie: setCookie(accessToken.accessToken) }); + + // then + expect(result.status).toEqual(400); + }); + + test('์ž์‹ ์ด ๋งŒ๋“  ๋ชจ์ง‘๊ฒŒ์‹œ๊ธ€ ์ฐธ์—ฌ์—ฌ๋ถ€ ์กฐํšŒ ์‹œ 400 ์ฝ”๋“œ๋ฅผ ๋˜์ง„๋‹ค.', async () => { + // given + const jwtService = app.get(JwtTokenService); + const user = await dataSource.getRepository(User).findOneBy({ id: 1 }); + const accessToken = jwtService.generateAccessToken(user); + const groupArticleId = 1; + + // when + const result = await request(app.getHttpServer()) + .post(url()) + .send({ groupArticleId }) + .set({ Cookie: setCookie(accessToken.accessToken) }); + + // then + expect(result.status).toEqual(400); + }); + + test('JWT ํ† ํฐ์ด ์กด์žฌํ•˜์ง€ ์•Š์„ ๋•Œ 401์—๋Ÿฌ๋ฅผ ๋˜์ง„๋‹ค.', async () => { + // given + const groupArticleId = 1; + + // when + const result = await request(app.getHttpServer()) + .post(url()) + .send({ groupArticleId }); + + // then + expect(result.status).toEqual(401); + }); + + test('์—†๋Š” ๊ทธ๋ฃน์— ์ทจ์†Œ ์‹ ์ฒญ์„ ํ•˜๋ฉด 404์ฝ”๋“œ๋ฅผ ๋ฐ›๋Š”๋‹ค.', async () => { + // given + const jwtService = app.get(JwtTokenService); + const user = await dataSource.getRepository(User).findOneBy({ id: 2 }); + const accessToken = jwtService.generateAccessToken(user); + const groupArticleId = 10000; + + // when + const result = await request(app.getHttpServer()) + .post(url()) + .send({ groupArticleId }) + .set({ Cookie: setCookie(accessToken.accessToken) }); + + // then + expect(result.status).toEqual(404); + }); + + test('์ฐธ๊ฐ€ ์‹ ์ฒญ์„ ํ•˜์ง€ ์•Š์€ ๊ทธ๋ฃน์— ์ทจ์†Œ ์‹ ์ฒญ์„ ํ•˜๋ฉด 404์ฝ”๋“œ๋ฅผ ๋ฐ›๋Š”๋‹ค.', async () => { + // given + const jwtService = app.get(JwtTokenService); + const user = await dataSource.getRepository(User).findOneBy({ id: 2 }); + const accessToken = jwtService.generateAccessToken(user); + const groupArticleId = 2; + + // when + const result = await request(app.getHttpServer()) + .post(url()) + .send({ groupArticleId }) + .set({ Cookie: setCookie(accessToken.accessToken) }); + + // then + expect(result.status).toEqual(404); + }); + }); }); From 373e330fbcbfe8c265e53a2d36f4f79e99ac45ce Mon Sep 17 00:00:00 2001 From: Gakko <90585081+pythonstrup@users.noreply.github.com> Date: Mon, 12 Dec 2022 13:54:18 +0900 Subject: [PATCH 131/142] =?UTF-8?q?[Feature]=20CI/CD=20=EC=B5=9C=EC=A0=81?= =?UTF-8?q?=ED=99=94=20(#276)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * โœจ feature: ๋ฐฑ์—”๋“œ ci ์ตœ์ ํ™”๋ฅผ ์œ„ํ•œ ์˜์กด์„ฑ ์บ์‹ฑ * โœจ feature: ํ”„๋ก ํŠธ์—”๋“œ CI ์ตœ์ ํ™” * ๐Ÿฅ… chore: ํ”„๋ก ํŠธ์—”๋“œ CI ์ž˜๋ชป๋œ ๊ฒฝ๋กœ ์ˆ˜์ • * โœจ feature: ๋ฐฑ์—”๋“œ cd์—์„œ ๋ถˆํ•„์š”ํ•œ ๊ธฐ๋Šฅ ์ œ๊ฑฐ * ๐Ÿฅ… chore: CI ์˜์กด์„ฑ install์— ์กฐ๊ฑด๋ฌธ ์ถ”๊ฐ€ * ๐Ÿฅ… chore: front ci cache key์ด๋ฆ„ ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: ci cache restore key ์ œ๊ฑฐ * ๐Ÿฅ… chore: ํ”„๋ก ํŠธ์—”๋“œ CD์—์„œ ๋ถˆํ•„์š”ํ•œ ์•ก์…˜ ์ œ๊ฑฐ * ๐Ÿฅ… chore: ์˜์กด์„ฑ ์„ค์น˜ ๋ฐฉ์‹ ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: ํ”„๋ก ํŠธ cd - docker build and push ๋ฒ„์ „ ๋ช…์‹œ * ๐Ÿฅ… chore: ํ”„๋ก ํŠธ Dockerfile ์ˆ˜์ • * ๐Ÿฅ… chore: ํ”„๋ก ํŠธ npm ci ๋ฌธ์ œ ํ•ด๊ฒฐ ์‹œ๋„ * ๐Ÿฅ… chore: ํ”„๋ก ํŠธ npm ci ๋ฌธ์ œ ํ•ด๊ฒฐ ์‹œ๋„ * ๐Ÿฅ… chore: ํ”„๋ก ํŠธ npm ci -> npm install - package-lock.json์ด ์กด์žฌํ•จ์—๋„ ci๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ * ๐Ÿฅ… chore: ๋ฐฑ์—”๋“œ cd ํ…Œ์ŠคํŠธ * ๐Ÿฅ… chore: ๋ฐฑ์—”๋“œ cd ํ…Œ์ŠคํŠธ * ๐Ÿฅ… chore: ๋ฐฑ์—”๋“œ cd ํ…Œ์ŠคํŠธ * ๐Ÿฅ… chore: ๋ฐฑ์—”๋“œ cd ํ…Œ์ŠคํŠธ * ๐Ÿฅ… chore: ๋ฐฑ์—”๋“œ cd ํ…Œ์ŠคํŠธ * ๐Ÿฅ… chore: ๋ฐฑ์—”๋“œ cd ํ…Œ์ŠคํŠธ * ๐Ÿฅ… chore: ๋ฐฑ์—”๋“œ cd ํ…Œ์ŠคํŠธ * ๐Ÿฅ… chore: ๋ฐฑ์—”๋“œ cd ํ…Œ์ŠคํŠธ * ๐Ÿฅ… chore: ๋ฐฑ์—”๋“œ cd ํ…Œ์ŠคํŠธ * ๐Ÿฅ… chore: ๋ฐฑ์—”๋“œ cd ํ…Œ์ŠคํŠธ * ๐Ÿฅ… chore: ํ”„๋ก ํŠธ์—”๋“œ cd ํ…Œ์ŠคํŠธ * โœจ feature: CD ๋ฐฉ์‹ ๋ณ€๊ฒฝ - ์ €์žฅ์†Œ์˜ ๋ชจ๋“  source๋ฅผ clone๋ฐ›๋Š” ํ˜•์‹์—์„œ ํ•„์š”ํ•œ ๊ฒƒ๋งŒ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋ฐ˜์˜ - branches ์ง€์ • * ๐Ÿฅ… chore: ubuntu 20.04 ๋ฒ„์ „์œผ๋กœ ๋ช…์‹œ --- .github/workflows/backend-dev-cd.yml | 33 +++++++++-------- .github/workflows/backend-dev-ci.yml | 32 ++++++++++------ .github/workflows/frontend-cd.yml | 33 +++++++++-------- .github/workflows/frontend-ci.yml | 47 ++++++++++++++++++------ .github/workflows/slack-notification.yml | 2 +- backend/Dockerfile | 2 +- frontend/Dockerfile | 2 +- frontend/Dockerfile.development | 2 +- 8 files changed, 93 insertions(+), 60 deletions(-) diff --git a/.github/workflows/backend-dev-cd.yml b/.github/workflows/backend-dev-cd.yml index ec2b9696..089b6039 100644 --- a/.github/workflows/backend-dev-cd.yml +++ b/.github/workflows/backend-dev-cd.yml @@ -11,7 +11,7 @@ on: jobs: Register-Docker-Image: - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 defaults: run: working-directory: './backend' @@ -26,12 +26,6 @@ jobs: touch .env.development echo -e ${{ secrets.BACKEND_DEVELOPMENT_ENVIRONMENT }} > .env.development - - name: Set up QEMU - uses: docker/setup-qemu-action@v2 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - - name: docker registry login uses: docker/login-action@v2 with: @@ -41,7 +35,7 @@ jobs: - name: build and push id: docker_build - uses: docker/build-push-action@v3 + uses: docker/build-push-action@v3.2.0 with: context: backend file: backend/Dockerfile @@ -55,13 +49,26 @@ jobs: CD: needs: [Register-Docker-Image] - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 defaults: run: working-directory: './backend' outputs: status: ${{ job.status }} steps: + - name: checkout + uses: actions/checkout@v3 + + - name: copy docker compose & config file into dev server + uses: appleboy/scp-action@master + with: + host: ${{ secrets.BACKEND_DEV_REMOTE_IP }} + username: ${{ secrets.BACKEND_DEV_REMOTE_SSH_ID }} + password: ${{ secrets.BACKEND_DEV_REMOTE_ADMIN_KEY }} + port: ${{ secrets.BACKEND_DEV_REMOTE_SSH_PORT }} + source: 'backend/docker-compose.yml,backend/dev/nginx/nginx.conf,backend/scripts/dev-deploy.sh' + target: 'moyeomoyeo' + - name: deploy uses: appleboy/ssh-action@v0.1.4 with: @@ -70,13 +77,7 @@ jobs: password: ${{secrets.BACKEND_DEV_REMOTE_ADMIN_KEY}} port: ${{secrets.BACKEND_DEV_REMOTE_SSH_PORT}} script: | - rm -rf web13-moyeomoyeo - - git clone git@github.com:boostcampwm-2022/web13-moyeomoyeo.git - - cd web13-moyeomoyeo - - git checkout -t origin/develop + cd moyeomoyeo sudo chmod +x ./backend/scripts/dev-deploy.sh diff --git a/.github/workflows/backend-dev-ci.yml b/.github/workflows/backend-dev-ci.yml index 91510863..69d566da 100644 --- a/.github/workflows/backend-dev-ci.yml +++ b/.github/workflows/backend-dev-ci.yml @@ -10,7 +10,7 @@ on: - '.github/workflows/slack-notification.yml' jobs: CI: - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 defaults: run: working-directory: './backend' @@ -23,10 +23,10 @@ jobs: ports: - 3306:3306 env: - MYSQL_ROOT_PASSWORD: "test" - MYSQL_USER: "test" - MYSQL_PASSWORD: "test" - MYSQL_DATABASE: "test" + MYSQL_ROOT_PASSWORD: 'test' + MYSQL_USER: 'test' + MYSQL_PASSWORD: 'test' + MYSQL_DATABASE: 'test' options: >- --health-cmd="mysqladmin ping" --health-interval=10s @@ -42,8 +42,21 @@ jobs: with: node-version: 16.18.1 + - name: Cache dependencies + id: cache + uses: actions/cache@v3 + with: + path: '**/node_modules' + key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} + - name: dependency install - run: npm install + if: steps.cache.outputs.cache-hit != 'true' + run: npm ci + + - name: create environment variable file + run: | + touch .env.test + echo -e ${{ secrets.BACKEND_CI_TEST_ENVIRONMENT }} > .env.test - name: lint test run: npm run lint @@ -51,11 +64,6 @@ jobs: - name: build run: npm run build - - name: create environment variable file - run: | - touch .env.test - echo -e ${{ secrets.BACKEND_CI_TEST_ENVIRONMENT }} > .env.test - - name: test run: npm run test @@ -63,7 +71,7 @@ jobs: run: npm run test:e2e slack-notifications: - needs: [ CI ] + needs: [CI] if: ${{ always() }} uses: ./.github/workflows/slack-notification.yml with: diff --git a/.github/workflows/frontend-cd.yml b/.github/workflows/frontend-cd.yml index 8d2687d1..1ca2a749 100644 --- a/.github/workflows/frontend-cd.yml +++ b/.github/workflows/frontend-cd.yml @@ -11,7 +11,7 @@ on: jobs: Register-Docker-Image: - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 defaults: run: working-directory: './frontend' @@ -21,12 +21,6 @@ jobs: - name: checkout uses: actions/checkout@v3 - - name: Set up QEMU - uses: docker/setup-qemu-action@v2 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - - name: docker registry login uses: docker/login-action@v2 with: @@ -36,7 +30,7 @@ jobs: - name: build and push id: docker_build - uses: docker/build-push-action@v3 + uses: docker/build-push-action@v3.2.0 with: context: frontend build-args: | @@ -52,13 +46,26 @@ jobs: CD: needs: [Register-Docker-Image] - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 defaults: run: working-directory: './frontend' outputs: status: ${{ job.status }} steps: + - name: checkout + uses: actions/checkout@v3 + + - name: copy docker compose & config file into dev server + uses: appleboy/scp-action@master + with: + host: ${{ secrets.FRONTEND_DEV_REMOTE_IP }} + username: ${{ secrets.FRONTEND_DEV_REMOTE_SSH_ID }} + password: ${{ secrets.FRONTEND_DEV_REMOTE_ADMIN_KEY }} + port: ${{ secrets.FRONTEND_DEV_REMOTE_SSH_PORT }} + source: 'frontend/docker-compose.yml,frontend/dev/nginx/nginx.conf,frontend/dev/default/nginx.conf,frontend/scripts/dev-deploy.sh' + target: 'moyeomoyeo' + - name: deploy uses: appleboy/ssh-action@v0.1.4 with: @@ -67,13 +74,7 @@ jobs: password: ${{secrets.FRONTEND_DEV_REMOTE_ADMIN_KEY}} port: ${{secrets.FRONTEND_DEV_REMOTE_SSH_PORT}} script: | - rm -rf web13-moyeomoyeo - - git clone git@github.com:boostcampwm-2022/web13-moyeomoyeo.git - - cd web13-moyeomoyeo - - git checkout -t origin/develop + cd moyeomoyeo sudo chmod +x ./frontend/scripts/dev-deploy.sh diff --git a/.github/workflows/frontend-ci.yml b/.github/workflows/frontend-ci.yml index 38b64b4c..ef9b37e1 100644 --- a/.github/workflows/frontend-ci.yml +++ b/.github/workflows/frontend-ci.yml @@ -6,12 +6,12 @@ on: - develop paths: - 'frontend/**' - - './github/workflows/frontend-ci.yml' - - './github/workflows/slack-notification.yml' + - '.github/workflows/frontend-ci.yml' + - '.github/workflows/slack-notification.yml' jobs: checking: - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 defaults: run: working-directory: './frontend' @@ -25,20 +25,28 @@ jobs: uses: actions/setup-node@v3 with: node-version: 16.18.1 - + - name: create environment variable file run: | touch .env echo -e API_URL=https://api.moyeomoyeo.com\\nNEXT_PUBLIC_API_URL=https://api.moyeomoyeo.com > .env + - name: Cache dependencies + id: cache + uses: actions/cache@v3 + with: + path: '**/node_modules' + key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}-checking + - name: dependency install - run: npm install + if: steps.cache.outputs.cache-hit != 'true' + run: npm ci - name: test run: npm run test-all storybook: - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 defaults: run: working-directory: './frontend' @@ -49,14 +57,22 @@ jobs: uses: actions/checkout@v3 with: fetch-depth: 0 - + - name: create environment variable file run: | touch .env echo -e API_URL=https://api.moyeomoyeo.com\\nNEXT_PUBLIC_API_URL=https://api.moyeomoyeo.com > .env + - name: Cache dependencies + id: cache + uses: actions/cache@v3 + with: + path: '**/node_modules' + key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}-storybook + - name: depedency install - run: npm install + if: steps.cache.outputs.cache-hit != 'true' + run: npm ci - name: chromatic id: chromatic @@ -74,9 +90,8 @@ jobs: message: 'storybook link -> ${{ steps.chromatic.outputs.storybookUrl }}' reactions: rocket - lhci: - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 defaults: run: working-directory: './frontend' @@ -96,16 +111,24 @@ jobs: touch .env echo -e API_URL=https://api.moyeomoyeo.com\\nNEXT_PUBLIC_API_URL=https://api.moyeomoyeo.com > .env + - name: Cache dependencies + id: cache + uses: actions/cache@v3 + with: + path: '**/node_modules' + key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}-lhci + - name: dependency install + if: steps.cache.outputs.cache-hit != 'true' run: | - npm install + npm ci - name: Build run: | npm run build - name: lighthouse - run: | + run: | npm install -g @lhci/cli lhci autorun || echo "Fail to Run Lighthouse CI" diff --git a/.github/workflows/slack-notification.yml b/.github/workflows/slack-notification.yml index ba431959..e1b243ba 100644 --- a/.github/workflows/slack-notification.yml +++ b/.github/workflows/slack-notification.yml @@ -19,7 +19,7 @@ on: jobs: slack-notification: - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 steps: - name: Slack Notifications id: slack diff --git a/backend/Dockerfile b/backend/Dockerfile index 26fb64a5..5d793dac 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -4,7 +4,7 @@ WORKDIR /usr/src/app COPY package*.json ./ -RUN npm install +RUN npm ci COPY . . diff --git a/frontend/Dockerfile b/frontend/Dockerfile index 0ebebeb2..e8650b2c 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -1,5 +1,5 @@ # node 16.18.1 ์ด๋ฏธ์ง€ ์‚ฌ์šฉ -FROM node:16.18.1-alpine as development +FROM node:16.18.1-alpine # ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ ์„ค์ • WORKDIR /usr/src/app diff --git a/frontend/Dockerfile.development b/frontend/Dockerfile.development index 96c49503..7ab9f3fa 100644 --- a/frontend/Dockerfile.development +++ b/frontend/Dockerfile.development @@ -1,4 +1,4 @@ -FROM node:16.18.1-alpine as development +FROM node:16.18.1-alpine WORKDIR /usr/src/app COPY package*.json ./ RUN npm install From df8fedf8d5d59bfd797f09b6f93e4d9143289f1d Mon Sep 17 00:00:00 2001 From: yangseungchan Date: Mon, 12 Dec 2022 18:07:24 +0900 Subject: [PATCH 132/142] =?UTF-8?q?[Feature]=20heic,=20heif=20=EC=97=85?= =?UTF-8?q?=EB=A1=9C=EB=93=9C=20=EC=A7=80=EC=9B=90=20(#297)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * โœจ feature: heic, heif ์—…๋กœ๋“œ ์ง€์› * ๐Ÿฅ… chore: ์กฐ๊ฑด๋ฌธ ์กฐ๊ฑด ์ˆ˜์ • * โ™ป๏ธ refactor: ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ๋ฆฌํŒฉํ† ๋ง * ๐Ÿฅ… chore: ์ฒจ๋ถ€๋œ ์ด๋ฏธ์ง€๊ฐ€ ์—†์œผ๋ฉด ์—…๋กœ๋“œ ๋กœ์ง์ด ์‹คํ–‰์•ˆ๋˜๊ฒŒ ์ˆ˜์ • --- frontend/package-lock.json | 11 ++++++++ frontend/package.json | 1 + .../article/ArticlePostInput/index.tsx | 10 +++++-- .../article/ImageThumbnail/index.tsx | 8 ++++-- frontend/src/hooks/useImageUpload.ts | 28 ------------------- frontend/src/utils/uploadImage.ts | 19 ++++++++++++- 6 files changed, 44 insertions(+), 33 deletions(-) delete mode 100644 frontend/src/hooks/useImageUpload.ts diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 85ed1718..78d85d0b 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -22,6 +22,7 @@ "@tanstack/react-query-devtools": "^4.16.1", "axios": "^1.1.3", "browser-image-compression": "^2.0.0", + "heic2any": "^0.0.3", "next": "^12.3.3", "next-seo": "^5.15.0", "react": "^17.0.2", @@ -18282,6 +18283,11 @@ "integrity": "sha512-xAxZkM1dRyGV2Ou5bzMxBPNLoRCjcX+ya7KSWybQD2KwLphxsapUVK6x/02o7f4VU6GPSXch9vNY2+gkU8tYWQ==", "dev": true }, + "node_modules/heic2any": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/heic2any/-/heic2any-0.0.3.tgz", + "integrity": "sha512-1KG0LzZuIPiqyJjwLgGlgrgWd3UBwUE9g5+tOuHy8PbeH2hF0U4gc4ZWT4ChlCmcdISr1xVRimSehsTOPdRXnQ==" + }, "node_modules/hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -42861,6 +42867,11 @@ "integrity": "sha512-xAxZkM1dRyGV2Ou5bzMxBPNLoRCjcX+ya7KSWybQD2KwLphxsapUVK6x/02o7f4VU6GPSXch9vNY2+gkU8tYWQ==", "dev": true }, + "heic2any": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/heic2any/-/heic2any-0.0.3.tgz", + "integrity": "sha512-1KG0LzZuIPiqyJjwLgGlgrgWd3UBwUE9g5+tOuHy8PbeH2hF0U4gc4ZWT4ChlCmcdISr1xVRimSehsTOPdRXnQ==" + }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", diff --git a/frontend/package.json b/frontend/package.json index dc926e90..ddd4e004 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -40,6 +40,7 @@ "@tanstack/react-query-devtools": "^4.16.1", "axios": "^1.1.3", "browser-image-compression": "^2.0.0", + "heic2any": "^0.0.3", "next": "^12.3.3", "next-seo": "^5.15.0", "react": "^17.0.2", diff --git a/frontend/src/components/article/ArticlePostInput/index.tsx b/frontend/src/components/article/ArticlePostInput/index.tsx index c8e7d500..ec241031 100644 --- a/frontend/src/components/article/ArticlePostInput/index.tsx +++ b/frontend/src/components/article/ArticlePostInput/index.tsx @@ -1,3 +1,5 @@ +import { useState } from 'react'; + import styled from '@emotion/styled'; import { FileInput, Text } from '@mantine/core'; import { IconUpload } from '@tabler/icons'; @@ -16,11 +18,15 @@ interface Props { const ArticlePostInput = ({ values, onChange }: Props) => { const { title, contents, chatUrl, thumbnail } = values; + const [isUploading, setIsUploading] = useState(false); const throwAsyncError = useAsyncError(); const handleChangeImage = async (imageFile: File) => { + if (!imageFile) return; try { + setIsUploading(true); const uploadedImage = await uploadImage(imageFile); + setIsUploading(false); onChange('thumbnail', uploadedImage.url); } catch (err) { throwAsyncError('์ด๋ฏธ์ง€ ์—…๋กœ๋“œ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.'); @@ -53,12 +59,12 @@ const ArticlePostInput = ({ values, onChange }: Props) => { * - + } /> diff --git a/frontend/src/components/article/ImageThumbnail/index.tsx b/frontend/src/components/article/ImageThumbnail/index.tsx index 4570cdc8..27f29ea1 100644 --- a/frontend/src/components/article/ImageThumbnail/index.tsx +++ b/frontend/src/components/article/ImageThumbnail/index.tsx @@ -1,5 +1,6 @@ import { useTheme } from '@emotion/react'; import styled from '@emotion/styled'; +import { Loader } from '@mantine/core'; import { IconPhoto } from '@tabler/icons'; import Image from '@components/common/Image'; @@ -10,16 +11,19 @@ interface Props { * ์˜ˆ์‹œ) https://images.unsplash.com/photo-1669267234783-ab82d945fe5f?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1007&q=80 */ src?: string | null; + isUploading?: boolean; } -const ImageThumbnail = ({ src = null }: Props) => { +const ImageThumbnail = ({ src = null, isUploading = true }: Props) => { const { colors: { gray }, } = useTheme(); return ( - {src ? ( + {isUploading ? ( + + ) : src ? ( ) : ( diff --git a/frontend/src/hooks/useImageUpload.ts b/frontend/src/hooks/useImageUpload.ts deleted file mode 100644 index 22935b7b..00000000 --- a/frontend/src/hooks/useImageUpload.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { ImageUploadType } from '@typings/types'; -import { clientAxios } from '@utils/commonAxios'; - -const useImageUpload = () => { - const uploadImageFile = async (file: File) => { - try { - const formData = new FormData(); - formData.append('files', file); - const { - data: { - data: { 0: imageData }, - }, - } = await clientAxios.post('/v1/images/upload', formData, { - headers: { - 'Content-Type': 'multipart/form-data', - }, - }); - return imageData as ImageUploadType; - } catch (err) { - // TODO ์—๋Ÿฌ์ฒ˜๋ฆฌ ์–ด๋–ค์‹์œผ๋กœ ํ•ด์•ผํ• ๊นŒ... - throw new Error('์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ์—๋Ÿฌ ๋ฐœ์ƒ'); - } - }; - - return { uploadImageFile }; -}; - -export default useImageUpload; diff --git a/frontend/src/utils/uploadImage.ts b/frontend/src/utils/uploadImage.ts index 9ebf8885..e093ea9b 100644 --- a/frontend/src/utils/uploadImage.ts +++ b/frontend/src/utils/uploadImage.ts @@ -13,9 +13,25 @@ const compressImage = async (file: File) => { return new File([compressedBlob], file.name); }; +const convertToJpeg = async (file: File) => { + const heic2any = (await import('heic2any')).default; + const jpegBlob = await heic2any({ blob: file, toType: 'image/jpeg' }); + const jpegFile = new File([jpegBlob as Blob], file.name.split('.')[0] + '.jpeg', { + lastModified: new Date().getTime(), + type: 'image/jpeg', + }); + return jpegFile; +}; + const uploadImage = async (file: File) => { + let uploadedFile = file; + if (uploadedFile.type === 'image/heic' || uploadedFile.type === 'image/heif') { + uploadedFile = await convertToJpeg(uploadedFile); + } + + const compressedImage = await compressImage(uploadedFile); + const formData = new FormData(); - const compressedImage = await compressImage(file); formData.append('files', compressedImage); const { @@ -27,6 +43,7 @@ const uploadImage = async (file: File) => { 'Content-Type': 'multipart/form-data', }, }); + return imageData as ImageUploadType; }; From 63129af2f883de77c2d05408a0600ac5d5f8291e Mon Sep 17 00:00:00 2001 From: Kim Myeongil <67570061+username1103@users.noreply.github.com> Date: Mon, 12 Dec 2022 22:27:46 +0900 Subject: [PATCH 133/142] =?UTF-8?q?[BUGFIX]=20repository=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=20=EB=B3=80=EA=B2=BD=20(#295)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ๐Ÿ› fix: repository ์…‹ํŒ… ์ˆ˜์ • - TypeOrm์—์„œ ์ œ๊ณตํ•˜๋Š” repository๋กœ ์ฃผ์ž…ํ•ด์ฃผ๋„๋ก ์ˆ˜์ • --- .../group-application.repository.ts | 7 ++++--- .../src/app/group-article/group-article.module.ts | 2 -- .../repository/group-category.repository.ts | 7 ++++--- .../group-article/repository/group.repository.ts | 14 -------------- backend/src/app/user/user.repository.ts | 7 ++++--- 5 files changed, 12 insertions(+), 25 deletions(-) delete mode 100644 backend/src/app/group-article/repository/group.repository.ts diff --git a/backend/src/app/group-application/group-application.repository.ts b/backend/src/app/group-application/group-application.repository.ts index d1cfd104..0e7cee30 100644 --- a/backend/src/app/group-application/group-application.repository.ts +++ b/backend/src/app/group-application/group-application.repository.ts @@ -13,10 +13,11 @@ import { IMyApplicationResult } from '@app/group-application/dto/my-application- @Injectable() export class GroupApplicationRepository extends Repository { constructor(private readonly dataSource: DataSource) { + const baseRepository = dataSource.getRepository(GroupApplication); super( - GroupApplication, - dataSource.createEntityManager(), - dataSource.createQueryRunner(), + baseRepository.target, + baseRepository.manager, + baseRepository.queryRunner, ); } diff --git a/backend/src/app/group-article/group-article.module.ts b/backend/src/app/group-article/group-article.module.ts index 56e3f524..6d3c21d2 100644 --- a/backend/src/app/group-article/group-article.module.ts +++ b/backend/src/app/group-article/group-article.module.ts @@ -2,7 +2,6 @@ import { Module } from '@nestjs/common'; import { GroupArticleController } from '@app/group-article/group-article.controller'; import { GroupArticleService } from '@app/group-article/group-article.service'; import { GroupCategoryRepository } from '@app/group-article/repository/group-category.repository'; -import { GroupRepository } from '@app/group-article/repository/group.repository'; import { GroupArticleRepository } from '@app/group-article/repository/group-article.repository'; import { MyGroupArticleController } from '@app/group-article/my-group-article.controller'; import { MyGroupArticleService } from '@app/group-article/my-group-article.service'; @@ -11,7 +10,6 @@ import { MyGroupArticleService } from '@app/group-article/my-group-article.servi controllers: [GroupArticleController, MyGroupArticleController], providers: [ GroupArticleService, - GroupRepository, GroupCategoryRepository, GroupArticleRepository, MyGroupArticleService, diff --git a/backend/src/app/group-article/repository/group-category.repository.ts b/backend/src/app/group-article/repository/group-category.repository.ts index d86bed5c..39679dd6 100644 --- a/backend/src/app/group-article/repository/group-category.repository.ts +++ b/backend/src/app/group-article/repository/group-category.repository.ts @@ -5,10 +5,11 @@ import { GroupCategory } from '@app/group-article/entity/group-category.entity'; @Injectable() export class GroupCategoryRepository extends Repository { constructor(private readonly dataSource: DataSource) { + const baseRepository = dataSource.getRepository(GroupCategory); super( - GroupCategory, - dataSource.createEntityManager(), - dataSource.createQueryRunner(), + baseRepository.target, + baseRepository.manager, + baseRepository.queryRunner, ); } diff --git a/backend/src/app/group-article/repository/group.repository.ts b/backend/src/app/group-article/repository/group.repository.ts deleted file mode 100644 index a759f35e..00000000 --- a/backend/src/app/group-article/repository/group.repository.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { DataSource, Repository } from 'typeorm'; -import { Injectable } from '@nestjs/common'; -import { Group } from '@app/group-article/entity/group.entity'; - -@Injectable() -export class GroupRepository extends Repository { - constructor(private readonly dataSource: DataSource) { - super( - Group, - dataSource.createEntityManager(), - dataSource.createQueryRunner(), - ); - } -} diff --git a/backend/src/app/user/user.repository.ts b/backend/src/app/user/user.repository.ts index 3fffc023..b7953fe4 100644 --- a/backend/src/app/user/user.repository.ts +++ b/backend/src/app/user/user.repository.ts @@ -5,10 +5,11 @@ import { Injectable } from '@nestjs/common'; @Injectable() export class UserRepository extends Repository { constructor(private readonly dataSource: DataSource) { + const baseRepository = dataSource.getRepository(User); super( - User, - dataSource.createEntityManager(), - dataSource.createQueryRunner(), + baseRepository.target, + baseRepository.manager, + baseRepository.queryRunner, ); } From d025ec5315de3d862d219b492001410f6df7ba0b Mon Sep 17 00:00:00 2001 From: Gakko <90585081+pythonstrup@users.noreply.github.com> Date: Tue, 13 Dec 2022 00:39:16 +0900 Subject: [PATCH 134/142] =?UTF-8?q?[Feature]=20=EB=B0=B1=EC=97=94=EB=93=9C?= =?UTF-8?q?=20Production=20=EB=B0=B0=ED=8F=AC=20(#324)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ๐Ÿฅ… chore: nginx ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„ ๋ณ€๊ฒฝ * โœจ feature: production docker compose ์ž‘์„ฑ * โœจ feature: production deploy script ์ž‘์„ฑ * โœจ feature: production CI ์ž‘์„ฑ * โœจ feature: production CD ์ž‘์„ฑ * ๐Ÿฅ… chore: docker compose ํ…Œ์ŠคํŠธ * ๐Ÿฅ… chore: init ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ • * ๐Ÿฅ… chore: nginx ๊ฒฝ๋กœ ๋ณ€๊ฒฝ * ๐Ÿฅ… chore: cd ํ…Œ์ŠคํŠธ * โœจ feature: production CD ์™„๋ฃŒ * ๐Ÿฅ… chore: tag ํ…Œ์ŠคํŠธ --- .github/workflows/backend-dev-cd.yml | 2 +- .github/workflows/backend-prod-cd.yml | 107 ++++++++++++++++++ .github/workflows/backend-prod-ci.yml | 82 ++++++++++++++ backend/docker-compose.prod.yml | 47 ++++++++ backend/docker-compose.yml | 2 +- ...letsencrypt.sh => init-letsencrypt.dev.sh} | 6 +- backend/init-letsencrypt.prod.sh | 82 ++++++++++++++ backend/nginx/dev/nginx.conf | 38 +++++++ backend/{dev/nginx => nginx/prod}/nginx.conf | 0 backend/package.json | 2 +- backend/scripts/prod-deploy.sh | 19 ++++ 11 files changed, 381 insertions(+), 6 deletions(-) create mode 100644 .github/workflows/backend-prod-cd.yml create mode 100644 .github/workflows/backend-prod-ci.yml create mode 100644 backend/docker-compose.prod.yml rename backend/{init-letsencrypt.sh => init-letsencrypt.dev.sh} (95%) create mode 100644 backend/init-letsencrypt.prod.sh create mode 100644 backend/nginx/dev/nginx.conf rename backend/{dev/nginx => nginx/prod}/nginx.conf (100%) create mode 100644 backend/scripts/prod-deploy.sh diff --git a/.github/workflows/backend-dev-cd.yml b/.github/workflows/backend-dev-cd.yml index 089b6039..a535049b 100644 --- a/.github/workflows/backend-dev-cd.yml +++ b/.github/workflows/backend-dev-cd.yml @@ -66,7 +66,7 @@ jobs: username: ${{ secrets.BACKEND_DEV_REMOTE_SSH_ID }} password: ${{ secrets.BACKEND_DEV_REMOTE_ADMIN_KEY }} port: ${{ secrets.BACKEND_DEV_REMOTE_SSH_PORT }} - source: 'backend/docker-compose.yml,backend/dev/nginx/nginx.conf,backend/scripts/dev-deploy.sh' + source: 'backend/docker-compose.yml,backend/nginx/dev/nginx.conf,backend/scripts/dev-deploy.sh' target: 'moyeomoyeo' - name: deploy diff --git a/.github/workflows/backend-prod-cd.yml b/.github/workflows/backend-prod-cd.yml new file mode 100644 index 00000000..d8b0efbb --- /dev/null +++ b/.github/workflows/backend-prod-cd.yml @@ -0,0 +1,107 @@ +name: Backend Production CD +run-name: ${{ github.actor }}๊ฐ€ ์‹คํ–‰ํ•จ +on: + push: + branches: + - main + paths: + - 'backend/**' + - '.github/workflows/backend-prod-cd.yml' + - '.github/workflows/slack-notification.yml' + +jobs: + Register-Docker-Image: + runs-on: ubuntu-20.04 + defaults: + run: + working-directory: './backend' + outputs: + status: ${{ job.status }} + steps: + - name: checkout + uses: actions/checkout@v3 + + - name: take tag version and push tag + id: tag_version + uses: mathieudutour/github-tag-action@v6.1 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + + - name: Create a GitHub release + uses: ncipollo/release-action@v1 + with: + tag: ${{ steps.tag_version.outputs.new_tag }} + name: Release ${{ steps.tag_version.outputs.new_tag }} + + - name: backend environment setting + run: | + touch .env.production + echo -e ${{ secrets.BACKEND_PRODUCTION_ENVIRONMENT }} > .env.production + + - name: docker registry login + uses: docker/login-action@v2 + with: + registry: ${{ secrets.NCP_DOCKER_REGISTRY }} + username: ${{ secrets.NCP_ACCESS_KEY }} + password: ${{ secrets.NCP_SECRET_KEY }} + + - name: build and push + id: docker_build + uses: docker/build-push-action@v3.2.0 + with: + context: backend + file: backend/Dockerfile + tags: | + ${{ secrets.NCP_DOCKER_REGISTRY }}/moyeo-server-production:latest + ${{ secrets.NCP_DOCKER_REGISTRY }}/moyeo-server-production:${{ steps.tag_version.outputs.new_tag }} + push: true + + - name: Image digest + run: echo ${{ steps.docker_build.outputs.digest }} + + CD: + needs: [Register-Docker-Image] + runs-on: ubuntu-20.04 + defaults: + run: + working-directory: './backend' + outputs: + status: ${{ job.status }} + steps: + - name: checkout + uses: actions/checkout@v3 + + - name: copy docker compose & config file into production server + uses: appleboy/scp-action@master + with: + host: ${{ secrets.BACKEND_PROD_REMOTE_IP }} + username: ${{ secrets.BACKEND_PROD_REMOTE_SSH_ID }} + password: ${{ secrets.BACKEND_PROD_REMOTE_ADMIN_KEY }} + port: ${{ secrets.BACKEND_PROD_REMOTE_SSH_PORT }} + source: 'backend/docker-compose.prod.yml,backend/nginx/prod/nginx.conf,backend/scripts/prod-deploy.sh' + target: 'moyeomoyeo' + + - name: deploy + uses: appleboy/ssh-action@v0.1.4 + with: + host: ${{ secrets.BACKEND_PROD_REMOTE_IP }} + username: ${{ secrets.BACKEND_PROD_REMOTE_SSH_ID }} + password: ${{ secrets.BACKEND_PROD_REMOTE_ADMIN_KEY }} + port: ${{ secrets.BACKEND_PROD_REMOTE_SSH_PORT }} + script: | + cd moyeomoyeo + + sudo chmod +x ./backend/scripts/prod-deploy.sh + + ./backend/scripts/prod-deploy.sh ${{ secrets.NCP_ACCESS_KEY }} ${{ secrets.NCP_SECRET_KEY }} ${{ secrets.NCP_DOCKER_REGISTRY }} ${{ secrets.BACKEND_PRODUCTION_ENVIRONMENT }} + + slack-notifications: + needs: [Register-Docker-Image, CD] + if: ${{ always() }} + uses: ./.github/workflows/slack-notification.yml + with: + title: ๋ฐฑ์—”๋“œ Production CD + status: '${{ needs.CD.outputs.status }}' + commit_url: ${{ github.event.pull_request.html_url || github.event.head_commit.url }} + secrets: + webhook_url: ${{ secrets.SLACK_NOTIFICATION_WEBHOOK_URL }} diff --git a/.github/workflows/backend-prod-ci.yml b/.github/workflows/backend-prod-ci.yml new file mode 100644 index 00000000..3e77682f --- /dev/null +++ b/.github/workflows/backend-prod-ci.yml @@ -0,0 +1,82 @@ +name: Backend Production CI +run-name: ${{ github.actor }}๊ฐ€ ์‹คํ–‰ํ•จ +on: + pull_request: + branches: + - main + paths: + - 'backend/**' + - '.github/workflows/backend-prod-ci.yml' + - '.github/workflows/slack-notification.yml' +jobs: + CI: + runs-on: ubuntu-20.04 + defaults: + run: + working-directory: './backend' + outputs: + status: ${{ job.status }} + + services: + mysql: + image: mysql:8.0 + ports: + - 3306:3306 + env: + MYSQL_ROOT_PASSWORD: 'test' + MYSQL_USER: 'test' + MYSQL_PASSWORD: 'test' + MYSQL_DATABASE: 'test' + options: >- + --health-cmd="mysqladmin ping" + --health-interval=10s + --health-timeout=5s + --health-retries=3 + + steps: + - name: checkout + uses: actions/checkout@v3 + + - name: nodeJS + uses: actions/setup-node@v3 + with: + node-version: 16.18.1 + + - name: Cache dependencies + id: cache + uses: actions/cache@v3 + with: + path: '**/node_modules' + key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}-production + + - name: dependency install + if: steps.cache.outputs.cache-hit != 'true' + run: npm ci + + - name: create environment variable file + run: | + touch .env.test + echo -e ${{ secrets.BACKEND_CI_TEST_ENVIRONMENT }} > .env.test + + - name: lint test + run: npm run lint + + - name: build + run: npm run build + + - name: test + run: npm run test + + - name: e2e test + run: npm run test:e2e + + slack-notifications: + needs: [CI] + if: ${{ always() }} + uses: ./.github/workflows/slack-notification.yml + with: + title: Backend Production CI + status: '${{ needs.CI.outputs.status }}' + commit_url: ${{ github.event.pull_request.html_url || github.event.head_commit.url }} + secrets: + webhook_url: ${{ secrets.SLACK_NOTIFICATION_WEBHOOK_URL }} diff --git a/backend/docker-compose.prod.yml b/backend/docker-compose.prod.yml new file mode 100644 index 00000000..cb37d16e --- /dev/null +++ b/backend/docker-compose.prod.yml @@ -0,0 +1,47 @@ +version: '3.3' + +services: + moyeo-nginx: + container_name: moyeo-nginx + image: nginx + restart: always + volumes: + - ./nginx/prod:/etc/nginx/conf.d + - /letsencrypt/certbot/conf:/etc/letsencrypt + - /letsencrypt/certbot/www:/var/www/certbot + ports: + - 80:80 + - 443:443 + depends_on: + - moyeo-server + networks: + - backbone + command: '/bin/sh -c ''while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g "daemon off;"''' + + certbot: + container_name: certbot + image: certbot/certbot + restart: unless-stopped + volumes: + - /letsencrypt/certbot/conf:/etc/letsencrypt + - /letsencrypt/certbot/www:/var/www/certbot + depends_on: + - moyeo-nginx + networks: + - backbone + entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'" + + moyeo-server: + container_name: moyeo-server + image: ${DOCKER_SERVER_IMAGE} + environment: + NODE_ENV: production + ports: + - 3000:3000 + command: npm run start + networks: + - backbone + +networks: + backbone: + driver: bridge diff --git a/backend/docker-compose.yml b/backend/docker-compose.yml index da7285a5..8c881d38 100644 --- a/backend/docker-compose.yml +++ b/backend/docker-compose.yml @@ -6,7 +6,7 @@ services: image: nginx restart: always volumes: - - ./dev/nginx:/etc/nginx/conf.d + - ./nginx/dev:/etc/nginx/conf.d - /letsencrypt/certbot/conf:/etc/letsencrypt - /letsencrypt/certbot/www:/var/www/certbot ports: diff --git a/backend/init-letsencrypt.sh b/backend/init-letsencrypt.dev.sh similarity index 95% rename from backend/init-letsencrypt.sh rename to backend/init-letsencrypt.dev.sh index 85071b0f..02995b01 100644 --- a/backend/init-letsencrypt.sh +++ b/backend/init-letsencrypt.dev.sh @@ -7,7 +7,7 @@ if ! [ -x "$(command -v docker-compose)" ]; then exit 1 fi -domains=(api.moyeomoyeo.com) +domains=(dev.moyeomoyeo.com) rsa_key_size=4096 data_path="/letsencrypt/certbot" email="pythonstrup@gmail.com" # Adding a valid address is strongly recommended @@ -41,7 +41,7 @@ echo echo "### Starting nginx ..." -docker-compose up --force-recreate -d nginx +docker-compose up --force-recreate -d moyeo-nginx echo echo "### Deleting dummy certificate for $domains ..." @@ -79,4 +79,4 @@ docker-compose run --rm --entrypoint "\ echo echo "### Reloading nginx ..." -docker-compose exec nginx nginx -s reload \ No newline at end of file +docker-compose exec moyeo-nginx nginx -s reload \ No newline at end of file diff --git a/backend/init-letsencrypt.prod.sh b/backend/init-letsencrypt.prod.sh new file mode 100644 index 00000000..b2b54991 --- /dev/null +++ b/backend/init-letsencrypt.prod.sh @@ -0,0 +1,82 @@ +#!/bin/bash + +# ์˜คํ”ˆ ์†Œ์Šค: https://github.com/wmnnd/nginx-certbot ์ฐธ๊ณ  + +if ! [ -x "$(command -v docker-compose)" ]; then + echo 'Error: docker-compose is not installed.' >&2 + exit 1 +fi + +domains=(api.moyeomoyeo.com) +rsa_key_size=4096 +data_path="/letsencrypt/certbot" +email="pythonstrup@gmail.com" # Adding a valid address is strongly recommended +staging=0 # Set to 1 if you're testing your setup to avoid hitting request limits + +if [ -d "$data_path" ]; then + read -p "Existing data found for $domains. Continue and replace existing certificate? (y/N) " decision + if [ "$decision" != "Y" ] && [ "$decision" != "y" ]; then + exit + fi +fi + + +if [ ! -e "$data_path/conf/options-ssl-nginx.conf" ] || [ ! -e "$data_path/conf/ssl-dhparams.pem" ]; then + echo "### Downloading recommended TLS parameters ..." + mkdir -p "$data_path/conf" + curl -s https://raw.githubusercontent.com/certbot/certbot/master/certbot-nginx/certbot_nginx/_internal/tls_configs/options-ssl-nginx.conf > "$data_path/conf/options-ssl-nginx.conf" + curl -s https://raw.githubusercontent.com/certbot/certbot/master/certbot/certbot/ssl-dhparams.pem > "$data_path/conf/ssl-dhparams.pem" + echo +fi + +echo "### Creating dummy certificate for $domains ..." +path="/etc/letsencrypt/live/$domains" +mkdir -p "$data_path/conf/live/$domains" +docker-compose -f docker-compose.prod.yml run --rm --entrypoint "\ + openssl req -x509 -nodes -newkey rsa:$rsa_key_size -days 1\ + -keyout '$path/privkey.pem' \ + -out '$path/fullchain.pem' \ + -subj '/CN=localhost'" certbot +echo + + +echo "### Starting nginx ..." +docker-compose -f docker-compose.prod.yml up --force-recreate -d moyeo-nginx +echo + +echo "### Deleting dummy certificate for $domains ..." +docker-compose -f docker-compose.prod.yml run --rm --entrypoint "\ + rm -Rf /etc/letsencrypt/live/$domains && \ + rm -Rf /etc/letsencrypt/archive/$domains && \ + rm -Rf /etc/letsencrypt/renewal/$domains.conf" certbot +echo + + +echo "### Requesting Let's Encrypt certificate for $domains ..." +#Join $domains to -d args +domain_args="" +for domain in "${domains[@]}"; do + domain_args="$domain_args -d $domain" +done + +# Select appropriate email arg +case "$email" in + "") email_arg="--register-unsafely-without-email" ;; + *) email_arg="--email $email" ;; +esac + +# Enable staging mode if needed +if [ $staging != "0" ]; then staging_arg="--staging"; fi + +docker-compose -f docker-compose.prod.yml run --rm --entrypoint "\ + certbot certonly --webroot -w /var/www/certbot \ + $staging_arg \ + $email_arg \ + $domain_args \ + --rsa-key-size $rsa_key_size \ + --agree-tos \ + --force-renewal" certbot +echo + +echo "### Reloading nginx ..." +docker-compose -f docker-compose.prod.yml exec moyeo-nginx nginx -s reload \ No newline at end of file diff --git a/backend/nginx/dev/nginx.conf b/backend/nginx/dev/nginx.conf new file mode 100644 index 00000000..7260bdaf --- /dev/null +++ b/backend/nginx/dev/nginx.conf @@ -0,0 +1,38 @@ + +upstream backend-server { + server moyeo-server:3000; +} + +server { + listen 80 default_server; + server_name dev.moyeomoyeo.com; + server_tokens off; + + # certbot์ด ๋ฐœ๊ธ‰ํ•œ challenge ํŒŒ์ผ์„ nginx๊ฐ€ ์„œ๋น™ + location /.well-known/acme-challenge/ { + allow all; + root /var/www/certbot; + } + + # ๋ชจ๋“  http(80ํฌํŠธ) ์š”์ฒญ์„ https๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŒ… + location / { + return 301 https://$host$request_uri; + } + +} + +server { + listen 443 ssl; + server_name dev.moyeomoyeo.com; + server_tokens off; + + ssl_certificate /etc/letsencrypt/live/dev.moyeomoyeo.com/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/dev.moyeomoyeo.com/privkey.pem; + include /etc/letsencrypt/options-ssl-nginx.conf; + ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; + + location / { + proxy_pass http://backend-server; + proxy_http_version 1.1; + } +} \ No newline at end of file diff --git a/backend/dev/nginx/nginx.conf b/backend/nginx/prod/nginx.conf similarity index 100% rename from backend/dev/nginx/nginx.conf rename to backend/nginx/prod/nginx.conf diff --git a/backend/package.json b/backend/package.json index 0b26428b..ce86f7f2 100644 --- a/backend/package.json +++ b/backend/package.json @@ -9,7 +9,7 @@ "prebuild": "rimraf dist", "build": "nest build", "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", - "start": "nest start", + "start": "env-cmd -f .env.production nest start", "start:dev": "env-cmd -f .env.development nest start --watch", "start:debug": "nest start --debug --watch", "start:prod": "node dist/main", diff --git a/backend/scripts/prod-deploy.sh b/backend/scripts/prod-deploy.sh new file mode 100644 index 00000000..bd65dbad --- /dev/null +++ b/backend/scripts/prod-deploy.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +echo $2 | docker login -u $1 $3 --password-stdin + +echo "docker logined" + +cd backend || exit 1 + +touch .env + +echo -e $4 > .env + +echo "create .env" + +# docker down +docker compose -f docker-compose.prod.yml down --rmi all --remove-orphans + +# docker up +docker compose -f docker-compose.prod.yml up -d --build \ No newline at end of file From 22a2a6e587d5e2284fd4fd2cb7bd6883e2d5e156 Mon Sep 17 00:00:00 2001 From: Gakko <90585081+pythonstrup@users.noreply.github.com> Date: Tue, 13 Dec 2022 01:42:50 +0900 Subject: [PATCH 135/142] =?UTF-8?q?[Feature]=20Group=20Application=20-=20?= =?UTF-8?q?=EB=82=B4=EA=B0=80=20=EC=B0=B8=EC=97=AC=ED=95=9C=20=EB=AA=A8?= =?UTF-8?q?=EC=9E=84=20=EC=A1=B0=ED=9A=8C=20API=20Test=20(#298)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * โœจ feature: ์ฐธ๊ฐ€ ์‹ ์ฒญ์ž ์กฐํšŒ API ํ…Œ์ŠคํŠธ ์ž‘์„ฑ * โœจ feature: ๋‚ด๊ฐ€ ์ฐธ๊ฐ€ํ•œ ๋ชจ์ž„ ์กฐํšŒ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ * ๐Ÿฅ… chore: ๋ถˆํ•„์š”ํ•œ ์˜์กด์„ฑ ์ œ๊ฑฐ --- backend/test/group-application.e2e-spec.ts | 120 +++++++++++++++++++++ 1 file changed, 120 insertions(+) diff --git a/backend/test/group-application.e2e-spec.ts b/backend/test/group-application.e2e-spec.ts index 5739d1bf..d2179465 100644 --- a/backend/test/group-application.e2e-spec.ts +++ b/backend/test/group-application.e2e-spec.ts @@ -17,6 +17,7 @@ import { GroupApplication } from '@app/group-application/entity/group-applicatio import { getGroupApplicationRegisterFixture } from '@app/group-application/__test__/group-application.fixture'; import { GROUP_STATUS } from '@app/group-article/constants/group-article.constants'; import { Group } from '@app/group-article/entity/group.entity'; +import { GroupApplicationRepository } from '@src/app/group-application/group-application.repository'; describe('Group Application (e2e)', () => { let app: INestApplication; @@ -630,4 +631,123 @@ describe('Group Application (e2e)', () => { expect(result.status).toEqual(404); }); }); + + describe('๋‚ด๊ฐ€ ์ฐธ์—ฌํ•œ ๋ชจ์ž„ ์กฐํšŒ GET /group-applications/me', () => { + const url = () => `/v1/group-applications/me`; + + test('๋‚ด๊ฐ€ ์ฐธ์—ฌํ•œ ๋ชจ์ž„์„ ์ •์ƒ ์กฐํšŒํ•  ๋•Œ 200 ์ฝ”๋“œ๋ฅผ ๋ฐ›๋Š”๋‹ค.', async () => { + // given + const userRepository = dataSource.getRepository(User); + const groupArticleRepository = dataSource.getRepository(GroupArticle); + const groupApplicationRepository = app.get(GroupApplicationRepository); + const categoryRepository = dataSource.getRepository(GroupCategory); + + const newAuthor1 = getUserFixture({ id: 3 }); + const newAuthor2 = getUserFixture({ id: 4 }); + await userRepository.save([newAuthor1, newAuthor2]); + const category = await categoryRepository.findOneBy({ id: 1 }); + const group1 = getGroupFixture(category, { id: 3 }); + const group2 = getGroupFixture(category, { id: 4 }); + const groupArticle1 = await getGroupArticleFixture(group1, { + id: 3, + user: new Promise((res) => res(newAuthor1)), + userId: newAuthor1.id, + }); + const groupArticle2 = await getGroupArticleFixture(group2, { + id: 4, + user: new Promise((res) => res(newAuthor2)), + userId: newAuthor2.id, + }); + await groupArticleRepository.save([groupArticle1, groupArticle2]); + + const groupApplication1 = await getGroupApplicationRegisterFixture( + groupArticle1.group, + { + id: 3, + user: new Promise(async (res) => res(newAuthor1)), + userId: newAuthor1.id, + }, + ); + const groupApplication2 = await getGroupApplicationRegisterFixture( + groupArticle2.group, + { + id: 4, + user: new Promise(async (res) => res(newAuthor2)), + userId: newAuthor2.id, + }, + ); + await dataSource + .getRepository(GroupApplication) + .save([groupApplication1, groupApplication2]); + + const jwtService = app.get(JwtTokenService); + const user = await userRepository.findOneBy({ id: 2 }); + const accessToken = jwtService.generateAccessToken(user); + + const firstArticle = await groupArticleRepository.findOneBy({ id: 1 }); + const userApplication1 = await getGroupApplicationRegisterFixture( + groupArticle1.group, + { + id: 5, + user: new Promise(async (res) => res(user)), + userId: user.id, + }, + ); + const userApplication2 = await getGroupApplicationRegisterFixture( + firstArticle.group, + { + id: 6, + user: new Promise(async (res) => res(user)), + userId: user.id, + }, + ); + await groupApplicationRepository.save([ + userApplication1, + userApplication2, + ]); + + // when + const result = await request(app.getHttpServer()) + .get(url()) + .set({ Cookie: setCookie(accessToken.accessToken) }); + + // then + const limit = 5; + const offset = 0; + const articleList = await groupApplicationRepository.findMyGroup({ + userId: user.id, + limit, + offset, + }); + expect(result.status).toEqual(200); + expect(result.body.data.data.length).toEqual(2); + articleList.result.forEach((article, index) => { + expect(result.body.data.data[index]).toEqual({ + category: article.category, + commentCount: article.commentCount, + createdAt: article.createdAt.toISOString(), + currentCapacity: Number(article.currentCapacity), + id: article.groupArticleId, + location: article.location, + maxCapacity: article.maxCapacity, + scrapCount: article.scrapCount, + status: article.status, + thumbnail: { + blurUrl: article.thumbnail, + originUrl: article.thumbnail, + }, + title: article.title, + }); + }); + }); + + test('JWT ํ† ํฐ์ด ์กด์žฌํ•˜์ง€ ์•Š์„ ๋•Œ 401์—๋Ÿฌ๋ฅผ ๋˜์ง„๋‹ค.', async () => { + // given + // when + const result = await request(app.getHttpServer()).get(url()); + + // then + expect(result.status).toEqual(401); + }); + }); }); From 380083039425aa1df8902a7b82f61f5b606ca9eb Mon Sep 17 00:00:00 2001 From: yangseungchan Date: Tue, 13 Dec 2022 11:18:04 +0900 Subject: [PATCH 136/142] =?UTF-8?q?[Feature]=20=EB=8C=93=EA=B8=80=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=EC=8B=9C=20=EC=83=81=EB=8B=A8=EC=97=90=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=EB=90=9C=20=EB=8C=93=EA=B8=80=20=ED=91=9C?= =?UTF-8?q?=EC=8B=9C=20(#303)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * โ™ป๏ธ refactor: ๋Œ“๊ธ€ ์ด๊ฐœ์ˆ˜ ์กฐํšŒ ๋ถ€๋ถ„ ์ˆ˜์ • * โœจ feature: ์ƒˆ๋กœ์šด ๋Œ“๊ธ€๋งŒ ์ƒ๋‹จ์— ๋œจ๋„๋ก ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * ๐Ÿฅ… chore: ๋Œ“๊ธ€ ์‚ญ์ œ์‹œ์—๋„ ๋Œ“๊ธ€ ์ฟผ๋ฆฌ๋งŒ ๊ฐฑ์‹  * ๐Ÿฅ… chore: ๋Œ“๊ธ€ ์„ฑ๊ณต ๋กœ์ง ๋ถ„๋ฆฌ --- .../src/components/article/Comment/index.tsx | 14 ++++-- .../CommentInput/CommentInput.stories.tsx | 5 +- .../components/article/CommentInput/index.tsx | 48 ++++++++++++++++--- frontend/src/hooks/queries/useAddComment.ts | 1 - .../src/hooks/queries/useDeleteComment.ts | 1 - .../src/hooks/queries/useFetchComments.ts | 2 +- frontend/src/pages/article/[id].tsx | 17 +++++-- frontend/src/typings/types.ts | 1 + 8 files changed, 69 insertions(+), 20 deletions(-) diff --git a/frontend/src/components/article/Comment/index.tsx b/frontend/src/components/article/Comment/index.tsx index 77641160..32ae8520 100644 --- a/frontend/src/components/article/Comment/index.tsx +++ b/frontend/src/components/article/Comment/index.tsx @@ -2,7 +2,7 @@ import Link from 'next/link'; import { useRouter } from 'next/router'; import { useState } from 'react'; -import { Text } from '@mantine/core'; +import { Badge, Text } from '@mantine/core'; import Avatar from '@components/common/Avatar'; import ConfirmModal from '@components/common/ConfirmModal'; @@ -25,9 +25,11 @@ interface Props { * ๋Œ“๊ธ€ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. */ comment: CommentType; + newComment?: boolean; + onDeleteComment?: () => void; } -const Comment = ({ comment }: Props) => { +const Comment = ({ comment, newComment = false, onDeleteComment = () => {} }: Props) => { const router = useRouter(); const articleId = Number(router.query.id); const [confirmModalOpen, setConfirmModalOpen] = useState(false); @@ -48,10 +50,11 @@ const Comment = ({ comment }: Props) => { {dateTimeFormat(createdAt)} + {newComment && ์ƒˆ๋กœ์šด ๋Œ“๊ธ€} - {myData?.id === authorId && ( + {!newComment && myData?.id === authorId && ( setConfirmModalOpen(true)}> ์‚ญ์ œ @@ -69,7 +72,10 @@ const Comment = ({ comment }: Props) => { deleteComment(commentId)} + onConfirmButtonClick={() => { + onDeleteComment(); + deleteComment(commentId); + }} onCancelButtonClick={() => setConfirmModalOpen(false)} /> diff --git a/frontend/src/components/article/CommentInput/CommentInput.stories.tsx b/frontend/src/components/article/CommentInput/CommentInput.stories.tsx index 36f9cc0a..207a9a76 100644 --- a/frontend/src/components/article/CommentInput/CommentInput.stories.tsx +++ b/frontend/src/components/article/CommentInput/CommentInput.stories.tsx @@ -3,6 +3,7 @@ import { ComponentMeta, ComponentStory } from '@storybook/react'; import Header from '@components/common/Header'; import RootTitle from '@components/common/Header/RootTitle'; import PageLayout from '@components/common/PageLayout'; +import { CommentType } from '@typings/types'; import CommentInput from '.'; @@ -11,11 +12,11 @@ export default { component: CommentInput, } as ComponentMeta; -const Template: ComponentStory = (args) => ; +const Template: ComponentStory = (args) => ; const PageTemplate: ComponentStory = (args) => ( } />} - footer={} + footer={ {}} />} > ); diff --git a/frontend/src/components/article/CommentInput/index.tsx b/frontend/src/components/article/CommentInput/index.tsx index 06401368..3580a3cc 100644 --- a/frontend/src/components/article/CommentInput/index.tsx +++ b/frontend/src/components/article/CommentInput/index.tsx @@ -1,36 +1,72 @@ import { useRouter } from 'next/router'; import { useCallback, useEffect, useState } from 'react'; +import { InfiniteData, useQueryClient } from '@tanstack/react-query'; + import { ActionIcon, TextInput } from '@mantine/core'; import { IconSend } from '@tabler/icons'; import useAddComment from '@hooks/queries/useAddComment'; +import useFetchMyInfo from '@hooks/queries/useFetchMyInfo'; +import { CommentType, PagingDataType } from '@typings/types'; import { CommentInputWrapper } from './styles'; -const CommentInput = () => { +interface Props { + onAddComment: (comment: CommentType) => void; +} + +const CommentInput = ({ onAddComment }: Props) => { const { query: { id }, } = useRouter(); const articleId = Number(id); + const queryClient = useQueryClient(); const { mutate: addComment } = useAddComment(articleId); + const { data: myData } = useFetchMyInfo(); const [commentInput, setCommentInput] = useState(''); + const handleAddCommentSuccess = useCallback( + (commentId: number) => { + const { + pages: { + 0: { totalCount: totalComments }, + }, + } = queryClient.getQueryData>>(['comments', articleId]); + + if (totalComments > 5) { + onAddComment({ + id: commentId, + authorId: myData.id, + authorName: myData.userName, + authorProfileImage: myData.profileImage, + contents: commentInput.trim(), + createdAt: new Date().toUTCString(), + }); + } else { + setTimeout(() => window.scrollTo(0, document.body.scrollHeight), 200); + } + setCommentInput(''); + }, + [articleId, commentInput, myData, onAddComment, queryClient] + ); + const handleAddComment = useCallback(() => { if (commentInput.trim().length > 0) { addComment( { contents: commentInput, articleId }, { - onSuccess: () => { - setCommentInput(''); - setTimeout(() => window.scrollTo(0, document.body.scrollHeight), 200); - }, + onSuccess: ({ + data: { + data: { id: commentId }, + }, + }) => handleAddCommentSuccess(commentId), } ); } - }, [commentInput, articleId, addComment]); + }, [commentInput, articleId, addComment, handleAddCommentSuccess]); const handlePressEnter = useCallback( (e: KeyboardEvent) => { diff --git a/frontend/src/hooks/queries/useAddComment.ts b/frontend/src/hooks/queries/useAddComment.ts index e16fc48e..0ebc29fd 100644 --- a/frontend/src/hooks/queries/useAddComment.ts +++ b/frontend/src/hooks/queries/useAddComment.ts @@ -13,7 +13,6 @@ const useAddComment = (articleId: number) => { const queryClient = useQueryClient(); return useAuthMutation(addComment, { onSuccess: async () => { - await queryClient.invalidateQueries(['article', articleId]); await queryClient.invalidateQueries(['comments', articleId]); }, }); diff --git a/frontend/src/hooks/queries/useDeleteComment.ts b/frontend/src/hooks/queries/useDeleteComment.ts index 0a5962c1..efb47094 100644 --- a/frontend/src/hooks/queries/useDeleteComment.ts +++ b/frontend/src/hooks/queries/useDeleteComment.ts @@ -9,7 +9,6 @@ const useDeleteComment = (articleId: number) => { const queryClient = useQueryClient(); return useAuthMutation(deleteComment, { onSuccess: async () => { - await queryClient.invalidateQueries(['article', articleId]); await queryClient.invalidateQueries(['comments', articleId]); }, }); diff --git a/frontend/src/hooks/queries/useFetchComments.ts b/frontend/src/hooks/queries/useFetchComments.ts index 2d1543ec..9599f482 100644 --- a/frontend/src/hooks/queries/useFetchComments.ts +++ b/frontend/src/hooks/queries/useFetchComments.ts @@ -31,7 +31,7 @@ const useFetchComments = (articleId: number) => { const comments = useMemo(() => (data ? data.pages.flatMap(({ data }) => data) : []), [data]); - return { comments, ...rest }; + return { comments, totalComments: data ? data.pages[0].totalCount : 0, ...rest }; }; export default useFetchComments; diff --git a/frontend/src/pages/article/[id].tsx b/frontend/src/pages/article/[id].tsx index 521c6cf2..2f2e2fc5 100644 --- a/frontend/src/pages/article/[id].tsx +++ b/frontend/src/pages/article/[id].tsx @@ -33,7 +33,7 @@ import useFetchComments from '@hooks/queries/useFetchComments'; import useFetchMyInfo from '@hooks/queries/useFetchMyInfo'; import useFetchParticipants from '@hooks/queries/useFetchParticipants'; import useIntersect from '@hooks/useIntersect'; -import { ArticleType } from '@typings/types'; +import { ArticleType, CommentType } from '@typings/types'; import dateTimeFormat from '@utils/dateTime'; const ArticleDetail = () => { @@ -43,10 +43,12 @@ const ArticleDetail = () => { const router = useRouter(); const articleId = Number(router.query.id); const { data: myInfo } = useFetchMyInfo(); - const { comments, fetchNextPage, hasNextPage, isFetching } = useFetchComments(articleId); + const { comments, totalComments, fetchNextPage, hasNextPage, isFetching } = + useFetchComments(articleId); const { data: article } = useFetchArticle(articleId); const { data: isJoined } = useFetchApplicationStatus(articleId); const { data: participants } = useFetchParticipants(articleId); + const [addedComment, setAddedComment] = useState(null); const isUrlAvailable = getButtonStatus(article, isJoined) === ParticipateButtonStatus.LINK; const { url } = useFetchChatUrl(articleId, isUrlAvailable); @@ -80,7 +82,7 @@ const ArticleDetail = () => { } /> } - footer={} + footer={} > <> @@ -148,7 +150,7 @@ const ArticleDetail = () => { chatRoomLink={url} /> )} - + { )} + {addedComment && } 0 && { before: true })} components={comments.map((comment) => ( - + setAddedComment(null)} + /> ))} />
    diff --git a/frontend/src/typings/types.ts b/frontend/src/typings/types.ts index edd40156..298f0b33 100644 --- a/frontend/src/typings/types.ts +++ b/frontend/src/typings/types.ts @@ -7,6 +7,7 @@ import { Notification } from '@constants/notification'; interface PagingDataType { totalPage: number; + totalCount: number; currentPage: number; countPerPage: number; data: T; From 0880df27c36fc4e221b9af31395b06b301921bd9 Mon Sep 17 00:00:00 2001 From: MinGyeong Park <37508296+kong430@users.noreply.github.com> Date: Tue, 13 Dec 2022 11:33:10 +0900 Subject: [PATCH 137/142] =?UTF-8?q?[Feature]=20=EB=A1=9C=EB=94=A9=EC=A4=91?= =?UTF-8?q?=20=EC=8A=A4=EC=BC=88=EB=A0=88=ED=86=A4=20=EC=A0=81=EC=9A=A9=20?= =?UTF-8?q?(#322)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :sparkles: feature: ๊ฒŒ์‹œ๊ธ€ ์ˆ˜์ • ์‹œ ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ์ „์—๋„ form ๋œจ๋„๋ก ๋ณ€๊ฒฝ * :sparkles: feature: notification loading ๋ฐ ์•Œ๋ฆผ ์—†์„ ๊ฒฝ์šฐ ์ฒ˜๋ฆฌ * :sparkles: feature: ์œ ์ € ํ”„๋กœํ•„ ๋กœ๋”ฉ์ค‘ ์Šค์ผˆ๋ ˆํ†ค ์ฒ˜๋ฆฌ --- .../NotificationLoading.tsx | 21 +++++ .../common/ProfileLoading/ProfileLoading.tsx | 60 ++++++++++++ .../hooks/queries/useFetchNotifications.ts | 5 +- frontend/src/pages/article/edit/[id].tsx | 91 +++++++++---------- frontend/src/pages/notification.tsx | 43 +++++---- frontend/src/pages/user/[id].tsx | 4 +- 6 files changed, 155 insertions(+), 69 deletions(-) create mode 100644 frontend/src/components/common/NotificationLoading/NotificationLoading.tsx create mode 100644 frontend/src/components/common/ProfileLoading/ProfileLoading.tsx diff --git a/frontend/src/components/common/NotificationLoading/NotificationLoading.tsx b/frontend/src/components/common/NotificationLoading/NotificationLoading.tsx new file mode 100644 index 00000000..0f608225 --- /dev/null +++ b/frontend/src/components/common/NotificationLoading/NotificationLoading.tsx @@ -0,0 +1,21 @@ +import { Skeleton } from '@mantine/core'; + +import useDeferredResponse from '@hooks/useDeferredResponse'; + +const NotificationLoading = () => { + const isDeferred = useDeferredResponse(); + + if (!isDeferred) { + return <>; + } + + return ( + <> + {new Array(10).fill(0).map((_, index) => ( + + ))} + + ); +}; + +export default NotificationLoading; diff --git a/frontend/src/components/common/ProfileLoading/ProfileLoading.tsx b/frontend/src/components/common/ProfileLoading/ProfileLoading.tsx new file mode 100644 index 00000000..59ce2bab --- /dev/null +++ b/frontend/src/components/common/ProfileLoading/ProfileLoading.tsx @@ -0,0 +1,60 @@ +import { useTheme } from '@emotion/react'; +import styled from '@emotion/styled'; +import { Skeleton } from '@mantine/core'; +import { IconBrandGithub, IconLink } from '@tabler/icons'; + +const ProfileLoading = () => { + const { + colors: { gray }, + } = useTheme(); + + return ( + + + + + + + + + + + + + + + + + + ); +}; + +export default ProfileLoading; + +const ProfileWrapper = styled.div` + display: flex; + flex-direction: column; + gap: 1.6rem; + align-items: center; + width: 100%; +`; + +const UserWrapper = styled.div` + display: flex; + flex-direction: column; + gap: 0.8rem; + align-items: center; +`; + +const UrlWrapper = styled.div` + display: flex; + flex-direction: column; + gap: 0.8rem; + align-items: center; +`; + +const UrlIconWrapper = styled.div` + display: flex; + gap: 0.4rem; + align-items: center; +`; diff --git a/frontend/src/hooks/queries/useFetchNotifications.ts b/frontend/src/hooks/queries/useFetchNotifications.ts index 18202dce..a9003568 100644 --- a/frontend/src/hooks/queries/useFetchNotifications.ts +++ b/frontend/src/hooks/queries/useFetchNotifications.ts @@ -39,7 +39,10 @@ const useFetchNotifications = () => { refetchInterval: 3000, }); - const notifications = useMemo(() => (data ? data.pages.flatMap(({ data }) => data) : []), [data]); + const notifications = useMemo( + () => (data ? data.pages.flatMap(({ data }) => data) : undefined), + [data] + ); return { data: notifications, ...queryResult }; }; diff --git a/frontend/src/pages/article/edit/[id].tsx b/frontend/src/pages/article/edit/[id].tsx index 013ef9ba..67ffeaa0 100644 --- a/frontend/src/pages/article/edit/[id].tsx +++ b/frontend/src/pages/article/edit/[id].tsx @@ -94,54 +94,49 @@ const ArticleEdit = () => { /> } > - {/* TODO ๋กœ๋”ฉ์ฒ˜๋ฆฌ */} - {article === undefined ? ( -
    ๋กœ๋”ฉ์ค‘
    - ) : ( - <> - - - ({ - label: value, - value: key, - }))} - value={article.category} - required - disabled - /> - ({ - label: value, - value: key, - }))} - value={article.location} - required - disabled - /> - - - - - ์ธ์›์ œํ•œ - - - {article.maxCapacity}๋ช… - - - - - - { - setArticleInput((prev) => ({ ...prev, [target]: value })); - }} - /> - - )} + <> + + + ({ + label: value, + value: key, + }))} + value={article?.category ?? undefined} + required + disabled + /> + ({ + label: value, + value: key, + }))} + value={article?.location ?? undefined} + required + disabled + /> + + + + + ์ธ์›์ œํ•œ + + + {article?.maxCapacity ?? ''}๋ช… + + + + + + { + setArticleInput((prev) => ({ ...prev, [target]: value })); + }} + /> + ); diff --git a/frontend/src/pages/notification.tsx b/frontend/src/pages/notification.tsx index 76b2595c..27d57c32 100644 --- a/frontend/src/pages/notification.tsx +++ b/frontend/src/pages/notification.tsx @@ -5,6 +5,7 @@ import Header from '@components/common/Header'; import RootTitle from '@components/common/Header/RootTitle'; import UserLoginItem from '@components/common/Header/UserLoginItem'; import NavigationTab from '@components/common/NavigationTab'; +import NotificationLoading from '@components/common/NotificationLoading/NotificationLoading'; import PageLayout from '@components/common/PageLayout'; import NotificationItem from '@components/notification/NotificationItem'; import { PAGE_TITLE } from '@constants/pageTitle'; @@ -12,7 +13,13 @@ import useFetchNotifications from '@hooks/queries/useFetchNotifications'; import useIntersect from '@hooks/useIntersect'; const NotificationPage = () => { - const { data: notifications, fetchNextPage, hasNextPage, isFetching } = useFetchNotifications(); + const { + data: notifications, + fetchNextPage, + hasNextPage, + isFetching, + isLoading, + } = useFetchNotifications(); const ref = useIntersect((entry, observer) => { observer.unobserve(entry.target); @@ -36,23 +43,23 @@ const NotificationPage = () => { } footer={} > - {notifications ? ( - - {notifications.length > 0 ? ( - <> - {notifications.map((notification) => ( - - ))} -
    - - ) : ( - - )} - - ) : ( - // TODO ๋กœ๋”ฉ ์ฒ˜๋ฆฌ -
    ๋กœ๋”ฉ์ค‘
    - )} + + {isLoading && } + {notifications && ( + <> + {notifications.length > 0 ? ( + <> + {notifications.map((notification) => ( + + ))} +
    + + ) : ( + + )} + + )} + ); }; diff --git a/frontend/src/pages/user/[id].tsx b/frontend/src/pages/user/[id].tsx index b714d181..1169427e 100644 --- a/frontend/src/pages/user/[id].tsx +++ b/frontend/src/pages/user/[id].tsx @@ -6,6 +6,7 @@ import Header from '@components/common/Header'; import DetailTitle from '@components/common/Header/DetailTitle'; import PageLayout from '@components/common/PageLayout'; import Profile from '@components/common/Profile'; +import ProfileLoading from '@components/common/ProfileLoading/ProfileLoading'; import { PAGE_TITLE } from '@constants/pageTitle'; import useFetchProfile from '@hooks/queries/useFetchProfile'; @@ -31,8 +32,7 @@ const UserProfile = () => { > - {/* TODO ๋กœ๋”ฉ์ค‘ */} - {!isReady || isFetching ?
    ๋กœ๋”ฉ์ค‘
    : } + {!isReady || isFetching ? : }
    From 7f1a7b26d5701e74954909232a9cc0465a718dfb Mon Sep 17 00:00:00 2001 From: MinGyeong Park <37508296+kong430@users.noreply.github.com> Date: Tue, 13 Dec 2022 11:44:59 +0900 Subject: [PATCH 138/142] =?UTF-8?q?[Feature]=20=EB=A9=94=EC=9D=B8=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20=EC=8A=A4=ED=81=AC=EB=A1=A4=20=EB=B3=B5?= =?UTF-8?q?=EA=B5=AC,=20=ED=95=84=ED=84=B0=20=EC=9C=A0=EC=A7=80=20(#300)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :sparkles: feature: ๋ฉ”์ธํŽ˜์ด์ง€ ํ•„ํ„ฐ ๋ฐ ์Šคํฌ๋กค ์œ ์ง€ * :goal_net: chore: ์‹ค์ˆ˜๋กœ ์ง€์šด _app.tsx์˜Hydrate ๋ณต๊ตฌ * :sparkles: feature: atom key์— uuid ์ถ”๊ฐ€ํ•˜์—ฌ uniqueํ•˜๋„๋ก ํ•จ ๊ฐœ๋ฐœ๋ชจ๋“œ์—์„œ ๋ฐœ์ƒํ•˜๋Š” duplicate key ์—๋Ÿฌ ํ•ด๊ฒฐ * :sparkles: feature: ๋ฉ”์ธํŽ˜์ด์ง€->์ƒ์„ธํŽ˜์ด์ง€->๋ฉ”์ธํŽ˜์ด์ง€ ์ด๋™ ์‹œ์—๋งŒ ์Šคํฌ๋กค ์œ ์ง€ * :pencil2: fix: ์ƒ์„ธ->๋ฉ”์ธํŽ˜์ด์ง€๋กœ ๋ฐ”๋กœ ์ด๋™ํ–ˆ์„ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ์Šคํฌ๋กค์„ 0์œผ๋กœ ๋ณ€๊ฒฝ * :goal_net: chore: ScrollHandler๋ฅผ ์ปดํฌ๋„ŒํŠธ๋ณด๋‹ค ๋จผ์ € ๋ Œ๋”๋ง --- frontend/package-lock.json | 38 +++++++++++++++++ frontend/package.json | 1 + .../components/common/ScrollHandler/index.tsx | 41 +++++++++++++++++++ frontend/src/pages/_app.tsx | 41 +++++++++++-------- frontend/src/pages/index.tsx | 25 ++++++++--- frontend/src/recoil/atoms.ts | 24 +++++++++++ frontend/tsconfig.json | 3 +- 7 files changed, 148 insertions(+), 25 deletions(-) create mode 100644 frontend/src/components/common/ScrollHandler/index.tsx create mode 100644 frontend/src/recoil/atoms.ts diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 78d85d0b..39f66476 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -27,6 +27,7 @@ "next-seo": "^5.15.0", "react": "^17.0.2", "react-dom": "^17.0.2", + "recoil": "^0.7.6", "sharp": "^0.31.2", "timeago.js": "^4.0.2", "uuidv4": "^6.2.13" @@ -17905,6 +17906,11 @@ "node": ">= 10.x" } }, + "node_modules/hamt_plus": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hamt_plus/-/hamt_plus-1.0.2.tgz", + "integrity": "sha512-t2JXKaehnMb9paaYA7J0BX8QQAY8lwfQ9Gjf4pg/mk4krt+cmwmU652HOoWonf+7+EQV97ARPMhhVgU1ra2GhA==" + }, "node_modules/handlebars": { "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", @@ -24366,6 +24372,25 @@ "node": ">=8.10.0" } }, + "node_modules/recoil": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/recoil/-/recoil-0.7.6.tgz", + "integrity": "sha512-hsBEw7jFdpBCY/tu2GweiyaqHKxVj6EqF2/SfrglbKvJHhpN57SANWvPW+gE90i3Awi+A5gssOd3u+vWlT+g7g==", + "dependencies": { + "hamt_plus": "1.0.2" + }, + "peerDependencies": { + "react": ">=16.13.1" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, "node_modules/redent": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", @@ -42582,6 +42607,11 @@ "integrity": "sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==", "dev": true }, + "hamt_plus": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hamt_plus/-/hamt_plus-1.0.2.tgz", + "integrity": "sha512-t2JXKaehnMb9paaYA7J0BX8QQAY8lwfQ9Gjf4pg/mk4krt+cmwmU652HOoWonf+7+EQV97ARPMhhVgU1ra2GhA==" + }, "handlebars": { "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", @@ -47453,6 +47483,14 @@ "picomatch": "^2.2.1" } }, + "recoil": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/recoil/-/recoil-0.7.6.tgz", + "integrity": "sha512-hsBEw7jFdpBCY/tu2GweiyaqHKxVj6EqF2/SfrglbKvJHhpN57SANWvPW+gE90i3Awi+A5gssOd3u+vWlT+g7g==", + "requires": { + "hamt_plus": "1.0.2" + } + }, "redent": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index ddd4e004..041bba43 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -45,6 +45,7 @@ "next-seo": "^5.15.0", "react": "^17.0.2", "react-dom": "^17.0.2", + "recoil": "^0.7.6", "sharp": "^0.31.2", "timeago.js": "^4.0.2", "uuidv4": "^6.2.13" diff --git a/frontend/src/components/common/ScrollHandler/index.tsx b/frontend/src/components/common/ScrollHandler/index.tsx new file mode 100644 index 00000000..bdda603a --- /dev/null +++ b/frontend/src/components/common/ScrollHandler/index.tsx @@ -0,0 +1,41 @@ +import { useRouter } from 'next/router'; +import { useEffect } from 'react'; + +import { useRecoilState } from 'recoil'; + +import { scrollYAtom } from '@recoil/atoms'; + +const ScrollHandler = () => { + const router = useRouter(); + const [scrollY, setScrollY] = useRecoilState(scrollYAtom); + + useEffect(() => { + const saveScrollY = (url: string) => { + if (url.startsWith('/article')) { + setScrollY(window.scrollY); + return; + } + if (url !== '/') { + setScrollY(0); + } + }; + + const restoreScrollY = (url: string) => { + if (url === '/') { + window.scrollTo({ top: scrollY }); + setScrollY(0); + } + }; + + router.events.on('routeChangeStart', saveScrollY); + router.events.on('routeChangeComplete', restoreScrollY); + return () => { + router.events.off('routeChangeStart', saveScrollY); + router.events.off('routeChangeComplete', restoreScrollY); + }; + }, [router.events, scrollY, setScrollY]); + + return <>; +}; + +export default ScrollHandler; diff --git a/frontend/src/pages/_app.tsx b/frontend/src/pages/_app.tsx index 5c196017..20c9c5dc 100644 --- a/frontend/src/pages/_app.tsx +++ b/frontend/src/pages/_app.tsx @@ -5,6 +5,7 @@ import '@styles/global.css'; import { Hydrate, QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; +import { RecoilRoot } from 'recoil'; import { v4 as uuid } from 'uuid'; import ApiErrorBoundary from '@components/common/ErrorBoundary/ApiErrorBoundary'; @@ -12,6 +13,7 @@ import AuthErrorBoundary from '@components/common/ErrorBoundary/AuthErrorBoundar import ErrorBoundary from '@components/common/ErrorBoundary/ErrorBoundary'; import LoginRedirect from '@components/common/LoginRedirect'; import RouterTransition from '@components/common/RouterTransition'; +import ScrollHandler from '@components/common/ScrollHandler'; import initMockApi from '@mocks/.'; import CommonStyles from '@styles/CommonStyles'; @@ -47,24 +49,27 @@ export default function App({ Component, pageProps }: AppProps<{ dehydratedState ๋ชจ์—ฌ๋ชจ์—ฌ - ๊ฐœ๋ฐœ์ž ์†Œ๋ชจ์ž„ ์ปค๋ฎค๋‹ˆํ‹ฐ - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + ); } diff --git a/frontend/src/pages/index.tsx b/frontend/src/pages/index.tsx index fd4978da..0ea43b73 100644 --- a/frontend/src/pages/index.tsx +++ b/frontend/src/pages/index.tsx @@ -1,8 +1,8 @@ import Link from 'next/link'; -import { useState } from 'react'; import { QueryClient, dehydrate, useQueryClient } from '@tanstack/react-query'; import { GetServerSideProps } from 'next'; +import { useRecoilState } from 'recoil'; import { useTheme } from '@emotion/react'; import styled from '@emotion/styled'; @@ -23,8 +23,15 @@ import { Location, LocationKr } from '@constants/location'; import { PAGE_TITLE } from '@constants/pageTitle'; import useFetchGroupArticles, { getGroupArticles } from '@hooks/queries/useFetchGroupArticles'; import useIntersect from '@hooks/useIntersect'; +import { categoryAtom, locationAtom, progressCheckedAtom } from '@recoil/atoms'; + +export const getServerSideProps: GetServerSideProps = async (ctx) => { + if (ctx.req.headers.referer) { + return { + props: {}, + }; + } -export const getServerSideProps: GetServerSideProps = async () => { const queryClient = new QueryClient(); await queryClient.prefetchInfiniteQuery( ['articles', null, null, false], @@ -42,15 +49,16 @@ const Main = () => { colors: { gray }, } = useTheme(); const queryClient = useQueryClient(); - const [selectedCategory, setSelectedCategory] = useState(null); - const [selectedLocation, setSelectedLocation] = useState(null); - const [progressChecked, setProgressChecked] = useState(false); + const [selectedCategory, setSelectedCategory] = useRecoilState(categoryAtom); + const [selectedLocation, setSelectedLocation] = useRecoilState(locationAtom); + const [progressChecked, setProgressChecked] = useRecoilState(progressCheckedAtom); const { articles, fetchNextPage, hasNextPage, isFetching, isLoading } = useFetchGroupArticles( selectedCategory, selectedLocation, progressChecked ); + const ref = useIntersect((entry, observer) => { observer.unobserve(entry.target); if (hasNextPage && !isFetching) { @@ -59,7 +67,12 @@ const Main = () => { }); const refreshArticleList = () => { - void queryClient.resetQueries(['articles']); + void queryClient.resetQueries([ + 'articles', + selectedCategory, + selectedLocation, + progressChecked, + ]); }; return ( diff --git a/frontend/src/recoil/atoms.ts b/frontend/src/recoil/atoms.ts new file mode 100644 index 00000000..3c4145cb --- /dev/null +++ b/frontend/src/recoil/atoms.ts @@ -0,0 +1,24 @@ +import { atom } from 'recoil'; +import { v4 as uuid } from 'uuid'; + +const categoryAtom = atom({ + key: `categoryAtom/${uuid()}`, + default: null, +}); + +const locationAtom = atom({ + key: `locationAtom/${uuid()}`, + default: null, +}); + +const progressCheckedAtom = atom({ + key: `progressCheckedAtom/${uuid()}`, + default: false, +}); + +const scrollYAtom = atom({ + key: `scrollYAtom/${uuid()}`, + default: 0, +}); + +export { categoryAtom, locationAtom, progressCheckedAtom, scrollYAtom }; diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json index 6cd0b137..8620a938 100644 --- a/frontend/tsconfig.json +++ b/frontend/tsconfig.json @@ -31,7 +31,8 @@ "@mocks/*": ["src/mocks/*"], "@public/*": ["public/*"], "@constants/*": ["src/constants/*"], - "@utils/*": ["src/utils/*"] + "@utils/*": ["src/utils/*"], + "@recoil/*": ["src/recoil/*"] } }, "include": ["custom.d.ts", "next-env.d.ts", "**/*.ts", "**/*.tsx", ".storybook/**/*.tsx"], From 963898eaded84c866f563ca7a76818a7f733a8d2 Mon Sep 17 00:00:00 2001 From: Kim Myeongil <67570061+username1103@users.noreply.github.com> Date: Tue, 13 Dec 2022 11:53:00 +0900 Subject: [PATCH 139/142] =?UTF-8?q?[Feature]=20=ED=8E=98=EC=9D=B4=EC=A7=95?= =?UTF-8?q?=20=EB=B0=A9=EC=8B=9D=20=EC=88=98=EC=A0=95=20(#327)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :sparkles: feature: no offset page request, result ์ถ”๊ฐ€ * :sparkles: feature: no offset ๊ฒฐ๊ณผ๊ฐ€ limit ๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ isLast๋ฅผ true๋กœ ์„ค์ • * :sparkles: feature: GET /v2/group-articles/search ์ถ”๊ฐ€ - ๋ชจ์ง‘๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก ์กฐํšŒ v2 API ์ถ”๊ฐ€ - NoOffset ๋ฐ id ์กฐํšŒ ํ›„ ์ฟผ๋ฆฌ ๋ฐฉ์‹์œผ๋กœ ๋ณ€ํ™˜ * :sparkles: feature: ์œ ์ €, ๋ชจ์ง‘๊ฒŒ์‹œ๊ธ€, ๋ชจ์ง‘์‹ ์ฒญ, ๋Œ“๊ธ€ ๋”๋ฏธ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ํŒŒ์ผ ์ถ”๊ฐ€ * :sparkles: feature: ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก ์กฐํšŒ ์ฟผ๋ฆฌ ์ตœ์ ํ™” * :sparkles: feature: ๋”๋ฏธ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ๋ฐฉ์‹ ์ˆ˜์ • - location, groupStatus ๋žœ๋คํ•˜๊ฒŒ ์ถ”๊ฐ€ * :sparkles: feature: group entity์— blur thumbnail ์ถ”๊ฐ€ * :sparkles: feature: ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ์‹œ blurThumbnail๋„ ํ•จ๊ป˜ ์ €์žฅ * :sparkles: feature: ๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€ ์ˆ˜์ •์‹œ blurThumbnail๋„ ํ•จ๊ป˜ ์ˆ˜์ • * :sparkles: feature: ๋ชจ์ง‘๊ฒŒ์‹œ๊ธ€ ๊ด€๋ จ ์‘๋‹ต๋ฐ์ดํ„ฐ ์ˆ˜์ • - ์•„๋ž˜ ์ฟผ๋ฆฌ๋“ค์˜ thumbnail.blurUrl์— ๋””๋น„์—์„œ ๊ฐ€์ ธ์˜จ blurThumbnail ์ „๋‹ฌ - GET /v1/group-articles/search - GET /v2/group-articles/search - GET /v1/my-group-articles - GET /v1/group-applications/me - blurThumbnail๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ, blurUrl์„ thumbnail๋กœ ์ „๋‹ฌ * :sparkles: feature: group fixture์— blurThumbnail ์ถ”๊ฐ€ * :sparkles: feature: NoOffset ํŽ˜์ด์ง• limit ์ตœ๋Œ€ 30 ์ œํ•œ * :sparkles: feature: group fixture blurThumbnail default๊ฐ’์„ ๋นˆ ๋ฌธ์ž์—ด๋กœ ์ˆ˜์ • --- backend/scripts/dummy.ts | 180 ++++++++++++++++++ .../dto/group-article-response.dto.ts | 7 +- .../dto/my-group-result.interface.ts | 2 + .../group-application.repository.ts | 1 + .../group-article/__test__/group.fixture.ts | 1 + .../dto/group-article-search-result.dto.ts | 7 +- .../group-article-search-result.interface.ts | 2 + .../v2-search-group-articles-request.dto.ts | 29 +++ .../v2-search-group-articles-response.dto.ts | 12 ++ .../entity/group-article.entity.ts | 6 + .../app/group-article/entity/group.entity.ts | 6 + .../group-article/group-article.controller.ts | 28 ++- .../group-article/group-article.service.ts | 9 + .../my-group-article.controller.ts | 4 +- .../repository/group-article.repository.ts | 151 ++++++++++++--- .../dto/image-with-blur-response.dto.ts | 12 +- .../__test__/no-offset-page-result.spec.ts | 80 ++++++++ backend/src/common/util/get-blur-image.ts | 11 ++ .../src/common/util/no-offset-page-request.ts | 32 ++++ .../src/common/util/no-offset-page-result.ts | 45 +++++ 20 files changed, 579 insertions(+), 46 deletions(-) create mode 100644 backend/scripts/dummy.ts create mode 100644 backend/src/app/group-article/dto/v2-search-group-articles-request.dto.ts create mode 100644 backend/src/app/group-article/dto/v2-search-group-articles-response.dto.ts create mode 100644 backend/src/common/util/__test__/no-offset-page-result.spec.ts create mode 100644 backend/src/common/util/get-blur-image.ts create mode 100644 backend/src/common/util/no-offset-page-request.ts create mode 100644 backend/src/common/util/no-offset-page-result.ts diff --git a/backend/scripts/dummy.ts b/backend/scripts/dummy.ts new file mode 100644 index 00000000..10e500b0 --- /dev/null +++ b/backend/scripts/dummy.ts @@ -0,0 +1,180 @@ +/* eslint-disable no-console */ +import * as mysql2 from 'mysql2/promise'; +import { faker } from '@faker-js/faker'; +import { + CATEGORY, + GROUP_STATUS, + LOCATION, +} from '../src/app/group-article/constants/group-article.constants'; + +function randomValue(min: number, max: number) { + return Math.floor(Math.random() * (max - min + 1)) + min; +} + +async function bulkInsert() { + let result = false; + const conn = await mysql2.createConnection({ + host: 'localhost', + port: 3330, + password: 'test', + database: 'test', + user: 'root', + timezone: 'Z', + }); + + const USER_COUNT = 30000; + const GROUP_ARTICLE_COUNT = 50000; + const DELETED_GROUP_ARTICLE_PERCENT = 5; + + const groupCategories = [ + CATEGORY.MEAL, + CATEGORY.STUDY, + CATEGORY.PROJECT, + CATEGORY.COMPETITION, + CATEGORY.ETC, + ]; + const locations = [ + LOCATION.ONLINE, + LOCATION.SEOUL, + LOCATION.INCHEON, + LOCATION.BUSAN, + LOCATION.DAEGU, + LOCATION.GWANGJU, + LOCATION.DAEJEON, + LOCATION.ULSAN, + LOCATION.SEJONG, + LOCATION.GYEONGGI, + LOCATION.GANGWON, + LOCATION.CHUNGBUK, + LOCATION.CHUNGNAM, + LOCATION.JEONBUK, + LOCATION.JEONNAM, + LOCATION.GYEONGBUK, + LOCATION.GYEONGNAM, + LOCATION.JEJU, + ]; + const groupStatus = [ + GROUP_STATUS.PROGRESS, + GROUP_STATUS.SUCCEED, + GROUP_STATUS.FAIL, + ]; + + const GROUP_APPLICATION_COUNT = 200000; + const DELETED_GROUP_APPLICATION_PERCENT = 15; + const COMMENT_COUNT = 50000; + const DELETED_COMMENT_PERCENT = 5; + + await conn.beginTransaction(); + try { + console.log('์œ ์ € ๋”๋ฏธ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ์‹œ์ž‘'); + const userValues = Array.from( + { length: USER_COUNT }, + (v, k) => + `(${k + 1}, "${faker.internet.url()}","${faker.lorem.paragraph( + 1, + )}", "${faker.internet.url()}", "${faker.internet.url()}", ${ + k + 1 + }, "GITHUB", "user${k + 1}")`, + ).join(','); + await conn.query(`INSERT INTO \`user\`(\`id\`, profile_image, description, github_url, blog_url, social_id, + social_type, user_name) + VALUES ${userValues}`); + console.log(`์œ ์ € ๋”๋ฏธ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ์™„๋ฃŒ: ${USER_COUNT}`); + + console.log('๋ชจ์ž„ ์นดํ…Œ๊ณ ๋ฆฌ ๋”๋ฏธ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ์‹œ์ž‘'); + const groupCategoryValues = groupCategories + .map((category, idx) => `(${idx + 1}, "${category}")`) + .join(','); + + await conn.query(`INSERT INTO group_category(\`id\`, \`name\`) + VALUES ${groupCategoryValues}`); + console.log( + `๋ชจ์ž„ ์นดํ…Œ๊ณ ๋ฆฌ ๋”๋ฏธ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ์™„๋ฃŒ: ${groupCategories.length}`, + ); + + console.log('๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€ ๋”๋ฏธ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ์‹œ์ž‘'); + const articleValues = Array.from( + { length: GROUP_ARTICLE_COUNT }, + (v, k) => + `(${k + 1},${randomValue(1, USER_COUNT)},"${faker.lorem.words( + 1, + )}", "${faker.lorem.paragraphs(5)}","GROUP", ${ + (k + 1) % (100 / DELETED_GROUP_ARTICLE_PERCENT) === 0 ? 'now()' : null + })`, + ).join(','); + + await conn.query(`INSERT INTO article(\`id\`, user_id, title, contents, type, deleted_at) + VALUES ${articleValues}`); + + const groupValues = Array.from( + { length: GROUP_ARTICLE_COUNT }, + (v, k) => + `(${k + 1}, ${k + 1}, ${randomValue(1, groupCategories.length - 1)}, "${ + locations[randomValue(0, locations.length - 1)] + }", ${randomValue(2, 15)},"${ + groupStatus[randomValue(0, groupStatus.length - 1)] + }","${faker.internet.url()}", "${faker.internet.url()}")`, + ).join(','); + + await conn.query(`INSERT INTO \`group\`(\`id\`, article_id, category_id, location, max_capacity, status, thumbnail, + chat_url) + VALUES ${groupValues}`); + console.log(`๋ชจ์ง‘ ๊ฒŒ์‹œ๊ธ€ ๋”๋ฏธ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ์™„๋ฃŒ: ${GROUP_ARTICLE_COUNT}`); + + console.log('์‹ ์ฒญ์ •๋ณด ๋”๋ฏธ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ์‹œ์ž‘'); + const groupApplicationValues = Array.from( + { length: GROUP_APPLICATION_COUNT }, + (v, k) => + `(${k + 1}, ${randomValue(1, USER_COUNT)}, ${randomValue( + 1, + GROUP_ARTICLE_COUNT, + )}, ${ + (k + 1) % (100 / DELETED_GROUP_APPLICATION_PERCENT) === 0 + ? null + : '"REGISTER"' + },${ + (k + 1) % (100 / DELETED_GROUP_APPLICATION_PERCENT) === 0 + ? 'now()' + : null + })`, + ).join(','); + + await conn.query(`INSERT + IGNORE INTO group_application(\`id\`, user_id, group_id, status, deleted_at) + VALUES + ${groupApplicationValues}`); + console.log(`์‹ ์ฒญ์ •๋ณด ๋”๋ฏธ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ์™„๋ฃŒ: ${GROUP_APPLICATION_COUNT}`); + + console.log('๋Œ“๊ธ€ ๋”๋ฏธ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ์‹œ์ž‘'); + const commentValues = Array.from( + { length: COMMENT_COUNT }, + (v, k) => + `(${k + 1}, ${randomValue(1, USER_COUNT)}, ${randomValue( + 1, + GROUP_ARTICLE_COUNT, + )}, "${faker.lorem.paragraph(1)}", ${ + (k + 1) % (100 / DELETED_COMMENT_PERCENT) === 0 ? 'now()' : null + })`, + ).join(','); + + await conn.query(`INSERT + IGNORE INTO comment(\`id\`, user_id, article_id, contents, deleted_at) + VALUES + ${commentValues}`); + console.log(`๋Œ“๊ธ€ ๋”๋ฏธ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ์™„๋ฃŒ: ${COMMENT_COUNT}`); + + await conn.commit(); + result = true; + } catch (e) { + console.log(e); + await conn.rollback(); + } finally { + conn.destroy(); + } + + return result; +} + +bulkInsert() + .then((val) => console.log(val)) + .catch((res) => console.log(res)); diff --git a/backend/src/app/group-application/dto/group-article-response.dto.ts b/backend/src/app/group-application/dto/group-article-response.dto.ts index 7abb0a44..5c1f64f0 100644 --- a/backend/src/app/group-application/dto/group-article-response.dto.ts +++ b/backend/src/app/group-application/dto/group-article-response.dto.ts @@ -86,7 +86,7 @@ export class GroupArticleResponse { }) createdAt: Date; - static async from(myGroup: IMyGroupResult) { + static from(myGroup: IMyGroupResult) { const response = new GroupArticleResponse(); response.id = myGroup.groupArticleId; response.title = myGroup.title; @@ -94,7 +94,10 @@ export class GroupArticleResponse { response.category = myGroup.category; response.commentCount = myGroup.commentCount; response.scrapCount = myGroup.scrapCount; - response.thumbnail = await ImageWithBlurResponse.from(myGroup.thumbnail); + response.thumbnail = ImageWithBlurResponse.from( + myGroup.thumbnail, + myGroup.blurThumbnail, + ); response.maxCapacity = myGroup.maxCapacity; response.currentCapacity = Number(myGroup.currentCapacity); response.status = myGroup.status; diff --git a/backend/src/app/group-application/dto/my-group-result.interface.ts b/backend/src/app/group-application/dto/my-group-result.interface.ts index 88ef9391..c857825e 100644 --- a/backend/src/app/group-application/dto/my-group-result.interface.ts +++ b/backend/src/app/group-application/dto/my-group-result.interface.ts @@ -19,6 +19,8 @@ export interface IMyGroupResult { thumbnail: string; + blurThumbnail: string; + maxCapacity: number; currentCapacity: string; diff --git a/backend/src/app/group-application/group-application.repository.ts b/backend/src/app/group-application/group-application.repository.ts index 0e7cee30..62488cb0 100644 --- a/backend/src/app/group-application/group-application.repository.ts +++ b/backend/src/app/group-application/group-application.repository.ts @@ -79,6 +79,7 @@ export class GroupApplicationRepository extends Repository { 'COUNT(DISTINCT comment.id) as commentCount', 'COUNT(DISTINCT scrap.id) as scrapCount', 'group.thumbnail as thumbnail', + 'group.blurThumbnail as blurThumbnail', 'group.maxCapacity as maxCapacity', 'COUNT(DISTINCT groupApplication.id) as currentCapacity', 'group.status as status', diff --git a/backend/src/app/group-article/__test__/group.fixture.ts b/backend/src/app/group-article/__test__/group.fixture.ts index e180c509..baf54c04 100644 --- a/backend/src/app/group-article/__test__/group.fixture.ts +++ b/backend/src/app/group-article/__test__/group.fixture.ts @@ -18,6 +18,7 @@ export const getGroupFixture = ( fixture.status = group.status || GROUP_STATUS.PROGRESS; fixture.chatUrl = group.chatUrl || faker.internet.url(); fixture.thumbnail = group.thumbnail || faker.internet.url(); + fixture.blurThumbnail = group.blurThumbnail || ''; fixture.createdAt = new Date(); fixture.updatedAt = new Date(); return fixture; diff --git a/backend/src/app/group-article/dto/group-article-search-result.dto.ts b/backend/src/app/group-article/dto/group-article-search-result.dto.ts index 19461172..85243729 100644 --- a/backend/src/app/group-article/dto/group-article-search-result.dto.ts +++ b/backend/src/app/group-article/dto/group-article-search-result.dto.ts @@ -51,11 +51,14 @@ export class GroupArticleSearchResult { }) createdAt: Date; - static async from(row: IGroupArticleSearchResult) { + static from(row: IGroupArticleSearchResult) { const res = new GroupArticleSearchResult(); res.id = row.id; res.title = row.title; - res.thumbnail = await ImageWithBlurResponse.from(row.thumbnail); + res.thumbnail = ImageWithBlurResponse.from( + row.thumbnail, + row.blurThumbnail, + ); res.category = row.groupCategoryName; res.location = row.location; res.status = row.status; diff --git a/backend/src/app/group-article/dto/group-article-search-result.interface.ts b/backend/src/app/group-article/dto/group-article-search-result.interface.ts index 6592257d..be2d3340 100644 --- a/backend/src/app/group-article/dto/group-article-search-result.interface.ts +++ b/backend/src/app/group-article/dto/group-article-search-result.interface.ts @@ -10,6 +10,8 @@ export interface IGroupArticleSearchResult { thumbnail: string; + blurThumbnail: string; + status: GROUP_STATUS; location: LOCATION; diff --git a/backend/src/app/group-article/dto/v2-search-group-articles-request.dto.ts b/backend/src/app/group-article/dto/v2-search-group-articles-request.dto.ts new file mode 100644 index 00000000..e49f2224 --- /dev/null +++ b/backend/src/app/group-article/dto/v2-search-group-articles-request.dto.ts @@ -0,0 +1,29 @@ +import { IsEnum, IsOptional } from 'class-validator'; +import { + CATEGORY, + GROUP_STATUS, + LOCATION, +} from '@app/group-article/constants/group-article.constants'; +import { ApiProperty } from '@nestjs/swagger'; +import { NoOffsetPageRequest } from '@common/util/no-offset-page-request'; + +export class V2SearchGroupArticlesRequest extends NoOffsetPageRequest { + @IsOptional() + @IsEnum(CATEGORY) + @ApiProperty({ example: CATEGORY.STUDY, enum: CATEGORY, required: false }) + category?: CATEGORY; + + @IsOptional() + @IsEnum(LOCATION) + @ApiProperty({ example: LOCATION.ONLINE, enum: LOCATION, required: false }) + location?: LOCATION; + + @IsOptional() + @IsEnum(GROUP_STATUS) + @ApiProperty({ + example: GROUP_STATUS.PROGRESS, + enum: GROUP_STATUS, + required: false, + }) + status?: GROUP_STATUS; +} diff --git a/backend/src/app/group-article/dto/v2-search-group-articles-response.dto.ts b/backend/src/app/group-article/dto/v2-search-group-articles-response.dto.ts new file mode 100644 index 00000000..678f1b68 --- /dev/null +++ b/backend/src/app/group-article/dto/v2-search-group-articles-response.dto.ts @@ -0,0 +1,12 @@ +import { NoOffsetPageResult } from '@common/util/no-offset-page-result'; +import { ApiProperty } from '@nestjs/swagger'; +import { Expose } from 'class-transformer'; +import { GroupArticleSearchResult } from '@app/group-article/dto/group-article-search-result.dto'; + +export class V2SearchGroupArticlesResponse extends NoOffsetPageResult { + @Expose() + @ApiProperty({ type: GroupArticleSearchResult, isArray: true }) + get data(): GroupArticleSearchResult[] { + return this._data; + } +} diff --git a/backend/src/app/group-article/entity/group-article.entity.ts b/backend/src/app/group-article/entity/group-article.entity.ts index be50f571..bc4cf83d 100644 --- a/backend/src/app/group-article/entity/group-article.entity.ts +++ b/backend/src/app/group-article/entity/group-article.entity.ts @@ -25,6 +25,7 @@ export class GroupArticle extends Article { title, contents, thumbnail, + blurThumbnail, location, chatUrl, maxCapacity, @@ -33,6 +34,7 @@ export class GroupArticle extends Article { title: string; contents: string; thumbnail: string; + blurThumbnail: string; location: LOCATION; chatUrl: string; maxCapacity: number; @@ -50,6 +52,7 @@ export class GroupArticle extends Article { maxCapacity, category, thumbnail, + blurThumbnail, }); return article; } @@ -60,11 +63,13 @@ export class GroupArticle extends Article { title, contents, thumbnail, + blurThumbnail, chatUrl, }: { title: string; contents: string; thumbnail: string; + blurThumbnail: string; chatUrl: string; }, ) { @@ -75,6 +80,7 @@ export class GroupArticle extends Article { this.title = title; this.contents = contents; this.group.thumbnail = thumbnail; + this.group.blurThumbnail = blurThumbnail; this.group.chatUrl = chatUrl; } diff --git a/backend/src/app/group-article/entity/group.entity.ts b/backend/src/app/group-article/entity/group.entity.ts index 5ec1cd7b..0fcc20f0 100644 --- a/backend/src/app/group-article/entity/group.entity.ts +++ b/backend/src/app/group-article/entity/group.entity.ts @@ -43,6 +43,9 @@ export class Group { @Column({ type: 'varchar', length: 300 }) thumbnail: string; + @Column({ type: 'varchar', length: 2000, default: '' }) + blurThumbnail: string; + @CreateDateColumn() createdAt: Date; @@ -55,12 +58,14 @@ export class Group { maxCapacity, category, thumbnail, + blurThumbnail, }: { location: LOCATION; chatUrl: string; maxCapacity: number; category: GroupCategory; thumbnail: string; + blurThumbnail: string; }) { const group = new Group(); group.location = location; @@ -69,6 +74,7 @@ export class Group { group.maxCapacity = maxCapacity; group.category = category; group.thumbnail = thumbnail; + group.blurThumbnail = blurThumbnail; return group; } diff --git a/backend/src/app/group-article/group-article.controller.ts b/backend/src/app/group-article/group-article.controller.ts index f99d8c4f..f951aed7 100644 --- a/backend/src/app/group-article/group-article.controller.ts +++ b/backend/src/app/group-article/group-article.controller.ts @@ -9,6 +9,7 @@ import { Post, Put, Query, + Version, } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; import { ApiErrorResponse } from '@src/common/decorator/api-error-response.decorator'; @@ -36,6 +37,8 @@ import { UpdateGroupArticleRequest } from '@app/group-article/dto/update-group-a import { NotSuccessGroupException } from '@app/group-article/exception/not-success-group.exception'; import { NotParticipantException } from '@app/group-article/exception/not-participant.exception'; import { GetGroupChatUrlResponseDto } from '@app/group-article/dto/get-group-chat-url-response.dto'; +import { V2SearchGroupArticlesRequest } from '@app/group-article/dto/v2-search-group-articles-request.dto'; +import { V2SearchGroupArticlesResponse } from '@app/group-article/dto/v2-search-group-articles-response.dto'; @Controller('group-articles') @ApiTags('Group-Article') @@ -134,9 +137,28 @@ export class GroupArticleController { result[1], query.currentPage, query.countPerPage, - await Promise.all( - result[0].map((row) => GroupArticleSearchResult.from(row)), - ), + result[0].map((row) => GroupArticleSearchResult.from(row)), + ), + ); + } + + @Get('search') + @Version('2') + @ApiSuccessResponse(HttpStatus.OK) + async searchV2(@Query() query: V2SearchGroupArticlesRequest) { + const result = await this.groupArticleRepository.searchV2({ + limit: query.limit, + nextId: query.nextId, + status: query.status, + location: query.location, + category: query.category, + }); + + return ResponseEntity.OK_WITH_DATA( + new V2SearchGroupArticlesResponse( + query.limit, + result.map((row) => GroupArticleSearchResult.from(row)), + query.nextId, ), ); } diff --git a/backend/src/app/group-article/group-article.service.ts b/backend/src/app/group-article/group-article.service.ts index 92c69af0..91b25b6e 100644 --- a/backend/src/app/group-article/group-article.service.ts +++ b/backend/src/app/group-article/group-article.service.ts @@ -18,6 +18,7 @@ import { NotParticipantException } from '@app/group-article/exception/not-partic import { NotSuccessGroupException } from '@app/group-article/exception/not-success-group.exception'; import { GroupSucceedEvent } from '@app/notification/event/group-succeed.event'; import { GroupFailedEvent } from '@app/notification/event/group-failed.event'; +import { getBlurImage } from '@common/util/get-blur-image'; @Injectable() export class GroupArticleService { @@ -40,10 +41,15 @@ export class GroupArticleService { throw new GroupCategoryNotFoundException(); } + const blurThumbnail = await getBlurImage( + groupArticleRegisterRequest.thumbnail, + ); + const groupArticle = GroupArticle.create(user, { title: groupArticleRegisterRequest.title, contents: groupArticleRegisterRequest.contents, thumbnail: groupArticleRegisterRequest.thumbnail, + blurThumbnail, location: groupArticleRegisterRequest.location, maxCapacity: groupArticleRegisterRequest.maxCapacity, chatUrl: groupArticleRegisterRequest.chatUrl, @@ -134,11 +140,14 @@ export class GroupArticleService { throw new GroupArticleNotFoundException(); } + const blurThumbnail = await getBlurImage(thumbnail); + groupArticle.update(user, { title, contents, thumbnail, chatUrl, + blurThumbnail, }); await this.groupArticleRepository.save(groupArticle, { reload: false }); diff --git a/backend/src/app/group-article/my-group-article.controller.ts b/backend/src/app/group-article/my-group-article.controller.ts index fe04634b..69b0fc95 100644 --- a/backend/src/app/group-article/my-group-article.controller.ts +++ b/backend/src/app/group-article/my-group-article.controller.ts @@ -48,9 +48,7 @@ export class MyGroupArticleController { result[1], query.currentPage, query.countPerPage, - await Promise.all( - result[0].map((row) => GroupArticleSearchResult.from(row)), - ), + result[0].map((row) => GroupArticleSearchResult.from(row)), ), ); } diff --git a/backend/src/app/group-article/repository/group-article.repository.ts b/backend/src/app/group-article/repository/group-article.repository.ts index f4cc0154..e43555ae 100644 --- a/backend/src/app/group-article/repository/group-article.repository.ts +++ b/backend/src/app/group-article/repository/group-article.repository.ts @@ -46,39 +46,15 @@ export class GroupArticleRepository extends Repository { user?: User; }): Promise<[IGroupArticleSearchResult[], number]> { const query = this.createQueryBuilder('groupArticle') - .select([ - 'groupArticle.id as id', - 'groupArticle.title as title', - 'groupArticle.createdAt as createdAt', - 'group.maxCapacity as maxCapacity', - 'group.thumbnail as thumbnail', - 'group.status as status', - 'group.location as location', - 'groupCategory.id as groupCategoryId', - 'groupCategory.name as groupCategoryName', - 'COUNT(DISTINCT groupApplication.id) as currentCapacity', - 'COUNT(DISTINCT scrap.id) as scrapCount', - 'COUNT(DISTINCT comment.id) as commentCount', - ]) + .select(['groupArticle.id as id']) .leftJoin(Group, 'group', 'groupArticle.id = group.article_id') .leftJoin( GroupCategory, 'groupCategory', 'groupCategory.id = group.category.id AND groupCategory.deletedAt IS NULL', ) - .leftJoin( - GroupApplication, - 'groupApplication', - 'group.id = groupApplication.groupId AND groupApplication.deletedAt IS NULL', - ) - .leftJoin( - Comment, - 'comment', - 'groupArticle.id = comment.articleId AND comment.deletedAt IS NULL', - ) - .leftJoin(Scrap, 'scrap', 'groupArticle.id = scrap.articleId') - .where('groupArticle.deletedAt IS NULL') - .groupBy('groupArticle.id'); + .where(`groupArticle.type = "GROUP"`) + .andWhere('groupArticle.deletedAt IS NULL'); if (location) { query.andWhere('group.location = :location', { location }); @@ -100,6 +76,32 @@ export class GroupArticleRepository extends Repository { const count = await query.clone().getCount(); const result = await query + .addSelect([ + 'groupArticle.title as title', + 'groupArticle.createdAt as createdAt', + 'group.maxCapacity as maxCapacity', + 'group.thumbnail as thumbnail', + 'group.blurThumbnail as blurThumbnail', + 'group.status as status', + 'group.location as location', + 'groupCategory.id as groupCategoryId', + 'groupCategory.name as groupCategoryName', + 'COUNT(DISTINCT groupApplication.id) as currentCapacity', + 'COUNT(DISTINCT scrap.id) as scrapCount', + 'COUNT(DISTINCT comment.id) as commentCount', + ]) + .leftJoin( + GroupApplication, + 'groupApplication', + 'group.id = groupApplication.groupId AND groupApplication.deletedAt IS NULL', + ) + .leftJoin( + Comment, + 'comment', + 'groupArticle.id = comment.articleId AND comment.deletedAt IS NULL', + ) + .leftJoin(Scrap, 'scrap', 'groupArticle.id = scrap.articleId') + .groupBy('groupArticle.id') .orderBy('groupArticle.id', 'DESC') .limit(limit) .offset(offset) @@ -150,4 +152,99 @@ export class GroupArticleRepository extends Repository { .groupBy('groupArticle.id') .getRawOne(); } + + async searchV2({ + limit, + nextId, + category, + status, + location, + user, + }: { + limit: number; + nextId?: number; + category?: CATEGORY; + status?: GROUP_STATUS; + location?: LOCATION; + user?: User; + }) { + const groupArticleIdsQuery = this.createQueryBuilder('groupArticle') + .select('groupArticle.id as id') + .leftJoin(Group, 'group', 'groupArticle.id = group.article_id') + .leftJoin( + GroupCategory, + 'groupCategory', + 'groupCategory.id = group.category.id AND groupCategory.deletedAt IS NULL', + ) + .where('groupArticle.deletedAt IS NULL') + .orderBy('groupArticle.id', 'DESC') + .limit(limit); + + if (nextId) { + groupArticleIdsQuery.andWhere('groupArticle.id < :nextId', { nextId }); + } + + if (location) { + groupArticleIdsQuery.andWhere('group.location = :location', { location }); + } + + if (category) { + groupArticleIdsQuery.andWhere('groupCategory.name = :categoryName', { + categoryName: category, + }); + } + + if (status) { + groupArticleIdsQuery.andWhere('group.status = :status', { status }); + } + + if (user) { + groupArticleIdsQuery.andWhere('groupArticle.userId = :userId', { + userId: user.id, + }); + } + + return this.createQueryBuilder('groupArticle') + .select([ + 'groupArticle.id as id', + 'groupArticle.title as title', + 'groupArticle.createdAt as createdAt', + 'group.maxCapacity as maxCapacity', + 'group.thumbnail as thumbnail', + 'group.blurThumbnail as blurThumbnail', + 'group.status as status', + 'group.location as location', + 'groupCategory.id as groupCategoryId', + 'groupCategory.name as groupCategoryName', + 'COUNT(DISTINCT groupApplication.id) as currentCapacity', + 'COUNT(DISTINCT scrap.id) as scrapCount', + 'COUNT(DISTINCT comment.id) as commentCount', + ]) + .innerJoin( + `(${groupArticleIdsQuery.getQuery()})`, + 't1', + 't1.id = groupArticle.id', + { location, categoryName: category, status, nextId, userId: user?.id }, + ) + .leftJoin(Group, 'group', 'groupArticle.id = group.article_id') + .leftJoin( + GroupCategory, + 'groupCategory', + 'groupCategory.id = group.category.id AND groupCategory.deletedAt IS NULL', + ) + .leftJoin( + GroupApplication, + 'groupApplication', + 'group.id = groupApplication.groupId AND groupApplication.deletedAt IS NULL', + ) + .leftJoin( + Comment, + 'comment', + 'groupArticle.id = comment.articleId AND comment.deletedAt IS NULL', + ) + .leftJoin(Scrap, 'scrap', 'groupArticle.id = scrap.articleId') + .groupBy('groupArticle.id') + .orderBy('groupArticle.id', 'DESC') + .getRawMany(); + } } diff --git a/backend/src/common/dto/image-with-blur-response.dto.ts b/backend/src/common/dto/image-with-blur-response.dto.ts index b7e62c24..f9502d5d 100644 --- a/backend/src/common/dto/image-with-blur-response.dto.ts +++ b/backend/src/common/dto/image-with-blur-response.dto.ts @@ -1,5 +1,4 @@ import { ApiProperty } from '@nestjs/swagger'; -import { getPlaiceholder } from 'plaiceholder'; export class ImageWithBlurResponse { @ApiProperty({ @@ -18,15 +17,10 @@ export class ImageWithBlurResponse { }) blurUrl: string; - static async from(url: string) { + static from(thumbnail: string, blurThumbnail: string) { const res = new ImageWithBlurResponse(); - res.originUrl = url; - try { - const { base64 } = await getPlaiceholder(url); - res.blurUrl = base64; - } catch (e) { - res.blurUrl = url; - } + res.originUrl = thumbnail; + res.blurUrl = blurThumbnail === '' ? thumbnail : blurThumbnail; return res; } } diff --git a/backend/src/common/util/__test__/no-offset-page-result.spec.ts b/backend/src/common/util/__test__/no-offset-page-result.spec.ts new file mode 100644 index 00000000..75d31095 --- /dev/null +++ b/backend/src/common/util/__test__/no-offset-page-result.spec.ts @@ -0,0 +1,80 @@ +import { NoOffsetPageResult } from '@common/util/no-offset-page-result'; + +describe('No Offset Paging Result Test', () => { + test.each([ + { + limit: 5, + nextId: 20, + sortedData: [{ id: 20 }, { id: 19 }, { id: 18 }, { id: 17 }, { id: 16 }], + beforeNextId: 20, + resultNextId: 16, + isLast: false, + }, + { + limit: 5, + nextId: 30, + sortedData: [{ id: 28 }, { id: 26 }, { id: 25 }, { id: 24 }, { id: 22 }], + beforeNextId: 30, + resultNextId: 22, + isLast: false, + }, + { + limit: 3, + nextId: undefined, + sortedData: [{ id: 1000 }, { id: 500 }, { id: 200 }], + beforeNextId: 1000, + resultNextId: 200, + isLast: false, + }, + { + limit: 3, + nextId: undefined, + sortedData: [{ id: 1000 }, { id: 500 }], + beforeNextId: 1000, + resultNextId: 500, + isLast: true, + }, + { + limit: 3, + nextId: undefined, + sortedData: [], + beforeNextId: undefined, + resultNextId: undefined, + isLast: true, + }, + { + limit: 3, + nextId: 1000, + sortedData: [], + beforeNextId: 1000, + resultNextId: 1000, + isLast: true, + }, + ])( + 'currentPage=$currentPage, countPerPage=$countPerPAge, totalCount=$totalCount ์ด๋ฉด totalPage=$totalPage', + async ({ + limit, + nextId, + sortedData, + beforeNextId, + resultNextId, + isLast, + }) => { + // given + const Test = class extends NoOffsetPageResult { + get data() { + return this._data; + } + }; + // when + const result = new Test(limit, sortedData, nextId); + + // then + expect(result.limit).toEqual(limit); + expect(result.data).toEqual(sortedData); + expect(result.beforeNextId).toEqual(beforeNextId); + expect(result.nextId).toEqual(resultNextId); + expect(result.isLast).toEqual(isLast); + }, + ); +}); diff --git a/backend/src/common/util/get-blur-image.ts b/backend/src/common/util/get-blur-image.ts new file mode 100644 index 00000000..31df99b5 --- /dev/null +++ b/backend/src/common/util/get-blur-image.ts @@ -0,0 +1,11 @@ +import { getPlaiceholder } from 'plaiceholder'; + +export const getBlurImage = async (thumbnail: string) => { + let blurUrl = ''; + try { + const { base64 } = await getPlaiceholder(thumbnail); + blurUrl = base64; + } catch (e) {} + + return blurUrl; +}; diff --git a/backend/src/common/util/no-offset-page-request.ts b/backend/src/common/util/no-offset-page-request.ts new file mode 100644 index 00000000..ab905b5f --- /dev/null +++ b/backend/src/common/util/no-offset-page-request.ts @@ -0,0 +1,32 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { IsNumber, IsOptional, Max, Min } from 'class-validator'; +import { Type } from 'class-transformer'; + +export class NoOffsetPageRequest { + @IsOptional() + @IsNumber() + @Type(() => Number) + @Min(1) + @Max(30) + @ApiProperty({ + type: Number, + example: 10, + description: '๊ฐ€์ ธ์˜ฌ ๋ฐ์ดํ„ฐ ์ˆ˜(default: 10)', + minimum: 1, + maximum: 30, + required: false, + }) + limit = 10; + + @IsOptional() + @IsNumber() + @Type(() => Number) + @Min(1) + @ApiProperty({ + type: Number, + example: 50, + description: '๋‹ค์Œ ์•„์ด๋””', + required: false, + }) + nextId?: number; +} diff --git a/backend/src/common/util/no-offset-page-result.ts b/backend/src/common/util/no-offset-page-result.ts new file mode 100644 index 00000000..d978fe06 --- /dev/null +++ b/backend/src/common/util/no-offset-page-result.ts @@ -0,0 +1,45 @@ +import { Exclude, Expose } from 'class-transformer'; +import { ApiProperty } from '@nestjs/swagger'; + +export abstract class NoOffsetPageResult { + @Exclude() protected readonly _data: T[]; + @Exclude() protected readonly _limit: number; + @Exclude() protected readonly _beforeNextId: number; + + constructor(limit: number, sortedData: T[], nextId?: number) { + this._limit = limit; + this._beforeNextId = nextId; + this._data = sortedData; + } + + @Expose() + @ApiProperty({ example: 10, description: '์š”์ฒญํ•œ ๋ฐ์ดํ„ฐ ์ˆ˜' }) + get limit() { + return this._limit; + } + + @Expose() + @ApiProperty({ example: 20, description: '์š”์ฒญํ•œ nextId' }) + get beforeNextId() { + return this._beforeNextId === undefined + ? this._data[0]?.id + : this._beforeNextId; + } + + @Expose() + @ApiProperty({ example: 10, description: '๋””์Œ์— ํ˜ธ์ถœ์‹œ ๋„ฃ์–ด์•ผํ•˜๋Š” nextId' }) + get nextId() { + return this._data[this._data.length - 1]?.id || this._beforeNextId; + } + + @Expose() + @ApiProperty({ + example: false, + description: '๋งˆ์ง€๋ง‰ ๋ฐ์ดํ„ฐ์ธ์ง€ ์—ฌ๋ถ€', + }) + get isLast() { + return this._data.length < this._limit; + } + + abstract get data(): T[]; +} From 3f4b9c23578ceb022cefbc8fbf7d5a268c0ea4e2 Mon Sep 17 00:00:00 2001 From: yangseungchan Date: Tue, 13 Dec 2022 11:57:09 +0900 Subject: [PATCH 140/142] =?UTF-8?q?[Feature]=20=EB=8B=A4=EB=A5=B8=20?= =?UTF-8?q?=EB=B8=8C=EB=9D=BC=EC=9A=B0=EC=A0=80=EB=A1=9C=20=EC=A0=91?= =?UTF-8?q?=EC=86=8D=EC=8B=9C=20=EA=B2=BD=EA=B3=A0=EB=A9=94=EC=8B=9C?= =?UTF-8?q?=EC=A7=80=20=EC=A0=9C=EA=B3=B5=20(#318)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * โœจ feature: ํฌ๋กฌ์ด ์•„๋‹Œ ๋‹ค๋ฅธ ๋ธŒ๋ผ์šฐ์ €๋กœ ์ ‘์†์‹œ ๊ฒฝ๊ณ ๋ฉ”์‹œ์ง€ ์ œ๊ณต * ๐Ÿฅ… chore: ๋‹‰๋„ค์ž„, ํ•œ ์ค„ ์†Œ๊ฐœ ๊ธ€์ž ์ˆ˜ ์ œํ•œ ์ฆ๊ฐ€ --- frontend/package-lock.json | 44 +++++++++++++++++++ frontend/package.json | 1 + .../components/common/BrowserCheck/index.tsx | 30 +++++++++++++ frontend/src/pages/_app.tsx | 2 + frontend/src/pages/my/edit.tsx | 13 +++--- 5 files changed, 84 insertions(+), 6 deletions(-) create mode 100644 frontend/src/components/common/BrowserCheck/index.tsx diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 39f66476..816c612e 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -26,6 +26,7 @@ "next": "^12.3.3", "next-seo": "^5.15.0", "react": "^17.0.2", + "react-device-detect": "^2.2.2", "react-dom": "^17.0.2", "recoil": "^0.7.6", "sharp": "^0.31.2", @@ -24072,6 +24073,18 @@ "node": ">=0.10.0" } }, + "node_modules/react-device-detect": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/react-device-detect/-/react-device-detect-2.2.2.tgz", + "integrity": "sha512-zSN1gIAztUekp5qUT/ybHwQ9fmOqVT1psxpSlTn1pe0CO+fnJHKRLOWWac5nKxOxvOpD/w84hk1I+EydrJp7SA==", + "dependencies": { + "ua-parser-js": "^1.0.2" + }, + "peerDependencies": { + "react": ">= 0.14.0", + "react-dom": ">= 0.14.0" + } + }, "node_modules/react-docgen": { "version": "5.4.3", "resolved": "https://registry.npmjs.org/react-docgen/-/react-docgen-5.4.3.tgz", @@ -27592,6 +27605,24 @@ "node": ">=4.2.0" } }, + "node_modules/ua-parser-js": { + "version": "1.0.32", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.32.tgz", + "integrity": "sha512-dXVsz3M4j+5tTiovFVyVqssXBu5HM47//YSOeZ9fQkdDKkfzv2v3PP1jmH6FUyPW+yCSn7aBVK1fGGKNhowdDA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "engines": { + "node": "*" + } + }, "node_modules/uglify-js": { "version": "3.17.4", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", @@ -47249,6 +47280,14 @@ "object-assign": "^4.1.1" } }, + "react-device-detect": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/react-device-detect/-/react-device-detect-2.2.2.tgz", + "integrity": "sha512-zSN1gIAztUekp5qUT/ybHwQ9fmOqVT1psxpSlTn1pe0CO+fnJHKRLOWWac5nKxOxvOpD/w84hk1I+EydrJp7SA==", + "requires": { + "ua-parser-js": "^1.0.2" + } + }, "react-docgen": { "version": "5.4.3", "resolved": "https://registry.npmjs.org/react-docgen/-/react-docgen-5.4.3.tgz", @@ -49973,6 +50012,11 @@ "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==", "dev": true }, + "ua-parser-js": { + "version": "1.0.32", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.32.tgz", + "integrity": "sha512-dXVsz3M4j+5tTiovFVyVqssXBu5HM47//YSOeZ9fQkdDKkfzv2v3PP1jmH6FUyPW+yCSn7aBVK1fGGKNhowdDA==" + }, "uglify-js": { "version": "3.17.4", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", diff --git a/frontend/package.json b/frontend/package.json index 041bba43..c142c06f 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -44,6 +44,7 @@ "next": "^12.3.3", "next-seo": "^5.15.0", "react": "^17.0.2", + "react-device-detect": "^2.2.2", "react-dom": "^17.0.2", "recoil": "^0.7.6", "sharp": "^0.31.2", diff --git a/frontend/src/components/common/BrowserCheck/index.tsx b/frontend/src/components/common/BrowserCheck/index.tsx new file mode 100644 index 00000000..6d4be8d7 --- /dev/null +++ b/frontend/src/components/common/BrowserCheck/index.tsx @@ -0,0 +1,30 @@ +import { useEffect, useState } from 'react'; + +import { isChrome, isChromium } from 'react-device-detect'; + +import AlertModal from '@components/common/AlertModal'; + +const BrowserCheck = () => { + const [modalOpen, setModalOpen] = useState(false); + + useEffect(() => { + const browserChecked = localStorage.getItem('browser-checked'); + if (browserChecked) return; + if (!(isChrome || isChromium)) { + setModalOpen(true); + } + localStorage.setItem('browser-checked', 'true'); + }, []); + + return ( + <> + setModalOpen(false)} + /> + + ); +}; + +export default BrowserCheck; diff --git a/frontend/src/pages/_app.tsx b/frontend/src/pages/_app.tsx index 20c9c5dc..d7da2a2f 100644 --- a/frontend/src/pages/_app.tsx +++ b/frontend/src/pages/_app.tsx @@ -8,6 +8,7 @@ import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; import { RecoilRoot } from 'recoil'; import { v4 as uuid } from 'uuid'; +import BrowserCheck from '@components/common/BrowserCheck'; import ApiErrorBoundary from '@components/common/ErrorBoundary/ApiErrorBoundary'; import AuthErrorBoundary from '@components/common/ErrorBoundary/AuthErrorBoundary'; import ErrorBoundary from '@components/common/ErrorBoundary/ErrorBoundary'; @@ -60,6 +61,7 @@ export default function App({ Component, pageProps }: AppProps<{ dehydratedState + diff --git a/frontend/src/pages/my/edit.tsx b/frontend/src/pages/my/edit.tsx index d77270b5..13e52b6d 100644 --- a/frontend/src/pages/my/edit.tsx +++ b/frontend/src/pages/my/edit.tsx @@ -44,8 +44,8 @@ const MyEditPage = () => { myProfile && profileImage.length > 0 && userName.length > 0 && - userName.length <= 10 && - description.length <= 20; + userName.length <= 20 && + description.length <= 30; const handleUserDataChange = (e: ChangeEvent) => { const { name, value } = e.target; @@ -62,6 +62,7 @@ const MyEditPage = () => { }; const handleClickProfileChangeBtn = async () => { + if (!possibleToSubmit) return; updateMyProfile(userDataInput, { onSuccess: () => { showToast({ @@ -115,12 +116,12 @@ const MyEditPage = () => { { onChange={handleUserDataChange} /> From 47bb757b3058117683d1a50af14f8f3510b5f87b Mon Sep 17 00:00:00 2001 From: Kim Myeongil <67570061+username1103@users.noreply.github.com> Date: Tue, 13 Dec 2022 11:58:46 +0900 Subject: [PATCH 141/142] =?UTF-8?q?[Feature]=20=ED=99=98=EA=B2=BD=EC=97=90?= =?UTF-8?q?=20=EB=94=B0=EB=A5=B8=20CORS,=20Swagger=20=EC=B2=98=EB=A6=AC=20?= =?UTF-8?q?(#329)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :sparkles: feature: ๊ฐœ๋ฐœํ™˜๊ฒฝ์—์„œ๋งŒ swagger ๊ณต๊ฐœ * :sparkles: feature: ๊ฐœ๋ฐœ์šฉ์„œ๋ฒ„ swagger server์— ์ถ”๊ฐ€ * :sparkles: feature: ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ CORS origin ์ œํ•œ ์ถ”๊ฐ€ --- backend/src/main.ts | 7 +++++-- backend/src/setNestApp.ts | 8 ++++++-- backend/src/setSwagger.ts | 3 ++- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/backend/src/main.ts b/backend/src/main.ts index fee6658d..4d5d3fbd 100644 --- a/backend/src/main.ts +++ b/backend/src/main.ts @@ -9,9 +9,12 @@ async function bootstrap() { setNestApp(app); - setSwagger(app); - const appConfigService = app.get(AppConfigService); + + if (appConfigService.isDevelopment()) { + setSwagger(app); + } + await app.listen(appConfigService.port); } diff --git a/backend/src/setNestApp.ts b/backend/src/setNestApp.ts index 53b07f16..bdec52bc 100644 --- a/backend/src/setNestApp.ts +++ b/backend/src/setNestApp.ts @@ -9,13 +9,17 @@ import { ValidationError } from 'class-validator'; import * as cookieParser from 'cookie-parser'; import { BadParameterException } from '@exception/bad-parameter.exception'; import { AllExceptionFilter } from '@filter/all-exception.filter'; +import { AppConfigService } from '@config/app/config.service'; export const setNestApp = (app: INestApplication) => { + const appConfigService = app.get(AppConfigService); + app.use(cookieParser()); - // TODO: cors ์„ค์ •์„ nginx๋กœ ์˜ฎ๊ธฐ๊ฑฐ๋‚˜ ์ ์ ˆํ•œ ์„ค์ • ํ•„์š” app.enableCors({ - origin: true, + origin: appConfigService.isPrduction() + ? 'https://www.moyeomoyeo.com' + : true, credentials: true, }); diff --git a/backend/src/setSwagger.ts b/backend/src/setSwagger.ts index aef27b9a..8dd94664 100644 --- a/backend/src/setSwagger.ts +++ b/backend/src/setSwagger.ts @@ -12,8 +12,9 @@ import { CommentModule } from '@app/comment/comment.module'; export const setSwagger = (app: INestApplication) => { const config = new DocumentBuilder() - .setTitle('MoyeoMoyeo REST API Specification') + .setTitle('๋ชจ์—ฌ๋ชจ์—ฌ REST API Specification') .setVersion('1.0.0') + .addServer('https://dev.moyeomoyeo.com') .addServer(`http://localhost`) .addServer('https://api.moyeomoyeo.com') .addCookieAuth( From 71e95ffcba77d46fb76eed6692a306a730468faa Mon Sep 17 00:00:00 2001 From: yangseungchan Date: Tue, 13 Dec 2022 12:04:11 +0900 Subject: [PATCH 142/142] =?UTF-8?q?[BUGFIX]=20=EA=B2=8C=EC=8B=9C=EA=B8=80?= =?UTF-8?q?=20=EB=A1=9C=EB=93=9C=EC=8B=9C=20=EB=8C=93=EA=B8=80=EC=9D=B4=20?= =?UTF-8?q?=EB=A8=BC=EC=A0=80=EB=B3=B4=EC=9D=B4=EB=8A=94=20=ED=98=84?= =?UTF-8?q?=EC=83=81=20(#323)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ๐Ÿฅ… chore: ๊ฒŒ์‹œ๊ธ€ ํŽ˜์ด์ง€์™€ ๋Œ“๊ธ€ ์กฐํšŒ ์กฐ๊ฑด ๋™๊ธฐํ™” * ๐Ÿฅ… chore: ๊ณตํ†ต ์กฐ๊ฑด ๋ณ€์ˆ˜ํ™” --- frontend/src/pages/article/[id].tsx | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/frontend/src/pages/article/[id].tsx b/frontend/src/pages/article/[id].tsx index 2f2e2fc5..b74bc53a 100644 --- a/frontend/src/pages/article/[id].tsx +++ b/frontend/src/pages/article/[id].tsx @@ -52,6 +52,7 @@ const ArticleDetail = () => { const isUrlAvailable = getButtonStatus(article, isJoined) === ParticipateButtonStatus.LINK; const { url } = useFetchChatUrl(articleId, isUrlAvailable); + const isArticleViewable = !article || isJoined === undefined || !myInfo || !participants; const [participantsModalOpen, setParticipantsModalOpen] = useState(false); @@ -86,7 +87,7 @@ const ArticleDetail = () => { > <> - {!article || isJoined === undefined || !myInfo || !participants ? ( + {isArticleViewable ? ( ) : ( <> @@ -160,18 +161,18 @@ const ArticleDetail = () => { )} - {addedComment && } - 0 && { before: true })} - components={comments.map((comment) => ( - setAddedComment(null)} + {!isArticleViewable && ( + <> + {addedComment && } + 0 && { before: true })} + components={comments.map((comment) => ( + + ))} /> - ))} - /> -
    +
    + + )}