├── .github ├── bug.md ├── package_request.md └── workflows │ ├── server_deploy.yml │ └── tests.yml ├── .gitignore ├── .vscode └── launch.json ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── backend ├── README.md ├── githubData.ts ├── jest.config.js ├── package.json ├── server.ts ├── start.sh ├── tests │ └── server.test.ts └── yarn.lock ├── frontend ├── .gitignore ├── .prettierrc ├── README.md ├── jest.config.js ├── jest.setup.js ├── package.json ├── postcss.config.js ├── public │ ├── favicon.ico │ ├── index.html │ ├── logo192.png │ ├── logo512.png │ ├── manifest.json │ └── robots.txt ├── src │ ├── App.tailwind.css │ ├── App.test.tsx │ ├── App.tsx │ ├── Tools.tsx │ ├── Types.ts │ ├── index.css │ ├── index.tsx │ ├── initialToolData.tsx │ ├── react-app-env.d.ts │ └── serviceWorker.ts ├── tailwind.config.js ├── tsconfig.json ├── types │ └── static.d.ts └── yarn.lock ├── screenshot.png └── scripts └── python-packaging-tools.service /.github/bug.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug 3 | about: Report a bug or unexpected behavior. 4 | --- 5 | 6 | 9 | 10 | **Describe the bug** 11 | 12 | 13 | 14 | **How to reproduce** 15 | 16 | **Expected behavior** 17 | 18 | 19 | -------------------------------------------------------------------------------- /.github/package_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Package request 3 | about: Suggest a new package 4 | --- 5 | 6 | **Package information** 7 | 8 | 9 | -------------------------------------------------------------------------------- /.github/workflows/server_deploy.yml: -------------------------------------------------------------------------------- 1 | name: Deploy latest to server 2 | on: 3 | push: 4 | branches: [main] 5 | 6 | jobs: 7 | deploy: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - name: Deploy NodeJS app 11 | uses: appleboy/ssh-action@v0.1.2 12 | with: 13 | host: ${{secrets.SSH_HOST}} # IP address of the server you wish to ssh into 14 | key: ${{secrets.SSH_KEY}} # Private or public key of the server 15 | username: ${{ secrets.SSH_USERNAME }} # User of the server you want to ssh into 16 | 17 | script: | 18 | set -e 19 | 20 | mkdir -p $HOME/webapps 21 | git clone https://github.com/cs01/python-packaging-tools $HOME/webapps/python-packaging-tools || true 22 | cd $HOME/webapps/python-packaging-tools 23 | git fetch origin main 24 | git reset origin/main --hard 25 | 26 | # frontend 27 | cd $HOME/webapps/python-packaging-tools/frontend 28 | yarn 29 | yarn build 30 | 31 | # backend 32 | cd $HOME/webapps/python-packaging-tools/backend 33 | touch .env 34 | echo API_KEY=${{ secrets.API_KEY }} > .env 35 | 36 | # reload and restart systemd service 37 | sudo cp $HOME/webapps/python-packaging-tools/scripts/python-packaging-tools.service /etc/systemd/system/python-packaging-tools.service 38 | sudo systemctl daemon-reload 39 | sudo systemctl enable python-packaging-tools.service 40 | sudo systemctl restart python-packaging-tools -------------------------------------------------------------------------------- /.github/workflows/tests.yml: -------------------------------------------------------------------------------- 1 | name: tests 2 | 3 | on: 4 | pull_request: 5 | push: 6 | 7 | jobs: 8 | test_frontend: 9 | 10 | runs-on: ubuntu-latest 11 | 12 | strategy: 13 | matrix: 14 | node-version: [16.x] 15 | 16 | steps: 17 | - uses: actions/checkout@v3 18 | - name: Use Node.js ${{ matrix.node-version }} 19 | uses: actions/setup-node@v1 20 | with: 21 | node-version: ${{ matrix.node-version }} 22 | - run: | 23 | cd frontend 24 | yarn install 25 | yarn build 26 | yarn lint 27 | 28 | test_backend: 29 | 30 | runs-on: ubuntu-latest 31 | 32 | strategy: 33 | matrix: 34 | node-version: [16.x] 35 | 36 | steps: 37 | - uses: actions/checkout@v3 38 | - name: Use Node.js ${{ matrix.node-version }} 39 | uses: actions/setup-node@v1 40 | with: 41 | node-version: ${{ matrix.node-version }} 42 | 43 | - run: | 44 | cd backend 45 | touch .env 46 | echo API_KEY=${{ secrets.API_KEY }} > .env 47 | yarn install 48 | yarn test 49 | yarn lint 50 | 51 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .env 2 | data.json 3 | makefile 4 | node_modules 5 | frontend/src/App.css -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.2.0", 3 | "configurations": [ 4 | { 5 | "type": "node", 6 | "request": "launch", 7 | "name": "Backend: Jest single run all tests", 8 | "cwd": "${workspaceFolder}/backend", 9 | "program": "${workspaceRoot}/backend/node_modules/jest-cli/bin/jest.js", 10 | "args": ["--verbose", "-i", "--no-cache"], 11 | "console": "integratedTerminal", 12 | "internalConsoleOptions": "neverOpen" 13 | }, 14 | { 15 | "type": "node", 16 | "request": "launch", 17 | "name": "Backend: Jest watch all tests", 18 | "cwd": "${workspaceFolder}/backend", 19 | "program": "${workspaceRoot}/backend/node_modules/jest-cli/bin/jest.js", 20 | "args": ["--verbose", "-i", "--no-cache", "--watchAll"], 21 | "console": "integratedTerminal", 22 | "internalConsoleOptions": "neverOpen" 23 | }, 24 | { 25 | "type": "node", 26 | "request": "launch", 27 | "name": "Backend: Jest watch current file", 28 | "cwd": "${workspaceFolder}/backend", 29 | "program": "${workspaceFolder}/backend/node_modules/jest-cli/bin/jest", 30 | "args": [ 31 | "${fileBasename}", 32 | "--verbose", 33 | "-i", 34 | "--no-cache", 35 | "--watchAll" 36 | ], 37 | "console": "integratedTerminal", 38 | "internalConsoleOptions": "neverOpen" 39 | } 40 | ] 41 | } 42 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | The frontend is in `frontend/` and the backend is in `backend/`. 2 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Chad Smith 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Python Packaging Tools 2 | 3 | An interactive web app to explore, and hopefully better understand, Python packaging tools. 4 | 5 | **https://chadsmith.dev/python-packaging** 6 | 7 |

8 | 9 | image 10 | 11 |

12 | 13 |

14 | 15 |

16 | -------------------------------------------------------------------------------- /backend/README.md: -------------------------------------------------------------------------------- 1 | # Backend 2 | 3 | You will need your own GitHub api key to access the GitHub's api via [Octokit](https://github.com/octokit). 4 | 5 | Save the API key to the .env file: 6 | 7 | ``` 8 | > cat .env 9 | API_KEY=abcd1234 10 | ``` 11 | 12 | ## Getting Started 13 | 14 | Install dependencies: 15 | 16 | ``` 17 | > yarn 18 | ``` 19 | 20 | Start server: 21 | 22 | ``` 23 | > yarn start 24 | ``` 25 | -------------------------------------------------------------------------------- /backend/githubData.ts: -------------------------------------------------------------------------------- 1 | import { Octokit } from "@octokit/core"; 2 | import * as dotenv from "dotenv"; 3 | import * as fs from "fs"; 4 | 5 | const env = dotenv.config().parsed; 6 | const apiKey = env.API_KEY; 7 | const octokit = new Octokit({ auth: apiKey }); 8 | 9 | const tools = [ 10 | { 11 | name: "pip", 12 | owner: "pypa", 13 | }, 14 | { 15 | name: "conda", 16 | owner: "conda", 17 | }, 18 | { 19 | name: "flit", 20 | owner: "takluyver", 21 | }, 22 | { 23 | name: "pyflow", 24 | owner: "David-OConnor", 25 | }, 26 | { 27 | name: "pdm", 28 | owner: "frostming", 29 | }, 30 | { 31 | name: "tox", 32 | owner: "tox-dev", 33 | }, 34 | { 35 | name: "nox", 36 | owner: "theacodes", 37 | }, 38 | { 39 | owner: "pypa", 40 | name: "pipx", 41 | }, 42 | { 43 | name: "poetry", 44 | owner: "python-poetry", 45 | }, 46 | { 47 | name: "hatch", 48 | owner: "ofek", 49 | }, 50 | { 51 | name: "pipenv", 52 | owner: "pypa", 53 | }, 54 | { 55 | name: "virtualenv", 56 | owner: "pypa", 57 | }, 58 | { 59 | name: "pipenv", 60 | owner: "pypa", 61 | }, 62 | { 63 | name: "pyenv", 64 | owner: "pyenv", 65 | }, 66 | { 67 | name: "twine", 68 | owner: "pypa", 69 | }, 70 | { 71 | name: "setuptools", 72 | owner: "pypa", 73 | }, 74 | { 75 | name: "pip-tools", 76 | owner: "jazzband", 77 | }, 78 | { 79 | name: "pex", 80 | owner: "pantsbuild", 81 | }, 82 | { 83 | name: "shiv", 84 | owner: "linkedin", 85 | }, 86 | { 87 | name: "PyOxidizer", 88 | owner: "indygreg", 89 | }, 90 | { 91 | name: "xar", 92 | owner: "facebookincubator", 93 | }, 94 | { 95 | name: "pyinstaller", 96 | owner: "pyinstaller", 97 | }, 98 | { 99 | name: "Nuitka", 100 | owner: "Nuitka", 101 | }, 102 | { 103 | name: "packaging", 104 | owner: "pypa", 105 | }, 106 | { 107 | name: "build", 108 | owner: "pypa", 109 | }, 110 | { 111 | name: "pep517", 112 | owner: "pypa", 113 | }, 114 | { 115 | name: "PyO3", 116 | owner: "PyO3", 117 | }, 118 | { 119 | name: "pybind11", 120 | owner: "pybind", 121 | }, 122 | { 123 | name: "pyscript", 124 | owner: "pyscript", 125 | }, 126 | { 127 | name: "cython", 128 | owner: "cython", 129 | }, 130 | { 131 | name: "pyodide", 132 | owner: "pyodide", 133 | }, 134 | { 135 | name: "pip-audit", 136 | owner: "trailofbits", 137 | }, 138 | { 139 | name: "cibuildwheel", 140 | owner: "pypa", 141 | }, 142 | ]; 143 | 144 | function getQuery(name: string, owner: string) { 145 | return `query { 146 | repository(owner: "${owner}", name: "${name}", followRenames: true) { 147 | stargazers { 148 | totalCount 149 | } 150 | pushedAt 151 | createdAt 152 | description 153 | name 154 | issues { 155 | totalCount 156 | } 157 | licenseInfo { 158 | name 159 | } 160 | primaryLanguage { 161 | name 162 | } 163 | url 164 | homepageUrl 165 | latestRelease { 166 | publishedAt 167 | } 168 | } 169 | }`; 170 | } 171 | 172 | export async function fetchGithubData() { 173 | const data = await Promise.all( 174 | tools.map(async (t) => { 175 | const r = await octokit.graphql(getQuery(t.name, t.owner)); 176 | // @ts-ignore 177 | return { ...r["repository"], owner: t.owner }; 178 | }) 179 | ); 180 | fs.writeFileSync("./data.json", JSON.stringify(data, null, 4)); 181 | return data; 182 | } 183 | 184 | async function main() { 185 | const response = await fetchGithubData(); 186 | console.error(response); 187 | } 188 | -------------------------------------------------------------------------------- /backend/jest.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */ 2 | module.exports = { 3 | preset: 'ts-jest', 4 | testEnvironment: 'node', 5 | watchPathIgnorePatterns: [ 6 | "/data.json" // this file is written to 7 | ] 8 | 9 | }; -------------------------------------------------------------------------------- /backend/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "backend", 3 | "version": "1.0.0", 4 | "scripts": { 5 | "start": "rm ./data.json; ts-node server.ts", 6 | "test": "yarn jest", 7 | "format": "prettier --write *.ts", 8 | "lint": "prettier --check *.ts" 9 | }, 10 | "main": "index.js", 11 | "license": "MIT", 12 | "dependencies": { 13 | "@octokit/core": "^3.1.2", 14 | "dotenv": "^8.2.0", 15 | "express": "^4.17.1", 16 | "ts-jest": "^28.0.7", 17 | "ts-node": "^9.0.0" 18 | }, 19 | "devDependencies": { 20 | "@types/express": "^4.17.8", 21 | "@types/jest": "^28.1.6", 22 | "@types/node": "^14.6.4", 23 | "@types/supertest": "^2.0.12", 24 | "jest": "^28.1.3", 25 | "prettier": "^2.7.1", 26 | "supertest": "^6.2.4", 27 | "typescript": "^4.7.4" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /backend/server.ts: -------------------------------------------------------------------------------- 1 | import * as express from "express"; 2 | import { fetchGithubData } from "./githubData"; 3 | import * as path from "path"; 4 | export const app = express(); 5 | const port = process.env.PORT ?? 3001; 6 | 7 | const secPerMin = 60; 8 | const minPerHour = 60; 9 | const msPerSec = 1000; 10 | const hourInMs = secPerMin * minPerHour * msPerSec; 11 | let cachedData: { cachedAt: number; data: any } = { 12 | cachedAt: 0, 13 | data: null, 14 | }; 15 | const maxCacheAgeMs = hourInMs; 16 | 17 | const msToMinutes = (1 / msPerSec) * (1 / secPerMin); 18 | 19 | app.use(function (req, res, next) { 20 | console.log(req.url); 21 | next(); 22 | }); 23 | 24 | app.get("/package_data", async (req, res) => { 25 | const now = Date.now(); 26 | const age = now - cachedData.cachedAt; 27 | const timeUntilRefetch = maxCacheAgeMs - age; 28 | if (timeUntilRefetch <= 0) { 29 | console.info("fetching new data"); 30 | cachedData.data = await fetchGithubData(); 31 | cachedData.cachedAt = now; 32 | } else { 33 | console.info("using cached data"); 34 | } 35 | res.json(cachedData.data); 36 | }); 37 | 38 | app.use("/", express.static(path.join(__dirname, "..", "frontend", "build"))); 39 | 40 | if (process.env.NODE_ENV !== "test") { 41 | app.listen(port, () => { 42 | console.log(`Example app listening at http://localhost:${port}`); 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /backend/start.sh: -------------------------------------------------------------------------------- 1 | #/bin/bash 2 | yarn 3 | yarn start -------------------------------------------------------------------------------- /backend/tests/server.test.ts: -------------------------------------------------------------------------------- 1 | import { app } from "../server"; 2 | import * as request from "supertest"; 3 | import { test, expect } from "@jest/globals"; 4 | 5 | test("can fetch github data", async () => { 6 | const response = await request(app).get("/package_data"); 7 | expect(response.headers["content-type"]).toMatch(/json/); 8 | expect(response.status).toEqual(200); 9 | 10 | expect(Array.isArray(response.body)).toBe(true); 11 | 12 | const actualRepoNames = response.body.map((githubRepo) => githubRepo.name); 13 | 14 | // make sure some common repos are present 15 | const expectedRepos = [ 16 | "pip", 17 | "pip", 18 | "cython", 19 | "flit", 20 | "pdm", 21 | "build", 22 | "poetry", 23 | "pipx", 24 | ]; 25 | expectedRepos.map((repo) => { 26 | expect(actualRepoNames.includes(repo)).toBe(true); 27 | }); 28 | 29 | const actualFields = Object.keys(response.body[0]); 30 | const expectedFields = [ 31 | "stargazers", 32 | "licenseInfo", 33 | "primaryLanguage", 34 | "url", 35 | "owner", 36 | ]; 37 | 38 | expectedFields.map((expectedField) => { 39 | expect(actualFields.includes(expectedField)).toBe(true); 40 | }); 41 | }); 42 | -------------------------------------------------------------------------------- /backend/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@ampproject/remapping@^2.1.0": 6 | version "2.2.0" 7 | resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" 8 | integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== 9 | dependencies: 10 | "@jridgewell/gen-mapping" "^0.1.0" 11 | "@jridgewell/trace-mapping" "^0.3.9" 12 | 13 | "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6": 14 | version "7.18.6" 15 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" 16 | integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== 17 | dependencies: 18 | "@babel/highlight" "^7.18.6" 19 | 20 | "@babel/compat-data@^7.18.8": 21 | version "7.18.8" 22 | resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d" 23 | integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== 24 | 25 | "@babel/core@^7.11.6", "@babel/core@^7.12.3": 26 | version "7.18.10" 27 | resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.10.tgz#39ad504991d77f1f3da91be0b8b949a5bc466fb8" 28 | integrity sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw== 29 | dependencies: 30 | "@ampproject/remapping" "^2.1.0" 31 | "@babel/code-frame" "^7.18.6" 32 | "@babel/generator" "^7.18.10" 33 | "@babel/helper-compilation-targets" "^7.18.9" 34 | "@babel/helper-module-transforms" "^7.18.9" 35 | "@babel/helpers" "^7.18.9" 36 | "@babel/parser" "^7.18.10" 37 | "@babel/template" "^7.18.10" 38 | "@babel/traverse" "^7.18.10" 39 | "@babel/types" "^7.18.10" 40 | convert-source-map "^1.7.0" 41 | debug "^4.1.0" 42 | gensync "^1.0.0-beta.2" 43 | json5 "^2.2.1" 44 | semver "^6.3.0" 45 | 46 | "@babel/generator@^7.18.10", "@babel/generator@^7.7.2": 47 | version "7.18.12" 48 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.12.tgz#fa58daa303757bd6f5e4bbca91b342040463d9f4" 49 | integrity sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg== 50 | dependencies: 51 | "@babel/types" "^7.18.10" 52 | "@jridgewell/gen-mapping" "^0.3.2" 53 | jsesc "^2.5.1" 54 | 55 | "@babel/helper-compilation-targets@^7.18.9": 56 | version "7.18.9" 57 | resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz#69e64f57b524cde3e5ff6cc5a9f4a387ee5563bf" 58 | integrity sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg== 59 | dependencies: 60 | "@babel/compat-data" "^7.18.8" 61 | "@babel/helper-validator-option" "^7.18.6" 62 | browserslist "^4.20.2" 63 | semver "^6.3.0" 64 | 65 | "@babel/helper-environment-visitor@^7.18.9": 66 | version "7.18.9" 67 | resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" 68 | integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== 69 | 70 | "@babel/helper-function-name@^7.18.9": 71 | version "7.18.9" 72 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz#940e6084a55dee867d33b4e487da2676365e86b0" 73 | integrity sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A== 74 | dependencies: 75 | "@babel/template" "^7.18.6" 76 | "@babel/types" "^7.18.9" 77 | 78 | "@babel/helper-hoist-variables@^7.18.6": 79 | version "7.18.6" 80 | resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" 81 | integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== 82 | dependencies: 83 | "@babel/types" "^7.18.6" 84 | 85 | "@babel/helper-module-imports@^7.18.6": 86 | version "7.18.6" 87 | resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" 88 | integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== 89 | dependencies: 90 | "@babel/types" "^7.18.6" 91 | 92 | "@babel/helper-module-transforms@^7.18.9": 93 | version "7.18.9" 94 | resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz#5a1079c005135ed627442df31a42887e80fcb712" 95 | integrity sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g== 96 | dependencies: 97 | "@babel/helper-environment-visitor" "^7.18.9" 98 | "@babel/helper-module-imports" "^7.18.6" 99 | "@babel/helper-simple-access" "^7.18.6" 100 | "@babel/helper-split-export-declaration" "^7.18.6" 101 | "@babel/helper-validator-identifier" "^7.18.6" 102 | "@babel/template" "^7.18.6" 103 | "@babel/traverse" "^7.18.9" 104 | "@babel/types" "^7.18.9" 105 | 106 | "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.8.0": 107 | version "7.18.9" 108 | resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz#4b8aea3b069d8cb8a72cdfe28ddf5ceca695ef2f" 109 | integrity sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w== 110 | 111 | "@babel/helper-simple-access@^7.18.6": 112 | version "7.18.6" 113 | resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz#d6d8f51f4ac2978068df934b569f08f29788c7ea" 114 | integrity sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g== 115 | dependencies: 116 | "@babel/types" "^7.18.6" 117 | 118 | "@babel/helper-split-export-declaration@^7.18.6": 119 | version "7.18.6" 120 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" 121 | integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== 122 | dependencies: 123 | "@babel/types" "^7.18.6" 124 | 125 | "@babel/helper-string-parser@^7.18.10": 126 | version "7.18.10" 127 | resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz#181f22d28ebe1b3857fa575f5c290b1aaf659b56" 128 | integrity sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw== 129 | 130 | "@babel/helper-validator-identifier@^7.18.6": 131 | version "7.18.6" 132 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" 133 | integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== 134 | 135 | "@babel/helper-validator-option@^7.18.6": 136 | version "7.18.6" 137 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" 138 | integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== 139 | 140 | "@babel/helpers@^7.18.9": 141 | version "7.18.9" 142 | resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.9.tgz#4bef3b893f253a1eced04516824ede94dcfe7ff9" 143 | integrity sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ== 144 | dependencies: 145 | "@babel/template" "^7.18.6" 146 | "@babel/traverse" "^7.18.9" 147 | "@babel/types" "^7.18.9" 148 | 149 | "@babel/highlight@^7.18.6": 150 | version "7.18.6" 151 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" 152 | integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== 153 | dependencies: 154 | "@babel/helper-validator-identifier" "^7.18.6" 155 | chalk "^2.0.0" 156 | js-tokens "^4.0.0" 157 | 158 | "@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10", "@babel/parser@^7.18.11": 159 | version "7.18.11" 160 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.11.tgz#68bb07ab3d380affa9a3f96728df07969645d2d9" 161 | integrity sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ== 162 | 163 | "@babel/plugin-syntax-async-generators@^7.8.4": 164 | version "7.8.4" 165 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" 166 | integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== 167 | dependencies: 168 | "@babel/helper-plugin-utils" "^7.8.0" 169 | 170 | "@babel/plugin-syntax-bigint@^7.8.3": 171 | version "7.8.3" 172 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" 173 | integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== 174 | dependencies: 175 | "@babel/helper-plugin-utils" "^7.8.0" 176 | 177 | "@babel/plugin-syntax-class-properties@^7.8.3": 178 | version "7.12.13" 179 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" 180 | integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== 181 | dependencies: 182 | "@babel/helper-plugin-utils" "^7.12.13" 183 | 184 | "@babel/plugin-syntax-import-meta@^7.8.3": 185 | version "7.10.4" 186 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" 187 | integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== 188 | dependencies: 189 | "@babel/helper-plugin-utils" "^7.10.4" 190 | 191 | "@babel/plugin-syntax-json-strings@^7.8.3": 192 | version "7.8.3" 193 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" 194 | integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== 195 | dependencies: 196 | "@babel/helper-plugin-utils" "^7.8.0" 197 | 198 | "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": 199 | version "7.10.4" 200 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" 201 | integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== 202 | dependencies: 203 | "@babel/helper-plugin-utils" "^7.10.4" 204 | 205 | "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": 206 | version "7.8.3" 207 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" 208 | integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== 209 | dependencies: 210 | "@babel/helper-plugin-utils" "^7.8.0" 211 | 212 | "@babel/plugin-syntax-numeric-separator@^7.8.3": 213 | version "7.10.4" 214 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" 215 | integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== 216 | dependencies: 217 | "@babel/helper-plugin-utils" "^7.10.4" 218 | 219 | "@babel/plugin-syntax-object-rest-spread@^7.8.3": 220 | version "7.8.3" 221 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" 222 | integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== 223 | dependencies: 224 | "@babel/helper-plugin-utils" "^7.8.0" 225 | 226 | "@babel/plugin-syntax-optional-catch-binding@^7.8.3": 227 | version "7.8.3" 228 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" 229 | integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== 230 | dependencies: 231 | "@babel/helper-plugin-utils" "^7.8.0" 232 | 233 | "@babel/plugin-syntax-optional-chaining@^7.8.3": 234 | version "7.8.3" 235 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" 236 | integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== 237 | dependencies: 238 | "@babel/helper-plugin-utils" "^7.8.0" 239 | 240 | "@babel/plugin-syntax-top-level-await@^7.8.3": 241 | version "7.14.5" 242 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" 243 | integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== 244 | dependencies: 245 | "@babel/helper-plugin-utils" "^7.14.5" 246 | 247 | "@babel/plugin-syntax-typescript@^7.7.2": 248 | version "7.18.6" 249 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz#1c09cd25795c7c2b8a4ba9ae49394576d4133285" 250 | integrity sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA== 251 | dependencies: 252 | "@babel/helper-plugin-utils" "^7.18.6" 253 | 254 | "@babel/template@^7.18.10", "@babel/template@^7.18.6", "@babel/template@^7.3.3": 255 | version "7.18.10" 256 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" 257 | integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== 258 | dependencies: 259 | "@babel/code-frame" "^7.18.6" 260 | "@babel/parser" "^7.18.10" 261 | "@babel/types" "^7.18.10" 262 | 263 | "@babel/traverse@^7.18.10", "@babel/traverse@^7.18.9", "@babel/traverse@^7.7.2": 264 | version "7.18.11" 265 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.11.tgz#3d51f2afbd83ecf9912bcbb5c4d94e3d2ddaa16f" 266 | integrity sha512-TG9PiM2R/cWCAy6BPJKeHzNbu4lPzOSZpeMfeNErskGpTJx6trEvFaVCbDvpcxwy49BKWmEPwiW8mrysNiDvIQ== 267 | dependencies: 268 | "@babel/code-frame" "^7.18.6" 269 | "@babel/generator" "^7.18.10" 270 | "@babel/helper-environment-visitor" "^7.18.9" 271 | "@babel/helper-function-name" "^7.18.9" 272 | "@babel/helper-hoist-variables" "^7.18.6" 273 | "@babel/helper-split-export-declaration" "^7.18.6" 274 | "@babel/parser" "^7.18.11" 275 | "@babel/types" "^7.18.10" 276 | debug "^4.1.0" 277 | globals "^11.1.0" 278 | 279 | "@babel/types@^7.0.0", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.3.0", "@babel/types@^7.3.3": 280 | version "7.18.10" 281 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.10.tgz#4908e81b6b339ca7c6b7a555a5fc29446f26dde6" 282 | integrity sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ== 283 | dependencies: 284 | "@babel/helper-string-parser" "^7.18.10" 285 | "@babel/helper-validator-identifier" "^7.18.6" 286 | to-fast-properties "^2.0.0" 287 | 288 | "@bcoe/v8-coverage@^0.2.3": 289 | version "0.2.3" 290 | resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" 291 | integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== 292 | 293 | "@istanbuljs/load-nyc-config@^1.0.0": 294 | version "1.1.0" 295 | resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" 296 | integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== 297 | dependencies: 298 | camelcase "^5.3.1" 299 | find-up "^4.1.0" 300 | get-package-type "^0.1.0" 301 | js-yaml "^3.13.1" 302 | resolve-from "^5.0.0" 303 | 304 | "@istanbuljs/schema@^0.1.2": 305 | version "0.1.3" 306 | resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" 307 | integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== 308 | 309 | "@jest/console@^28.1.3": 310 | version "28.1.3" 311 | resolved "https://registry.yarnpkg.com/@jest/console/-/console-28.1.3.tgz#2030606ec03a18c31803b8a36382762e447655df" 312 | integrity sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw== 313 | dependencies: 314 | "@jest/types" "^28.1.3" 315 | "@types/node" "*" 316 | chalk "^4.0.0" 317 | jest-message-util "^28.1.3" 318 | jest-util "^28.1.3" 319 | slash "^3.0.0" 320 | 321 | "@jest/core@^28.1.3": 322 | version "28.1.3" 323 | resolved "https://registry.yarnpkg.com/@jest/core/-/core-28.1.3.tgz#0ebf2bd39840f1233cd5f2d1e6fc8b71bd5a1ac7" 324 | integrity sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA== 325 | dependencies: 326 | "@jest/console" "^28.1.3" 327 | "@jest/reporters" "^28.1.3" 328 | "@jest/test-result" "^28.1.3" 329 | "@jest/transform" "^28.1.3" 330 | "@jest/types" "^28.1.3" 331 | "@types/node" "*" 332 | ansi-escapes "^4.2.1" 333 | chalk "^4.0.0" 334 | ci-info "^3.2.0" 335 | exit "^0.1.2" 336 | graceful-fs "^4.2.9" 337 | jest-changed-files "^28.1.3" 338 | jest-config "^28.1.3" 339 | jest-haste-map "^28.1.3" 340 | jest-message-util "^28.1.3" 341 | jest-regex-util "^28.0.2" 342 | jest-resolve "^28.1.3" 343 | jest-resolve-dependencies "^28.1.3" 344 | jest-runner "^28.1.3" 345 | jest-runtime "^28.1.3" 346 | jest-snapshot "^28.1.3" 347 | jest-util "^28.1.3" 348 | jest-validate "^28.1.3" 349 | jest-watcher "^28.1.3" 350 | micromatch "^4.0.4" 351 | pretty-format "^28.1.3" 352 | rimraf "^3.0.0" 353 | slash "^3.0.0" 354 | strip-ansi "^6.0.0" 355 | 356 | "@jest/environment@^28.1.3": 357 | version "28.1.3" 358 | resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-28.1.3.tgz#abed43a6b040a4c24fdcb69eab1f97589b2d663e" 359 | integrity sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA== 360 | dependencies: 361 | "@jest/fake-timers" "^28.1.3" 362 | "@jest/types" "^28.1.3" 363 | "@types/node" "*" 364 | jest-mock "^28.1.3" 365 | 366 | "@jest/expect-utils@^28.1.3": 367 | version "28.1.3" 368 | resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-28.1.3.tgz#58561ce5db7cd253a7edddbc051fb39dda50f525" 369 | integrity sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA== 370 | dependencies: 371 | jest-get-type "^28.0.2" 372 | 373 | "@jest/expect@^28.1.3": 374 | version "28.1.3" 375 | resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-28.1.3.tgz#9ac57e1d4491baca550f6bdbd232487177ad6a72" 376 | integrity sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw== 377 | dependencies: 378 | expect "^28.1.3" 379 | jest-snapshot "^28.1.3" 380 | 381 | "@jest/fake-timers@^28.1.3": 382 | version "28.1.3" 383 | resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-28.1.3.tgz#230255b3ad0a3d4978f1d06f70685baea91c640e" 384 | integrity sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw== 385 | dependencies: 386 | "@jest/types" "^28.1.3" 387 | "@sinonjs/fake-timers" "^9.1.2" 388 | "@types/node" "*" 389 | jest-message-util "^28.1.3" 390 | jest-mock "^28.1.3" 391 | jest-util "^28.1.3" 392 | 393 | "@jest/globals@^28.1.3": 394 | version "28.1.3" 395 | resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-28.1.3.tgz#a601d78ddc5fdef542728309894895b4a42dc333" 396 | integrity sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA== 397 | dependencies: 398 | "@jest/environment" "^28.1.3" 399 | "@jest/expect" "^28.1.3" 400 | "@jest/types" "^28.1.3" 401 | 402 | "@jest/reporters@^28.1.3": 403 | version "28.1.3" 404 | resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-28.1.3.tgz#9adf6d265edafc5fc4a434cfb31e2df5a67a369a" 405 | integrity sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg== 406 | dependencies: 407 | "@bcoe/v8-coverage" "^0.2.3" 408 | "@jest/console" "^28.1.3" 409 | "@jest/test-result" "^28.1.3" 410 | "@jest/transform" "^28.1.3" 411 | "@jest/types" "^28.1.3" 412 | "@jridgewell/trace-mapping" "^0.3.13" 413 | "@types/node" "*" 414 | chalk "^4.0.0" 415 | collect-v8-coverage "^1.0.0" 416 | exit "^0.1.2" 417 | glob "^7.1.3" 418 | graceful-fs "^4.2.9" 419 | istanbul-lib-coverage "^3.0.0" 420 | istanbul-lib-instrument "^5.1.0" 421 | istanbul-lib-report "^3.0.0" 422 | istanbul-lib-source-maps "^4.0.0" 423 | istanbul-reports "^3.1.3" 424 | jest-message-util "^28.1.3" 425 | jest-util "^28.1.3" 426 | jest-worker "^28.1.3" 427 | slash "^3.0.0" 428 | string-length "^4.0.1" 429 | strip-ansi "^6.0.0" 430 | terminal-link "^2.0.0" 431 | v8-to-istanbul "^9.0.1" 432 | 433 | "@jest/schemas@^28.1.3": 434 | version "28.1.3" 435 | resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-28.1.3.tgz#ad8b86a66f11f33619e3d7e1dcddd7f2d40ff905" 436 | integrity sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg== 437 | dependencies: 438 | "@sinclair/typebox" "^0.24.1" 439 | 440 | "@jest/source-map@^28.1.2": 441 | version "28.1.2" 442 | resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-28.1.2.tgz#7fe832b172b497d6663cdff6c13b0a920e139e24" 443 | integrity sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww== 444 | dependencies: 445 | "@jridgewell/trace-mapping" "^0.3.13" 446 | callsites "^3.0.0" 447 | graceful-fs "^4.2.9" 448 | 449 | "@jest/test-result@^28.1.3": 450 | version "28.1.3" 451 | resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-28.1.3.tgz#5eae945fd9f4b8fcfce74d239e6f725b6bf076c5" 452 | integrity sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg== 453 | dependencies: 454 | "@jest/console" "^28.1.3" 455 | "@jest/types" "^28.1.3" 456 | "@types/istanbul-lib-coverage" "^2.0.0" 457 | collect-v8-coverage "^1.0.0" 458 | 459 | "@jest/test-sequencer@^28.1.3": 460 | version "28.1.3" 461 | resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz#9d0c283d906ac599c74bde464bc0d7e6a82886c3" 462 | integrity sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw== 463 | dependencies: 464 | "@jest/test-result" "^28.1.3" 465 | graceful-fs "^4.2.9" 466 | jest-haste-map "^28.1.3" 467 | slash "^3.0.0" 468 | 469 | "@jest/transform@^28.1.3": 470 | version "28.1.3" 471 | resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-28.1.3.tgz#59d8098e50ab07950e0f2fc0fc7ec462371281b0" 472 | integrity sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA== 473 | dependencies: 474 | "@babel/core" "^7.11.6" 475 | "@jest/types" "^28.1.3" 476 | "@jridgewell/trace-mapping" "^0.3.13" 477 | babel-plugin-istanbul "^6.1.1" 478 | chalk "^4.0.0" 479 | convert-source-map "^1.4.0" 480 | fast-json-stable-stringify "^2.0.0" 481 | graceful-fs "^4.2.9" 482 | jest-haste-map "^28.1.3" 483 | jest-regex-util "^28.0.2" 484 | jest-util "^28.1.3" 485 | micromatch "^4.0.4" 486 | pirates "^4.0.4" 487 | slash "^3.0.0" 488 | write-file-atomic "^4.0.1" 489 | 490 | "@jest/types@^28.1.3": 491 | version "28.1.3" 492 | resolved "https://registry.yarnpkg.com/@jest/types/-/types-28.1.3.tgz#b05de80996ff12512bc5ceb1d208285a7d11748b" 493 | integrity sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ== 494 | dependencies: 495 | "@jest/schemas" "^28.1.3" 496 | "@types/istanbul-lib-coverage" "^2.0.0" 497 | "@types/istanbul-reports" "^3.0.0" 498 | "@types/node" "*" 499 | "@types/yargs" "^17.0.8" 500 | chalk "^4.0.0" 501 | 502 | "@jridgewell/gen-mapping@^0.1.0": 503 | version "0.1.1" 504 | resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" 505 | integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== 506 | dependencies: 507 | "@jridgewell/set-array" "^1.0.0" 508 | "@jridgewell/sourcemap-codec" "^1.4.10" 509 | 510 | "@jridgewell/gen-mapping@^0.3.2": 511 | version "0.3.2" 512 | resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" 513 | integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== 514 | dependencies: 515 | "@jridgewell/set-array" "^1.0.1" 516 | "@jridgewell/sourcemap-codec" "^1.4.10" 517 | "@jridgewell/trace-mapping" "^0.3.9" 518 | 519 | "@jridgewell/resolve-uri@^3.0.3": 520 | version "3.1.0" 521 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" 522 | integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== 523 | 524 | "@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": 525 | version "1.1.2" 526 | resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" 527 | integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== 528 | 529 | "@jridgewell/sourcemap-codec@^1.4.10": 530 | version "1.4.14" 531 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" 532 | integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== 533 | 534 | "@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.13", "@jridgewell/trace-mapping@^0.3.9": 535 | version "0.3.15" 536 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz#aba35c48a38d3fd84b37e66c9c0423f9744f9774" 537 | integrity sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g== 538 | dependencies: 539 | "@jridgewell/resolve-uri" "^3.0.3" 540 | "@jridgewell/sourcemap-codec" "^1.4.10" 541 | 542 | "@octokit/auth-token@^2.4.0": 543 | version "2.4.2" 544 | resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.2.tgz#10d0ae979b100fa6b72fa0e8e63e27e6d0dbff8a" 545 | integrity sha512-jE/lE/IKIz2v1+/P0u4fJqv0kYwXOTujKemJMFr6FeopsxlIK3+wKDCJGnysg81XID5TgZQbIfuJ5J0lnTiuyQ== 546 | dependencies: 547 | "@octokit/types" "^5.0.0" 548 | 549 | "@octokit/core@^3.1.2": 550 | version "3.1.2" 551 | resolved "https://registry.yarnpkg.com/@octokit/core/-/core-3.1.2.tgz#c937d5f9621b764573068fcd2e5defcc872fd9cc" 552 | integrity sha512-AInOFULmwOa7+NFi9F8DlDkm5qtZVmDQayi7TUgChE3yeIGPq0Y+6cAEXPexQ3Ea+uZy66hKEazR7DJyU+4wfw== 553 | dependencies: 554 | "@octokit/auth-token" "^2.4.0" 555 | "@octokit/graphql" "^4.3.1" 556 | "@octokit/request" "^5.4.0" 557 | "@octokit/types" "^5.0.0" 558 | before-after-hook "^2.1.0" 559 | universal-user-agent "^6.0.0" 560 | 561 | "@octokit/endpoint@^6.0.1": 562 | version "6.0.5" 563 | resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.5.tgz#43a6adee813c5ffd2f719e20cfd14a1fee7c193a" 564 | integrity sha512-70K5u6zd45ItOny6aHQAsea8HHQjlQq85yqOMe+Aj8dkhN2qSJ9T+Q3YjUjEYfPRBcuUWNgMn62DQnP/4LAIiQ== 565 | dependencies: 566 | "@octokit/types" "^5.0.0" 567 | is-plain-object "^4.0.0" 568 | universal-user-agent "^6.0.0" 569 | 570 | "@octokit/graphql@^4.3.1": 571 | version "4.5.4" 572 | resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-4.5.4.tgz#c9ef75b0406ebf195bf5f4ed2304a77ed7df27c7" 573 | integrity sha512-ITpZ+dQc0cXAW1FmDkHJJM+8Lb6anUnin0VB5hLBilnYVdLC0ICFU/KIvT7OXfW9S81DE3U4Vx2EypDG1OYaPA== 574 | dependencies: 575 | "@octokit/request" "^5.3.0" 576 | "@octokit/types" "^5.0.0" 577 | universal-user-agent "^6.0.0" 578 | 579 | "@octokit/request-error@^2.0.0": 580 | version "2.0.2" 581 | resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.0.2.tgz#0e76b83f5d8fdda1db99027ea5f617c2e6ba9ed0" 582 | integrity sha512-2BrmnvVSV1MXQvEkrb9zwzP0wXFNbPJij922kYBTLIlIafukrGOb+ABBT2+c6wZiuyWDH1K1zmjGQ0toN/wMWw== 583 | dependencies: 584 | "@octokit/types" "^5.0.1" 585 | deprecation "^2.0.0" 586 | once "^1.4.0" 587 | 588 | "@octokit/request@^5.3.0", "@octokit/request@^5.4.0": 589 | version "5.4.7" 590 | resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.4.7.tgz#fd703ee092e0463ceba49ff7a3e61cb4cf8a0fde" 591 | integrity sha512-FN22xUDP0i0uF38YMbOfx6TotpcENP5W8yJM1e/LieGXn6IoRxDMnBf7tx5RKSW4xuUZ/1P04NFZy5iY3Rax1A== 592 | dependencies: 593 | "@octokit/endpoint" "^6.0.1" 594 | "@octokit/request-error" "^2.0.0" 595 | "@octokit/types" "^5.0.0" 596 | deprecation "^2.0.0" 597 | is-plain-object "^4.0.0" 598 | node-fetch "^2.3.0" 599 | once "^1.4.0" 600 | universal-user-agent "^6.0.0" 601 | 602 | "@octokit/types@^5.0.0", "@octokit/types@^5.0.1": 603 | version "5.4.1" 604 | resolved "https://registry.yarnpkg.com/@octokit/types/-/types-5.4.1.tgz#d5d5f2b70ffc0e3f89467c3db749fa87fc3b7031" 605 | integrity sha512-OlMlSySBJoJ6uozkr/i03nO5dlYQyE05vmQNZhAh9MyO4DPBP88QlwsDVLmVjIMFssvIZB6WO0ctIGMRG+xsJQ== 606 | dependencies: 607 | "@types/node" ">= 8" 608 | 609 | "@sinclair/typebox@^0.24.1": 610 | version "0.24.28" 611 | resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.28.tgz#15aa0b416f82c268b1573ab653e4413c965fe794" 612 | integrity sha512-dgJd3HLOkLmz4Bw50eZx/zJwtBq65nms3N9VBYu5LTjJ883oBFkTyXRlCB/ZGGwqYpJJHA5zW2Ibhl5ngITfow== 613 | 614 | "@sinonjs/commons@^1.7.0": 615 | version "1.8.3" 616 | resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" 617 | integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== 618 | dependencies: 619 | type-detect "4.0.8" 620 | 621 | "@sinonjs/fake-timers@^9.1.2": 622 | version "9.1.2" 623 | resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz#4eaab737fab77332ab132d396a3c0d364bd0ea8c" 624 | integrity sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw== 625 | dependencies: 626 | "@sinonjs/commons" "^1.7.0" 627 | 628 | "@types/babel__core@^7.1.14": 629 | version "7.1.19" 630 | resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.19.tgz#7b497495b7d1b4812bdb9d02804d0576f43ee460" 631 | integrity sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw== 632 | dependencies: 633 | "@babel/parser" "^7.1.0" 634 | "@babel/types" "^7.0.0" 635 | "@types/babel__generator" "*" 636 | "@types/babel__template" "*" 637 | "@types/babel__traverse" "*" 638 | 639 | "@types/babel__generator@*": 640 | version "7.6.4" 641 | resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" 642 | integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== 643 | dependencies: 644 | "@babel/types" "^7.0.0" 645 | 646 | "@types/babel__template@*": 647 | version "7.4.1" 648 | resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" 649 | integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== 650 | dependencies: 651 | "@babel/parser" "^7.1.0" 652 | "@babel/types" "^7.0.0" 653 | 654 | "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": 655 | version "7.18.0" 656 | resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.18.0.tgz#8134fd78cb39567465be65b9fdc16d378095f41f" 657 | integrity sha512-v4Vwdko+pgymgS+A2UIaJru93zQd85vIGWObM5ekZNdXCKtDYqATlEYnWgfo86Q6I1Lh0oXnksDnMU1cwmlPDw== 658 | dependencies: 659 | "@babel/types" "^7.3.0" 660 | 661 | "@types/body-parser@*": 662 | version "1.19.0" 663 | resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.0.tgz#0685b3c47eb3006ffed117cdd55164b61f80538f" 664 | integrity sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ== 665 | dependencies: 666 | "@types/connect" "*" 667 | "@types/node" "*" 668 | 669 | "@types/connect@*": 670 | version "3.4.33" 671 | resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.33.tgz#31610c901eca573b8713c3330abc6e6b9f588546" 672 | integrity sha512-2+FrkXY4zllzTNfJth7jOqEHC+enpLeGslEhpnTAkg21GkRrWV4SsAtqchtT4YS9/nODBU2/ZfsBY2X4J/dX7A== 673 | dependencies: 674 | "@types/node" "*" 675 | 676 | "@types/cookiejar@*": 677 | version "2.1.2" 678 | resolved "https://registry.yarnpkg.com/@types/cookiejar/-/cookiejar-2.1.2.tgz#66ad9331f63fe8a3d3d9d8c6e3906dd10f6446e8" 679 | integrity sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog== 680 | 681 | "@types/express-serve-static-core@*": 682 | version "4.17.12" 683 | resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.12.tgz#9a487da757425e4f267e7d1c5720226af7f89591" 684 | integrity sha512-EaEdY+Dty1jEU7U6J4CUWwxL+hyEGMkO5jan5gplfegUgCUsIUWqXxqw47uGjimeT4Qgkz/XUfwoau08+fgvKA== 685 | dependencies: 686 | "@types/node" "*" 687 | "@types/qs" "*" 688 | "@types/range-parser" "*" 689 | 690 | "@types/express@^4.17.8": 691 | version "4.17.8" 692 | resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.8.tgz#3df4293293317e61c60137d273a2e96cd8d5f27a" 693 | integrity sha512-wLhcKh3PMlyA2cNAB9sjM1BntnhPMiM0JOBwPBqttjHev2428MLEB4AYVN+d8s2iyCVZac+o41Pflm/ZH5vLXQ== 694 | dependencies: 695 | "@types/body-parser" "*" 696 | "@types/express-serve-static-core" "*" 697 | "@types/qs" "*" 698 | "@types/serve-static" "*" 699 | 700 | "@types/graceful-fs@^4.1.3": 701 | version "4.1.5" 702 | resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" 703 | integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== 704 | dependencies: 705 | "@types/node" "*" 706 | 707 | "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": 708 | version "2.0.4" 709 | resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" 710 | integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== 711 | 712 | "@types/istanbul-lib-report@*": 713 | version "3.0.0" 714 | resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" 715 | integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== 716 | dependencies: 717 | "@types/istanbul-lib-coverage" "*" 718 | 719 | "@types/istanbul-reports@^3.0.0": 720 | version "3.0.1" 721 | resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" 722 | integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== 723 | dependencies: 724 | "@types/istanbul-lib-report" "*" 725 | 726 | "@types/jest@^28.1.6": 727 | version "28.1.6" 728 | resolved "https://registry.yarnpkg.com/@types/jest/-/jest-28.1.6.tgz#d6a9cdd38967d2d746861fb5be6b120e38284dd4" 729 | integrity sha512-0RbGAFMfcBJKOmqRazM8L98uokwuwD5F8rHrv/ZMbrZBwVOWZUyPG6VFNscjYr/vjM3Vu4fRrCPbOs42AfemaQ== 730 | dependencies: 731 | jest-matcher-utils "^28.0.0" 732 | pretty-format "^28.0.0" 733 | 734 | "@types/mime@*": 735 | version "2.0.3" 736 | resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.3.tgz#c893b73721db73699943bfc3653b1deb7faa4a3a" 737 | integrity sha512-Jus9s4CDbqwocc5pOAnh8ShfrnMcPHuJYzVcSUU7lrh8Ni5HuIqX3oilL86p3dlTrk0LzHRCgA/GQ7uNCw6l2Q== 738 | 739 | "@types/node@*", "@types/node@>= 8", "@types/node@^14.6.4": 740 | version "14.6.4" 741 | resolved "https://registry.yarnpkg.com/@types/node/-/node-14.6.4.tgz#a145cc0bb14ef9c4777361b7bbafa5cf8e3acb5a" 742 | integrity sha512-Wk7nG1JSaMfMpoMJDKUsWYugliB2Vy55pdjLpmLixeyMi7HizW2I/9QoxsPCkXl3dO+ZOVqPumKaDUv5zJu2uQ== 743 | 744 | "@types/prettier@^2.1.5": 745 | version "2.7.0" 746 | resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.0.tgz#ea03e9f0376a4446f44797ca19d9c46c36e352dc" 747 | integrity sha512-RI1L7N4JnW5gQw2spvL7Sllfuf1SaHdrZpCHiBlCXjIlufi1SMNnbu2teze3/QE67Fg2tBlH7W+mi4hVNk4p0A== 748 | 749 | "@types/qs@*": 750 | version "6.9.4" 751 | resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.4.tgz#a59e851c1ba16c0513ea123830dd639a0a15cb6a" 752 | integrity sha512-+wYo+L6ZF6BMoEjtf8zB2esQsqdV6WsjRK/GP9WOgLPrq87PbNWgIxS76dS5uvl/QXtHGakZmwTznIfcPXcKlQ== 753 | 754 | "@types/range-parser@*": 755 | version "1.2.3" 756 | resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c" 757 | integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA== 758 | 759 | "@types/serve-static@*": 760 | version "1.13.5" 761 | resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.5.tgz#3d25d941a18415d3ab092def846e135a08bbcf53" 762 | integrity sha512-6M64P58N+OXjU432WoLLBQxbA0LRGBCRm7aAGQJ+SMC1IMl0dgRVi9EFfoDcS2a7Xogygk/eGN94CfwU9UF7UQ== 763 | dependencies: 764 | "@types/express-serve-static-core" "*" 765 | "@types/mime" "*" 766 | 767 | "@types/stack-utils@^2.0.0": 768 | version "2.0.1" 769 | resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" 770 | integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== 771 | 772 | "@types/superagent@*": 773 | version "4.1.15" 774 | resolved "https://registry.yarnpkg.com/@types/superagent/-/superagent-4.1.15.tgz#63297de457eba5e2bc502a7609426c4cceab434a" 775 | integrity sha512-mu/N4uvfDN2zVQQ5AYJI/g4qxn2bHB6521t1UuH09ShNWjebTqN0ZFuYK9uYjcgmI0dTQEs+Owi1EO6U0OkOZQ== 776 | dependencies: 777 | "@types/cookiejar" "*" 778 | "@types/node" "*" 779 | 780 | "@types/supertest@^2.0.12": 781 | version "2.0.12" 782 | resolved "https://registry.yarnpkg.com/@types/supertest/-/supertest-2.0.12.tgz#ddb4a0568597c9aadff8dbec5b2e8fddbe8692fc" 783 | integrity sha512-X3HPWTwXRerBZS7Mo1k6vMVR1Z6zmJcDVn5O/31whe0tnjE4te6ZJSJGq1RiqHPjzPdMTfjCFogDJmwng9xHaQ== 784 | dependencies: 785 | "@types/superagent" "*" 786 | 787 | "@types/yargs-parser@*": 788 | version "21.0.0" 789 | resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" 790 | integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== 791 | 792 | "@types/yargs@^17.0.8": 793 | version "17.0.11" 794 | resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.11.tgz#5e10ca33e219807c0eee0f08b5efcba9b6a42c06" 795 | integrity sha512-aB4y9UDUXTSMxmM4MH+YnuR0g5Cph3FLQBoWoMB21DSvFVAxRVEHEMx3TLh+zUZYMCQtKiqazz0Q4Rre31f/OA== 796 | dependencies: 797 | "@types/yargs-parser" "*" 798 | 799 | accepts@~1.3.7: 800 | version "1.3.7" 801 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" 802 | integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== 803 | dependencies: 804 | mime-types "~2.1.24" 805 | negotiator "0.6.2" 806 | 807 | ansi-escapes@^4.2.1: 808 | version "4.3.2" 809 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" 810 | integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== 811 | dependencies: 812 | type-fest "^0.21.3" 813 | 814 | ansi-regex@^5.0.1: 815 | version "5.0.1" 816 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 817 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 818 | 819 | ansi-styles@^3.2.1: 820 | version "3.2.1" 821 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 822 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 823 | dependencies: 824 | color-convert "^1.9.0" 825 | 826 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 827 | version "4.3.0" 828 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 829 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 830 | dependencies: 831 | color-convert "^2.0.1" 832 | 833 | ansi-styles@^5.0.0: 834 | version "5.2.0" 835 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" 836 | integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== 837 | 838 | anymatch@^3.0.3: 839 | version "3.1.2" 840 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" 841 | integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== 842 | dependencies: 843 | normalize-path "^3.0.0" 844 | picomatch "^2.0.4" 845 | 846 | arg@^4.1.0: 847 | version "4.1.3" 848 | resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" 849 | integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== 850 | 851 | argparse@^1.0.7: 852 | version "1.0.10" 853 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 854 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 855 | dependencies: 856 | sprintf-js "~1.0.2" 857 | 858 | array-flatten@1.1.1: 859 | version "1.1.1" 860 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" 861 | integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= 862 | 863 | asap@^2.0.0: 864 | version "2.0.6" 865 | resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" 866 | integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== 867 | 868 | asynckit@^0.4.0: 869 | version "0.4.0" 870 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 871 | integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== 872 | 873 | babel-jest@^28.1.3: 874 | version "28.1.3" 875 | resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-28.1.3.tgz#c1187258197c099072156a0a121c11ee1e3917d5" 876 | integrity sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q== 877 | dependencies: 878 | "@jest/transform" "^28.1.3" 879 | "@types/babel__core" "^7.1.14" 880 | babel-plugin-istanbul "^6.1.1" 881 | babel-preset-jest "^28.1.3" 882 | chalk "^4.0.0" 883 | graceful-fs "^4.2.9" 884 | slash "^3.0.0" 885 | 886 | babel-plugin-istanbul@^6.1.1: 887 | version "6.1.1" 888 | resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" 889 | integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== 890 | dependencies: 891 | "@babel/helper-plugin-utils" "^7.0.0" 892 | "@istanbuljs/load-nyc-config" "^1.0.0" 893 | "@istanbuljs/schema" "^0.1.2" 894 | istanbul-lib-instrument "^5.0.4" 895 | test-exclude "^6.0.0" 896 | 897 | babel-plugin-jest-hoist@^28.1.3: 898 | version "28.1.3" 899 | resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz#1952c4d0ea50f2d6d794353762278d1d8cca3fbe" 900 | integrity sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q== 901 | dependencies: 902 | "@babel/template" "^7.3.3" 903 | "@babel/types" "^7.3.3" 904 | "@types/babel__core" "^7.1.14" 905 | "@types/babel__traverse" "^7.0.6" 906 | 907 | babel-preset-current-node-syntax@^1.0.0: 908 | version "1.0.1" 909 | resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" 910 | integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== 911 | dependencies: 912 | "@babel/plugin-syntax-async-generators" "^7.8.4" 913 | "@babel/plugin-syntax-bigint" "^7.8.3" 914 | "@babel/plugin-syntax-class-properties" "^7.8.3" 915 | "@babel/plugin-syntax-import-meta" "^7.8.3" 916 | "@babel/plugin-syntax-json-strings" "^7.8.3" 917 | "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" 918 | "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" 919 | "@babel/plugin-syntax-numeric-separator" "^7.8.3" 920 | "@babel/plugin-syntax-object-rest-spread" "^7.8.3" 921 | "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" 922 | "@babel/plugin-syntax-optional-chaining" "^7.8.3" 923 | "@babel/plugin-syntax-top-level-await" "^7.8.3" 924 | 925 | babel-preset-jest@^28.1.3: 926 | version "28.1.3" 927 | resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz#5dfc20b99abed5db994406c2b9ab94c73aaa419d" 928 | integrity sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A== 929 | dependencies: 930 | babel-plugin-jest-hoist "^28.1.3" 931 | babel-preset-current-node-syntax "^1.0.0" 932 | 933 | balanced-match@^1.0.0: 934 | version "1.0.2" 935 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 936 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 937 | 938 | before-after-hook@^2.1.0: 939 | version "2.1.0" 940 | resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.1.0.tgz#b6c03487f44e24200dd30ca5e6a1979c5d2fb635" 941 | integrity sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A== 942 | 943 | body-parser@1.19.0: 944 | version "1.19.0" 945 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" 946 | integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== 947 | dependencies: 948 | bytes "3.1.0" 949 | content-type "~1.0.4" 950 | debug "2.6.9" 951 | depd "~1.1.2" 952 | http-errors "1.7.2" 953 | iconv-lite "0.4.24" 954 | on-finished "~2.3.0" 955 | qs "6.7.0" 956 | raw-body "2.4.0" 957 | type-is "~1.6.17" 958 | 959 | brace-expansion@^1.1.7: 960 | version "1.1.11" 961 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 962 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 963 | dependencies: 964 | balanced-match "^1.0.0" 965 | concat-map "0.0.1" 966 | 967 | braces@^3.0.2: 968 | version "3.0.2" 969 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 970 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 971 | dependencies: 972 | fill-range "^7.0.1" 973 | 974 | browserslist@^4.20.2: 975 | version "4.21.3" 976 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.3.tgz#5df277694eb3c48bc5c4b05af3e8b7e09c5a6d1a" 977 | integrity sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ== 978 | dependencies: 979 | caniuse-lite "^1.0.30001370" 980 | electron-to-chromium "^1.4.202" 981 | node-releases "^2.0.6" 982 | update-browserslist-db "^1.0.5" 983 | 984 | bs-logger@0.x: 985 | version "0.2.6" 986 | resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" 987 | integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== 988 | dependencies: 989 | fast-json-stable-stringify "2.x" 990 | 991 | bser@2.1.1: 992 | version "2.1.1" 993 | resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" 994 | integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== 995 | dependencies: 996 | node-int64 "^0.4.0" 997 | 998 | buffer-from@^1.0.0: 999 | version "1.1.1" 1000 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 1001 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 1002 | 1003 | bytes@3.1.0: 1004 | version "3.1.0" 1005 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" 1006 | integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== 1007 | 1008 | call-bind@^1.0.0: 1009 | version "1.0.2" 1010 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" 1011 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== 1012 | dependencies: 1013 | function-bind "^1.1.1" 1014 | get-intrinsic "^1.0.2" 1015 | 1016 | callsites@^3.0.0: 1017 | version "3.1.0" 1018 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 1019 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 1020 | 1021 | camelcase@^5.3.1: 1022 | version "5.3.1" 1023 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 1024 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== 1025 | 1026 | camelcase@^6.2.0: 1027 | version "6.3.0" 1028 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" 1029 | integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== 1030 | 1031 | caniuse-lite@^1.0.30001370: 1032 | version "1.0.30001375" 1033 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001375.tgz#8e73bc3d1a4c800beb39f3163bf0190d7e5d7672" 1034 | integrity sha512-kWIMkNzLYxSvnjy0hL8w1NOaWNr2rn39RTAVyIwcw8juu60bZDWiF1/loOYANzjtJmy6qPgNmn38ro5Pygagdw== 1035 | 1036 | chalk@^2.0.0: 1037 | version "2.4.2" 1038 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 1039 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 1040 | dependencies: 1041 | ansi-styles "^3.2.1" 1042 | escape-string-regexp "^1.0.5" 1043 | supports-color "^5.3.0" 1044 | 1045 | chalk@^4.0.0: 1046 | version "4.1.2" 1047 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 1048 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 1049 | dependencies: 1050 | ansi-styles "^4.1.0" 1051 | supports-color "^7.1.0" 1052 | 1053 | char-regex@^1.0.2: 1054 | version "1.0.2" 1055 | resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" 1056 | integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== 1057 | 1058 | ci-info@^3.2.0: 1059 | version "3.3.2" 1060 | resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.2.tgz#6d2967ffa407466481c6c90b6e16b3098f080128" 1061 | integrity sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg== 1062 | 1063 | cjs-module-lexer@^1.0.0: 1064 | version "1.2.2" 1065 | resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" 1066 | integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== 1067 | 1068 | cliui@^7.0.2: 1069 | version "7.0.4" 1070 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" 1071 | integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== 1072 | dependencies: 1073 | string-width "^4.2.0" 1074 | strip-ansi "^6.0.0" 1075 | wrap-ansi "^7.0.0" 1076 | 1077 | co@^4.6.0: 1078 | version "4.6.0" 1079 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 1080 | integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== 1081 | 1082 | collect-v8-coverage@^1.0.0: 1083 | version "1.0.1" 1084 | resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" 1085 | integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== 1086 | 1087 | color-convert@^1.9.0: 1088 | version "1.9.3" 1089 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 1090 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 1091 | dependencies: 1092 | color-name "1.1.3" 1093 | 1094 | color-convert@^2.0.1: 1095 | version "2.0.1" 1096 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 1097 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 1098 | dependencies: 1099 | color-name "~1.1.4" 1100 | 1101 | color-name@1.1.3: 1102 | version "1.1.3" 1103 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 1104 | integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== 1105 | 1106 | color-name@~1.1.4: 1107 | version "1.1.4" 1108 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 1109 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 1110 | 1111 | combined-stream@^1.0.8: 1112 | version "1.0.8" 1113 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 1114 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 1115 | dependencies: 1116 | delayed-stream "~1.0.0" 1117 | 1118 | component-emitter@^1.3.0: 1119 | version "1.3.0" 1120 | resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" 1121 | integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== 1122 | 1123 | concat-map@0.0.1: 1124 | version "0.0.1" 1125 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 1126 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 1127 | 1128 | content-disposition@0.5.3: 1129 | version "0.5.3" 1130 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" 1131 | integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== 1132 | dependencies: 1133 | safe-buffer "5.1.2" 1134 | 1135 | content-type@~1.0.4: 1136 | version "1.0.4" 1137 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" 1138 | integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== 1139 | 1140 | convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: 1141 | version "1.8.0" 1142 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" 1143 | integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== 1144 | dependencies: 1145 | safe-buffer "~5.1.1" 1146 | 1147 | cookie-signature@1.0.6: 1148 | version "1.0.6" 1149 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 1150 | integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= 1151 | 1152 | cookie@0.4.0: 1153 | version "0.4.0" 1154 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" 1155 | integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== 1156 | 1157 | cookiejar@^2.1.3: 1158 | version "2.1.3" 1159 | resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.3.tgz#fc7a6216e408e74414b90230050842dacda75acc" 1160 | integrity sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ== 1161 | 1162 | cross-spawn@^7.0.3: 1163 | version "7.0.3" 1164 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 1165 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 1166 | dependencies: 1167 | path-key "^3.1.0" 1168 | shebang-command "^2.0.0" 1169 | which "^2.0.1" 1170 | 1171 | debug@2.6.9: 1172 | version "2.6.9" 1173 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 1174 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 1175 | dependencies: 1176 | ms "2.0.0" 1177 | 1178 | debug@^4.1.0, debug@^4.1.1, debug@^4.3.4: 1179 | version "4.3.4" 1180 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 1181 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 1182 | dependencies: 1183 | ms "2.1.2" 1184 | 1185 | dedent@^0.7.0: 1186 | version "0.7.0" 1187 | resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" 1188 | integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== 1189 | 1190 | deepmerge@^4.2.2: 1191 | version "4.2.2" 1192 | resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" 1193 | integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== 1194 | 1195 | delayed-stream@~1.0.0: 1196 | version "1.0.0" 1197 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 1198 | integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== 1199 | 1200 | depd@~1.1.2: 1201 | version "1.1.2" 1202 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" 1203 | integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= 1204 | 1205 | deprecation@^2.0.0: 1206 | version "2.3.1" 1207 | resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" 1208 | integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== 1209 | 1210 | destroy@~1.0.4: 1211 | version "1.0.4" 1212 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" 1213 | integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= 1214 | 1215 | detect-newline@^3.0.0: 1216 | version "3.1.0" 1217 | resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" 1218 | integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== 1219 | 1220 | dezalgo@1.0.3: 1221 | version "1.0.3" 1222 | resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" 1223 | integrity sha512-K7i4zNfT2kgQz3GylDw40ot9GAE47sFZ9EXHFSPP6zONLgH6kWXE0KWJchkbQJLBkRazq4APwZ4OwiFFlT95OQ== 1224 | dependencies: 1225 | asap "^2.0.0" 1226 | wrappy "1" 1227 | 1228 | diff-sequences@^28.1.1: 1229 | version "28.1.1" 1230 | resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-28.1.1.tgz#9989dc731266dc2903457a70e996f3a041913ac6" 1231 | integrity sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw== 1232 | 1233 | diff@^4.0.1: 1234 | version "4.0.2" 1235 | resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" 1236 | integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== 1237 | 1238 | dotenv@^8.2.0: 1239 | version "8.2.0" 1240 | resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" 1241 | integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== 1242 | 1243 | ee-first@1.1.1: 1244 | version "1.1.1" 1245 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 1246 | integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= 1247 | 1248 | electron-to-chromium@^1.4.202: 1249 | version "1.4.219" 1250 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.219.tgz#a7a672304b6aa4f376918d3f63a47f2c3906009a" 1251 | integrity sha512-zoQJsXOUw0ZA0YxbjkmzBumAJRtr6je5JySuL/bAoFs0DuLiLJ+5FzRF7/ZayihxR2QcewlRZVm5QZdUhwjOgA== 1252 | 1253 | emittery@^0.10.2: 1254 | version "0.10.2" 1255 | resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.10.2.tgz#902eec8aedb8c41938c46e9385e9db7e03182933" 1256 | integrity sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw== 1257 | 1258 | emoji-regex@^8.0.0: 1259 | version "8.0.0" 1260 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 1261 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 1262 | 1263 | encodeurl@~1.0.2: 1264 | version "1.0.2" 1265 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 1266 | integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= 1267 | 1268 | error-ex@^1.3.1: 1269 | version "1.3.2" 1270 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 1271 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== 1272 | dependencies: 1273 | is-arrayish "^0.2.1" 1274 | 1275 | escalade@^3.1.1: 1276 | version "3.1.1" 1277 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 1278 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 1279 | 1280 | escape-html@~1.0.3: 1281 | version "1.0.3" 1282 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 1283 | integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= 1284 | 1285 | escape-string-regexp@^1.0.5: 1286 | version "1.0.5" 1287 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 1288 | integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== 1289 | 1290 | escape-string-regexp@^2.0.0: 1291 | version "2.0.0" 1292 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" 1293 | integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== 1294 | 1295 | esprima@^4.0.0: 1296 | version "4.0.1" 1297 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 1298 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 1299 | 1300 | etag@~1.8.1: 1301 | version "1.8.1" 1302 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 1303 | integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= 1304 | 1305 | execa@^5.0.0: 1306 | version "5.1.1" 1307 | resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" 1308 | integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== 1309 | dependencies: 1310 | cross-spawn "^7.0.3" 1311 | get-stream "^6.0.0" 1312 | human-signals "^2.1.0" 1313 | is-stream "^2.0.0" 1314 | merge-stream "^2.0.0" 1315 | npm-run-path "^4.0.1" 1316 | onetime "^5.1.2" 1317 | signal-exit "^3.0.3" 1318 | strip-final-newline "^2.0.0" 1319 | 1320 | exit@^0.1.2: 1321 | version "0.1.2" 1322 | resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" 1323 | integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== 1324 | 1325 | expect@^28.1.3: 1326 | version "28.1.3" 1327 | resolved "https://registry.yarnpkg.com/expect/-/expect-28.1.3.tgz#90a7c1a124f1824133dd4533cce2d2bdcb6603ec" 1328 | integrity sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g== 1329 | dependencies: 1330 | "@jest/expect-utils" "^28.1.3" 1331 | jest-get-type "^28.0.2" 1332 | jest-matcher-utils "^28.1.3" 1333 | jest-message-util "^28.1.3" 1334 | jest-util "^28.1.3" 1335 | 1336 | express@^4.17.1: 1337 | version "4.17.1" 1338 | resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" 1339 | integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== 1340 | dependencies: 1341 | accepts "~1.3.7" 1342 | array-flatten "1.1.1" 1343 | body-parser "1.19.0" 1344 | content-disposition "0.5.3" 1345 | content-type "~1.0.4" 1346 | cookie "0.4.0" 1347 | cookie-signature "1.0.6" 1348 | debug "2.6.9" 1349 | depd "~1.1.2" 1350 | encodeurl "~1.0.2" 1351 | escape-html "~1.0.3" 1352 | etag "~1.8.1" 1353 | finalhandler "~1.1.2" 1354 | fresh "0.5.2" 1355 | merge-descriptors "1.0.1" 1356 | methods "~1.1.2" 1357 | on-finished "~2.3.0" 1358 | parseurl "~1.3.3" 1359 | path-to-regexp "0.1.7" 1360 | proxy-addr "~2.0.5" 1361 | qs "6.7.0" 1362 | range-parser "~1.2.1" 1363 | safe-buffer "5.1.2" 1364 | send "0.17.1" 1365 | serve-static "1.14.1" 1366 | setprototypeof "1.1.1" 1367 | statuses "~1.5.0" 1368 | type-is "~1.6.18" 1369 | utils-merge "1.0.1" 1370 | vary "~1.1.2" 1371 | 1372 | fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: 1373 | version "2.1.0" 1374 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 1375 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 1376 | 1377 | fast-safe-stringify@^2.1.1: 1378 | version "2.1.1" 1379 | resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" 1380 | integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== 1381 | 1382 | fb-watchman@^2.0.0: 1383 | version "2.0.1" 1384 | resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" 1385 | integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== 1386 | dependencies: 1387 | bser "2.1.1" 1388 | 1389 | fill-range@^7.0.1: 1390 | version "7.0.1" 1391 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 1392 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 1393 | dependencies: 1394 | to-regex-range "^5.0.1" 1395 | 1396 | finalhandler@~1.1.2: 1397 | version "1.1.2" 1398 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" 1399 | integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== 1400 | dependencies: 1401 | debug "2.6.9" 1402 | encodeurl "~1.0.2" 1403 | escape-html "~1.0.3" 1404 | on-finished "~2.3.0" 1405 | parseurl "~1.3.3" 1406 | statuses "~1.5.0" 1407 | unpipe "~1.0.0" 1408 | 1409 | find-up@^4.0.0, find-up@^4.1.0: 1410 | version "4.1.0" 1411 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" 1412 | integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== 1413 | dependencies: 1414 | locate-path "^5.0.0" 1415 | path-exists "^4.0.0" 1416 | 1417 | form-data@^4.0.0: 1418 | version "4.0.0" 1419 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" 1420 | integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== 1421 | dependencies: 1422 | asynckit "^0.4.0" 1423 | combined-stream "^1.0.8" 1424 | mime-types "^2.1.12" 1425 | 1426 | formidable@^2.0.1: 1427 | version "2.0.1" 1428 | resolved "https://registry.yarnpkg.com/formidable/-/formidable-2.0.1.tgz#4310bc7965d185536f9565184dee74fbb75557ff" 1429 | integrity sha512-rjTMNbp2BpfQShhFbR3Ruk3qk2y9jKpvMW78nJgx8QKtxjDVrwbZG+wvDOmVbifHyOUOQJXxqEy6r0faRrPzTQ== 1430 | dependencies: 1431 | dezalgo "1.0.3" 1432 | hexoid "1.0.0" 1433 | once "1.4.0" 1434 | qs "6.9.3" 1435 | 1436 | forwarded@~0.1.2: 1437 | version "0.1.2" 1438 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" 1439 | integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= 1440 | 1441 | fresh@0.5.2: 1442 | version "0.5.2" 1443 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" 1444 | integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= 1445 | 1446 | fs.realpath@^1.0.0: 1447 | version "1.0.0" 1448 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1449 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== 1450 | 1451 | fsevents@^2.3.2: 1452 | version "2.3.2" 1453 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 1454 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 1455 | 1456 | function-bind@^1.1.1: 1457 | version "1.1.1" 1458 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 1459 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 1460 | 1461 | gensync@^1.0.0-beta.2: 1462 | version "1.0.0-beta.2" 1463 | resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" 1464 | integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== 1465 | 1466 | get-caller-file@^2.0.5: 1467 | version "2.0.5" 1468 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 1469 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 1470 | 1471 | get-intrinsic@^1.0.2: 1472 | version "1.1.2" 1473 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598" 1474 | integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== 1475 | dependencies: 1476 | function-bind "^1.1.1" 1477 | has "^1.0.3" 1478 | has-symbols "^1.0.3" 1479 | 1480 | get-package-type@^0.1.0: 1481 | version "0.1.0" 1482 | resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" 1483 | integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== 1484 | 1485 | get-stream@^6.0.0: 1486 | version "6.0.1" 1487 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" 1488 | integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== 1489 | 1490 | glob@^7.1.3, glob@^7.1.4: 1491 | version "7.2.3" 1492 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" 1493 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== 1494 | dependencies: 1495 | fs.realpath "^1.0.0" 1496 | inflight "^1.0.4" 1497 | inherits "2" 1498 | minimatch "^3.1.1" 1499 | once "^1.3.0" 1500 | path-is-absolute "^1.0.0" 1501 | 1502 | globals@^11.1.0: 1503 | version "11.12.0" 1504 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" 1505 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== 1506 | 1507 | graceful-fs@^4.2.9: 1508 | version "4.2.10" 1509 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" 1510 | integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== 1511 | 1512 | has-flag@^3.0.0: 1513 | version "3.0.0" 1514 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1515 | integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== 1516 | 1517 | has-flag@^4.0.0: 1518 | version "4.0.0" 1519 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 1520 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1521 | 1522 | has-symbols@^1.0.3: 1523 | version "1.0.3" 1524 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" 1525 | integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== 1526 | 1527 | has@^1.0.3: 1528 | version "1.0.3" 1529 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 1530 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 1531 | dependencies: 1532 | function-bind "^1.1.1" 1533 | 1534 | hexoid@1.0.0: 1535 | version "1.0.0" 1536 | resolved "https://registry.yarnpkg.com/hexoid/-/hexoid-1.0.0.tgz#ad10c6573fb907de23d9ec63a711267d9dc9bc18" 1537 | integrity sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g== 1538 | 1539 | html-escaper@^2.0.0: 1540 | version "2.0.2" 1541 | resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" 1542 | integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== 1543 | 1544 | http-errors@1.7.2: 1545 | version "1.7.2" 1546 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" 1547 | integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== 1548 | dependencies: 1549 | depd "~1.1.2" 1550 | inherits "2.0.3" 1551 | setprototypeof "1.1.1" 1552 | statuses ">= 1.5.0 < 2" 1553 | toidentifier "1.0.0" 1554 | 1555 | http-errors@~1.7.2: 1556 | version "1.7.3" 1557 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" 1558 | integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== 1559 | dependencies: 1560 | depd "~1.1.2" 1561 | inherits "2.0.4" 1562 | setprototypeof "1.1.1" 1563 | statuses ">= 1.5.0 < 2" 1564 | toidentifier "1.0.0" 1565 | 1566 | human-signals@^2.1.0: 1567 | version "2.1.0" 1568 | resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" 1569 | integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== 1570 | 1571 | iconv-lite@0.4.24: 1572 | version "0.4.24" 1573 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 1574 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 1575 | dependencies: 1576 | safer-buffer ">= 2.1.2 < 3" 1577 | 1578 | import-local@^3.0.2: 1579 | version "3.1.0" 1580 | resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" 1581 | integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== 1582 | dependencies: 1583 | pkg-dir "^4.2.0" 1584 | resolve-cwd "^3.0.0" 1585 | 1586 | imurmurhash@^0.1.4: 1587 | version "0.1.4" 1588 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1589 | integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== 1590 | 1591 | inflight@^1.0.4: 1592 | version "1.0.6" 1593 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1594 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== 1595 | dependencies: 1596 | once "^1.3.0" 1597 | wrappy "1" 1598 | 1599 | inherits@2, inherits@2.0.4, inherits@^2.0.3: 1600 | version "2.0.4" 1601 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1602 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1603 | 1604 | inherits@2.0.3: 1605 | version "2.0.3" 1606 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 1607 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= 1608 | 1609 | ipaddr.js@1.9.1: 1610 | version "1.9.1" 1611 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" 1612 | integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== 1613 | 1614 | is-arrayish@^0.2.1: 1615 | version "0.2.1" 1616 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 1617 | integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== 1618 | 1619 | is-core-module@^2.9.0: 1620 | version "2.10.0" 1621 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed" 1622 | integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== 1623 | dependencies: 1624 | has "^1.0.3" 1625 | 1626 | is-fullwidth-code-point@^3.0.0: 1627 | version "3.0.0" 1628 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 1629 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 1630 | 1631 | is-generator-fn@^2.0.0: 1632 | version "2.1.0" 1633 | resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" 1634 | integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== 1635 | 1636 | is-number@^7.0.0: 1637 | version "7.0.0" 1638 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 1639 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1640 | 1641 | is-plain-object@^4.0.0: 1642 | version "4.1.1" 1643 | resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-4.1.1.tgz#1a14d6452cbd50790edc7fdaa0aed5a40a35ebb5" 1644 | integrity sha512-5Aw8LLVsDlZsETVMhoMXzqsXwQqr/0vlnBYzIXJbYo2F4yYlhLHs+Ez7Bod7IIQKWkJbJfxrWD7pA1Dw1TKrwA== 1645 | 1646 | is-stream@^2.0.0: 1647 | version "2.0.1" 1648 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" 1649 | integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== 1650 | 1651 | isexe@^2.0.0: 1652 | version "2.0.0" 1653 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1654 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 1655 | 1656 | istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: 1657 | version "3.2.0" 1658 | resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" 1659 | integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== 1660 | 1661 | istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: 1662 | version "5.2.0" 1663 | resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz#31d18bdd127f825dd02ea7bfdfd906f8ab840e9f" 1664 | integrity sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A== 1665 | dependencies: 1666 | "@babel/core" "^7.12.3" 1667 | "@babel/parser" "^7.14.7" 1668 | "@istanbuljs/schema" "^0.1.2" 1669 | istanbul-lib-coverage "^3.2.0" 1670 | semver "^6.3.0" 1671 | 1672 | istanbul-lib-report@^3.0.0: 1673 | version "3.0.0" 1674 | resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" 1675 | integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== 1676 | dependencies: 1677 | istanbul-lib-coverage "^3.0.0" 1678 | make-dir "^3.0.0" 1679 | supports-color "^7.1.0" 1680 | 1681 | istanbul-lib-source-maps@^4.0.0: 1682 | version "4.0.1" 1683 | resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" 1684 | integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== 1685 | dependencies: 1686 | debug "^4.1.1" 1687 | istanbul-lib-coverage "^3.0.0" 1688 | source-map "^0.6.1" 1689 | 1690 | istanbul-reports@^3.1.3: 1691 | version "3.1.5" 1692 | resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" 1693 | integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== 1694 | dependencies: 1695 | html-escaper "^2.0.0" 1696 | istanbul-lib-report "^3.0.0" 1697 | 1698 | jest-changed-files@^28.1.3: 1699 | version "28.1.3" 1700 | resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-28.1.3.tgz#d9aeee6792be3686c47cb988a8eaf82ff4238831" 1701 | integrity sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA== 1702 | dependencies: 1703 | execa "^5.0.0" 1704 | p-limit "^3.1.0" 1705 | 1706 | jest-circus@^28.1.3: 1707 | version "28.1.3" 1708 | resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-28.1.3.tgz#d14bd11cf8ee1a03d69902dc47b6bd4634ee00e4" 1709 | integrity sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow== 1710 | dependencies: 1711 | "@jest/environment" "^28.1.3" 1712 | "@jest/expect" "^28.1.3" 1713 | "@jest/test-result" "^28.1.3" 1714 | "@jest/types" "^28.1.3" 1715 | "@types/node" "*" 1716 | chalk "^4.0.0" 1717 | co "^4.6.0" 1718 | dedent "^0.7.0" 1719 | is-generator-fn "^2.0.0" 1720 | jest-each "^28.1.3" 1721 | jest-matcher-utils "^28.1.3" 1722 | jest-message-util "^28.1.3" 1723 | jest-runtime "^28.1.3" 1724 | jest-snapshot "^28.1.3" 1725 | jest-util "^28.1.3" 1726 | p-limit "^3.1.0" 1727 | pretty-format "^28.1.3" 1728 | slash "^3.0.0" 1729 | stack-utils "^2.0.3" 1730 | 1731 | jest-cli@^28.1.3: 1732 | version "28.1.3" 1733 | resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-28.1.3.tgz#558b33c577d06de55087b8448d373b9f654e46b2" 1734 | integrity sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ== 1735 | dependencies: 1736 | "@jest/core" "^28.1.3" 1737 | "@jest/test-result" "^28.1.3" 1738 | "@jest/types" "^28.1.3" 1739 | chalk "^4.0.0" 1740 | exit "^0.1.2" 1741 | graceful-fs "^4.2.9" 1742 | import-local "^3.0.2" 1743 | jest-config "^28.1.3" 1744 | jest-util "^28.1.3" 1745 | jest-validate "^28.1.3" 1746 | prompts "^2.0.1" 1747 | yargs "^17.3.1" 1748 | 1749 | jest-config@^28.1.3: 1750 | version "28.1.3" 1751 | resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-28.1.3.tgz#e315e1f73df3cac31447eed8b8740a477392ec60" 1752 | integrity sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ== 1753 | dependencies: 1754 | "@babel/core" "^7.11.6" 1755 | "@jest/test-sequencer" "^28.1.3" 1756 | "@jest/types" "^28.1.3" 1757 | babel-jest "^28.1.3" 1758 | chalk "^4.0.0" 1759 | ci-info "^3.2.0" 1760 | deepmerge "^4.2.2" 1761 | glob "^7.1.3" 1762 | graceful-fs "^4.2.9" 1763 | jest-circus "^28.1.3" 1764 | jest-environment-node "^28.1.3" 1765 | jest-get-type "^28.0.2" 1766 | jest-regex-util "^28.0.2" 1767 | jest-resolve "^28.1.3" 1768 | jest-runner "^28.1.3" 1769 | jest-util "^28.1.3" 1770 | jest-validate "^28.1.3" 1771 | micromatch "^4.0.4" 1772 | parse-json "^5.2.0" 1773 | pretty-format "^28.1.3" 1774 | slash "^3.0.0" 1775 | strip-json-comments "^3.1.1" 1776 | 1777 | jest-diff@^28.1.3: 1778 | version "28.1.3" 1779 | resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-28.1.3.tgz#948a192d86f4e7a64c5264ad4da4877133d8792f" 1780 | integrity sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw== 1781 | dependencies: 1782 | chalk "^4.0.0" 1783 | diff-sequences "^28.1.1" 1784 | jest-get-type "^28.0.2" 1785 | pretty-format "^28.1.3" 1786 | 1787 | jest-docblock@^28.1.1: 1788 | version "28.1.1" 1789 | resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-28.1.1.tgz#6f515c3bf841516d82ecd57a62eed9204c2f42a8" 1790 | integrity sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA== 1791 | dependencies: 1792 | detect-newline "^3.0.0" 1793 | 1794 | jest-each@^28.1.3: 1795 | version "28.1.3" 1796 | resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-28.1.3.tgz#bdd1516edbe2b1f3569cfdad9acd543040028f81" 1797 | integrity sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g== 1798 | dependencies: 1799 | "@jest/types" "^28.1.3" 1800 | chalk "^4.0.0" 1801 | jest-get-type "^28.0.2" 1802 | jest-util "^28.1.3" 1803 | pretty-format "^28.1.3" 1804 | 1805 | jest-environment-node@^28.1.3: 1806 | version "28.1.3" 1807 | resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-28.1.3.tgz#7e74fe40eb645b9d56c0c4b70ca4357faa349be5" 1808 | integrity sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A== 1809 | dependencies: 1810 | "@jest/environment" "^28.1.3" 1811 | "@jest/fake-timers" "^28.1.3" 1812 | "@jest/types" "^28.1.3" 1813 | "@types/node" "*" 1814 | jest-mock "^28.1.3" 1815 | jest-util "^28.1.3" 1816 | 1817 | jest-get-type@^28.0.2: 1818 | version "28.0.2" 1819 | resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-28.0.2.tgz#34622e628e4fdcd793d46db8a242227901fcf203" 1820 | integrity sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA== 1821 | 1822 | jest-haste-map@^28.1.3: 1823 | version "28.1.3" 1824 | resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-28.1.3.tgz#abd5451129a38d9841049644f34b034308944e2b" 1825 | integrity sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA== 1826 | dependencies: 1827 | "@jest/types" "^28.1.3" 1828 | "@types/graceful-fs" "^4.1.3" 1829 | "@types/node" "*" 1830 | anymatch "^3.0.3" 1831 | fb-watchman "^2.0.0" 1832 | graceful-fs "^4.2.9" 1833 | jest-regex-util "^28.0.2" 1834 | jest-util "^28.1.3" 1835 | jest-worker "^28.1.3" 1836 | micromatch "^4.0.4" 1837 | walker "^1.0.8" 1838 | optionalDependencies: 1839 | fsevents "^2.3.2" 1840 | 1841 | jest-leak-detector@^28.1.3: 1842 | version "28.1.3" 1843 | resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz#a6685d9b074be99e3adee816ce84fd30795e654d" 1844 | integrity sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA== 1845 | dependencies: 1846 | jest-get-type "^28.0.2" 1847 | pretty-format "^28.1.3" 1848 | 1849 | jest-matcher-utils@^28.0.0, jest-matcher-utils@^28.1.3: 1850 | version "28.1.3" 1851 | resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz#5a77f1c129dd5ba3b4d7fc20728806c78893146e" 1852 | integrity sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw== 1853 | dependencies: 1854 | chalk "^4.0.0" 1855 | jest-diff "^28.1.3" 1856 | jest-get-type "^28.0.2" 1857 | pretty-format "^28.1.3" 1858 | 1859 | jest-message-util@^28.1.3: 1860 | version "28.1.3" 1861 | resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-28.1.3.tgz#232def7f2e333f1eecc90649b5b94b0055e7c43d" 1862 | integrity sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g== 1863 | dependencies: 1864 | "@babel/code-frame" "^7.12.13" 1865 | "@jest/types" "^28.1.3" 1866 | "@types/stack-utils" "^2.0.0" 1867 | chalk "^4.0.0" 1868 | graceful-fs "^4.2.9" 1869 | micromatch "^4.0.4" 1870 | pretty-format "^28.1.3" 1871 | slash "^3.0.0" 1872 | stack-utils "^2.0.3" 1873 | 1874 | jest-mock@^28.1.3: 1875 | version "28.1.3" 1876 | resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-28.1.3.tgz#d4e9b1fc838bea595c77ab73672ebf513ab249da" 1877 | integrity sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA== 1878 | dependencies: 1879 | "@jest/types" "^28.1.3" 1880 | "@types/node" "*" 1881 | 1882 | jest-pnp-resolver@^1.2.2: 1883 | version "1.2.2" 1884 | resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" 1885 | integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== 1886 | 1887 | jest-regex-util@^28.0.2: 1888 | version "28.0.2" 1889 | resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-28.0.2.tgz#afdc377a3b25fb6e80825adcf76c854e5bf47ead" 1890 | integrity sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw== 1891 | 1892 | jest-resolve-dependencies@^28.1.3: 1893 | version "28.1.3" 1894 | resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz#8c65d7583460df7275c6ea2791901fa975c1fe66" 1895 | integrity sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA== 1896 | dependencies: 1897 | jest-regex-util "^28.0.2" 1898 | jest-snapshot "^28.1.3" 1899 | 1900 | jest-resolve@^28.1.3: 1901 | version "28.1.3" 1902 | resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-28.1.3.tgz#cfb36100341ddbb061ec781426b3c31eb51aa0a8" 1903 | integrity sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ== 1904 | dependencies: 1905 | chalk "^4.0.0" 1906 | graceful-fs "^4.2.9" 1907 | jest-haste-map "^28.1.3" 1908 | jest-pnp-resolver "^1.2.2" 1909 | jest-util "^28.1.3" 1910 | jest-validate "^28.1.3" 1911 | resolve "^1.20.0" 1912 | resolve.exports "^1.1.0" 1913 | slash "^3.0.0" 1914 | 1915 | jest-runner@^28.1.3: 1916 | version "28.1.3" 1917 | resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-28.1.3.tgz#5eee25febd730b4713a2cdfd76bdd5557840f9a1" 1918 | integrity sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA== 1919 | dependencies: 1920 | "@jest/console" "^28.1.3" 1921 | "@jest/environment" "^28.1.3" 1922 | "@jest/test-result" "^28.1.3" 1923 | "@jest/transform" "^28.1.3" 1924 | "@jest/types" "^28.1.3" 1925 | "@types/node" "*" 1926 | chalk "^4.0.0" 1927 | emittery "^0.10.2" 1928 | graceful-fs "^4.2.9" 1929 | jest-docblock "^28.1.1" 1930 | jest-environment-node "^28.1.3" 1931 | jest-haste-map "^28.1.3" 1932 | jest-leak-detector "^28.1.3" 1933 | jest-message-util "^28.1.3" 1934 | jest-resolve "^28.1.3" 1935 | jest-runtime "^28.1.3" 1936 | jest-util "^28.1.3" 1937 | jest-watcher "^28.1.3" 1938 | jest-worker "^28.1.3" 1939 | p-limit "^3.1.0" 1940 | source-map-support "0.5.13" 1941 | 1942 | jest-runtime@^28.1.3: 1943 | version "28.1.3" 1944 | resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-28.1.3.tgz#a57643458235aa53e8ec7821949e728960d0605f" 1945 | integrity sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw== 1946 | dependencies: 1947 | "@jest/environment" "^28.1.3" 1948 | "@jest/fake-timers" "^28.1.3" 1949 | "@jest/globals" "^28.1.3" 1950 | "@jest/source-map" "^28.1.2" 1951 | "@jest/test-result" "^28.1.3" 1952 | "@jest/transform" "^28.1.3" 1953 | "@jest/types" "^28.1.3" 1954 | chalk "^4.0.0" 1955 | cjs-module-lexer "^1.0.0" 1956 | collect-v8-coverage "^1.0.0" 1957 | execa "^5.0.0" 1958 | glob "^7.1.3" 1959 | graceful-fs "^4.2.9" 1960 | jest-haste-map "^28.1.3" 1961 | jest-message-util "^28.1.3" 1962 | jest-mock "^28.1.3" 1963 | jest-regex-util "^28.0.2" 1964 | jest-resolve "^28.1.3" 1965 | jest-snapshot "^28.1.3" 1966 | jest-util "^28.1.3" 1967 | slash "^3.0.0" 1968 | strip-bom "^4.0.0" 1969 | 1970 | jest-snapshot@^28.1.3: 1971 | version "28.1.3" 1972 | resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-28.1.3.tgz#17467b3ab8ddb81e2f605db05583d69388fc0668" 1973 | integrity sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg== 1974 | dependencies: 1975 | "@babel/core" "^7.11.6" 1976 | "@babel/generator" "^7.7.2" 1977 | "@babel/plugin-syntax-typescript" "^7.7.2" 1978 | "@babel/traverse" "^7.7.2" 1979 | "@babel/types" "^7.3.3" 1980 | "@jest/expect-utils" "^28.1.3" 1981 | "@jest/transform" "^28.1.3" 1982 | "@jest/types" "^28.1.3" 1983 | "@types/babel__traverse" "^7.0.6" 1984 | "@types/prettier" "^2.1.5" 1985 | babel-preset-current-node-syntax "^1.0.0" 1986 | chalk "^4.0.0" 1987 | expect "^28.1.3" 1988 | graceful-fs "^4.2.9" 1989 | jest-diff "^28.1.3" 1990 | jest-get-type "^28.0.2" 1991 | jest-haste-map "^28.1.3" 1992 | jest-matcher-utils "^28.1.3" 1993 | jest-message-util "^28.1.3" 1994 | jest-util "^28.1.3" 1995 | natural-compare "^1.4.0" 1996 | pretty-format "^28.1.3" 1997 | semver "^7.3.5" 1998 | 1999 | jest-util@^28.0.0, jest-util@^28.1.3: 2000 | version "28.1.3" 2001 | resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-28.1.3.tgz#f4f932aa0074f0679943220ff9cbba7e497028b0" 2002 | integrity sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ== 2003 | dependencies: 2004 | "@jest/types" "^28.1.3" 2005 | "@types/node" "*" 2006 | chalk "^4.0.0" 2007 | ci-info "^3.2.0" 2008 | graceful-fs "^4.2.9" 2009 | picomatch "^2.2.3" 2010 | 2011 | jest-validate@^28.1.3: 2012 | version "28.1.3" 2013 | resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-28.1.3.tgz#e322267fd5e7c64cea4629612c357bbda96229df" 2014 | integrity sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA== 2015 | dependencies: 2016 | "@jest/types" "^28.1.3" 2017 | camelcase "^6.2.0" 2018 | chalk "^4.0.0" 2019 | jest-get-type "^28.0.2" 2020 | leven "^3.1.0" 2021 | pretty-format "^28.1.3" 2022 | 2023 | jest-watcher@^28.1.3: 2024 | version "28.1.3" 2025 | resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-28.1.3.tgz#c6023a59ba2255e3b4c57179fc94164b3e73abd4" 2026 | integrity sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g== 2027 | dependencies: 2028 | "@jest/test-result" "^28.1.3" 2029 | "@jest/types" "^28.1.3" 2030 | "@types/node" "*" 2031 | ansi-escapes "^4.2.1" 2032 | chalk "^4.0.0" 2033 | emittery "^0.10.2" 2034 | jest-util "^28.1.3" 2035 | string-length "^4.0.1" 2036 | 2037 | jest-worker@^28.1.3: 2038 | version "28.1.3" 2039 | resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-28.1.3.tgz#7e3c4ce3fa23d1bb6accb169e7f396f98ed4bb98" 2040 | integrity sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g== 2041 | dependencies: 2042 | "@types/node" "*" 2043 | merge-stream "^2.0.0" 2044 | supports-color "^8.0.0" 2045 | 2046 | jest@^28.1.3: 2047 | version "28.1.3" 2048 | resolved "https://registry.yarnpkg.com/jest/-/jest-28.1.3.tgz#e9c6a7eecdebe3548ca2b18894a50f45b36dfc6b" 2049 | integrity sha512-N4GT5on8UkZgH0O5LUavMRV1EDEhNTL0KEfRmDIeZHSV7p2XgLoY9t9VDUgL6o+yfdgYHVxuz81G8oB9VG5uyA== 2050 | dependencies: 2051 | "@jest/core" "^28.1.3" 2052 | "@jest/types" "^28.1.3" 2053 | import-local "^3.0.2" 2054 | jest-cli "^28.1.3" 2055 | 2056 | js-tokens@^4.0.0: 2057 | version "4.0.0" 2058 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 2059 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 2060 | 2061 | js-yaml@^3.13.1: 2062 | version "3.14.1" 2063 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" 2064 | integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== 2065 | dependencies: 2066 | argparse "^1.0.7" 2067 | esprima "^4.0.0" 2068 | 2069 | jsesc@^2.5.1: 2070 | version "2.5.2" 2071 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" 2072 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== 2073 | 2074 | json-parse-even-better-errors@^2.3.0: 2075 | version "2.3.1" 2076 | resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" 2077 | integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== 2078 | 2079 | json5@^2.2.1: 2080 | version "2.2.1" 2081 | resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" 2082 | integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== 2083 | 2084 | kleur@^3.0.3: 2085 | version "3.0.3" 2086 | resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" 2087 | integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== 2088 | 2089 | leven@^3.1.0: 2090 | version "3.1.0" 2091 | resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" 2092 | integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== 2093 | 2094 | lines-and-columns@^1.1.6: 2095 | version "1.2.4" 2096 | resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" 2097 | integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== 2098 | 2099 | locate-path@^5.0.0: 2100 | version "5.0.0" 2101 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" 2102 | integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== 2103 | dependencies: 2104 | p-locate "^4.1.0" 2105 | 2106 | lodash.memoize@4.x: 2107 | version "4.1.2" 2108 | resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" 2109 | integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== 2110 | 2111 | lru-cache@^6.0.0: 2112 | version "6.0.0" 2113 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 2114 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 2115 | dependencies: 2116 | yallist "^4.0.0" 2117 | 2118 | make-dir@^3.0.0: 2119 | version "3.1.0" 2120 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" 2121 | integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== 2122 | dependencies: 2123 | semver "^6.0.0" 2124 | 2125 | make-error@1.x, make-error@^1.1.1: 2126 | version "1.3.6" 2127 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" 2128 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== 2129 | 2130 | makeerror@1.0.12: 2131 | version "1.0.12" 2132 | resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" 2133 | integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== 2134 | dependencies: 2135 | tmpl "1.0.5" 2136 | 2137 | media-typer@0.3.0: 2138 | version "0.3.0" 2139 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 2140 | integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= 2141 | 2142 | merge-descriptors@1.0.1: 2143 | version "1.0.1" 2144 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" 2145 | integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= 2146 | 2147 | merge-stream@^2.0.0: 2148 | version "2.0.0" 2149 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" 2150 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== 2151 | 2152 | methods@^1.1.2, methods@~1.1.2: 2153 | version "1.1.2" 2154 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 2155 | integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= 2156 | 2157 | micromatch@^4.0.4: 2158 | version "4.0.5" 2159 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" 2160 | integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== 2161 | dependencies: 2162 | braces "^3.0.2" 2163 | picomatch "^2.3.1" 2164 | 2165 | mime-db@1.44.0: 2166 | version "1.44.0" 2167 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" 2168 | integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== 2169 | 2170 | mime-db@1.52.0: 2171 | version "1.52.0" 2172 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" 2173 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== 2174 | 2175 | mime-types@^2.1.12: 2176 | version "2.1.35" 2177 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" 2178 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== 2179 | dependencies: 2180 | mime-db "1.52.0" 2181 | 2182 | mime-types@~2.1.24: 2183 | version "2.1.27" 2184 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" 2185 | integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== 2186 | dependencies: 2187 | mime-db "1.44.0" 2188 | 2189 | mime@1.6.0: 2190 | version "1.6.0" 2191 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" 2192 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== 2193 | 2194 | mime@2.6.0: 2195 | version "2.6.0" 2196 | resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" 2197 | integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== 2198 | 2199 | mimic-fn@^2.1.0: 2200 | version "2.1.0" 2201 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" 2202 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== 2203 | 2204 | minimatch@^3.0.4, minimatch@^3.1.1: 2205 | version "3.1.2" 2206 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 2207 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 2208 | dependencies: 2209 | brace-expansion "^1.1.7" 2210 | 2211 | ms@2.0.0: 2212 | version "2.0.0" 2213 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 2214 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 2215 | 2216 | ms@2.1.1: 2217 | version "2.1.1" 2218 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" 2219 | integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== 2220 | 2221 | ms@2.1.2: 2222 | version "2.1.2" 2223 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 2224 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 2225 | 2226 | natural-compare@^1.4.0: 2227 | version "1.4.0" 2228 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 2229 | integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== 2230 | 2231 | negotiator@0.6.2: 2232 | version "0.6.2" 2233 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" 2234 | integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== 2235 | 2236 | node-fetch@^2.3.0: 2237 | version "2.6.7" 2238 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" 2239 | integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== 2240 | dependencies: 2241 | whatwg-url "^5.0.0" 2242 | 2243 | node-int64@^0.4.0: 2244 | version "0.4.0" 2245 | resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" 2246 | integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== 2247 | 2248 | node-releases@^2.0.6: 2249 | version "2.0.6" 2250 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" 2251 | integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== 2252 | 2253 | normalize-path@^3.0.0: 2254 | version "3.0.0" 2255 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 2256 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 2257 | 2258 | npm-run-path@^4.0.1: 2259 | version "4.0.1" 2260 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" 2261 | integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== 2262 | dependencies: 2263 | path-key "^3.0.0" 2264 | 2265 | object-inspect@^1.9.0: 2266 | version "1.12.2" 2267 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" 2268 | integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== 2269 | 2270 | on-finished@~2.3.0: 2271 | version "2.3.0" 2272 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 2273 | integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= 2274 | dependencies: 2275 | ee-first "1.1.1" 2276 | 2277 | once@1.4.0, once@^1.3.0, once@^1.4.0: 2278 | version "1.4.0" 2279 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 2280 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 2281 | dependencies: 2282 | wrappy "1" 2283 | 2284 | onetime@^5.1.2: 2285 | version "5.1.2" 2286 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" 2287 | integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== 2288 | dependencies: 2289 | mimic-fn "^2.1.0" 2290 | 2291 | p-limit@^2.2.0: 2292 | version "2.3.0" 2293 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" 2294 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== 2295 | dependencies: 2296 | p-try "^2.0.0" 2297 | 2298 | p-limit@^3.1.0: 2299 | version "3.1.0" 2300 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 2301 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 2302 | dependencies: 2303 | yocto-queue "^0.1.0" 2304 | 2305 | p-locate@^4.1.0: 2306 | version "4.1.0" 2307 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" 2308 | integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== 2309 | dependencies: 2310 | p-limit "^2.2.0" 2311 | 2312 | p-try@^2.0.0: 2313 | version "2.2.0" 2314 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 2315 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 2316 | 2317 | parse-json@^5.2.0: 2318 | version "5.2.0" 2319 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" 2320 | integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== 2321 | dependencies: 2322 | "@babel/code-frame" "^7.0.0" 2323 | error-ex "^1.3.1" 2324 | json-parse-even-better-errors "^2.3.0" 2325 | lines-and-columns "^1.1.6" 2326 | 2327 | parseurl@~1.3.3: 2328 | version "1.3.3" 2329 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" 2330 | integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== 2331 | 2332 | path-exists@^4.0.0: 2333 | version "4.0.0" 2334 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 2335 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 2336 | 2337 | path-is-absolute@^1.0.0: 2338 | version "1.0.1" 2339 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 2340 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== 2341 | 2342 | path-key@^3.0.0, path-key@^3.1.0: 2343 | version "3.1.1" 2344 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 2345 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 2346 | 2347 | path-parse@^1.0.7: 2348 | version "1.0.7" 2349 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 2350 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 2351 | 2352 | path-to-regexp@0.1.7: 2353 | version "0.1.7" 2354 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" 2355 | integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= 2356 | 2357 | picocolors@^1.0.0: 2358 | version "1.0.0" 2359 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" 2360 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== 2361 | 2362 | picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: 2363 | version "2.3.1" 2364 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 2365 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 2366 | 2367 | pirates@^4.0.4: 2368 | version "4.0.5" 2369 | resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" 2370 | integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== 2371 | 2372 | pkg-dir@^4.2.0: 2373 | version "4.2.0" 2374 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" 2375 | integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== 2376 | dependencies: 2377 | find-up "^4.0.0" 2378 | 2379 | prettier@^2.7.1: 2380 | version "2.7.1" 2381 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" 2382 | integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== 2383 | 2384 | pretty-format@^28.0.0, pretty-format@^28.1.3: 2385 | version "28.1.3" 2386 | resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.1.3.tgz#c9fba8cedf99ce50963a11b27d982a9ae90970d5" 2387 | integrity sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q== 2388 | dependencies: 2389 | "@jest/schemas" "^28.1.3" 2390 | ansi-regex "^5.0.1" 2391 | ansi-styles "^5.0.0" 2392 | react-is "^18.0.0" 2393 | 2394 | prompts@^2.0.1: 2395 | version "2.4.2" 2396 | resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" 2397 | integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== 2398 | dependencies: 2399 | kleur "^3.0.3" 2400 | sisteransi "^1.0.5" 2401 | 2402 | proxy-addr@~2.0.5: 2403 | version "2.0.6" 2404 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" 2405 | integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== 2406 | dependencies: 2407 | forwarded "~0.1.2" 2408 | ipaddr.js "1.9.1" 2409 | 2410 | qs@6.7.0: 2411 | version "6.7.0" 2412 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" 2413 | integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== 2414 | 2415 | qs@6.9.3: 2416 | version "6.9.3" 2417 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.3.tgz#bfadcd296c2d549f1dffa560619132c977f5008e" 2418 | integrity sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw== 2419 | 2420 | qs@^6.10.3: 2421 | version "6.11.0" 2422 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" 2423 | integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== 2424 | dependencies: 2425 | side-channel "^1.0.4" 2426 | 2427 | range-parser@~1.2.1: 2428 | version "1.2.1" 2429 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" 2430 | integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== 2431 | 2432 | raw-body@2.4.0: 2433 | version "2.4.0" 2434 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" 2435 | integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== 2436 | dependencies: 2437 | bytes "3.1.0" 2438 | http-errors "1.7.2" 2439 | iconv-lite "0.4.24" 2440 | unpipe "1.0.0" 2441 | 2442 | react-is@^18.0.0: 2443 | version "18.2.0" 2444 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" 2445 | integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== 2446 | 2447 | readable-stream@^3.6.0: 2448 | version "3.6.0" 2449 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" 2450 | integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== 2451 | dependencies: 2452 | inherits "^2.0.3" 2453 | string_decoder "^1.1.1" 2454 | util-deprecate "^1.0.1" 2455 | 2456 | require-directory@^2.1.1: 2457 | version "2.1.1" 2458 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 2459 | integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== 2460 | 2461 | resolve-cwd@^3.0.0: 2462 | version "3.0.0" 2463 | resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" 2464 | integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== 2465 | dependencies: 2466 | resolve-from "^5.0.0" 2467 | 2468 | resolve-from@^5.0.0: 2469 | version "5.0.0" 2470 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" 2471 | integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== 2472 | 2473 | resolve.exports@^1.1.0: 2474 | version "1.1.0" 2475 | resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9" 2476 | integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== 2477 | 2478 | resolve@^1.20.0: 2479 | version "1.22.1" 2480 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" 2481 | integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== 2482 | dependencies: 2483 | is-core-module "^2.9.0" 2484 | path-parse "^1.0.7" 2485 | supports-preserve-symlinks-flag "^1.0.0" 2486 | 2487 | rimraf@^3.0.0: 2488 | version "3.0.2" 2489 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 2490 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 2491 | dependencies: 2492 | glob "^7.1.3" 2493 | 2494 | safe-buffer@5.1.2, safe-buffer@~5.1.1: 2495 | version "5.1.2" 2496 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 2497 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 2498 | 2499 | safe-buffer@~5.2.0: 2500 | version "5.2.1" 2501 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 2502 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 2503 | 2504 | "safer-buffer@>= 2.1.2 < 3": 2505 | version "2.1.2" 2506 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 2507 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 2508 | 2509 | semver@7.x, semver@^7.3.5, semver@^7.3.7: 2510 | version "7.3.7" 2511 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" 2512 | integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== 2513 | dependencies: 2514 | lru-cache "^6.0.0" 2515 | 2516 | semver@^6.0.0, semver@^6.3.0: 2517 | version "6.3.0" 2518 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 2519 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 2520 | 2521 | send@0.17.1: 2522 | version "0.17.1" 2523 | resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" 2524 | integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== 2525 | dependencies: 2526 | debug "2.6.9" 2527 | depd "~1.1.2" 2528 | destroy "~1.0.4" 2529 | encodeurl "~1.0.2" 2530 | escape-html "~1.0.3" 2531 | etag "~1.8.1" 2532 | fresh "0.5.2" 2533 | http-errors "~1.7.2" 2534 | mime "1.6.0" 2535 | ms "2.1.1" 2536 | on-finished "~2.3.0" 2537 | range-parser "~1.2.1" 2538 | statuses "~1.5.0" 2539 | 2540 | serve-static@1.14.1: 2541 | version "1.14.1" 2542 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" 2543 | integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== 2544 | dependencies: 2545 | encodeurl "~1.0.2" 2546 | escape-html "~1.0.3" 2547 | parseurl "~1.3.3" 2548 | send "0.17.1" 2549 | 2550 | setprototypeof@1.1.1: 2551 | version "1.1.1" 2552 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" 2553 | integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== 2554 | 2555 | shebang-command@^2.0.0: 2556 | version "2.0.0" 2557 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 2558 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 2559 | dependencies: 2560 | shebang-regex "^3.0.0" 2561 | 2562 | shebang-regex@^3.0.0: 2563 | version "3.0.0" 2564 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 2565 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 2566 | 2567 | side-channel@^1.0.4: 2568 | version "1.0.4" 2569 | resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" 2570 | integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== 2571 | dependencies: 2572 | call-bind "^1.0.0" 2573 | get-intrinsic "^1.0.2" 2574 | object-inspect "^1.9.0" 2575 | 2576 | signal-exit@^3.0.3, signal-exit@^3.0.7: 2577 | version "3.0.7" 2578 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" 2579 | integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== 2580 | 2581 | sisteransi@^1.0.5: 2582 | version "1.0.5" 2583 | resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" 2584 | integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== 2585 | 2586 | slash@^3.0.0: 2587 | version "3.0.0" 2588 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 2589 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 2590 | 2591 | source-map-support@0.5.13: 2592 | version "0.5.13" 2593 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" 2594 | integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== 2595 | dependencies: 2596 | buffer-from "^1.0.0" 2597 | source-map "^0.6.0" 2598 | 2599 | source-map-support@^0.5.17: 2600 | version "0.5.19" 2601 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" 2602 | integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== 2603 | dependencies: 2604 | buffer-from "^1.0.0" 2605 | source-map "^0.6.0" 2606 | 2607 | source-map@^0.6.0, source-map@^0.6.1: 2608 | version "0.6.1" 2609 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 2610 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 2611 | 2612 | sprintf-js@~1.0.2: 2613 | version "1.0.3" 2614 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 2615 | integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== 2616 | 2617 | stack-utils@^2.0.3: 2618 | version "2.0.5" 2619 | resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5" 2620 | integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== 2621 | dependencies: 2622 | escape-string-regexp "^2.0.0" 2623 | 2624 | "statuses@>= 1.5.0 < 2", statuses@~1.5.0: 2625 | version "1.5.0" 2626 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" 2627 | integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= 2628 | 2629 | string-length@^4.0.1: 2630 | version "4.0.2" 2631 | resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" 2632 | integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== 2633 | dependencies: 2634 | char-regex "^1.0.2" 2635 | strip-ansi "^6.0.0" 2636 | 2637 | string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: 2638 | version "4.2.3" 2639 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 2640 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 2641 | dependencies: 2642 | emoji-regex "^8.0.0" 2643 | is-fullwidth-code-point "^3.0.0" 2644 | strip-ansi "^6.0.1" 2645 | 2646 | string_decoder@^1.1.1: 2647 | version "1.3.0" 2648 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" 2649 | integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== 2650 | dependencies: 2651 | safe-buffer "~5.2.0" 2652 | 2653 | strip-ansi@^6.0.0, strip-ansi@^6.0.1: 2654 | version "6.0.1" 2655 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 2656 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 2657 | dependencies: 2658 | ansi-regex "^5.0.1" 2659 | 2660 | strip-bom@^4.0.0: 2661 | version "4.0.0" 2662 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" 2663 | integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== 2664 | 2665 | strip-final-newline@^2.0.0: 2666 | version "2.0.0" 2667 | resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" 2668 | integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== 2669 | 2670 | strip-json-comments@^3.1.1: 2671 | version "3.1.1" 2672 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 2673 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 2674 | 2675 | superagent@^8.0.0: 2676 | version "8.0.0" 2677 | resolved "https://registry.yarnpkg.com/superagent/-/superagent-8.0.0.tgz#2ea4587df4b81ef023ec01ebc6e1bcb9e2344cb6" 2678 | integrity sha512-iudipXEel+SzlP9y29UBWGDjB+Zzag+eeA1iLosaR2YHBRr1Q1kC29iBrF2zIVD9fqVbpZnXkN/VJmwFMVyNWg== 2679 | dependencies: 2680 | component-emitter "^1.3.0" 2681 | cookiejar "^2.1.3" 2682 | debug "^4.3.4" 2683 | fast-safe-stringify "^2.1.1" 2684 | form-data "^4.0.0" 2685 | formidable "^2.0.1" 2686 | methods "^1.1.2" 2687 | mime "2.6.0" 2688 | qs "^6.10.3" 2689 | readable-stream "^3.6.0" 2690 | semver "^7.3.7" 2691 | 2692 | supertest@^6.2.4: 2693 | version "6.2.4" 2694 | resolved "https://registry.yarnpkg.com/supertest/-/supertest-6.2.4.tgz#3dcebe42f7fd6f28dd7ac74c6cba881f7101b2f0" 2695 | integrity sha512-M8xVnCNv+q2T2WXVzxDECvL2695Uv2uUj2O0utxsld/HRyJvOU8W9f1gvsYxSNU4wmIe0/L/ItnpU4iKq0emDA== 2696 | dependencies: 2697 | methods "^1.1.2" 2698 | superagent "^8.0.0" 2699 | 2700 | supports-color@^5.3.0: 2701 | version "5.5.0" 2702 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 2703 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 2704 | dependencies: 2705 | has-flag "^3.0.0" 2706 | 2707 | supports-color@^7.0.0, supports-color@^7.1.0: 2708 | version "7.2.0" 2709 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 2710 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 2711 | dependencies: 2712 | has-flag "^4.0.0" 2713 | 2714 | supports-color@^8.0.0: 2715 | version "8.1.1" 2716 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" 2717 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== 2718 | dependencies: 2719 | has-flag "^4.0.0" 2720 | 2721 | supports-hyperlinks@^2.0.0: 2722 | version "2.2.0" 2723 | resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" 2724 | integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== 2725 | dependencies: 2726 | has-flag "^4.0.0" 2727 | supports-color "^7.0.0" 2728 | 2729 | supports-preserve-symlinks-flag@^1.0.0: 2730 | version "1.0.0" 2731 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" 2732 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 2733 | 2734 | terminal-link@^2.0.0: 2735 | version "2.1.1" 2736 | resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" 2737 | integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== 2738 | dependencies: 2739 | ansi-escapes "^4.2.1" 2740 | supports-hyperlinks "^2.0.0" 2741 | 2742 | test-exclude@^6.0.0: 2743 | version "6.0.0" 2744 | resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" 2745 | integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== 2746 | dependencies: 2747 | "@istanbuljs/schema" "^0.1.2" 2748 | glob "^7.1.4" 2749 | minimatch "^3.0.4" 2750 | 2751 | tmpl@1.0.5: 2752 | version "1.0.5" 2753 | resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" 2754 | integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== 2755 | 2756 | to-fast-properties@^2.0.0: 2757 | version "2.0.0" 2758 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 2759 | integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== 2760 | 2761 | to-regex-range@^5.0.1: 2762 | version "5.0.1" 2763 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 2764 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 2765 | dependencies: 2766 | is-number "^7.0.0" 2767 | 2768 | toidentifier@1.0.0: 2769 | version "1.0.0" 2770 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" 2771 | integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== 2772 | 2773 | tr46@~0.0.3: 2774 | version "0.0.3" 2775 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" 2776 | integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== 2777 | 2778 | ts-jest@^28.0.7: 2779 | version "28.0.7" 2780 | resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-28.0.7.tgz#e18757a9e44693da9980a79127e5df5a98b37ac6" 2781 | integrity sha512-wWXCSmTwBVmdvWrOpYhal79bDpioDy4rTT+0vyUnE3ZzM7LOAAGG9NXwzkEL/a516rQEgnMmS/WKP9jBPCVJyA== 2782 | dependencies: 2783 | bs-logger "0.x" 2784 | fast-json-stable-stringify "2.x" 2785 | jest-util "^28.0.0" 2786 | json5 "^2.2.1" 2787 | lodash.memoize "4.x" 2788 | make-error "1.x" 2789 | semver "7.x" 2790 | yargs-parser "^21.0.1" 2791 | 2792 | ts-node@^9.0.0: 2793 | version "9.0.0" 2794 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-9.0.0.tgz#e7699d2a110cc8c0d3b831715e417688683460b3" 2795 | integrity sha512-/TqB4SnererCDR/vb4S/QvSZvzQMJN8daAslg7MeaiHvD8rDZsSfXmNeNumyZZzMned72Xoq/isQljYSt8Ynfg== 2796 | dependencies: 2797 | arg "^4.1.0" 2798 | diff "^4.0.1" 2799 | make-error "^1.1.1" 2800 | source-map-support "^0.5.17" 2801 | yn "3.1.1" 2802 | 2803 | type-detect@4.0.8: 2804 | version "4.0.8" 2805 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" 2806 | integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== 2807 | 2808 | type-fest@^0.21.3: 2809 | version "0.21.3" 2810 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" 2811 | integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== 2812 | 2813 | type-is@~1.6.17, type-is@~1.6.18: 2814 | version "1.6.18" 2815 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" 2816 | integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== 2817 | dependencies: 2818 | media-typer "0.3.0" 2819 | mime-types "~2.1.24" 2820 | 2821 | typescript@^4.7.4: 2822 | version "4.7.4" 2823 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" 2824 | integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== 2825 | 2826 | universal-user-agent@^6.0.0: 2827 | version "6.0.0" 2828 | resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" 2829 | integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== 2830 | 2831 | unpipe@1.0.0, unpipe@~1.0.0: 2832 | version "1.0.0" 2833 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 2834 | integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= 2835 | 2836 | update-browserslist-db@^1.0.5: 2837 | version "1.0.5" 2838 | resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz#be06a5eedd62f107b7c19eb5bcefb194411abf38" 2839 | integrity sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q== 2840 | dependencies: 2841 | escalade "^3.1.1" 2842 | picocolors "^1.0.0" 2843 | 2844 | util-deprecate@^1.0.1: 2845 | version "1.0.2" 2846 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 2847 | integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== 2848 | 2849 | utils-merge@1.0.1: 2850 | version "1.0.1" 2851 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" 2852 | integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= 2853 | 2854 | v8-to-istanbul@^9.0.1: 2855 | version "9.0.1" 2856 | resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz#b6f994b0b5d4ef255e17a0d17dc444a9f5132fa4" 2857 | integrity sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w== 2858 | dependencies: 2859 | "@jridgewell/trace-mapping" "^0.3.12" 2860 | "@types/istanbul-lib-coverage" "^2.0.1" 2861 | convert-source-map "^1.6.0" 2862 | 2863 | vary@~1.1.2: 2864 | version "1.1.2" 2865 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 2866 | integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= 2867 | 2868 | walker@^1.0.8: 2869 | version "1.0.8" 2870 | resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" 2871 | integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== 2872 | dependencies: 2873 | makeerror "1.0.12" 2874 | 2875 | webidl-conversions@^3.0.0: 2876 | version "3.0.1" 2877 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" 2878 | integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== 2879 | 2880 | whatwg-url@^5.0.0: 2881 | version "5.0.0" 2882 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" 2883 | integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== 2884 | dependencies: 2885 | tr46 "~0.0.3" 2886 | webidl-conversions "^3.0.0" 2887 | 2888 | which@^2.0.1: 2889 | version "2.0.2" 2890 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 2891 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 2892 | dependencies: 2893 | isexe "^2.0.0" 2894 | 2895 | wrap-ansi@^7.0.0: 2896 | version "7.0.0" 2897 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 2898 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 2899 | dependencies: 2900 | ansi-styles "^4.0.0" 2901 | string-width "^4.1.0" 2902 | strip-ansi "^6.0.0" 2903 | 2904 | wrappy@1: 2905 | version "1.0.2" 2906 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2907 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 2908 | 2909 | write-file-atomic@^4.0.1: 2910 | version "4.0.1" 2911 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.1.tgz#9faa33a964c1c85ff6f849b80b42a88c2c537c8f" 2912 | integrity sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ== 2913 | dependencies: 2914 | imurmurhash "^0.1.4" 2915 | signal-exit "^3.0.7" 2916 | 2917 | y18n@^5.0.5: 2918 | version "5.0.8" 2919 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" 2920 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== 2921 | 2922 | yallist@^4.0.0: 2923 | version "4.0.0" 2924 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 2925 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 2926 | 2927 | yargs-parser@^21.0.0, yargs-parser@^21.0.1: 2928 | version "21.1.1" 2929 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" 2930 | integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== 2931 | 2932 | yargs@^17.3.1: 2933 | version "17.5.1" 2934 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e" 2935 | integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA== 2936 | dependencies: 2937 | cliui "^7.0.2" 2938 | escalade "^3.1.1" 2939 | get-caller-file "^2.0.5" 2940 | require-directory "^2.1.1" 2941 | string-width "^4.2.3" 2942 | y18n "^5.0.5" 2943 | yargs-parser "^21.0.0" 2944 | 2945 | yn@3.1.1: 2946 | version "3.1.1" 2947 | resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" 2948 | integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== 2949 | 2950 | yocto-queue@^0.1.0: 2951 | version "0.1.0" 2952 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 2953 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 2954 | -------------------------------------------------------------------------------- /frontend/.gitignore: -------------------------------------------------------------------------------- 1 | .build 2 | build 3 | web_modules 4 | node_modules 5 | .env -------------------------------------------------------------------------------- /frontend/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "trailingComma": "all" 4 | } 5 | -------------------------------------------------------------------------------- /frontend/README.md: -------------------------------------------------------------------------------- 1 | # Frontend 2 | 3 | ## Getting Started 4 | Install dependencies: 5 | ``` 6 | > yarn 7 | ``` 8 | Start up development server: 9 | ``` 10 | > yarn start 11 | ``` 12 | 13 | If backend data is needed, run the server in `../backend`. 14 | 15 | ## Other scripts 16 | See `package.json` for other scripts. -------------------------------------------------------------------------------- /frontend/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | ...require("@snowpack/app-scripts-react/jest.config.js")(), 3 | }; 4 | -------------------------------------------------------------------------------- /frontend/jest.setup.js: -------------------------------------------------------------------------------- 1 | // jest-dom adds custom jest matchers for asserting on DOM nodes. 2 | // allows you to do things like: 3 | // expect(element).toHaveTextContent(/react/i) 4 | // learn more: https://github.com/testing-library/jest-dom 5 | import "@testing-library/jest-dom/extend-expect"; 6 | -------------------------------------------------------------------------------- /frontend/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "scripts": { 3 | "build:css": "postcss src/App.tailwind.css -o src/App.css", 4 | "watch:css": "postcss src/App.tailwind.css -o src/App.css -w", 5 | "start": "concurrently 'yarn watch:css' 'react-scripts start'", 6 | "prebuild": "NODE_ENV=production yarn build:css", 7 | "build": "react-scripts build", 8 | "test": "react-scripts test", 9 | "eject": "react-scripts eject", 10 | "format": "prettier --write \"src/**/*.{js,jsx,ts,tsx}\"", 11 | "lint": "prettier --check \"src/**/*.{js,jsx,ts,tsx}\"" 12 | }, 13 | "proxy": "http://localhost:3001", 14 | "homepage": "python-packaging", 15 | "eslintConfig": { 16 | "extends": "react-app" 17 | }, 18 | "browserslist": { 19 | "production": [ 20 | ">0.2%", 21 | "not dead", 22 | "not op_mini all" 23 | ], 24 | "development": [ 25 | "last 1 chrome version", 26 | "last 1 firefox version", 27 | "last 1 safari version" 28 | ] 29 | }, 30 | "dependencies": { 31 | "@types/luxon": "^1.24.4", 32 | "dotenv": "^8.2.0", 33 | "luxon": "^1.25.0", 34 | "react": "^16.13.1", 35 | "react-dom": "^16.13.1", 36 | "react-table": "^7.5.0", 37 | "recoil": "^0.0.10", 38 | "tailwindcss": "^1.8.3" 39 | }, 40 | "devDependencies": { 41 | "@fullhuman/postcss-purgecss": "^2.3.0", 42 | "@tailwindcss/typography": "^0.5.2", 43 | "@testing-library/jest-dom": "^4.2.4", 44 | "@testing-library/react": "^9.3.2", 45 | "@testing-library/user-event": "^7.1.2", 46 | "@types/jest": "^24.0.0", 47 | "@types/node": "^12.0.0", 48 | "@types/react": "^16.9.0", 49 | "@types/react-dom": "^16.9.0", 50 | "@types/react-table": "^7.0.22", 51 | "concurrently": "^5.3.0", 52 | "jest": "24.9.0", 53 | "postcss-cli": "^7.1.2", 54 | "prettier": "^2.7.1", 55 | "react-scripts": "3.4.3", 56 | "typescript": "^3.9.7" 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /frontend/postcss.config.js: -------------------------------------------------------------------------------- 1 | const purgecss = require('@fullhuman/postcss-purgecss')({ 2 | // Specify the paths to all of the template files in your project 3 | content: ['./src/**/*.tsx', './public/index.html'], 4 | 5 | // Include any special characters you're using in this regular expression 6 | defaultExtractor: (content) => content.match(/[A-Za-z0-9-_:/]+/g) || [], 7 | }); 8 | module.exports = { 9 | plugins: [ 10 | require('tailwindcss'), 11 | require('autoprefixer'), 12 | ...(process.env.NODE_ENV === 'production' ? [purgecss] : []), 13 | ], 14 | }; 15 | -------------------------------------------------------------------------------- /frontend/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs01/python-packaging-tools/b2559963c78ecde2f3fd1aed2c1a44534aabb0fd/frontend/public/favicon.ico -------------------------------------------------------------------------------- /frontend/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 13 | 14 | 15 | 19 | 20 | 29 | The Big List of Python Packaging and Distribution Tools 30 | 31 | 35 | 44 | 45 | 46 | 47 |
48 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /frontend/public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs01/python-packaging-tools/b2559963c78ecde2f3fd1aed2c1a44534aabb0fd/frontend/public/logo192.png -------------------------------------------------------------------------------- /frontend/public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs01/python-packaging-tools/b2559963c78ecde2f3fd1aed2c1a44534aabb0fd/frontend/public/logo512.png -------------------------------------------------------------------------------- /frontend/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "start_url": ".", 5 | "display": "standalone", 6 | "theme_color": "#000000", 7 | "background_color": "#ffffff" 8 | } 9 | -------------------------------------------------------------------------------- /frontend/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /frontend/src/App.tailwind.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | @layer base { 6 | a { 7 | @apply underline; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /frontend/src/App.test.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { render } from '@testing-library/react'; 3 | import App from './App'; 4 | 5 | test('renders learn react link', () => { 6 | const { getByText } = render(); 7 | const linkElement = getByText(/learn react/i); 8 | expect(linkElement).toBeInTheDocument(); 9 | }); 10 | -------------------------------------------------------------------------------- /frontend/src/App.tsx: -------------------------------------------------------------------------------- 1 | import React, { useEffect, useMemo, useState } from 'react'; 2 | import './App.css'; 3 | import { 4 | columns, 5 | toolDataToTableData, 6 | Table, 7 | fetchGithubData, 8 | recoilFilters, 9 | FeatureFilter, 10 | } from './Tools'; 11 | import { features, Feature } from './Types'; 12 | import { initialToolData } from './initialToolData'; 13 | import { RecoilRoot, useRecoilValue } from 'recoil'; 14 | 15 | function FeatureFilters() { 16 | return ( 17 |
18 | {features.map((feature: Feature, i) => ( 19 | 20 | ))} 21 |
22 | ); 23 | } 24 | const githubLogo = ( 25 | 26 | 31 | 32 | ); 33 | function FeaturesAndTable() { 34 | const [toolData, setToolData] = useState(initialToolData); 35 | useEffect(() => { 36 | async function _fetchGithubData() { 37 | setToolData(await fetchGithubData()); 38 | } 39 | try { 40 | _fetchGithubData(); 41 | } catch (e) { 42 | console.warn(e); 43 | } 44 | }, []); 45 | 46 | const featureFilters = useRecoilValue(recoilFilters); 47 | const tableData = useMemo( 48 | () => toolDataToTableData(toolData, featureFilters), 49 | [toolData, featureFilters], 50 | ); 51 | const isFiltered = tableData.length !== toolData.length; 52 | const displayingToolSummary = ( 53 |
54 | Displaying {tableData.length} of {toolData.length} tools 55 |
56 | ); 57 | return ( 58 | <> 59 | 60 | {displayingToolSummary} 61 | 62 | {displayingToolSummary} 63 | 64 | ); 65 | } 66 | 67 | function App() { 68 | return ( 69 | 70 |
71 | 98 |
99 | 100 |
101 |
102 |
Missing something?
103 | 108 |
109 | 114 |
115 |
116 | ); 117 | } 118 | 119 | export default App; 120 | -------------------------------------------------------------------------------- /frontend/src/Tools.tsx: -------------------------------------------------------------------------------- 1 | import { GithubGraphqlShape, Tool, Feature } from './Types'; 2 | import React from 'react'; 3 | import { useTable, useSortBy, useFlexLayout } from 'react-table'; 4 | import { DateTime } from 'luxon'; 5 | import { atom, useRecoilState } from 'recoil'; 6 | import { initialToolData } from './initialToolData'; 7 | 8 | const downArrow = ( 9 | 16 | 22 | 23 | ); 24 | 25 | const upArrow = ( 26 | 33 | 39 | 40 | ); 41 | 42 | export const columns = [ 43 | { 44 | Header: 'Name', 45 | accessor: 'name', 46 | // width: 400, 47 | }, 48 | { 49 | Header: 'Features', 50 | accessor: 'featureLinks', 51 | minWidth: 300, 52 | }, 53 | { 54 | Header: 'Description', 55 | accessor: 'toolDescription', 56 | minWidth: 400, 57 | // width: 100, 58 | }, 59 | // { 60 | // Header: 'Use Cases', 61 | // accessor: 'useCases', 62 | // }, 63 | // { 64 | // Header: 'Last Updated', 65 | // accessor: 'timeSinceUpdated', 66 | // }, 67 | { 68 | Header: 'Depends On', 69 | accessor: 'dependsOn', 70 | }, 71 | { 72 | Header: 'Language', 73 | accessor: 'primaryLanguage.name', 74 | }, 75 | { 76 | Header: 'Created', 77 | accessor: 'timeSinceCreated', 78 | }, 79 | { 80 | Header: 'Owner', 81 | accessor: 'owner', 82 | }, 83 | { 84 | Header: 'Stars', 85 | accessor: 'stargazers.totalCount', 86 | }, 87 | { 88 | Header: 'License', 89 | accessor: 'licenseInfo.name', 90 | }, 91 | { 92 | Header: 'Links', 93 | accessor: 'urls', 94 | minWidth: 300, 95 | }, 96 | { 97 | Header: 'GitHub Description', 98 | accessor: 'description', 99 | minWidth: 400, 100 | }, 101 | { 102 | Header: 'Last GitHub Release', 103 | accessor: 'latestRelease.publishedAt', 104 | }, 105 | ]; 106 | 107 | export function Table({ columns, data }: any) { 108 | // Use the state and functions returned from useTable to build your UI 109 | const { getTableProps, getTableBodyProps, headerGroups, rows, prepareRow } = 110 | useTable( 111 | { 112 | columns, 113 | data, 114 | }, 115 | useSortBy, 116 | useFlexLayout, 117 | ); 118 | 119 | // Render the UI for your table 120 | return ( 121 |
126 | 127 | {headerGroups.map((headerGroup) => ( 128 | 129 | {headerGroup.headers.map((column: any) => ( 130 | 143 | ))} 144 | 145 | ))} 146 | 147 | 148 | {rows.map((row, i) => { 149 | prepareRow(row); 150 | return ( 151 | 155 | {row.cells.map((cell) => { 156 | return ( 157 | 164 | ); 165 | })} 166 | 167 | ); 168 | })} 169 | 170 |
134 | {column.render('Header')} 135 | 136 | {column.isSorted 137 | ? column.isSortedDesc 138 | ? downArrow 139 | : upArrow 140 | : ''} 141 | 142 |
162 | {cell.render('Cell')} 163 |
171 | ); 172 | } 173 | 174 | export const recoilFilters = atom({ 175 | key: 'recoilFilters', // unique ID (with respect to other atoms/selectors) 176 | default: [], // default value (aka initial value) 177 | }); 178 | 179 | export function FeatureFilter(props: { feature: Feature }) { 180 | const [filters, setFilters] = useRecoilState(recoilFilters); 181 | const filterIsOn = filters.indexOf(props.feature) !== -1; 182 | return ( 183 | 198 | ); 199 | } 200 | 201 | export function toolDataToTableData( 202 | toolData: Array, 203 | featuresToFilter: Array, 204 | ) { 205 | return toolData 206 | .map((data: Tool) => ({ 207 | ...data, 208 | stargazers: data.stargazers?.totalCount 209 | ? { totalCount: `⭐ ${data.stargazers.totalCount.toLocaleString()}` } 210 | : null, 211 | name: ( 212 |
213 | {data.url ? {data.name} : data.name} 214 |
215 | ), 216 | featureLinks: data.features 217 | .sort() 218 | .map((feature, i) => ), 219 | description:
{data.description}
, 220 | toolDescription:
{data.toolDescription}
, 221 | dependsOn: data.dependsOn.sort().join(', '), 222 | useCases: data.useCases.join(', '), 223 | latestRelease: data.latestRelease 224 | ? { 225 | publishedAt: DateTime.fromISO( 226 | data.latestRelease.publishedAt, 227 | ).toFormat('MMMM dd, y'), 228 | } 229 | : '', 230 | timeSinceCreated: data.createdAt 231 | ? DateTime.fromISO(data.createdAt).toFormat('MMMM, y') 232 | : '', 233 | 234 | timeSinceUpdated: data.pushedAt 235 | ? DateTime.fromISO(data.pushedAt).toLocaleString() 236 | : '', 237 | urls: [data.url, data.homepageUrl] 238 | .filter((url) => url) 239 | .map((url, i) => { 240 | return ( 241 | 246 | ); 247 | }), 248 | })) 249 | .filter((data) => { 250 | if (featuresToFilter.length) { 251 | return featuresToFilter.every((f: Feature) => 252 | data.features.includes(f), 253 | ); 254 | } else { 255 | return true; 256 | } 257 | }); 258 | } 259 | 260 | function mergeGithubDataWithLocalData( 261 | allGithubData: GithubGraphqlShape[], 262 | ): Tool[] { 263 | return initialToolData.map((tool) => { 264 | const githubDataForTool: GithubGraphqlShape | void = allGithubData.find( 265 | (d) => d.name?.toLocaleLowerCase() === tool.name.toLocaleLowerCase(), 266 | ); 267 | if (githubDataForTool) { 268 | return { ...tool, ...githubDataForTool }; 269 | } else { 270 | console.warn(`No github data found for ${tool.name}`); 271 | return tool; 272 | } 273 | }); 274 | } 275 | 276 | export async function fetchGithubData(): Promise { 277 | const response = await fetch('package_data'); 278 | if (!response.ok) { 279 | console.warn('GitHub data unavailable'); 280 | return initialToolData; 281 | } 282 | 283 | const allGithubData: GithubGraphqlShape[] = await response.json(); 284 | return mergeGithubDataWithLocalData(allGithubData); 285 | } 286 | -------------------------------------------------------------------------------- /frontend/src/Types.ts: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | export type GithubGraphqlShape = { 4 | stargazers?: { 5 | totalCount: number; 6 | }; 7 | pushedAt?: string; 8 | createdAt?: string; 9 | description?: string; 10 | name?: string; 11 | issues?: { 12 | totalCount: number; 13 | }; 14 | licenseInfo?: { 15 | name: string; 16 | }; 17 | primaryLanguage?: { 18 | name: string; 19 | }; 20 | owner?: string; 21 | url?: string; 22 | homepageUrl?: string; 23 | latestRelease?: { 24 | publishedAt: string; 25 | }; 26 | }; 27 | 28 | export type Tool = { 29 | name: string; 30 | features: Feature[]; 31 | toolDescription: string | React.ReactElement; 32 | dependsOn: string[]; 33 | useCases: string[]; 34 | } & GithubGraphqlShape; 35 | 36 | export type Feature = 37 | | 'application deployment' 38 | | 'build packages' 39 | | 'builds executable' 40 | | 'convert between lockfile formats' 41 | | 'core utilities' 42 | | 'dependency resolver' 43 | | 'ecosystem' 44 | | 'install cli apps' 45 | | 'install libraries' 46 | | 'install Python interpreter' 47 | | 'language bindings' 48 | | 'manual virtual environment creation' 49 | | 'package manager' 50 | | 'PEP-425' 51 | | 'PEP-440' 52 | | 'PEP-517' 53 | | 'PEP-518' 54 | | 'PEP-582' 55 | | 'PEP-660' 56 | | 'publish packages' 57 | | 'security' 58 | | 'standard library' 59 | | 'task automation' 60 | | 'virtual environment management'; 61 | 62 | // TODO find out how to programmatically link this to the type 63 | // @ts-ignore 64 | export const features: Feature[] = [ 65 | 'publish packages', 66 | 'build packages', 67 | 'application deployment', 68 | 'task automation', 69 | 'install cli apps', 70 | 'install libraries', 71 | 'install Python interpreter', 72 | 'standard library', 73 | 'dependency resolver', 74 | 'manual virtual environment creation', 75 | 'virtual environment management', 76 | 'package manager', 77 | 'convert between lockfile formats', 78 | 'ecosystem', 79 | 'PEP-517', 80 | 'PEP-518', 81 | ].sort(); 82 | -------------------------------------------------------------------------------- /frontend/src/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", 4 | "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", 5 | sans-serif; 6 | -webkit-font-smoothing: antialiased; 7 | -moz-osx-font-smoothing: grayscale; 8 | } 9 | 10 | code { 11 | font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New", 12 | monospace; 13 | } 14 | 15 | -------------------------------------------------------------------------------- /frontend/src/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import './index.css'; 4 | import App from './App'; 5 | import * as serviceWorker from './serviceWorker'; 6 | 7 | ReactDOM.render( 8 | 9 | 10 | , 11 | document.getElementById('root'), 12 | ); 13 | 14 | // If you want your app to work offline and load faster, you can change 15 | // unregister() to register() below. Note this comes with some pitfalls. 16 | // Learn more about service workers: https://bit.ly/CRA-PWA 17 | serviceWorker.unregister(); 18 | -------------------------------------------------------------------------------- /frontend/src/initialToolData.tsx: -------------------------------------------------------------------------------- 1 | import { Tool } from './Types'; 2 | import React from 'react'; 3 | 4 | const zipAppDescription = 5 | 'Makes "python executables", which are files that can be run directly, but require a python interpreter available on the system. This is part of a group of tools that utilize the zipapp feature of the standard library.'; 6 | 7 | const _initialToolData: Tool[] = [ 8 | { 9 | features: ['install cli apps', 'install libraries', 'dependency resolver'], 10 | name: 'pip', 11 | useCases: ['Install libraries', 'Install CLI tools'], 12 | dependsOn: [], 13 | toolDescription: 14 | 'pip is the package installer for Python. You can use pip to install packages from the Python Package Index (PyPI) and other indexes.', 15 | }, 16 | { 17 | features: ['install cli apps', 'virtual environment management'], 18 | name: 'pipx', 19 | toolDescription: ( 20 |
21 | pipx runs and installs cli tools in virtual environments. It focuses on 22 | and improves on a specific use case handled by pip. 23 |
24 | ), 25 | useCases: ['Install cli tools to isolated environment'], 26 | dependsOn: ['pip', 'venv'], 27 | }, 28 | { 29 | features: ['build packages', 'publish packages', 'PEP-517', 'PEP-518'], 30 | name: 'flit', 31 | toolDescription: 32 | 'Flit is a simple way to put pure Python packages and modules on PyPI.', 33 | useCases: [], 34 | dependsOn: ['pip', 'venv'], 35 | }, 36 | { 37 | features: ['package manager', 'ecosystem'], 38 | name: 'conda', 39 | toolDescription: 40 | 'Conda is a cross-platform, language-agnostic binary package manager. It is the package manager used by Anaconda installations, but it may be used for other systems as well. Conda makes environments first-class citizens, making it easy to create independent environments even for C libraries.', 41 | useCases: [], 42 | dependsOn: [], 43 | }, 44 | { 45 | features: [ 46 | 'build packages', 47 | 'PEP-517', 48 | 'PEP-582', 49 | 'dependency resolver', 50 | 'install cli apps', 51 | ], 52 | name: 'pdm', 53 | toolDescription: ( 54 |
55 | Helps you declare, manage, and install dependencies of Python projects. 56 | It does not use virtual environments at all. Instead it installs 57 | packages to a local directory called __pypackages__{' '} 58 | (PEP-582). 59 |
60 | ), 61 | useCases: [], 62 | dependsOn: [], 63 | }, 64 | { 65 | features: [ 66 | 'virtual environment management', 67 | 'build packages', 68 | 'publish packages', 69 | 'dependency resolver', 70 | 'PEP-517', 71 | 'PEP-582', 72 | ], 73 | name: 'pyflow', 74 | toolDescription: ( 75 |
76 | Pyflow streamlines working with Python projects and files. "Its an 77 | easy-to-use CLI app with a minimalist API. " Never worry about having 78 | the right version of Python or dependencies. Instead of using virtual 79 | environments, it installs packages to a local directory named 80 | __pypackages__ (PEP-582), 81 |
82 | ), 83 | useCases: [], 84 | dependsOn: [], 85 | }, 86 | { 87 | features: ['dependency resolver'], 88 | name: 'pip-tools', 89 | toolDescription: 90 | 'pip-tools takes abstract dependencies and outputs concrete dependencies to a lock file.', 91 | useCases: ['Separate abstract dependencies from fully resolved lock file'], 92 | dependsOn: ['pip'], 93 | }, 94 | { 95 | features: [ 96 | 'publish packages', 97 | 'build packages', 98 | 'dependency resolver', 99 | 'application deployment', 100 | 'task automation', 101 | 'virtual environment management', 102 | ], 103 | toolDescription: `Poetry helps you declare, manage and install dependencies of Python projects. It also can publish packages to PyPI.`, 104 | useCases: [], 105 | dependsOn: ['pip', 'virtualenv'], 106 | name: 'poetry', 107 | }, 108 | { 109 | features: [ 110 | 'publish packages', 111 | 'build packages', 112 | 'application deployment', 113 | 'task automation', 114 | 'virtual environment management', 115 | ], 116 | toolDescription: `Hatch is a tool for managing the entire lifecycle of a project including creation, versioning, building, environment management, and publishing. Its plugin system allows for easily extending functionality.`, 117 | useCases: [], 118 | dependsOn: ['pip', 'virtualenv'], 119 | name: 'hatch', 120 | }, 121 | { 122 | features: [ 123 | 'virtual environment management', 124 | 'dependency resolver', 125 | 'task automation', 126 | 'application deployment', 127 | ], 128 | name: 'pipenv', 129 | toolDescription: 130 | 'pipenv automatically creates and manages a virtualenv for your projects, as well as adds/removes packages from a Pipfile as you install/uninstall packages. It also generates Pipfile.lock, which is used to produce deterministic builds.', 131 | useCases: [], 132 | dependsOn: ['pip', 'virtualenv', 'venv'], 133 | }, 134 | { 135 | features: ['PEP-517', 'PEP-660', 'build packages'], 136 | name: 'build', 137 | toolDescription: 138 | 'build will invoke the PEP 517 hooks to build a distribution package. ' + 139 | 'It is a simple build tool and does not perform any dependency management.', 140 | useCases: [], 141 | dependsOn: [], 142 | }, 143 | { 144 | features: ['PEP-517', 'build packages', 'core utilities'], 145 | name: 'pep517', 146 | toolDescription: 147 | 'Given source code and a build backend (as specified by PEP-518), ' + 148 | '`pep517` provides access to various backend "hooks" such as building a binary distribution. ' + 149 | 'You are responsible for ensuring build requirements are available.', 150 | useCases: [], 151 | dependsOn: [], 152 | }, 153 | { 154 | features: [ 155 | 'virtual environment management', 156 | 'application deployment', 157 | 'task automation', 158 | ], 159 | name: 'tox', 160 | toolDescription: 161 | 'Command line driven CI frontend and development task automation tool', 162 | useCases: [], 163 | createdAt: '2010-09-13T00:00:00Z', 164 | dependsOn: ['pip', 'virtualenv', 'venv'], 165 | }, 166 | { 167 | features: [ 168 | 'virtual environment management', 169 | 'application deployment', 170 | 'task automation', 171 | ], 172 | name: 'nox', 173 | toolDescription: 174 | 'nox is a command-line tool that automates task running, application deployment, and testing in multiple Python environments, similar to tox. Unlike tox, Nox uses a standard Python file for configuration.', 175 | useCases: [], 176 | dependsOn: ['pip', 'virtualenv', 'venv'], 177 | }, 178 | { 179 | features: ['manual virtual environment creation'], 180 | name: 'virtualenv', 181 | toolDescription: 182 | 'A tool for creating isolated virtual Python environments. This is a predecessor of the Python 3.5+ standard library venv module, with improvements such as vastly faster virtualenv creation added in subsequent versions.', 183 | useCases: [], 184 | dependsOn: [], 185 | }, 186 | { 187 | features: ['install Python interpreter'], 188 | name: 'pyenv', 189 | toolDescription: 190 | 'pyenv lets you switch between multiple versions of Python on your machine', 191 | useCases: [], 192 | dependsOn: [], 193 | }, 194 | { 195 | features: ['publish packages'], 196 | name: 'twine', 197 | toolDescription: 198 | 'Twine is a utility for publishing Python packages on PyPI. Twine only publishes built packages; it does not build them itself.', 199 | useCases: [], 200 | dependsOn: [], 201 | }, 202 | { 203 | features: ['build packages'], 204 | toolDescription: 205 | "Setuptools is a fully-featured, actively-maintained, and stable library to build redistributable packages from source, but does not publish them to PyPI. It provides the function that is called in the setup.py files you've probably seen before.", 206 | useCases: [], 207 | dependsOn: [], 208 | name: 'setuptools', 209 | }, 210 | { 211 | name: 'pex', 212 | features: ['builds executable'], 213 | toolDescription: zipAppDescription, 214 | useCases: [], 215 | dependsOn: ['zipapp'], 216 | }, 217 | { 218 | name: 'zipapp', 219 | features: ['builds executable', 'standard library'], 220 | toolDescription: zipAppDescription, 221 | useCases: [], 222 | dependsOn: [], 223 | }, 224 | { 225 | name: 'shiv', 226 | features: ['builds executable'], 227 | toolDescription: zipAppDescription, 228 | useCases: [], 229 | dependsOn: [], 230 | }, 231 | { 232 | name: 'PyOxidizer', 233 | features: ['builds executable'], 234 | toolDescription: 235 | 'PyOxidizer is a [Rust] application for streamlining the creation of distributable Python applications. ' + 236 | 'Binaries produced with PyOxidizer are portable. PyOxidizer generate binaries embedding a Python interpreter and a custom Python application. ', 237 | useCases: [], 238 | dependsOn: [], 239 | }, 240 | { 241 | name: 'pyinstaller', 242 | features: ['builds executable'], 243 | toolDescription: 244 | 'PyInstaller bundles a Python application and all its dependencies into a single package. ' + 245 | 'The user can run the packaged app without installing a Python interpreter or any modules. ' + 246 | 'PyInstaller supports Python 3.7 and newer, and correctly bundles many major Python packages ' + 247 | 'such as numpy, matplotlib, PyQt, wxPython, and others.', 248 | useCases: [], 249 | dependsOn: [], 250 | }, 251 | { 252 | name: 'xar', 253 | features: ['builds executable'], 254 | toolDescription: 255 | 'Similar to a zipapp, but contents do not have to be extracted to run. ' + 256 | 'A .xar file is a read-only file system image which looks like a regular directory to user-space programs. ' + 257 | 'This can replace virtualenvs and PEX files with a system that is faster, has less overhead, ' + 258 | 'is more compatible, and achieves better compression. This requires a one-time installation of a ' + 259 | 'driver for this file system (SquashFS).', 260 | useCases: [], 261 | dependsOn: ['FUSE filesystem', 'linux/mac'], 262 | }, 263 | { 264 | name: 'venv', 265 | features: ['manual virtual environment creation', 'standard library'], 266 | toolDescription: 267 | "The venv module provides support for creating lightweight “virtual environments” with their own site directories, optionally isolated from system site directories. Each virtual environment has its own Python binary (which matches the version of the binary that was used to create this environment) and can have its own independent set of installed Python packages in its site directories. venv was introduced in Python 3.5 to adopt the 3rd party library virtualenv into CPython's standard library.", 268 | useCases: [], 269 | dependsOn: [], 270 | createdAt: '2015-09-13T00:00:00Z', 271 | primaryLanguage: { name: 'Python' }, 272 | url: 'https://docs.python.org/3/library/venv.html', 273 | owner: 'CPython', 274 | }, 275 | { 276 | name: 'Nuitka', 277 | features: ['builds executable'], 278 | toolDescription: 279 | 'Nuitka can compile Python programs to single executables. ' + 280 | 'And the emphasis is on compile: Nuitka actually converts Python ' + 281 | 'to C and compiles that. Nuitka is effectively an alternate Python interpreter.', 282 | useCases: [], 283 | dependsOn: [], 284 | }, 285 | { 286 | name: 'packaging', 287 | features: ['core utilities', 'PEP-440', 'PEP-425'], 288 | toolDescription: 289 | 'Reusable core utilities for various Python Packaging interoperability specifications. ' + 290 | 'This library provides utilities that implement the interoperability specifications which have clearly one correct behaviour ' + 291 | '(eg: PEP 440) or benefit greatly from having a single shared implementation (eg: PEP 425). ' + 292 | 'The packaging project includes the following: version handling, specifiers, markers, requirements, tags, utilities. ', 293 | useCases: [], 294 | dependsOn: [], 295 | }, 296 | { 297 | name: 'PyO3', 298 | features: ['language bindings'], 299 | toolDescription: 300 | 'Rust bindings for Python, including tools for creating native Python ' + 301 | 'extension modules. Running and interacting with Python code from a Rust binary is also supported.', 302 | useCases: [], 303 | dependsOn: [], 304 | }, 305 | { 306 | name: 'pybind11', 307 | features: ['language bindings'], 308 | toolDescription: 309 | 'pybind11 is a lightweight header-only library that exposes C++ types in ' + 310 | 'Python and vice versa, mainly to create Python bindings of existing C++ code.', 311 | useCases: [], 312 | dependsOn: [], 313 | }, 314 | { 315 | name: 'pyscript', 316 | features: ['language bindings'], 317 | toolDescription: 'A frontend framework to write Python apps in the browser', 318 | useCases: [], 319 | dependsOn: ['wasm', 'pyodide'], 320 | }, 321 | { 322 | name: 'cython', 323 | features: ['language bindings'], 324 | toolDescription: ( 325 |
326 | Cython generates C code from your Python code, then builds it into a 327 | shared object (.so file). These .so files are C extension modules, which 328 | can be imported by your Python code, where they run at the speed of a C 329 | program. For example, cythonize --build hello.py will build 330 | hello.so which can be imported directly in Python code 331 | elsewhere with import hello. 332 |
333 | ), 334 | useCases: [], 335 | dependsOn: [], 336 | }, 337 | { 338 | name: 'pyodide', 339 | features: ['language bindings'], 340 | toolDescription: ( 341 |
342 |

343 | Pyodide is a Python distribution for the browser and Node.js based on 344 | WebAssembly. Pyodide is a port of CPython to WebAssembly/Emscripten. 345 | Pyodide makes it possible to install and run Python packages in the 346 | browser with micropip. Any pure Python package with a wheel available 347 | on PyPi is supported. Many packages with C extensions have also been 348 | ported for use with Pyodide.{' '} 349 |

350 |

351 | You can try the{' '} 352 | REPL here. 353 |

354 |
355 | ), 356 | useCases: [], 357 | dependsOn: ['wasm'], 358 | }, 359 | { 360 | name: 'pip-audit', 361 | features: ['security', 'dependency resolver'], 362 | toolDescription: ( 363 |
364 |

365 | pip-audit is a tool for scanning Python environments for packages with 366 | known vulnerabilities. It uses the 367 | 368 | Python Packaging Advisory Database 369 | {' '} 370 | via the PyPI JSON API as a source of vulnerability reports. 371 |

372 |
373 | ), 374 | useCases: ['Audit Python packages for known vulnerabilities'], 375 | dependsOn: ['pip', 'venv'], 376 | }, 377 | { 378 | name: 'cibuildwheel', 379 | features: ['build packages'], 380 | toolDescription: ( 381 |
382 | On your CI server, cibuildwheel builds and tests your wheels across all 383 | of your platforms (macOS, linux, windows). Supports GitHub Actions, 384 | Azure Pipelines, Travis CI, AppVeyor, CircleCI, and GitLab CI. 385 |
386 | ), 387 | useCases: [], 388 | dependsOn: [], 389 | }, 390 | ]; 391 | _initialToolData.sort((a, b) => { 392 | return a.name.toLocaleLowerCase() < b.name.toLocaleLowerCase() ? -1 : 1; 393 | }); 394 | export const initialToolData = _initialToolData; 395 | -------------------------------------------------------------------------------- /frontend/src/react-app-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /frontend/src/serviceWorker.ts: -------------------------------------------------------------------------------- 1 | // This optional code is used to register a service worker. 2 | // register() is not called by default. 3 | 4 | // This lets the app load faster on subsequent visits in production, and gives 5 | // it offline capabilities. However, it also means that developers (and users) 6 | // will only see deployed updates on subsequent visits to a page, after all the 7 | // existing tabs open on the page have been closed, since previously cached 8 | // resources are updated in the background. 9 | 10 | // To learn more about the benefits of this model and instructions on how to 11 | // opt-in, read https://bit.ly/CRA-PWA 12 | 13 | const isLocalhost = Boolean( 14 | window.location.hostname === 'localhost' || 15 | // [::1] is the IPv6 localhost address. 16 | window.location.hostname === '[::1]' || 17 | // 127.0.0.0/8 are considered localhost for IPv4. 18 | window.location.hostname.match( 19 | /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/, 20 | ), 21 | ); 22 | 23 | type Config = { 24 | onSuccess?: (registration: ServiceWorkerRegistration) => void; 25 | onUpdate?: (registration: ServiceWorkerRegistration) => void; 26 | }; 27 | 28 | export function register(config?: Config) { 29 | if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { 30 | // The URL constructor is available in all browsers that support SW. 31 | const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href); 32 | if (publicUrl.origin !== window.location.origin) { 33 | // Our service worker won't work if PUBLIC_URL is on a different origin 34 | // from what our page is served on. This might happen if a CDN is used to 35 | // serve assets; see https://github.com/facebook/create-react-app/issues/2374 36 | return; 37 | } 38 | 39 | window.addEventListener('load', () => { 40 | const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`; 41 | 42 | if (isLocalhost) { 43 | // This is running on localhost. Let's check if a service worker still exists or not. 44 | checkValidServiceWorker(swUrl, config); 45 | 46 | // Add some additional logging to localhost, pointing developers to the 47 | // service worker/PWA documentation. 48 | navigator.serviceWorker.ready.then(() => { 49 | console.log( 50 | 'This web app is being served cache-first by a service ' + 51 | 'worker. To learn more, visit https://bit.ly/CRA-PWA', 52 | ); 53 | }); 54 | } else { 55 | // Is not localhost. Just register service worker 56 | registerValidSW(swUrl, config); 57 | } 58 | }); 59 | } 60 | } 61 | 62 | function registerValidSW(swUrl: string, config?: Config) { 63 | navigator.serviceWorker 64 | .register(swUrl) 65 | .then((registration) => { 66 | registration.onupdatefound = () => { 67 | const installingWorker = registration.installing; 68 | if (installingWorker == null) { 69 | return; 70 | } 71 | installingWorker.onstatechange = () => { 72 | if (installingWorker.state === 'installed') { 73 | if (navigator.serviceWorker.controller) { 74 | // At this point, the updated precached content has been fetched, 75 | // but the previous service worker will still serve the older 76 | // content until all client tabs are closed. 77 | console.log( 78 | 'New content is available and will be used when all ' + 79 | 'tabs for this page are closed. See https://bit.ly/CRA-PWA.', 80 | ); 81 | 82 | // Execute callback 83 | if (config && config.onUpdate) { 84 | config.onUpdate(registration); 85 | } 86 | } else { 87 | // At this point, everything has been precached. 88 | // It's the perfect time to display a 89 | // "Content is cached for offline use." message. 90 | console.log('Content is cached for offline use.'); 91 | 92 | // Execute callback 93 | if (config && config.onSuccess) { 94 | config.onSuccess(registration); 95 | } 96 | } 97 | } 98 | }; 99 | }; 100 | }) 101 | .catch((error) => { 102 | console.error('Error during service worker registration:', error); 103 | }); 104 | } 105 | 106 | function checkValidServiceWorker(swUrl: string, config?: Config) { 107 | // Check if the service worker can be found. If it can't reload the page. 108 | fetch(swUrl, { 109 | headers: { 'Service-Worker': 'script' }, 110 | }) 111 | .then((response) => { 112 | // Ensure service worker exists, and that we really are getting a JS file. 113 | const contentType = response.headers.get('content-type'); 114 | if ( 115 | response.status === 404 || 116 | (contentType != null && contentType.indexOf('javascript') === -1) 117 | ) { 118 | // No service worker found. Probably a different app. Reload the page. 119 | navigator.serviceWorker.ready.then((registration) => { 120 | registration.unregister().then(() => { 121 | window.location.reload(); 122 | }); 123 | }); 124 | } else { 125 | // Service worker found. Proceed as normal. 126 | registerValidSW(swUrl, config); 127 | } 128 | }) 129 | .catch(() => { 130 | console.log( 131 | 'No internet connection found. App is running in offline mode.', 132 | ); 133 | }); 134 | } 135 | 136 | export function unregister() { 137 | if ('serviceWorker' in navigator) { 138 | navigator.serviceWorker.ready 139 | .then((registration) => { 140 | registration.unregister(); 141 | }) 142 | .catch((error) => { 143 | console.error(error.message); 144 | }); 145 | } 146 | } 147 | -------------------------------------------------------------------------------- /frontend/tailwind.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | future: { 3 | removeDeprecatedGapUtilities: true, 4 | purgeLayersByDefault: true, 5 | }, 6 | theme: { 7 | extend:{} 8 | // {typography:{DEFAULT:{css:{code:{backgroundColor:'#000'}}}}} 9 | }, 10 | corePlugins: { outline: false }, 11 | purge: ['./src/**/*.tsx', './src/**/*.ts'], 12 | }; 13 | 14 | // module.exports = { 15 | // purge: ['./src/**/*.tsx', './src/**/*.ts'], 16 | // theme: { 17 | // colors: { 18 | // grey: { 19 | // 100: "#F5F7FA", 20 | // 1000: "#1F2933" 21 | // }, 22 | // }, 23 | // typography: theme => ({ 24 | // default: { 25 | // css: { 26 | // pre: { 27 | // color: theme("colors.grey.1000"), 28 | // backgroundColor: theme("colors.grey.100") 29 | // }, 30 | // "pre code::before": { 31 | // "padding-left": "unset" 32 | // }, 33 | // "pre code::after": { 34 | // "padding-right": "unset" 35 | // }, 36 | // code: { 37 | // backgroundColor: theme("colors.grey.100"), 38 | // color: "#DD1144", 39 | // fontWeight: "400", 40 | // "border-radius": "0.25rem" 41 | // }, 42 | // "code::before": { 43 | // content: '""', 44 | // "padding-left": "0.25rem" 45 | // }, 46 | // "code::after": { 47 | // content: '""', 48 | // "padding-right": "0.25rem" 49 | // } 50 | // } 51 | // } 52 | // }) 53 | // }, 54 | // variants: {},@tailwindcss/typography 55 | // plugins: [require("@tailwindcss/typography")], 56 | // future: { 57 | // removeDeprecatedGapUtilities: true, 58 | // purgeLayersByDefault: true, 59 | // }, 60 | // corePlugins: { outline: false }, 61 | // }; 62 | -------------------------------------------------------------------------------- /frontend/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "allowJs": true, 6 | "skipLibCheck": true, 7 | "esModuleInterop": true, 8 | "allowSyntheticDefaultImports": true, 9 | "strict": true, 10 | "forceConsistentCasingInFileNames": true, 11 | "module": "esnext", 12 | "moduleResolution": "node", 13 | "resolveJsonModule": true, 14 | "isolatedModules": true, 15 | "noEmit": true, 16 | "jsx": "react" 17 | }, 18 | "include": ["src"] 19 | } 20 | -------------------------------------------------------------------------------- /frontend/types/static.d.ts: -------------------------------------------------------------------------------- 1 | /* Use this file to declare any custom file extensions for importing */ 2 | /* Use this folder to also add/extend a package d.ts file, if needed. */ 3 | 4 | declare module '*.css'; 5 | declare module '*.svg' { 6 | const ref: string; 7 | export default ref; 8 | } 9 | declare module '*.bmp' { 10 | const ref: string; 11 | export default ref; 12 | } 13 | declare module '*.gif' { 14 | const ref: string; 15 | export default ref; 16 | } 17 | declare module '*.jpg' { 18 | const ref: string; 19 | export default ref; 20 | } 21 | declare module '*.jpeg' { 22 | const ref: string; 23 | export default ref; 24 | } 25 | declare module '*.png' { 26 | const ref: string; 27 | export default ref; 28 | } 29 | declare module '*.webp' { 30 | const ref: string; 31 | export default ref; 32 | } 33 | -------------------------------------------------------------------------------- /screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs01/python-packaging-tools/b2559963c78ecde2f3fd1aed2c1a44534aabb0fd/screenshot.png -------------------------------------------------------------------------------- /scripts/python-packaging-tools.service: -------------------------------------------------------------------------------- 1 | # https://www.freedesktop.org/software/systemd/man/systemd.service.html 2 | [Unit] 3 | Description= 4 | After=network.target 5 | 6 | [Service] 7 | User=csmith 8 | Group=www-data 9 | WorkingDirectory=/home/csmith/webapps/python-packaging-tools/backend 10 | PermissionsStartOnly=true 11 | ExecStart=/bin/bash /home/csmith/webapps/python-packaging-tools/backend/start.sh 12 | ExecStop= 13 | Restart=on-failure 14 | RestartSec=5s 15 | 16 | [Install] 17 | WantedBy=multi-user.target --------------------------------------------------------------------------------