From 6addb482432de257cc6078c98b79bd5438374dda Mon Sep 17 00:00:00 2001 From: strNophix Date: Sat, 21 May 2022 16:37:48 +0200 Subject: [PATCH] project scaffolding + start on frontend --- .gitignore | 172 ++- Pipfile | 11 + README.md | 2 +- frontend/.gitignore | 24 + frontend/.prettierrc | 4 + frontend/index.html | 13 + frontend/package.json | 28 + frontend/pnpm-lock.yaml | 1231 +++++++++++++++++ frontend/postcss.config.js | 6 + frontend/src/App.tsx | 21 + frontend/src/assets/traefik.png | Bin 0 -> 27643 bytes frontend/src/components/atoms/Badge.tsx | 11 + frontend/src/components/atoms/Button.tsx | 14 + frontend/src/components/atoms/Input.tsx | 16 + frontend/src/components/atoms/InputLabel.tsx | 14 + frontend/src/components/layouts/Dashboard.tsx | 17 + frontend/src/components/molecules/Sidebar.tsx | 130 ++ .../src/components/molecules/TextField.tsx | 21 + .../src/components/pages/middleware/index.tsx | 11 + .../src/components/pages/routers/index.tsx | 11 + .../src/components/pages/secrets/index.tsx | 11 + .../src/components/pages/services/index.tsx | 11 + frontend/src/components/pages/setup/index.tsx | 62 + frontend/src/index.css | 3 + frontend/src/main.tsx | 10 + frontend/src/vite-env.d.ts | 1 + frontend/tailwind.config.js | 13 + frontend/tsconfig.json | 21 + frontend/tsconfig.node.json | 8 + frontend/vite.config.ts | 7 + main.py | 11 + models.py | 53 + poetry.lock | 589 ++++++++ pyproject.toml | 19 + 34 files changed, 2558 insertions(+), 18 deletions(-) create mode 100644 Pipfile create mode 100644 frontend/.gitignore create mode 100644 frontend/.prettierrc create mode 100644 frontend/index.html create mode 100644 frontend/package.json create mode 100644 frontend/pnpm-lock.yaml create mode 100644 frontend/postcss.config.js create mode 100644 frontend/src/App.tsx create mode 100644 frontend/src/assets/traefik.png create mode 100644 frontend/src/components/atoms/Badge.tsx create mode 100644 frontend/src/components/atoms/Button.tsx create mode 100644 frontend/src/components/atoms/Input.tsx create mode 100644 frontend/src/components/atoms/InputLabel.tsx create mode 100644 frontend/src/components/layouts/Dashboard.tsx create mode 100644 frontend/src/components/molecules/Sidebar.tsx create mode 100644 frontend/src/components/molecules/TextField.tsx create mode 100644 frontend/src/components/pages/middleware/index.tsx create mode 100644 frontend/src/components/pages/routers/index.tsx create mode 100644 frontend/src/components/pages/secrets/index.tsx create mode 100644 frontend/src/components/pages/services/index.tsx create mode 100644 frontend/src/components/pages/setup/index.tsx create mode 100644 frontend/src/index.css create mode 100644 frontend/src/main.tsx create mode 100644 frontend/src/vite-env.d.ts create mode 100644 frontend/tailwind.config.js create mode 100644 frontend/tsconfig.json create mode 100644 frontend/tsconfig.node.json create mode 100644 frontend/vite.config.ts create mode 100644 main.py create mode 100644 models.py create mode 100644 poetry.lock create mode 100644 pyproject.toml diff --git a/.gitignore b/.gitignore index adf8f72..b1cb160 100644 --- a/.gitignore +++ b/.gitignore @@ -1,23 +1,161 @@ -# ---> Go -# If you prefer the allow list template instead of the deny list, see community template: -# https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore -# -# Binaries for programs and plugins -*.exe -*.exe~ -*.dll +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions *.so -*.dylib -# Test binary, built with `go test -c` -*.test +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST -# Output of the go coverage tool, specifically when used with LiteIDE -*.out +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec -# Dependency directories (remove the comment below to include it) -# vendor/ +# Installer logs +pip-log.txt +pip-delete-this-directory.txt -# Go workspace file -go.work +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/#use-with-ide +.pdm.toml + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ diff --git a/Pipfile b/Pipfile new file mode 100644 index 0000000..c398b0d --- /dev/null +++ b/Pipfile @@ -0,0 +1,11 @@ +[[source]] +url = "https://pypi.org/simple" +verify_ssl = true +name = "pypi" + +[packages] + +[dev-packages] + +[requires] +python_version = "3.10" diff --git a/README.md b/README.md index 94a6493..68f12a5 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,2 @@ -# traefik-manager +# traefik-confman diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/frontend/.prettierrc b/frontend/.prettierrc new file mode 100644 index 0000000..222861c --- /dev/null +++ b/frontend/.prettierrc @@ -0,0 +1,4 @@ +{ + "tabWidth": 2, + "useTabs": false +} diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 0000000..ed9cf7a --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,13 @@ + + + + + + + Traefik Confman + + +
+ + + diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..fcea324 --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,28 @@ +{ + "name": "traefik-manager-frontend", + "private": true, + "version": "0.0.0", + "scripts": { + "dev": "vite", + "build": "tsc && vite build", + "preview": "vite preview" + }, + "dependencies": { + "@babel/core": ">=7.0.0 <8.0.0", + "@heroicons/react": "^1.0.6", + "clsx": "^1.1.1", + "react": "^18.0.0", + "react-dom": "^18.0.0", + "react-router-dom": "6" + }, + "devDependencies": { + "@types/react": "^18.0.0", + "@types/react-dom": "^18.0.0", + "@vitejs/plugin-react": "^1.3.0", + "autoprefixer": "^10.4.7", + "postcss": "^8.4.14", + "tailwindcss": "^3.0.24", + "typescript": "^4.6.3", + "vite": "^2.9.9" + } +} \ No newline at end of file diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml new file mode 100644 index 0000000..2362bfa --- /dev/null +++ b/frontend/pnpm-lock.yaml @@ -0,0 +1,1231 @@ +lockfileVersion: 5.4 + +specifiers: + '@babel/core': '>=7.0.0 <8.0.0' + '@heroicons/react': ^1.0.6 + '@types/react': ^18.0.0 + '@types/react-dom': ^18.0.0 + '@vitejs/plugin-react': ^1.3.0 + autoprefixer: ^10.4.7 + clsx: ^1.1.1 + postcss: ^8.4.14 + react: ^18.0.0 + react-dom: ^18.0.0 + react-router-dom: '6' + tailwindcss: ^3.0.24 + typescript: ^4.6.3 + vite: ^2.9.9 + +dependencies: + '@babel/core': 7.17.10 + '@heroicons/react': 1.0.6_react@18.1.0 + clsx: 1.1.1 + react: 18.1.0 + react-dom: 18.1.0_react@18.1.0 + react-router-dom: 6.3.0_ef5jwxihqo6n7gxfmzogljlgcm + +devDependencies: + '@types/react': 18.0.9 + '@types/react-dom': 18.0.4 + '@vitejs/plugin-react': 1.3.2 + autoprefixer: 10.4.7_postcss@8.4.14 + postcss: 8.4.14 + tailwindcss: 3.0.24 + typescript: 4.6.4 + vite: 2.9.9 + +packages: + + /@ampproject/remapping/2.2.0: + resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.1.1 + '@jridgewell/trace-mapping': 0.3.13 + + /@babel/code-frame/7.16.7: + resolution: {integrity: sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.17.9 + + /@babel/compat-data/7.17.10: + resolution: {integrity: sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==} + engines: {node: '>=6.9.0'} + + /@babel/core/7.17.10: + resolution: {integrity: sha512-liKoppandF3ZcBnIYFjfSDHZLKdLHGJRkoWtG8zQyGJBQfIYobpnVGI5+pLBNtS6psFLDzyq8+h5HiVljW9PNA==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.0 + '@babel/code-frame': 7.16.7 + '@babel/generator': 7.17.10 + '@babel/helper-compilation-targets': 7.17.10_@babel+core@7.17.10 + '@babel/helper-module-transforms': 7.17.7 + '@babel/helpers': 7.17.9 + '@babel/parser': 7.17.10 + '@babel/template': 7.16.7 + '@babel/traverse': 7.17.10 + '@babel/types': 7.17.10 + convert-source-map: 1.8.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.1 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + + /@babel/generator/7.17.10: + resolution: {integrity: sha512-46MJZZo9y3o4kmhBVc7zW7i8dtR1oIK/sdO5NcfcZRhTGYi+KKJRtHNgsU6c4VUcJmUNV/LQdebD/9Dlv4K+Tg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.17.10 + '@jridgewell/gen-mapping': 0.1.1 + jsesc: 2.5.2 + + /@babel/helper-annotate-as-pure/7.16.7: + resolution: {integrity: sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.17.10 + dev: true + + /@babel/helper-compilation-targets/7.17.10_@babel+core@7.17.10: + resolution: {integrity: sha512-gh3RxjWbauw/dFiU/7whjd0qN9K6nPJMqe6+Er7rOavFh0CQUSwhAE3IcTho2rywPJFxej6TUUHDkWcYI6gGqQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/compat-data': 7.17.10 + '@babel/core': 7.17.10 + '@babel/helper-validator-option': 7.16.7 + browserslist: 4.20.3 + semver: 6.3.0 + + /@babel/helper-environment-visitor/7.16.7: + resolution: {integrity: sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.17.10 + + /@babel/helper-function-name/7.17.9: + resolution: {integrity: sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.16.7 + '@babel/types': 7.17.10 + + /@babel/helper-hoist-variables/7.16.7: + resolution: {integrity: sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.17.10 + + /@babel/helper-module-imports/7.16.7: + resolution: {integrity: sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.17.10 + + /@babel/helper-module-transforms/7.17.7: + resolution: {integrity: sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-environment-visitor': 7.16.7 + '@babel/helper-module-imports': 7.16.7 + '@babel/helper-simple-access': 7.17.7 + '@babel/helper-split-export-declaration': 7.16.7 + '@babel/helper-validator-identifier': 7.16.7 + '@babel/template': 7.16.7 + '@babel/traverse': 7.17.10 + '@babel/types': 7.17.10 + transitivePeerDependencies: + - supports-color + + /@babel/helper-plugin-utils/7.16.7: + resolution: {integrity: sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-simple-access/7.17.7: + resolution: {integrity: sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.17.10 + + /@babel/helper-split-export-declaration/7.16.7: + resolution: {integrity: sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.17.10 + + /@babel/helper-validator-identifier/7.16.7: + resolution: {integrity: sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==} + engines: {node: '>=6.9.0'} + + /@babel/helper-validator-option/7.16.7: + resolution: {integrity: sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==} + engines: {node: '>=6.9.0'} + + /@babel/helpers/7.17.9: + resolution: {integrity: sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.16.7 + '@babel/traverse': 7.17.10 + '@babel/types': 7.17.10 + transitivePeerDependencies: + - supports-color + + /@babel/highlight/7.17.9: + resolution: {integrity: sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.16.7 + chalk: 2.4.2 + js-tokens: 4.0.0 + + /@babel/parser/7.17.10: + resolution: {integrity: sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ==} + engines: {node: '>=6.0.0'} + hasBin: true + + /@babel/plugin-syntax-jsx/7.16.7_@babel+core@7.17.10: + resolution: {integrity: sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.10 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-transform-react-jsx-development/7.16.7_@babel+core@7.17.10: + resolution: {integrity: sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.10 + '@babel/plugin-transform-react-jsx': 7.17.3_@babel+core@7.17.10 + dev: true + + /@babel/plugin-transform-react-jsx-self/7.16.7_@babel+core@7.17.10: + resolution: {integrity: sha512-oe5VuWs7J9ilH3BCCApGoYjHoSO48vkjX2CbA5bFVhIuO2HKxA3vyF7rleA4o6/4rTDbk6r8hBW7Ul8E+UZrpA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.10 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-transform-react-jsx-source/7.16.7_@babel+core@7.17.10: + resolution: {integrity: sha512-rONFiQz9vgbsnaMtQlZCjIRwhJvlrPET8TabIUK2hzlXw9B9s2Ieaxte1SCOOXMbWRHodbKixNf3BLcWVOQ8Bw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.10 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-transform-react-jsx/7.17.3_@babel+core@7.17.10: + resolution: {integrity: sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.10 + '@babel/helper-annotate-as-pure': 7.16.7 + '@babel/helper-module-imports': 7.16.7 + '@babel/helper-plugin-utils': 7.16.7 + '@babel/plugin-syntax-jsx': 7.16.7_@babel+core@7.17.10 + '@babel/types': 7.17.10 + dev: true + + /@babel/runtime/7.18.0: + resolution: {integrity: sha512-YMQvx/6nKEaucl0MY56mwIG483xk8SDNdlUwb2Ts6FUpr7fm85DxEmsY18LXBNhcTz6tO6JwZV8w1W06v8UKeg==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.13.9 + dev: false + + /@babel/template/7.16.7: + resolution: {integrity: sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.16.7 + '@babel/parser': 7.17.10 + '@babel/types': 7.17.10 + + /@babel/traverse/7.17.10: + resolution: {integrity: sha512-VmbrTHQteIdUUQNTb+zE12SHS/xQVIShmBPhlNP12hD5poF2pbITW1Z4172d03HegaQWhLffdkRJYtAzp0AGcw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.16.7 + '@babel/generator': 7.17.10 + '@babel/helper-environment-visitor': 7.16.7 + '@babel/helper-function-name': 7.17.9 + '@babel/helper-hoist-variables': 7.16.7 + '@babel/helper-split-export-declaration': 7.16.7 + '@babel/parser': 7.17.10 + '@babel/types': 7.17.10 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + /@babel/types/7.17.10: + resolution: {integrity: sha512-9O26jG0mBYfGkUYCYZRnBwbVLd1UZOICEr2Em6InB6jVfsAv1GKgwXHmrSg+WFWDmeKTA6vyTZiN8tCSM5Oo3A==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.16.7 + to-fast-properties: 2.0.0 + + /@heroicons/react/1.0.6_react@18.1.0: + resolution: {integrity: sha512-JJCXydOFWMDpCP4q13iEplA503MQO3xLoZiKum+955ZCtHINWnx26CUxVxxFQu/uLb4LW3ge15ZpzIkXKkJ8oQ==} + peerDependencies: + react: '>= 16' + dependencies: + react: 18.1.0 + dev: false + + /@jridgewell/gen-mapping/0.1.1: + resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.1 + '@jridgewell/sourcemap-codec': 1.4.13 + + /@jridgewell/resolve-uri/3.0.7: + resolution: {integrity: sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==} + engines: {node: '>=6.0.0'} + + /@jridgewell/set-array/1.1.1: + resolution: {integrity: sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==} + engines: {node: '>=6.0.0'} + + /@jridgewell/sourcemap-codec/1.4.13: + resolution: {integrity: sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==} + + /@jridgewell/trace-mapping/0.3.13: + resolution: {integrity: sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==} + dependencies: + '@jridgewell/resolve-uri': 3.0.7 + '@jridgewell/sourcemap-codec': 1.4.13 + + /@nodelib/fs.scandir/2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + dev: true + + /@nodelib/fs.stat/2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: true + + /@nodelib/fs.walk/1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.13.0 + dev: true + + /@rollup/pluginutils/4.2.1: + resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} + engines: {node: '>= 8.0.0'} + dependencies: + estree-walker: 2.0.2 + picomatch: 2.3.1 + dev: true + + /@types/prop-types/15.7.5: + resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} + dev: true + + /@types/react-dom/18.0.4: + resolution: {integrity: sha512-FgTtbqPOCI3dzZPZoC2T/sx3L34qxy99ITWn4eoSA95qPyXDMH0ALoAqUp49ITniiJFsXUVBtalh/KffMpg21Q==} + dependencies: + '@types/react': 18.0.9 + dev: true + + /@types/react/18.0.9: + resolution: {integrity: sha512-9bjbg1hJHUm4De19L1cHiW0Jvx3geel6Qczhjd0qY5VKVE2X5+x77YxAepuCwVh4vrgZJdgEJw48zrhRIeF4Nw==} + dependencies: + '@types/prop-types': 15.7.5 + '@types/scheduler': 0.16.2 + csstype: 3.0.11 + dev: true + + /@types/scheduler/0.16.2: + resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==} + dev: true + + /@vitejs/plugin-react/1.3.2: + resolution: {integrity: sha512-aurBNmMo0kz1O4qRoY+FM4epSA39y3ShWGuqfLRA/3z0oEJAdtoSfgA3aO98/PCCHAqMaduLxIxErWrVKIFzXA==} + engines: {node: '>=12.0.0'} + dependencies: + '@babel/core': 7.17.10 + '@babel/plugin-transform-react-jsx': 7.17.3_@babel+core@7.17.10 + '@babel/plugin-transform-react-jsx-development': 7.16.7_@babel+core@7.17.10 + '@babel/plugin-transform-react-jsx-self': 7.16.7_@babel+core@7.17.10 + '@babel/plugin-transform-react-jsx-source': 7.16.7_@babel+core@7.17.10 + '@rollup/pluginutils': 4.2.1 + react-refresh: 0.13.0 + resolve: 1.22.0 + transitivePeerDependencies: + - supports-color + dev: true + + /acorn-node/1.8.2: + resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==} + dependencies: + acorn: 7.4.1 + acorn-walk: 7.2.0 + xtend: 4.0.2 + dev: true + + /acorn-walk/7.2.0: + resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} + engines: {node: '>=0.4.0'} + dev: true + + /acorn/7.4.1: + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /ansi-styles/3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + + /anymatch/3.1.2: + resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: true + + /arg/5.0.1: + resolution: {integrity: sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==} + dev: true + + /autoprefixer/10.4.7_postcss@8.4.14: + resolution: {integrity: sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.20.3 + caniuse-lite: 1.0.30001340 + fraction.js: 4.2.0 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.14 + postcss-value-parser: 4.2.0 + dev: true + + /binary-extensions/2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: true + + /braces/3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: true + + /browserslist/4.20.3: + resolution: {integrity: sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001340 + electron-to-chromium: 1.4.137 + escalade: 3.1.1 + node-releases: 2.0.4 + picocolors: 1.0.0 + + /camelcase-css/2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + dev: true + + /caniuse-lite/1.0.30001340: + resolution: {integrity: sha512-jUNz+a9blQTQVu4uFcn17uAD8IDizPzQkIKh3LCJfg9BkyIqExYYdyc/ZSlWUSKb8iYiXxKsxbv4zYSvkqjrxw==} + + /chalk/2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + /chokidar/3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.2 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /clsx/1.1.1: + resolution: {integrity: sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==} + engines: {node: '>=6'} + dev: false + + /color-convert/1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + + /color-name/1.1.3: + resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=} + + /color-name/1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: true + + /convert-source-map/1.8.0: + resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==} + dependencies: + safe-buffer: 5.1.2 + + /cssesc/3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /csstype/3.0.11: + resolution: {integrity: sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==} + dev: true + + /debug/4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + + /defined/1.0.0: + resolution: {integrity: sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=} + dev: true + + /detective/5.2.0: + resolution: {integrity: sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==} + engines: {node: '>=0.8.0'} + hasBin: true + dependencies: + acorn-node: 1.8.2 + defined: 1.0.0 + minimist: 1.2.6 + dev: true + + /didyoumean/1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + dev: true + + /dlv/1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dev: true + + /electron-to-chromium/1.4.137: + resolution: {integrity: sha512-0Rcpald12O11BUogJagX3HsCN3FE83DSqWjgXoHo5a72KUKMSfI39XBgJpgNNxS9fuGzytaFjE06kZkiVFy2qA==} + + /esbuild-android-64/0.14.39: + resolution: {integrity: sha512-EJOu04p9WgZk0UoKTqLId9VnIsotmI/Z98EXrKURGb3LPNunkeffqQIkjS2cAvidh+OK5uVrXaIP229zK6GvhQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.14.39: + resolution: {integrity: sha512-+twajJqO7n3MrCz9e+2lVOnFplRsaGRwsq1KL/uOy7xK7QdRSprRQcObGDeDZUZsacD5gUkk6OiHiYp6RzU3CA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.14.39: + resolution: {integrity: sha512-ImT6eUw3kcGcHoUxEcdBpi6LfTRWaV6+qf32iYYAfwOeV+XaQ/Xp5XQIBiijLeo+LpGci9M0FVec09nUw41a5g==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.14.39: + resolution: {integrity: sha512-/fcQ5UhE05OiT+bW5v7/up1bDsnvaRZPJxXwzXsMRrr7rZqPa85vayrD723oWMT64dhrgWeA3FIneF8yER0XTw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.14.39: + resolution: {integrity: sha512-oMNH8lJI4wtgN5oxuFP7BQ22vgB/e3Tl5Woehcd6i2r6F3TszpCnNl8wo2d/KvyQ4zvLvCWAlRciumhQg88+kQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.14.39: + resolution: {integrity: sha512-1GHK7kwk57ukY2yI4ILWKJXaxfr+8HcM/r/JKCGCPziIVlL+Wi7RbJ2OzMcTKZ1HpvEqCTBT/J6cO4ZEwW4Ypg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.14.39: + resolution: {integrity: sha512-g97Sbb6g4zfRLIxHgW2pc393DjnkTRMeq3N1rmjDUABxpx8SjocK4jLen+/mq55G46eE2TA0MkJ4R3SpKMu7dg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.14.39: + resolution: {integrity: sha512-4tcgFDYWdI+UbNMGlua9u1Zhu0N5R6u9tl5WOM8aVnNX143JZoBZLpCuUr5lCKhnD0SCO+5gUyMfupGrHtfggQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.14.39: + resolution: {integrity: sha512-t0Hn1kWVx5UpCzAJkKRfHeYOLyFnXwYynIkK54/h3tbMweGI7dj400D1k0Vvtj2u1P+JTRT9tx3AjtLEMmfVBQ==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.14.39: + resolution: {integrity: sha512-23pc8MlD2D6Px1mV8GMglZlKgwgNKAO8gsgsLLcXWSs9lQsCYkIlMo/2Ycfo5JrDIbLdwgP8D2vpfH2KcBqrDQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.14.39: + resolution: {integrity: sha512-epwlYgVdbmkuRr5n4es3B+yDI0I2e/nxhKejT9H0OLxFAlMkeQZxSpxATpDc9m8NqRci6Kwyb/SfmD1koG2Zuw==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.14.39: + resolution: {integrity: sha512-W/5ezaq+rQiQBThIjLMNjsuhPHg+ApVAdTz2LvcuesZFMsJoQAW2hutoyg47XxpWi7aEjJGrkS26qCJKhRn3QQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.14.39: + resolution: {integrity: sha512-IS48xeokcCTKeQIOke2O0t9t14HPvwnZcy+5baG13Z1wxs9ZrC5ig5ypEQQh4QMKxURD5TpCLHw2W42CLuVZaA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.14.39: + resolution: {integrity: sha512-zEfunpqR8sMomqXhNTFEKDs+ik7HC01m3M60MsEjZOqaywHu5e5682fMsqOlZbesEAAaO9aAtRBsU7CHnSZWyA==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.14.39: + resolution: {integrity: sha512-Uo2suJBSIlrZCe4E0k75VDIFJWfZy+bOV6ih3T4MVMRJh1lHJ2UyGoaX4bOxomYN3t+IakHPyEoln1+qJ1qYaA==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.14.39: + resolution: {integrity: sha512-secQU+EpgUPpYjJe3OecoeGKVvRMLeKUxSMGHnK+aK5uQM3n1FPXNJzyz1LHFOo0WOyw+uoCxBYdM4O10oaCAA==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.14.39: + resolution: {integrity: sha512-qHq0t5gePEDm2nqZLb+35p/qkaXVS7oIe32R0ECh2HOdiXXkj/1uQI9IRogGqKkK+QjDG+DhwiUw7QoHur/Rwg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.14.39: + resolution: {integrity: sha512-XPjwp2OgtEX0JnOlTgT6E5txbRp6Uw54Isorm3CwOtloJazeIWXuiwK0ONJBVb/CGbiCpS7iP2UahGgd2p1x+Q==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.14.39: + resolution: {integrity: sha512-E2wm+5FwCcLpKsBHRw28bSYQw0Ikxb7zIMxw3OPAkiaQhLVr3dnVO8DofmbWhhf6b97bWzg37iSZ45ZDpLw7Ow==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.14.39: + resolution: {integrity: sha512-sBZQz5D+Gd0EQ09tZRnz/PpVdLwvp/ufMtJ1iDFYddDaPpZXKqPyaxfYBLs3ueiaksQ26GGa7sci0OqFzNs7KA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild/0.14.39: + resolution: {integrity: sha512-2kKujuzvRWYtwvNjYDY444LQIA3TyJhJIX3Yo4+qkFlDDtGlSicWgeHVJqMUP/2sSfH10PGwfsj+O2ro1m10xQ==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + esbuild-android-64: 0.14.39 + esbuild-android-arm64: 0.14.39 + esbuild-darwin-64: 0.14.39 + esbuild-darwin-arm64: 0.14.39 + esbuild-freebsd-64: 0.14.39 + esbuild-freebsd-arm64: 0.14.39 + esbuild-linux-32: 0.14.39 + esbuild-linux-64: 0.14.39 + esbuild-linux-arm: 0.14.39 + esbuild-linux-arm64: 0.14.39 + esbuild-linux-mips64le: 0.14.39 + esbuild-linux-ppc64le: 0.14.39 + esbuild-linux-riscv64: 0.14.39 + esbuild-linux-s390x: 0.14.39 + esbuild-netbsd-64: 0.14.39 + esbuild-openbsd-64: 0.14.39 + esbuild-sunos-64: 0.14.39 + esbuild-windows-32: 0.14.39 + esbuild-windows-64: 0.14.39 + esbuild-windows-arm64: 0.14.39 + dev: true + + /escalade/3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + + /escape-string-regexp/1.0.5: + resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=} + engines: {node: '>=0.8.0'} + + /estree-walker/2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + dev: true + + /fast-glob/3.2.11: + resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: true + + /fastq/1.13.0: + resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} + dependencies: + reusify: 1.0.4 + dev: true + + /fill-range/7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: true + + /fraction.js/4.2.0: + resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} + dev: true + + /fsevents/2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /function-bind/1.1.1: + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + dev: true + + /gensync/1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + /glob-parent/5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob-parent/6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + dev: true + + /globals/11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + /has-flag/3.0.0: + resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=} + engines: {node: '>=4'} + + /has/1.0.3: + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} + dependencies: + function-bind: 1.1.1 + dev: true + + /history/5.3.0: + resolution: {integrity: sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==} + dependencies: + '@babel/runtime': 7.18.0 + dev: false + + /is-binary-path/2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: true + + /is-core-module/2.9.0: + resolution: {integrity: sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==} + dependencies: + has: 1.0.3 + dev: true + + /is-extglob/2.1.1: + resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=} + engines: {node: '>=0.10.0'} + dev: true + + /is-glob/4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + + /is-number/7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: true + + /js-tokens/4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + /jsesc/2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + + /json5/2.2.1: + resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==} + engines: {node: '>=6'} + hasBin: true + + /lilconfig/2.0.5: + resolution: {integrity: sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==} + engines: {node: '>=10'} + dev: true + + /loose-envify/1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + dependencies: + js-tokens: 4.0.0 + dev: false + + /merge2/1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true + + /micromatch/4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + dev: true + + /minimist/1.2.6: + resolution: {integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==} + dev: true + + /ms/2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + /nanoid/3.3.4: + resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: true + + /node-releases/2.0.4: + resolution: {integrity: sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==} + + /normalize-path/3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: true + + /normalize-range/0.1.2: + resolution: {integrity: sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=} + engines: {node: '>=0.10.0'} + dev: true + + /object-hash/3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + dev: true + + /path-parse/1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true + + /picocolors/1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + + /picomatch/2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: true + + /postcss-js/4.0.0_postcss@8.4.14: + resolution: {integrity: sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.3.3 + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.14 + dev: true + + /postcss-load-config/3.1.4_postcss@8.4.14: + resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} + engines: {node: '>= 10'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 2.0.5 + postcss: 8.4.14 + yaml: 1.10.2 + dev: true + + /postcss-nested/5.0.6_postcss@8.4.14: + resolution: {integrity: sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + dependencies: + postcss: 8.4.14 + postcss-selector-parser: 6.0.10 + dev: true + + /postcss-selector-parser/6.0.10: + resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: true + + /postcss-value-parser/4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + dev: true + + /postcss/8.4.14: + resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.4 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: true + + /queue-microtask/1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true + + /quick-lru/5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + dev: true + + /react-dom/18.1.0_react@18.1.0: + resolution: {integrity: sha512-fU1Txz7Budmvamp7bshe4Zi32d0ll7ect+ccxNu9FlObT605GOEB8BfO4tmRJ39R5Zj831VCpvQ05QPBW5yb+w==} + peerDependencies: + react: ^18.1.0 + dependencies: + loose-envify: 1.4.0 + react: 18.1.0 + scheduler: 0.22.0 + dev: false + + /react-refresh/0.13.0: + resolution: {integrity: sha512-XP8A9BT0CpRBD+NYLLeIhld/RqG9+gktUjW1FkE+Vm7OCinbG1SshcK5tb9ls4kzvjZr9mOQc7HYgBngEyPAXg==} + engines: {node: '>=0.10.0'} + dev: true + + /react-router-dom/6.3.0_ef5jwxihqo6n7gxfmzogljlgcm: + resolution: {integrity: sha512-uaJj7LKytRxZNQV8+RbzJWnJ8K2nPsOOEuX7aQstlMZKQT0164C+X2w6bnkqU3sjtLvpd5ojrezAyfZ1+0sStw==} + peerDependencies: + react: '>=16.8' + react-dom: '>=16.8' + dependencies: + history: 5.3.0 + react: 18.1.0 + react-dom: 18.1.0_react@18.1.0 + react-router: 6.3.0_react@18.1.0 + dev: false + + /react-router/6.3.0_react@18.1.0: + resolution: {integrity: sha512-7Wh1DzVQ+tlFjkeo+ujvjSqSJmkt1+8JO+T5xklPlgrh70y7ogx75ODRW0ThWhY7S+6yEDks8TYrtQe/aoboBQ==} + peerDependencies: + react: '>=16.8' + dependencies: + history: 5.3.0 + react: 18.1.0 + dev: false + + /react/18.1.0: + resolution: {integrity: sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ==} + engines: {node: '>=0.10.0'} + dependencies: + loose-envify: 1.4.0 + dev: false + + /readdirp/3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: true + + /regenerator-runtime/0.13.9: + resolution: {integrity: sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==} + dev: false + + /resolve/1.22.0: + resolution: {integrity: sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==} + hasBin: true + dependencies: + is-core-module: 2.9.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /reusify/1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true + + /rollup/2.72.1: + resolution: {integrity: sha512-NTc5UGy/NWFGpSqF1lFY8z9Adri6uhyMLI6LvPAXdBKoPRFhIIiBUpt+Qg2awixqO3xvzSijjhnb4+QEZwJmxA==} + engines: {node: '>=10.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /run-parallel/1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + dev: true + + /safe-buffer/5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + /scheduler/0.22.0: + resolution: {integrity: sha512-6QAm1BgQI88NPYymgGQLCZgvep4FyePDWFpXVK+zNSUgHwlqpJy8VEh8Et0KxTACS4VWwMousBElAZOH9nkkoQ==} + dependencies: + loose-envify: 1.4.0 + dev: false + + /semver/6.3.0: + resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} + hasBin: true + + /source-map-js/1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + dev: true + + /supports-color/5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + + /supports-preserve-symlinks-flag/1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true + + /tailwindcss/3.0.24: + resolution: {integrity: sha512-H3uMmZNWzG6aqmg9q07ZIRNIawoiEcNFKDfL+YzOPuPsXuDXxJxB9icqzLgdzKNwjG3SAro2h9SYav8ewXNgig==} + engines: {node: '>=12.13.0'} + hasBin: true + dependencies: + arg: 5.0.1 + chokidar: 3.5.3 + color-name: 1.1.4 + detective: 5.2.0 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.2.11 + glob-parent: 6.0.2 + is-glob: 4.0.3 + lilconfig: 2.0.5 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.0.0 + postcss: 8.4.14 + postcss-js: 4.0.0_postcss@8.4.14 + postcss-load-config: 3.1.4_postcss@8.4.14 + postcss-nested: 5.0.6_postcss@8.4.14 + postcss-selector-parser: 6.0.10 + postcss-value-parser: 4.2.0 + quick-lru: 5.1.1 + resolve: 1.22.0 + transitivePeerDependencies: + - ts-node + dev: true + + /to-fast-properties/2.0.0: + resolution: {integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=} + engines: {node: '>=4'} + + /to-regex-range/5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + dev: true + + /typescript/4.6.4: + resolution: {integrity: sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==} + engines: {node: '>=4.2.0'} + hasBin: true + dev: true + + /util-deprecate/1.0.2: + resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=} + dev: true + + /vite/2.9.9: + resolution: {integrity: sha512-ffaam+NgHfbEmfw/Vuh6BHKKlI/XIAhxE5QSS7gFLIngxg171mg1P3a4LSRME0z2ZU1ScxoKzphkipcYwSD5Ew==} + engines: {node: '>=12.2.0'} + hasBin: true + peerDependencies: + less: '*' + sass: '*' + stylus: '*' + peerDependenciesMeta: + less: + optional: true + sass: + optional: true + stylus: + optional: true + dependencies: + esbuild: 0.14.39 + postcss: 8.4.14 + resolve: 1.22.0 + rollup: 2.72.1 + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /xtend/4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + dev: true + + /yaml/1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + dev: true diff --git a/frontend/postcss.config.js b/frontend/postcss.config.js new file mode 100644 index 0000000..33ad091 --- /dev/null +++ b/frontend/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx new file mode 100644 index 0000000..bd5b289 --- /dev/null +++ b/frontend/src/App.tsx @@ -0,0 +1,21 @@ +import { BrowserRouter, Navigate, Route, Routes } from "react-router-dom"; +import MiddlewarePage from "./components/pages/middleware"; +import RoutersPage from "./components/pages/routers"; +import SecretsPage from "./components/pages/secrets"; +import ServicesPage from "./components/pages/services"; +import SetupPage from "./components/pages/setup"; + +export default function App() { + return ( + + + } /> + } /> + } /> + } /> + } /> + } /> + + + ); +} diff --git a/frontend/src/assets/traefik.png b/frontend/src/assets/traefik.png new file mode 100644 index 0000000000000000000000000000000000000000..7cce508f9fb5fca43dd7b3ab0f5ea700bdfd2afb GIT binary patch literal 27643 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 = (props) => { + return ( + + {props.children} + + ); +}; + +export default Badge; diff --git a/frontend/src/components/atoms/Button.tsx b/frontend/src/components/atoms/Button.tsx new file mode 100644 index 0000000..be86d64 --- /dev/null +++ b/frontend/src/components/atoms/Button.tsx @@ -0,0 +1,14 @@ +import { FC, HTMLProps } from "react"; + +const Button: FC> = (props) => { + return ( + + ); +}; + +export default Button; diff --git a/frontend/src/components/atoms/Input.tsx b/frontend/src/components/atoms/Input.tsx new file mode 100644 index 0000000..6fdca12 --- /dev/null +++ b/frontend/src/components/atoms/Input.tsx @@ -0,0 +1,16 @@ +import { FC, HTMLProps } from "react"; + +const Input: FC> = (props) => { + return ( + + ); +}; + +export default Input; diff --git a/frontend/src/components/atoms/InputLabel.tsx b/frontend/src/components/atoms/InputLabel.tsx new file mode 100644 index 0000000..45d9f3f --- /dev/null +++ b/frontend/src/components/atoms/InputLabel.tsx @@ -0,0 +1,14 @@ +import { FC, HTMLProps } from "react"; + +const InputLabel: FC> = (props) => { + return ( + + ); +}; + +export default InputLabel; diff --git a/frontend/src/components/layouts/Dashboard.tsx b/frontend/src/components/layouts/Dashboard.tsx new file mode 100644 index 0000000..615c6ca --- /dev/null +++ b/frontend/src/components/layouts/Dashboard.tsx @@ -0,0 +1,17 @@ +import { FC, HTMLProps } from "react"; +import Sidebar from "../molecules/Sidebar"; + +const DashboardLayout: FC> = (props) => { + return ( +

+ +
+
+ {props.children} +
+
+
+ ); +}; + +export default DashboardLayout; diff --git a/frontend/src/components/molecules/Sidebar.tsx b/frontend/src/components/molecules/Sidebar.tsx new file mode 100644 index 0000000..e4ac10c --- /dev/null +++ b/frontend/src/components/molecules/Sidebar.tsx @@ -0,0 +1,130 @@ +import { + CubeIcon, + GlobeAltIcon, + LockClosedIcon, + LogoutIcon, + PuzzleIcon, +} from "@heroicons/react/outline"; +import { FC, ReactNode } from "react"; +import { useNavigate } from "react-router-dom"; +import Badge from "../atoms/Badge"; +import InputLabel from "../atoms/InputLabel"; + +const SidebarTab: FC<{ + onClick?: any; + children?: ReactNode; + badge?: ReactNode; +}> = (props) => { + return ( + + ); +}; + +const Sidebar = () => { + const navigate = useNavigate(); + + const navFactory = (to: string) => () => { + navigate(to); + }; + + return ( +
+
+
+
+
+
+
+

Traefik

+

+ Confman +

+
+
+ +
+
+
+ Config +
+ +
+ +
+
+ +
+
+
+

nikuu

+
+
+ +
+
+
+
+
+
+ ); +}; + +export default Sidebar; diff --git a/frontend/src/components/molecules/TextField.tsx b/frontend/src/components/molecules/TextField.tsx new file mode 100644 index 0000000..6f82efc --- /dev/null +++ b/frontend/src/components/molecules/TextField.tsx @@ -0,0 +1,21 @@ +import { FC, HTMLProps } from "react"; +import Input from "../atoms/Input"; +import InputLabel from "../atoms/InputLabel"; + +const TextField: FC> = (props) => { + return ( +
+ {props.label} +
+ +
+
+ ); +}; + +export default TextField; diff --git a/frontend/src/components/pages/middleware/index.tsx b/frontend/src/components/pages/middleware/index.tsx new file mode 100644 index 0000000..135326e --- /dev/null +++ b/frontend/src/components/pages/middleware/index.tsx @@ -0,0 +1,11 @@ +import DashboardLayout from "../../layouts/Dashboard"; + +const MiddlewarePage = () => { + return ( + +
Middleware
+
+ ); +}; + +export default MiddlewarePage; diff --git a/frontend/src/components/pages/routers/index.tsx b/frontend/src/components/pages/routers/index.tsx new file mode 100644 index 0000000..5b41ef6 --- /dev/null +++ b/frontend/src/components/pages/routers/index.tsx @@ -0,0 +1,11 @@ +import DashboardLayout from "../../layouts/Dashboard"; + +const RoutersPage = () => { + return ( + +
Routers
+
+ ); +}; + +export default RoutersPage; diff --git a/frontend/src/components/pages/secrets/index.tsx b/frontend/src/components/pages/secrets/index.tsx new file mode 100644 index 0000000..4459742 --- /dev/null +++ b/frontend/src/components/pages/secrets/index.tsx @@ -0,0 +1,11 @@ +import DashboardLayout from "../../layouts/Dashboard"; + +const SecretsPage = () => { + return ( + +
Secrets
+
+ ); +}; + +export default SecretsPage; diff --git a/frontend/src/components/pages/services/index.tsx b/frontend/src/components/pages/services/index.tsx new file mode 100644 index 0000000..2ccc901 --- /dev/null +++ b/frontend/src/components/pages/services/index.tsx @@ -0,0 +1,11 @@ +import DashboardLayout from "../../layouts/Dashboard"; + +const ServicesPage = () => { + return ( + +
Services
+
+ ); +}; + +export default ServicesPage; diff --git a/frontend/src/components/pages/setup/index.tsx b/frontend/src/components/pages/setup/index.tsx new file mode 100644 index 0000000..cf78a4c --- /dev/null +++ b/frontend/src/components/pages/setup/index.tsx @@ -0,0 +1,62 @@ +import { useNavigate } from "react-router-dom"; + +import Button from "../../atoms/Button"; +import TextField from "../../molecules/TextField"; +import TraefikImgUrl from "../../../assets/traefik.png"; + +const SetupPage = () => { + const navigator = useNavigate(); + + const handleContinue = () => navigator("/"); + + return ( +
+
+
+ +

+ Setup Traefik Confman +

+
+ +
+
+
+ + + + +
+ +
+ +
+
+
+
+ ); +}; + +export default SetupPage; diff --git a/frontend/src/index.css b/frontend/src/index.css new file mode 100644 index 0000000..b5c61c9 --- /dev/null +++ b/frontend/src/index.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/frontend/src/main.tsx b/frontend/src/main.tsx new file mode 100644 index 0000000..9b67590 --- /dev/null +++ b/frontend/src/main.tsx @@ -0,0 +1,10 @@ +import React from "react"; +import ReactDOM from "react-dom/client"; +import App from "./App"; +import "./index.css"; + +ReactDOM.createRoot(document.getElementById("root")!).render( + + + +); diff --git a/frontend/src/vite-env.d.ts b/frontend/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/frontend/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/frontend/tailwind.config.js b/frontend/tailwind.config.js new file mode 100644 index 0000000..530d07e --- /dev/null +++ b/frontend/tailwind.config.js @@ -0,0 +1,13 @@ +module.exports = { + content: ["./src/**/*.{js,jsx,ts,tsx}"], + theme: { + extend: { + colors: { + confman: { + "bg-primary": "#fafafa", + }, + }, + }, + }, + plugins: [], +}; diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json new file mode 100644 index 0000000..3d0a51a --- /dev/null +++ b/frontend/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "target": "ESNext", + "useDefineForClassFields": true, + "lib": ["DOM", "DOM.Iterable", "ESNext"], + "allowJs": false, + "skipLibCheck": true, + "esModuleInterop": false, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "ESNext", + "moduleResolution": "Node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx" + }, + "include": ["src"], + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/frontend/tsconfig.node.json b/frontend/tsconfig.node.json new file mode 100644 index 0000000..e993792 --- /dev/null +++ b/frontend/tsconfig.node.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "composite": true, + "module": "esnext", + "moduleResolution": "node" + }, + "include": ["vite.config.ts"] +} diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts new file mode 100644 index 0000000..b1b5f91 --- /dev/null +++ b/frontend/vite.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react()] +}) diff --git a/main.py b/main.py new file mode 100644 index 0000000..ad86a1b --- /dev/null +++ b/main.py @@ -0,0 +1,11 @@ +from fastapi import FastAPI +from models import schema +from strawberry.fastapi import GraphQLRouter +from fastapi.staticfiles import StaticFiles + +graphql_app = GraphQLRouter(schema=schema) + +app = FastAPI() + +app.mount("/", StaticFiles(directory="frontend/dist"), name="frontend") +app.include_router(graphql_app, prefix="/graphql") diff --git a/models.py b/models.py new file mode 100644 index 0000000..5372a14 --- /dev/null +++ b/models.py @@ -0,0 +1,53 @@ +import strawberry + + +@strawberry.type +class RouterTlsConfig: + cert_resolver: str + + +@strawberry.type +class Router: + id: str + entry_points: list[str] + service: str + rule: str + tls_config: "RouterTlsConfig" + + +@strawberry.type +class Server: + url: str + port: str + scheme: str + + +@strawberry.type +class LoadBalancer: + servers: list["Server"] + + +@strawberry.type +class Service: + id: str + load_balancer: "LoadBalancer" + + +@strawberry.type +class HttpConfiguration: + routers: list["Router"] + services: list["Service"] + + +def get_http_configuration() -> "HttpConfiguration": + return HttpConfiguration(routers=[], services=[]) + + +@strawberry.type +class Query: + http_configuration: "HttpConfiguration" = strawberry.field( + resolver=get_http_configuration + ) + + +schema = strawberry.Schema(query=Query) diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 0000000..f72e879 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,589 @@ +[[package]] +name = "anyio" +version = "3.5.0" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +category = "main" +optional = false +python-versions = ">=3.6.2" + +[package.dependencies] +idna = ">=2.8" +sniffio = ">=1.1" + +[package.extras] +doc = ["packaging", "sphinx-rtd-theme", "sphinx-autodoc-typehints (>=1.2.0)"] +test = ["coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "pytest (>=6.0)", "pytest-mock (>=3.6.1)", "trustme", "contextlib2", "uvloop (<0.15)", "mock (>=4)", "uvloop (>=0.15)"] +trio = ["trio (>=0.16)"] + +[[package]] +name = "asgiref" +version = "3.5.1" +description = "ASGI specs, helper code, and adapters" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.extras] +tests = ["pytest", "pytest-asyncio", "mypy (>=0.800)"] + +[[package]] +name = "backports.cached-property" +version = "1.0.1" +description = "cached_property() - computed once per instance, cached as attribute" +category = "main" +optional = false +python-versions = ">=3.6.0" + +[[package]] +name = "click" +version = "8.1.3" +description = "Composable command line interface toolkit" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.4" +description = "Cross-platform colored terminal text." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "fastapi" +version = "0.77.1" +description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" +category = "main" +optional = false +python-versions = ">=3.6.1" + +[package.dependencies] +pydantic = ">=1.6.2,<1.7 || >1.7,<1.7.1 || >1.7.1,<1.7.2 || >1.7.2,<1.7.3 || >1.7.3,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0" +starlette = "0.19.1" + +[package.extras] +all = ["requests (>=2.24.0,<3.0.0)", "jinja2 (>=2.11.2,<4.0.0)", "python-multipart (>=0.0.5,<0.0.6)", "itsdangerous (>=1.1.0,<3.0.0)", "pyyaml (>=5.3.1,<7.0.0)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0,<6.0.0)", "orjson (>=3.2.1,<4.0.0)", "email_validator (>=1.1.1,<2.0.0)", "uvicorn[standard] (>=0.12.0,<0.18.0)"] +dev = ["python-jose[cryptography] (>=3.3.0,<4.0.0)", "passlib[bcrypt] (>=1.7.2,<2.0.0)", "autoflake (>=1.4.0,<2.0.0)", "flake8 (>=3.8.3,<4.0.0)", "uvicorn[standard] (>=0.12.0,<0.18.0)"] +doc = ["mkdocs (>=1.1.2,<2.0.0)", "mkdocs-material (>=8.1.4,<9.0.0)", "mdx-include (>=1.4.1,<2.0.0)", "mkdocs-markdownextradata-plugin (>=0.1.7,<0.3.0)", "typer (>=0.4.1,<0.5.0)", "pyyaml (>=5.3.1,<7.0.0)"] +test = ["pytest (>=6.2.4,<7.0.0)", "pytest-cov (>=2.12.0,<4.0.0)", "mypy (==0.910)", "flake8 (>=3.8.3,<4.0.0)", "black (==22.3.0)", "isort (>=5.0.6,<6.0.0)", "requests (>=2.24.0,<3.0.0)", "httpx (>=0.14.0,<0.19.0)", "email_validator (>=1.1.1,<2.0.0)", "sqlalchemy (>=1.3.18,<1.5.0)", "peewee (>=3.13.3,<4.0.0)", "databases[sqlite] (>=0.3.2,<0.6.0)", "orjson (>=3.2.1,<4.0.0)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0,<6.0.0)", "python-multipart (>=0.0.5,<0.0.6)", "flask (>=1.1.2,<3.0.0)", "anyio[trio] (>=3.2.1,<4.0.0)", "types-ujson (==4.2.1)", "types-orjson (==3.6.2)", "types-dataclasses (==0.6.5)"] + +[[package]] +name = "graphql-core" +version = "3.2.1" +description = "GraphQL implementation for Python, a port of GraphQL.js, the JavaScript reference implementation for GraphQL." +category = "main" +optional = false +python-versions = ">=3.6,<4" + +[[package]] +name = "h11" +version = "0.13.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "httptools" +version = "0.4.0" +description = "A collection of framework independent HTTP protocol utils." +category = "main" +optional = false +python-versions = ">=3.5.0" + +[package.extras] +test = ["Cython (>=0.29.24,<0.30.0)"] + +[[package]] +name = "idna" +version = "3.3" +description = "Internationalized Domain Names in Applications (IDNA)" +category = "main" +optional = false +python-versions = ">=3.5" + +[[package]] +name = "loguru" +version = "0.6.0" +description = "Python logging made (stupidly) simple" +category = "main" +optional = false +python-versions = ">=3.5" + +[package.dependencies] +colorama = {version = ">=0.3.4", markers = "sys_platform == \"win32\""} +win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""} + +[package.extras] +dev = ["colorama (>=0.3.4)", "docutils (==0.16)", "flake8 (>=3.7.7)", "tox (>=3.9.0)", "pytest (>=4.6.2)", "pytest-cov (>=2.7.1)", "black (>=19.10b0)", "isort (>=5.1.1)", "Sphinx (>=4.1.1)", "sphinx-autobuild (>=0.7.1)", "sphinx-rtd-theme (>=0.4.3)"] + +[[package]] +name = "pydantic" +version = "1.9.0" +description = "Data validation and settings management using python 3.6 type hinting" +category = "main" +optional = false +python-versions = ">=3.6.1" + +[package.dependencies] +typing-extensions = ">=3.7.4.3" + +[package.extras] +dotenv = ["python-dotenv (>=0.10.4)"] +email = ["email-validator (>=1.0.3)"] + +[[package]] +name = "pygments" +version = "2.12.0" +description = "Pygments is a syntax highlighting package written in Python." +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "python-dateutil" +version = "2.8.2" +description = "Extensions to the standard Python datetime module" +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "python-dotenv" +version = "0.20.0" +description = "Read key-value pairs from a .env file and set them as environment variables" +category = "main" +optional = false +python-versions = ">=3.5" + +[package.extras] +cli = ["click (>=5.0)"] + +[[package]] +name = "python-multipart" +version = "0.0.5" +description = "A streaming multipart parser for Python" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +six = ">=1.4.0" + +[[package]] +name = "pyyaml" +version = "6.0" +description = "YAML parser and emitter for Python" +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" + +[[package]] +name = "sniffio" +version = "1.2.0" +description = "Sniff out which async library your code is running under" +category = "main" +optional = false +python-versions = ">=3.5" + +[[package]] +name = "starlette" +version = "0.19.1" +description = "The little ASGI library that shines." +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +anyio = ">=3.4.0,<5" + +[package.extras] +full = ["itsdangerous", "jinja2", "python-multipart", "pyyaml", "requests"] + +[[package]] +name = "strawberry-graphql" +version = "0.111.2" +description = "A library for creating GraphQL APIs" +category = "main" +optional = false +python-versions = ">=3.7,<4.0" + +[package.dependencies] +"backports.cached-property" = ">=1.0.1,<2.0.0" +click = ">=7.0,<9.0" +graphql-core = ">=3.2.0,<3.3.0" +pygments = ">=2.3,<3.0" +python-dateutil = ">=2.7.0,<3.0.0" +python-multipart = ">=0.0.5,<0.0.6" +typing_extensions = ">=3.7.4,<5.0.0" + +[package.extras] +asgi = ["starlette (>=0.13.6,<0.17.0)"] +debug-server = ["starlette (>=0.13.6,<0.17.0)", "uvicorn (>=0.11.6,<0.18.0)"] +django = ["Django (>=3.2)", "asgiref (>=3.2,<4.0)"] +flask = ["flask (>=1.1)"] +opentelemetry = ["opentelemetry-api (<2)", "opentelemetry-sdk (<2)"] +chalice = ["chalice (>=1.22,<2.0)"] +pydantic = ["pydantic (<2)"] +sanic = ["sanic (>=20.12.2,<22.0.0)"] +aiohttp = ["aiohttp (>=3.7.4.post0,<4.0.0)"] +fastapi = ["fastapi (>=0.65.2)"] + +[[package]] +name = "typing-extensions" +version = "4.2.0" +description = "Backported and Experimental Type Hints for Python 3.7+" +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "uvicorn" +version = "0.17.6" +description = "The lightning-fast ASGI server." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +asgiref = ">=3.4.0" +click = ">=7.0" +colorama = {version = ">=0.4", optional = true, markers = "sys_platform == \"win32\" and extra == \"standard\""} +h11 = ">=0.8" +httptools = {version = ">=0.4.0", optional = true, markers = "extra == \"standard\""} +python-dotenv = {version = ">=0.13", optional = true, markers = "extra == \"standard\""} +PyYAML = {version = ">=5.1", optional = true, markers = "extra == \"standard\""} +uvloop = {version = ">=0.14.0,<0.15.0 || >0.15.0,<0.15.1 || >0.15.1", optional = true, markers = "sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"PyPy\" and extra == \"standard\""} +watchgod = {version = ">=0.6", optional = true, markers = "extra == \"standard\""} +websockets = {version = ">=10.0", optional = true, markers = "extra == \"standard\""} + +[package.extras] +standard = ["websockets (>=10.0)", "httptools (>=0.4.0)", "watchgod (>=0.6)", "python-dotenv (>=0.13)", "PyYAML (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "colorama (>=0.4)"] + +[[package]] +name = "uvloop" +version = "0.16.0" +description = "Fast implementation of asyncio event loop on top of libuv" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.extras] +dev = ["Cython (>=0.29.24,<0.30.0)", "pytest (>=3.6.0)", "Sphinx (>=4.1.2,<4.2.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)", "aiohttp", "flake8 (>=3.9.2,<3.10.0)", "psutil", "pycodestyle (>=2.7.0,<2.8.0)", "pyOpenSSL (>=19.0.0,<19.1.0)", "mypy (>=0.800)"] +docs = ["Sphinx (>=4.1.2,<4.2.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)"] +test = ["aiohttp", "flake8 (>=3.9.2,<3.10.0)", "psutil", "pycodestyle (>=2.7.0,<2.8.0)", "pyOpenSSL (>=19.0.0,<19.1.0)", "mypy (>=0.800)"] + +[[package]] +name = "watchgod" +version = "0.8.2" +description = "Simple, modern file watching and code reload in python." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +anyio = ">=3.0.0,<4" + +[[package]] +name = "websockets" +version = "10.3" +description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "win32-setctime" +version = "1.1.0" +description = "A small Python utility to set file creation time on Windows" +category = "main" +optional = false +python-versions = ">=3.5" + +[package.extras] +dev = ["pytest (>=4.6.2)", "black (>=19.3b0)"] + +[metadata] +lock-version = "1.1" +python-versions = "^3.10" +content-hash = "93da26b27cf3a6dc37fd6e8c13cf0945a1d5974a453e16bbcb2bffbc5e134ca4" + +[metadata.files] +anyio = [ + {file = "anyio-3.5.0-py3-none-any.whl", hash = "sha256:b5fa16c5ff93fa1046f2eeb5bbff2dad4d3514d6cda61d02816dba34fa8c3c2e"}, + {file = "anyio-3.5.0.tar.gz", hash = "sha256:a0aeffe2fb1fdf374a8e4b471444f0f3ac4fb9f5a5b542b48824475e0042a5a6"}, +] +asgiref = [ + {file = "asgiref-3.5.1-py3-none-any.whl", hash = "sha256:45a429524fba18aba9d512498b19d220c4d628e75b40cf5c627524dbaebc5cc1"}, + {file = "asgiref-3.5.1.tar.gz", hash = "sha256:fddeea3c53fa99d0cdb613c3941cc6e52d822491fc2753fba25768fb5bf4e865"}, +] +"backports.cached-property" = [ + {file = "backports.cached-property-1.0.1.tar.gz", hash = "sha256:1a5ef1e750f8bc7d0204c807aae8e0f450c655be0cf4b30407a35fd4bb27186c"}, + {file = "backports.cached_property-1.0.1-py3-none-any.whl", hash = "sha256:687b5fe14be40aadcf547cae91337a1fdb84026046a39370274e54d3fe4fb4f9"}, +] +click = [ + {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, + {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, +] +colorama = [ + {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, + {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, +] +fastapi = [ + {file = "fastapi-0.77.1-py3-none-any.whl", hash = "sha256:041d8935a13c8f22a7ef80c76d8eea54953c44476d7057e7734138ee8951b9dc"}, + {file = "fastapi-0.77.1.tar.gz", hash = "sha256:6dfa715a334d1fafedcea33d74c7382afd2ce123093f83be2f4e322e89d45e22"}, +] +graphql-core = [ + {file = "graphql-core-3.2.1.tar.gz", hash = "sha256:9d1bf141427b7d54be944587c8349df791ce60ade2e3cccaf9c56368c133c201"}, + {file = "graphql_core-3.2.1-py3-none-any.whl", hash = "sha256:f83c658e4968998eed1923a2e3e3eddd347e005ac0315fbb7ca4d70ea9156323"}, +] +h11 = [ + {file = "h11-0.13.0-py3-none-any.whl", hash = "sha256:8ddd78563b633ca55346c8cd41ec0af27d3c79931828beffb46ce70a379e7442"}, + {file = "h11-0.13.0.tar.gz", hash = "sha256:70813c1135087a248a4d38cc0e1a0181ffab2188141a93eaf567940c3957ff06"}, +] +httptools = [ + {file = "httptools-0.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fcddfe70553be717d9745990dfdb194e22ee0f60eb8f48c0794e7bfeda30d2d5"}, + {file = "httptools-0.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1ee0b459257e222b878a6c09ccf233957d3a4dcb883b0847640af98d2d9aac23"}, + {file = "httptools-0.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ceafd5e960b39c7e0d160a1936b68eb87c5e79b3979d66e774f0c77d4d8faaed"}, + {file = "httptools-0.4.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fdb9f9ed79bc6f46b021b3319184699ba1a22410a82204e6e89c774530069683"}, + {file = "httptools-0.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:abe829275cdd4174b4c4e65ad718715d449e308d59793bf3a931ee1bf7e7b86c"}, + {file = "httptools-0.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7af6bdbd21a2a25d6784f6d67f44f5df33ef39b6159543b9f9064d365c01f919"}, + {file = "httptools-0.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:5d1fe6b6661022fd6cac541f54a4237496b246e6f1c0a6b41998ee08a1135afe"}, + {file = "httptools-0.4.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:48e48530d9b995a84d1d89ae6b3ec4e59ea7d494b150ac3bbc5e2ac4acce92cd"}, + {file = "httptools-0.4.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a113789e53ac1fa26edf99856a61e4c493868e125ae0dd6354cf518948fbbd5c"}, + {file = "httptools-0.4.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8e2eb957787cbb614a0f006bfc5798ff1d90ac7c4dd24854c84edbdc8c02369e"}, + {file = "httptools-0.4.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:7ee9f226acab9085037582c059d66769862706e8e8cd2340470ceb8b3850873d"}, + {file = "httptools-0.4.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:701e66b59dd21a32a274771238025d58db7e2b6ecebbab64ceff51b8e31527ae"}, + {file = "httptools-0.4.0-cp36-cp36m-win_amd64.whl", hash = "sha256:6a1a7dfc1f9c78a833e2c4904757a0f47ce25d08634dd2a52af394eefe5f9777"}, + {file = "httptools-0.4.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:903f739c9fb78dab8970b0f3ea51f21955b24b45afa77b22ff0e172fc11ef111"}, + {file = "httptools-0.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54bbd295f031b866b9799dd39cb45deee81aca036c9bff9f58ca06726f6494f1"}, + {file = "httptools-0.4.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3194f6d6443befa8d4db16c1946b2fc428a3ceb8ab32eb6f09a59f86104dc1a0"}, + {file = "httptools-0.4.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:cd1295f52971097f757edfbfce827b6dbbfb0f7a74901ee7d4933dff5ad4c9af"}, + {file = "httptools-0.4.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:20a45bcf22452a10fa8d58b7dbdb474381f6946bf5b8933e3662d572bc61bae4"}, + {file = "httptools-0.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d1f27bb0f75bef722d6e22dc609612bfa2f994541621cd2163f8c943b6463dfe"}, + {file = "httptools-0.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:7f7bfb74718f52d5ed47d608d507bf66d3bc01d4a8b3e6dd7134daaae129357b"}, + {file = "httptools-0.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a522d12e2ddbc2e91842ffb454a1aeb0d47607972c7d8fc88bd0838d97fb8a2a"}, + {file = "httptools-0.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2db44a0b294d317199e9f80123e72c6b005c55b625b57fae36de68670090fa48"}, + {file = "httptools-0.4.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c286985b5e194ca0ebb2908d71464b9be8f17cc66d6d3e330e8d5407248f56ad"}, + {file = "httptools-0.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:d3a4e165ca6204f34856b765d515d558dc84f1352033b8721e8d06c3e44930c3"}, + {file = "httptools-0.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:72aa3fbe636b16d22e04b5a9d24711b043495e0ecfe58080addf23a1a37f3409"}, + {file = "httptools-0.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:9967d9758df505975913304c434cb9ab21e2c609ad859eb921f2f615a038c8de"}, + {file = "httptools-0.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f72b5d24d6730035128b238decdc4c0f2104b7056a7ca55cf047c106842ec890"}, + {file = "httptools-0.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:29bf97a5c532da9c7a04de2c7a9c31d1d54f3abd65a464119b680206bbbb1055"}, + {file = "httptools-0.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:98993805f1e3cdb53de4eed02b55dcc953cdf017ba7bbb2fd89226c086a6d855"}, + {file = "httptools-0.4.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d9b90bf58f3ba04e60321a23a8723a1ff2a9377502535e70495e5ada8e6e6722"}, + {file = "httptools-0.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1a99346ebcb801b213c591540837340bdf6fd060a8687518d01c607d338b7424"}, + {file = "httptools-0.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:645373c070080e632480a3d251d892cb795be3d3a15f86975d0f1aca56fd230d"}, + {file = "httptools-0.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:34d2903dd2a3dd85d33705b6fde40bf91fc44411661283763fd0746723963c83"}, + {file = "httptools-0.4.0.tar.gz", hash = "sha256:2c9a930c378b3d15d6b695fb95ebcff81a7395b4f9775c4f10a076beb0b2c1ff"}, +] +idna = [ + {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, + {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, +] +loguru = [ + {file = "loguru-0.6.0-py3-none-any.whl", hash = "sha256:4e2414d534a2ab57573365b3e6d0234dfb1d84b68b7f3b948e6fb743860a77c3"}, + {file = "loguru-0.6.0.tar.gz", hash = "sha256:066bd06758d0a513e9836fd9c6b5a75bfb3fd36841f4b996bc60b547a309d41c"}, +] +pydantic = [ + {file = "pydantic-1.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cb23bcc093697cdea2708baae4f9ba0e972960a835af22560f6ae4e7e47d33f5"}, + {file = "pydantic-1.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1d5278bd9f0eee04a44c712982343103bba63507480bfd2fc2790fa70cd64cf4"}, + {file = "pydantic-1.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab624700dc145aa809e6f3ec93fb8e7d0f99d9023b713f6a953637429b437d37"}, + {file = "pydantic-1.9.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c8d7da6f1c1049eefb718d43d99ad73100c958a5367d30b9321b092771e96c25"}, + {file = "pydantic-1.9.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:3c3b035103bd4e2e4a28da9da7ef2fa47b00ee4a9cf4f1a735214c1bcd05e0f6"}, + {file = "pydantic-1.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3011b975c973819883842c5ab925a4e4298dffccf7782c55ec3580ed17dc464c"}, + {file = "pydantic-1.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:086254884d10d3ba16da0588604ffdc5aab3f7f09557b998373e885c690dd398"}, + {file = "pydantic-1.9.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:0fe476769acaa7fcddd17cadd172b156b53546ec3614a4d880e5d29ea5fbce65"}, + {file = "pydantic-1.9.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c8e9dcf1ac499679aceedac7e7ca6d8641f0193c591a2d090282aaf8e9445a46"}, + {file = "pydantic-1.9.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d1e4c28f30e767fd07f2ddc6f74f41f034d1dd6bc526cd59e63a82fe8bb9ef4c"}, + {file = "pydantic-1.9.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:c86229333cabaaa8c51cf971496f10318c4734cf7b641f08af0a6fbf17ca3054"}, + {file = "pydantic-1.9.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:c0727bda6e38144d464daec31dff936a82917f431d9c39c39c60a26567eae3ed"}, + {file = "pydantic-1.9.0-cp36-cp36m-win_amd64.whl", hash = "sha256:dee5ef83a76ac31ab0c78c10bd7d5437bfdb6358c95b91f1ba7ff7b76f9996a1"}, + {file = "pydantic-1.9.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d9c9bdb3af48e242838f9f6e6127de9be7063aad17b32215ccc36a09c5cf1070"}, + {file = "pydantic-1.9.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ee7e3209db1e468341ef41fe263eb655f67f5c5a76c924044314e139a1103a2"}, + {file = "pydantic-1.9.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0b6037175234850ffd094ca77bf60fb54b08b5b22bc85865331dd3bda7a02fa1"}, + {file = "pydantic-1.9.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b2571db88c636d862b35090ccf92bf24004393f85c8870a37f42d9f23d13e032"}, + {file = "pydantic-1.9.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8b5ac0f1c83d31b324e57a273da59197c83d1bb18171e512908fe5dc7278a1d6"}, + {file = "pydantic-1.9.0-cp37-cp37m-win_amd64.whl", hash = "sha256:bbbc94d0c94dd80b3340fc4f04fd4d701f4b038ebad72c39693c794fd3bc2d9d"}, + {file = "pydantic-1.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e0896200b6a40197405af18828da49f067c2fa1f821491bc8f5bde241ef3f7d7"}, + {file = "pydantic-1.9.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7bdfdadb5994b44bd5579cfa7c9b0e1b0e540c952d56f627eb227851cda9db77"}, + {file = "pydantic-1.9.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:574936363cd4b9eed8acdd6b80d0143162f2eb654d96cb3a8ee91d3e64bf4cf9"}, + {file = "pydantic-1.9.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c556695b699f648c58373b542534308922c46a1cda06ea47bc9ca45ef5b39ae6"}, + {file = "pydantic-1.9.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:f947352c3434e8b937e3aa8f96f47bdfe6d92779e44bb3f41e4c213ba6a32145"}, + {file = "pydantic-1.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5e48ef4a8b8c066c4a31409d91d7ca372a774d0212da2787c0d32f8045b1e034"}, + {file = "pydantic-1.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:96f240bce182ca7fe045c76bcebfa0b0534a1bf402ed05914a6f1dadff91877f"}, + {file = "pydantic-1.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:815ddebb2792efd4bba5488bc8fde09c29e8ca3227d27cf1c6990fc830fd292b"}, + {file = "pydantic-1.9.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6c5b77947b9e85a54848343928b597b4f74fc364b70926b3c4441ff52620640c"}, + {file = "pydantic-1.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c68c3bc88dbda2a6805e9a142ce84782d3930f8fdd9655430d8576315ad97ce"}, + {file = "pydantic-1.9.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5a79330f8571faf71bf93667d3ee054609816f10a259a109a0738dac983b23c3"}, + {file = "pydantic-1.9.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f5a64b64ddf4c99fe201ac2724daada8595ada0d102ab96d019c1555c2d6441d"}, + {file = "pydantic-1.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a733965f1a2b4090a5238d40d983dcd78f3ecea221c7af1497b845a9709c1721"}, + {file = "pydantic-1.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:2cc6a4cb8a118ffec2ca5fcb47afbacb4f16d0ab8b7350ddea5e8ef7bcc53a16"}, + {file = "pydantic-1.9.0-py3-none-any.whl", hash = "sha256:085ca1de245782e9b46cefcf99deecc67d418737a1fd3f6a4f511344b613a5b3"}, + {file = "pydantic-1.9.0.tar.gz", hash = "sha256:742645059757a56ecd886faf4ed2441b9c0cd406079c2b4bee51bcc3fbcd510a"}, +] +pygments = [ + {file = "Pygments-2.12.0-py3-none-any.whl", hash = "sha256:dc9c10fb40944260f6ed4c688ece0cd2048414940f1cea51b8b226318411c519"}, + {file = "Pygments-2.12.0.tar.gz", hash = "sha256:5eb116118f9612ff1ee89ac96437bb6b49e8f04d8a13b514ba26f620208e26eb"}, +] +python-dateutil = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] +python-dotenv = [ + {file = "python-dotenv-0.20.0.tar.gz", hash = "sha256:b7e3b04a59693c42c36f9ab1cc2acc46fa5df8c78e178fc33a8d4cd05c8d498f"}, + {file = "python_dotenv-0.20.0-py3-none-any.whl", hash = "sha256:d92a187be61fe482e4fd675b6d52200e7be63a12b724abbf931a40ce4fa92938"}, +] +python-multipart = [ + {file = "python-multipart-0.0.5.tar.gz", hash = "sha256:f7bb5f611fc600d15fa47b3974c8aa16e93724513b49b5f95c81e6624c83fa43"}, +] +pyyaml = [ + {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, + {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, + {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, + {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, + {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, + {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, + {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, + {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, + {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, + {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, + {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, + {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, + {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, + {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, + {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, + {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, +] +six = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] +sniffio = [ + {file = "sniffio-1.2.0-py3-none-any.whl", hash = "sha256:471b71698eac1c2112a40ce2752bb2f4a4814c22a54a3eed3676bc0f5ca9f663"}, + {file = "sniffio-1.2.0.tar.gz", hash = "sha256:c4666eecec1d3f50960c6bdf61ab7bc350648da6c126e3cf6898d8cd4ddcd3de"}, +] +starlette = [ + {file = "starlette-0.19.1-py3-none-any.whl", hash = "sha256:5a60c5c2d051f3a8eb546136aa0c9399773a689595e099e0877704d5888279bf"}, + {file = "starlette-0.19.1.tar.gz", hash = "sha256:c6d21096774ecb9639acad41b86b7706e52ba3bf1dc13ea4ed9ad593d47e24c7"}, +] +strawberry-graphql = [ + {file = "strawberry-graphql-0.111.2.tar.gz", hash = "sha256:cab6f87181244c4fba42447824d13b4de81ad82fcd5ef9738b1da937485fa45c"}, + {file = "strawberry_graphql-0.111.2-py3-none-any.whl", hash = "sha256:27a387e64df40f64d648df7e5a491f6876fc1605f95972e7802acceb84fa8450"}, +] +typing-extensions = [ + {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"}, + {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"}, +] +uvicorn = [ + {file = "uvicorn-0.17.6-py3-none-any.whl", hash = "sha256:19e2a0e96c9ac5581c01eb1a79a7d2f72bb479691acd2b8921fce48ed5b961a6"}, + {file = "uvicorn-0.17.6.tar.gz", hash = "sha256:5180f9d059611747d841a4a4c4ab675edf54c8489e97f96d0583ee90ac3bfc23"}, +] +uvloop = [ + {file = "uvloop-0.16.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6224f1401025b748ffecb7a6e2652b17768f30b1a6a3f7b44660e5b5b690b12d"}, + {file = "uvloop-0.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:30ba9dcbd0965f5c812b7c2112a1ddf60cf904c1c160f398e7eed3a6b82dcd9c"}, + {file = "uvloop-0.16.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:bd53f7f5db562f37cd64a3af5012df8cac2c464c97e732ed556800129505bd64"}, + {file = "uvloop-0.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:772206116b9b57cd625c8a88f2413df2fcfd0b496eb188b82a43bed7af2c2ec9"}, + {file = "uvloop-0.16.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b572256409f194521a9895aef274cea88731d14732343da3ecdb175228881638"}, + {file = "uvloop-0.16.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:04ff57aa137230d8cc968f03481176041ae789308b4d5079118331ab01112450"}, + {file = "uvloop-0.16.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a19828c4f15687675ea912cc28bbcb48e9bb907c801873bd1519b96b04fb805"}, + {file = "uvloop-0.16.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e814ac2c6f9daf4c36eb8e85266859f42174a4ff0d71b99405ed559257750382"}, + {file = "uvloop-0.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bd8f42ea1ea8f4e84d265769089964ddda95eb2bb38b5cbe26712b0616c3edee"}, + {file = "uvloop-0.16.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:647e481940379eebd314c00440314c81ea547aa636056f554d491e40503c8464"}, + {file = "uvloop-0.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e0d26fa5875d43ddbb0d9d79a447d2ace4180d9e3239788208527c4784f7cab"}, + {file = "uvloop-0.16.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6ccd57ae8db17d677e9e06192e9c9ec4bd2066b77790f9aa7dede2cc4008ee8f"}, + {file = "uvloop-0.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:089b4834fd299d82d83a25e3335372f12117a7d38525217c2258e9b9f4578897"}, + {file = "uvloop-0.16.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98d117332cc9e5ea8dfdc2b28b0a23f60370d02e1395f88f40d1effd2cb86c4f"}, + {file = "uvloop-0.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e5f2e2ff51aefe6c19ee98af12b4ae61f5be456cd24396953244a30880ad861"}, + {file = "uvloop-0.16.0.tar.gz", hash = "sha256:f74bc20c7b67d1c27c72601c78cf95be99d5c2cdd4514502b4f3eb0933ff1228"}, +] +watchgod = [ + {file = "watchgod-0.8.2-py3-none-any.whl", hash = "sha256:2f3e8137d98f493ff58af54ea00f4d1433a6afe2ed08ab331a657df468c6bfce"}, + {file = "watchgod-0.8.2.tar.gz", hash = "sha256:cb11ff66657befba94d828e3b622d5fb76f22fbda1376f355f3e6e51e97d9450"}, +] +websockets = [ + {file = "websockets-10.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:661f641b44ed315556a2fa630239adfd77bd1b11cb0b9d96ed8ad90b0b1e4978"}, + {file = "websockets-10.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b529fdfa881b69fe563dbd98acce84f3e5a67df13de415e143ef053ff006d500"}, + {file = "websockets-10.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f351c7d7d92f67c0609329ab2735eee0426a03022771b00102816a72715bb00b"}, + {file = "websockets-10.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:379e03422178436af4f3abe0aa8f401aa77ae2487843738542a75faf44a31f0c"}, + {file = "websockets-10.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e904c0381c014b914136c492c8fa711ca4cced4e9b3d110e5e7d436d0fc289e8"}, + {file = "websockets-10.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e7e6f2d6fd48422071cc8a6f8542016f350b79cc782752de531577d35e9bd677"}, + {file = "websockets-10.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b9c77f0d1436ea4b4dc089ed8335fa141e6a251a92f75f675056dac4ab47a71e"}, + {file = "websockets-10.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e6fa05a680e35d0fcc1470cb070b10e6fe247af54768f488ed93542e71339d6f"}, + {file = "websockets-10.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2f94fa3ae454a63ea3a19f73b95deeebc9f02ba2d5617ca16f0bbdae375cda47"}, + {file = "websockets-10.3-cp310-cp310-win32.whl", hash = "sha256:6ed1d6f791eabfd9808afea1e068f5e59418e55721db8b7f3bfc39dc831c42ae"}, + {file = "websockets-10.3-cp310-cp310-win_amd64.whl", hash = "sha256:347974105bbd4ea068106ec65e8e8ebd86f28c19e529d115d89bd8cc5cda3079"}, + {file = "websockets-10.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fab7c640815812ed5f10fbee7abbf58788d602046b7bb3af9b1ac753a6d5e916"}, + {file = "websockets-10.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:994cdb1942a7a4c2e10098d9162948c9e7b235df755de91ca33f6e0481366fdb"}, + {file = "websockets-10.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:aad5e300ab32036eb3fdc350ad30877210e2f51bceaca83fb7fef4d2b6c72b79"}, + {file = "websockets-10.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e49ea4c1a9543d2bd8a747ff24411509c29e4bdcde05b5b0895e2120cb1a761d"}, + {file = "websockets-10.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:6ea6b300a6bdd782e49922d690e11c3669828fe36fc2471408c58b93b5535a98"}, + {file = "websockets-10.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:ef5ce841e102278c1c2e98f043db99d6755b1c58bde475516aef3a008ed7f28e"}, + {file = "websockets-10.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d1655a6fc7aecd333b079d00fb3c8132d18988e47f19740c69303bf02e9883c6"}, + {file = "websockets-10.3-cp37-cp37m-win32.whl", hash = "sha256:83e5ca0d5b743cde3d29fda74ccab37bdd0911f25bd4cdf09ff8b51b7b4f2fa1"}, + {file = "websockets-10.3-cp37-cp37m-win_amd64.whl", hash = "sha256:da4377904a3379f0c1b75a965fff23b28315bcd516d27f99a803720dfebd94d4"}, + {file = "websockets-10.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a1e15b230c3613e8ea82c9fc6941b2093e8eb939dd794c02754d33980ba81e36"}, + {file = "websockets-10.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:31564a67c3e4005f27815634343df688b25705cccb22bc1db621c781ddc64c69"}, + {file = "websockets-10.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c8d1d14aa0f600b5be363077b621b1b4d1eb3fbf90af83f9281cda668e6ff7fd"}, + {file = "websockets-10.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8fbd7d77f8aba46d43245e86dd91a8970eac4fb74c473f8e30e9c07581f852b2"}, + {file = "websockets-10.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:210aad7fdd381c52e58777560860c7e6110b6174488ef1d4b681c08b68bf7f8c"}, + {file = "websockets-10.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6075fd24df23133c1b078e08a9b04a3bc40b31a8def4ee0b9f2c8865acce913e"}, + {file = "websockets-10.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7f6d96fdb0975044fdd7953b35d003b03f9e2bcf85f2d2cf86285ece53e9f991"}, + {file = "websockets-10.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c7250848ce69559756ad0086a37b82c986cd33c2d344ab87fea596c5ac6d9442"}, + {file = "websockets-10.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:28dd20b938a57c3124028680dc1600c197294da5db4292c76a0b48efb3ed7f76"}, + {file = "websockets-10.3-cp38-cp38-win32.whl", hash = "sha256:54c000abeaff6d8771a4e2cef40900919908ea7b6b6a30eae72752607c6db559"}, + {file = "websockets-10.3-cp38-cp38-win_amd64.whl", hash = "sha256:7ab36e17af592eec5747c68ef2722a74c1a4a70f3772bc661079baf4ae30e40d"}, + {file = "websockets-10.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a141de3d5a92188234afa61653ed0bbd2dde46ad47b15c3042ffb89548e77094"}, + {file = "websockets-10.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:97bc9d41e69a7521a358f9b8e44871f6cdeb42af31815c17aed36372d4eec667"}, + {file = "websockets-10.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d6353ba89cfc657a3f5beabb3b69be226adbb5c6c7a66398e17809b0ce3c4731"}, + {file = "websockets-10.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec2b0ab7edc8cd4b0eb428b38ed89079bdc20c6bdb5f889d353011038caac2f9"}, + {file = "websockets-10.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:85506b3328a9e083cc0a0fb3ba27e33c8db78341b3eb12eb72e8afd166c36680"}, + {file = "websockets-10.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8af75085b4bc0b5c40c4a3c0e113fa95e84c60f4ed6786cbb675aeb1ee128247"}, + {file = "websockets-10.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:07cdc0a5b2549bcfbadb585ad8471ebdc7bdf91e32e34ae3889001c1c106a6af"}, + {file = "websockets-10.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:5b936bf552e4f6357f5727579072ff1e1324717902127ffe60c92d29b67b7be3"}, + {file = "websockets-10.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e4e08305bfd76ba8edab08dcc6496f40674f44eb9d5e23153efa0a35750337e8"}, + {file = "websockets-10.3-cp39-cp39-win32.whl", hash = "sha256:bb621ec2dbbbe8df78a27dbd9dd7919f9b7d32a73fafcb4d9252fc4637343582"}, + {file = "websockets-10.3-cp39-cp39-win_amd64.whl", hash = "sha256:51695d3b199cd03098ae5b42833006a0f43dc5418d3102972addc593a783bc02"}, + {file = "websockets-10.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:907e8247480f287aa9bbc9391bd6de23c906d48af54c8c421df84655eef66af7"}, + {file = "websockets-10.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b1359aba0ff810d5830d5ab8e2c4a02bebf98a60aa0124fb29aa78cfdb8031f"}, + {file = "websockets-10.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:93d5ea0b5da8d66d868b32c614d2b52d14304444e39e13a59566d4acb8d6e2e4"}, + {file = "websockets-10.3-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7934e055fd5cd9dee60f11d16c8d79c4567315824bacb1246d0208a47eca9755"}, + {file = "websockets-10.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:3eda1cb7e9da1b22588cefff09f0951771d6ee9fa8dbe66f5ae04cc5f26b2b55"}, + {file = "websockets-10.3.tar.gz", hash = "sha256:fc06cc8073c8e87072138ba1e431300e2d408f054b27047d047b549455066ff4"}, +] +win32-setctime = [ + {file = "win32_setctime-1.1.0-py3-none-any.whl", hash = "sha256:231db239e959c2fe7eb1d7dc129f11172354f98361c4fa2d6d2d7e278baa8aad"}, + {file = "win32_setctime-1.1.0.tar.gz", hash = "sha256:15cf5750465118d6929ae4de4eb46e8edae9a5634350c01ba582df868e932cb2"}, +] diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..9fbdb8b --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,19 @@ +[tool.poetry] +name = "traefik-manager" +version = "0.1.0" +description = "" +authors = ["Your Name "] +license = "MIT" + +[tool.poetry.dependencies] +python = "^3.10" +fastapi = "^0.77.1" +uvicorn = {extras = ["standard"], version = "^0.17.6"} +strawberry-graphql = "^0.111.2" +loguru = "^0.6.0" + +[tool.poetry.dev-dependencies] + +[build-system] +requires = ["poetry-core>=1.0.0"] +build-backend = "poetry.core.masonry.api"