From 93189789f261f6eaa47b785517c385f5e8c0aa07 Mon Sep 17 00:00:00 2001
From: L-Nafaryus
+ Materia is a simple and fast cloud storage
+
- Materia is easy and fast cloud storage
+
+
+ Materia is a simple and fast cloud storage +
+ +**Documentation**: [https://storage.elnafo.ru/docs](https://storage.elnafo.ru/docs) + +**Source**: [https://vcs.elnafo.ru/L-Nafaryus/materia](https://vcs.elnafo.ru/L-Nafaryus/materia) + +Materia is a modern and high-performance cloud storage (thanks to FastAPI and Vue) built with REST in mind. + +/// warning + +This project is still in development. +You can test it but at your own risk. + +You can also create an [issue](https://github.com/L-Nafaryus/materia/issues). + +/// + +## Example + +### Standalone backend server + +/// warning + +The project is currently unstable for packaging due to the complex setup. +So the best way is to use the sources. +It also uses a specific development environment via Nix. +Tools like Podman can easily be replaced with Docker, so be careful. + +/// + +First of all you need to prepare working instances of Postgres (database) and Redis (broker). There are many ways, you can choose any. + +- Postgres: + +```sh +nix build .#postgresql-devel +podman load < result +podman run -p 54320:5432 --name database -dt postgresql:latest +``` + +- Redis: + +```sh +nix build .#redis-devel +podman load < result +podman run -p 63790:6379 --name cache -dt redis:latest +``` + +- Development environment: + +```sh +nix develop +pdm install --dev +eval $(pdm venv activate) +``` + +- Running tests (pytest): + +```sh +pytest +``` + +- Running server: + +```sh +MATERIA_DATABASE__PORT=54320 MATERIA_CACHE__PORT=63790 materia start +``` + +- Generating configuration and starting with it: + +```sh +materia config export --path ./config.toml +materia start --config config.toml +``` + +### Standalone frontend server + +The frontend does not include a client by default. It must be generated from the OpenAPI specification which in turn must be generated from the current state of the FastAPI application. After that you can safely run the Vite server or build the entire Vue project. + +```sh +nix develop +pdm install --dev +eval $(pdm venv activate) + +materia export openapi --path workspaces/frontend/openapi.json + +cd workspaces/frontend +npm install +npm run openapi +``` + +- Running frontend server: + +```sh +npm run dev +``` + +In development mode, the server is configured to the address and port of the backend server. + +## Design + +At the current stage, the PDM package manager is used, since it is the only one that copes well with the concept of a monorepository. At the output, two Python packages should be built - materia (backend server) and materia-frontend (which wraps a built version of the NPM package materia-frontend-vue). Documentation (optional) and the frontend are served through the backend server. + +The target platform of the project is NixOS. This also indirectly affects the approach to choosing tools for developing the current project and the support priority. And only secondly, packaging components for registries such as pypi and others. Support for the rest is a matter of time. + +## Build + +All build steps are wrapped in PDM pre-build scripts, so in a typical case you only need PDM and NodeJS. + +- materia: + +```sh +nix develop +pdm build --skip ":all" +``` + +- materia with documentation: + +```sh +nix develop +pdm install --prod --no-default --group docs +pdm build +``` + +- materia-frontend: + +```sh +nix develop +pdm install --prod +cd workspaces/frontend +pdm build +``` + +## License + +**materia** is licensed under the terms of the [MIT License](LICENSE). diff --git a/flake.nix b/flake.nix index 7feca98..be43d74 100644 --- a/flake.nix +++ b/flake.nix @@ -43,15 +43,54 @@ // {inherit meta;}; in { packages.x86_64-linux = { - materia-frontend-nodejs = dreamBuildPackage { + materia-server = dreamBuildPackage { + module = { + config, + lib, + dream2nix, + ... + }: { + imports = [dream2nix.modules.dream2nix.WIP-python-pdm]; + + pdm.lockfile = ./pdm.lock; + pdm.pyproject = ./pyproject.toml; + + deps = _: { + python = pkgs.python312; + }; + + mkDerivation = { + src = ./.; + buildInputs = [ + pkgs.python312.pkgs.pdm-backend + ]; + nativeBuildInputs = [ + pkgs.python312.pkgs.wrapPython + ]; + configurePhase = '' + ${lib.getExe pkgs.mkdocs} build -d src/materia/docs/ + ''; + # TODO: include docs + }; + }; + meta = with nixpkgs.lib; { + description = "Materia"; + license = licenses.mit; + maintainers = with bonLib.maintainers; [L-Nafaryus]; + broken = false; + mainProgram = "materia"; + }; + }; + + materia-frontend-vue = dreamBuildPackage { module = { lib, config, dream2nix, ... }: { - name = "materia-frontend"; - version = "0.0.5"; + name = "materia-frontend-vue"; + version = "0.1.1"; imports = [ dream2nix.modules.dream2nix.WIP-nodejs-builder-v3 @@ -59,6 +98,10 @@ mkDerivation = { src = ./workspaces/frontend; + configurePhase = '' + ${self.packages.x86_64-linux.materia-server}/bin/materia export openapi --path ./ + npm run openapi + ''; }; deps = {nixpkgs, ...}: { @@ -83,13 +126,13 @@ materia-frontend = dreamBuildPackage { extraArgs = { - inherit (self.packages.x86_64-linux) materia-frontend-nodejs; + inherit (self.packages.x86_64-linux) materia-frontend-vue; }; module = { config, lib, dream2nix, - materia-frontend-nodejs, + materia-frontend-vue, ... }: { imports = [dream2nix.modules.dream2nix.WIP-python-pdm]; @@ -107,7 +150,7 @@ pkgs.python312.pkgs.pdm-backend ]; configurePhase = '' - cp -rv ${materia-frontend-nodejs}/dist ./src/materia_frontend/ + cp -rv ${materia-frontend-vue}/dist ./src/materia_frontend/ ''; }; }; diff --git a/mkdocs.yml b/mkdocs.yml index 30db284..6361380 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -87,3 +87,47 @@ nav: - reference/security.md - reference/tasks.md - API: api.md + +markdown_extensions: + # Python Markdown + abbr: + attr_list: + footnotes: + md_in_html: + tables: + toc: + permalink: true + + # Python Markdown Extensions + pymdownx.betterem: + smart_enable: all + pymdownx.caret: + pymdownx.highlight: + line_spans: __span + pymdownx.inlinehilite: + pymdownx.keys: + pymdownx.mark: + pymdownx.superfences: + custom_fences: + - name: mermaid + class: mermaid + format: !!python/name:pymdownx.superfences.fence_code_format + pymdownx.tilde: + + # pymdownx blocks + pymdownx.blocks.admonition: + types: + - note + - attention + - caution + - danger + - error + - tip + - hint + - warning + # Custom types + - info + - check + pymdownx.blocks.details: + pymdownx.blocks.tab: + alternate_style: True diff --git a/pdm.lock b/pdm.lock index f17c69d..e076385 100644 --- a/pdm.lock +++ b/pdm.lock @@ -2,17 +2,17 @@ # It is not intended for manual editing. [metadata] -groups = ["default", "dev"] +groups = ["default", "dev", "docs", "frontend", "all"] strategy = ["cross_platform", "inherit_metadata"] lock_version = "4.4.1" -content_hash = "sha256:764de758c9c4b274659cef493a76abb117253e6ccf30dce9f4e61a74afce2228" +content_hash = "sha256:104d22a8697b526a94102232df0443fe395b4eb1dd8529acd933375fbcff7595" [[package]] name = "aiofiles" version = "24.1.0" requires_python = ">=3.8" summary = "File support for asyncio." -groups = ["default"] +groups = ["all", "default"] files = [ {file = "aiofiles-24.1.0-py3-none-any.whl", hash = "sha256:b4ec55f4195e3eb5d7abd1bf7e061763e864dd4954231fb8539a0ef8bb8260e5"}, {file = "aiofiles-24.1.0.tar.gz", hash = "sha256:22a075c9e5a3810f0c2e48f3008c94d68c65d763b9b03857924c99e57355166c"}, @@ -23,7 +23,7 @@ name = "aioshutil" version = "1.5" requires_python = ">=3.8" summary = "Asynchronous shutil module." -groups = ["default"] +groups = ["all", "default"] files = [ {file = "aioshutil-1.5-py3-none-any.whl", hash = "sha256:bc2a6cdcf1a8615b62f856154fd81131031d03f2834912ebb06d8a2391253652"}, {file = "aioshutil-1.5.tar.gz", hash = "sha256:2756d6cd3bb03405dc7348ac11a0b60eb949ebd63cdd15f56e922410231c1201"}, @@ -34,7 +34,7 @@ name = "aiosmtplib" version = "3.0.2" requires_python = ">=3.8" summary = "asyncio SMTP client" -groups = ["default"] +groups = ["all", "default"] files = [ {file = "aiosmtplib-3.0.2-py3-none-any.whl", hash = "sha256:8783059603a34834c7c90ca51103c3aa129d5922003b5ce98dbaa6d4440f10fc"}, {file = "aiosmtplib-3.0.2.tar.gz", hash = "sha256:08fd840f9dbc23258025dca229e8a8f04d2ccf3ecb1319585615bfc7933f7f47"}, @@ -45,7 +45,7 @@ name = "alembic" version = "1.13.2" requires_python = ">=3.8" summary = "A database migration tool for SQLAlchemy." -groups = ["default"] +groups = ["all", "default"] dependencies = [ "Mako", "SQLAlchemy>=1.3.0", @@ -61,7 +61,7 @@ name = "alembic-postgresql-enum" version = "1.3.0" requires_python = "<4.0,>=3.7" summary = "Alembic autogenerate support for creation, alteration and deletion of enums" -groups = ["default"] +groups = ["all", "default"] dependencies = [ "SQLAlchemy>=1.4", "alembic>=1.7", @@ -76,7 +76,7 @@ name = "amqp" version = "5.2.0" requires_python = ">=3.6" summary = "Low-level AMQP client for Python (fork of amqplib)." -groups = ["default"] +groups = ["all", "default"] dependencies = [ "vine<6.0.0,>=5.0.0", ] @@ -90,7 +90,7 @@ name = "annotated-types" version = "0.6.0" requires_python = ">=3.8" summary = "Reusable constraint types to use with typing.Annotated" -groups = ["default"] +groups = ["all", "default"] files = [ {file = "annotated_types-0.6.0-py3-none-any.whl", hash = "sha256:0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43"}, {file = "annotated_types-0.6.0.tar.gz", hash = "sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d"}, @@ -101,7 +101,7 @@ name = "anyio" version = "4.4.0" requires_python = ">=3.8" summary = "High level compatibility layer for multiple asynchronous event loop implementations" -groups = ["default"] +groups = ["all", "default"] dependencies = [ "idna>=2.8", "sniffio>=1.1", @@ -130,7 +130,7 @@ name = "asyncpg" version = "0.29.0" requires_python = ">=3.8.0" summary = "An asyncio PostgreSQL driver" -groups = ["default"] +groups = ["all", "default"] files = [ {file = "asyncpg-0.29.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6011b0dc29886ab424dc042bf9eeb507670a3b40aece3439944006aafe023178"}, {file = "asyncpg-0.29.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b544ffc66b039d5ec5a7454667f855f7fec08e0dfaf5a5490dfafbb7abbd2cfb"}, @@ -148,7 +148,7 @@ name = "authlib" version = "1.3.1" requires_python = ">=3.8" summary = "The ultimate Python library in building OAuth and OpenID Connect servers and clients." -groups = ["default"] +groups = ["all", "default"] dependencies = [ "cryptography", ] @@ -162,7 +162,7 @@ name = "babel" version = "2.16.0" requires_python = ">=3.8" summary = "Internationalization utilities" -groups = ["dev"] +groups = ["all", "docs"] files = [ {file = "babel-2.16.0-py3-none-any.whl", hash = "sha256:368b5b98b37c06b7daf6696391c3240c938b37767d4584413e8438c5c435fa8b"}, {file = "babel-2.16.0.tar.gz", hash = "sha256:d1f3554ca26605fe173f3de0c65f750f5a42f924499bf134de6423582298e316"}, @@ -173,7 +173,7 @@ name = "bcrypt" version = "4.1.2" requires_python = ">=3.7" summary = "Modern password hashing for your software and your servers" -groups = ["default"] +groups = ["all", "default"] files = [ {file = "bcrypt-4.1.2-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:ac621c093edb28200728a9cca214d7e838529e557027ef0581685909acd28b5e"}, {file = "bcrypt-4.1.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea505c97a5c465ab8c3ba75c0805a102ce526695cd6818c6de3b1a38f6f60da1"}, @@ -209,7 +209,7 @@ name = "billiard" version = "4.2.0" requires_python = ">=3.7" summary = "Python multiprocessing fork with improvements and bugfixes" -groups = ["default"] +groups = ["all", "default"] files = [ {file = "billiard-4.2.0-py3-none-any.whl", hash = "sha256:07aa978b308f334ff8282bd4a746e681b3513db5c9a514cbdd810cbbdc19714d"}, {file = "billiard-4.2.0.tar.gz", hash = "sha256:9a3c3184cb275aa17a732f93f65b20c525d3d9f253722d26a82194803ade5a2c"}, @@ -242,7 +242,7 @@ name = "cachetools" version = "5.4.0" requires_python = ">=3.7" summary = "Extensible memoizing collections and decorators" -groups = ["default"] +groups = ["all", "default"] files = [ {file = "cachetools-5.4.0-py3-none-any.whl", hash = "sha256:3ae3b49a3d5e28a77a0be2b37dbcb89005058959cb2323858c2657c4a8cab474"}, {file = "cachetools-5.4.0.tar.gz", hash = "sha256:b8adc2e7c07f105ced7bc56dbb6dfbe7c4a00acce20e2227b3f355be89bc6827"}, @@ -253,7 +253,7 @@ name = "celery" version = "5.4.0" requires_python = ">=3.8" summary = "Distributed Task Queue." -groups = ["default"] +groups = ["all", "default"] dependencies = [ "billiard<5.0,>=4.2.0", "click-didyoumean>=0.3.0", @@ -275,7 +275,7 @@ name = "certifi" version = "2024.7.4" requires_python = ">=3.6" summary = "Python package for providing Mozilla's CA Bundle." -groups = ["default", "dev"] +groups = ["all", "default", "docs"] files = [ {file = "certifi-2024.7.4-py3-none-any.whl", hash = "sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90"}, {file = "certifi-2024.7.4.tar.gz", hash = "sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b"}, @@ -286,7 +286,7 @@ name = "cffi" version = "1.16.0" requires_python = ">=3.8" summary = "Foreign Function Interface for Python calling C code." -groups = ["default"] +groups = ["all", "default"] marker = "platform_python_implementation != \"PyPy\"" dependencies = [ "pycparser", @@ -310,7 +310,7 @@ name = "chardet" version = "5.2.0" requires_python = ">=3.7" summary = "Universal encoding detector for Python 3" -groups = ["default"] +groups = ["all", "default"] files = [ {file = "chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970"}, {file = "chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7"}, @@ -321,7 +321,7 @@ name = "charset-normalizer" version = "3.3.2" requires_python = ">=3.7.0" summary = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -groups = ["default", "dev"] +groups = ["all", "default", "docs"] files = [ {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, @@ -347,7 +347,7 @@ name = "click" version = "8.1.7" requires_python = ">=3.7" summary = "Composable command line interface toolkit" -groups = ["default", "dev"] +groups = ["all", "default", "dev", "docs"] dependencies = [ "colorama; platform_system == \"Windows\"", ] @@ -361,7 +361,7 @@ name = "click-didyoumean" version = "0.3.1" requires_python = ">=3.6.2" summary = "Enables git-like *did-you-mean* feature in click" -groups = ["default"] +groups = ["all", "default"] dependencies = [ "click>=7", ] @@ -374,7 +374,7 @@ files = [ name = "click-plugins" version = "1.1.1" summary = "An extension module for click to enable registering CLI commands via setuptools entry-points." -groups = ["default"] +groups = ["all", "default"] dependencies = [ "click>=4.0", ] @@ -388,7 +388,7 @@ name = "click-repl" version = "0.3.0" requires_python = ">=3.6" summary = "REPL plugin for Click" -groups = ["default"] +groups = ["all", "default"] dependencies = [ "click>=7.0", "prompt-toolkit>=3.0.36", @@ -403,7 +403,7 @@ name = "colorama" version = "0.4.6" requires_python = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" summary = "Cross-platform colored terminal text." -groups = ["default", "dev"] +groups = ["all", "default", "dev", "docs", "frontend"] files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, @@ -460,7 +460,7 @@ name = "cryptography" version = "43.0.0" requires_python = ">=3.7" summary = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." -groups = ["default"] +groups = ["all", "default"] dependencies = [ "cffi>=1.12; platform_python_implementation != \"PyPy\"", ] @@ -499,7 +499,7 @@ name = "cssselect" version = "1.2.0" requires_python = ">=3.7" summary = "cssselect parses CSS3 Selectors and translates them to XPath 1.0" -groups = ["default"] +groups = ["all", "default"] files = [ {file = "cssselect-1.2.0-py2.py3-none-any.whl", hash = "sha256:da1885f0c10b60c03ed5eccbb6b68d6eff248d91976fcde348f395d54c9fd35e"}, {file = "cssselect-1.2.0.tar.gz", hash = "sha256:666b19839cfaddb9ce9d36bfe4c969132c647b92fc9088c4e23f786b30f1b3dc"}, @@ -510,7 +510,7 @@ name = "cssutils" version = "2.11.1" requires_python = ">=3.8" summary = "A CSS Cascading Style Sheets library for Python" -groups = ["default"] +groups = ["all", "default"] dependencies = [ "more-itertools", ] @@ -524,7 +524,7 @@ name = "dnspython" version = "2.6.1" requires_python = ">=3.8" summary = "DNS toolkit" -groups = ["default"] +groups = ["all", "default"] files = [ {file = "dnspython-2.6.1-py3-none-any.whl", hash = "sha256:5ef3b9680161f6fa89daf8ad451b5f1a33b18ae8a1c6778cdf4b43f08c0a6e50"}, {file = "dnspython-2.6.1.tar.gz", hash = "sha256:e8f0f9c23a7b7cb99ded64e6c3a6f3e701d78f50c55e002b839dea7225cff7cc"}, @@ -535,7 +535,7 @@ name = "email-validator" version = "2.2.0" requires_python = ">=3.8" summary = "A robust email address syntax and deliverability validation library." -groups = ["default"] +groups = ["all", "default"] dependencies = [ "dnspython>=2.0.0", "idna>=2.0.0", @@ -549,7 +549,7 @@ files = [ name = "emails" version = "0.6" summary = "Modern python library for emails." -groups = ["default"] +groups = ["all", "default"] dependencies = [ "chardet", "cssutils", @@ -568,7 +568,7 @@ name = "eventlet" version = "0.36.1" requires_python = ">=3.7" summary = "Highly concurrent networking library" -groups = ["default"] +groups = ["all", "default"] dependencies = [ "dnspython>=1.15.0", "greenlet>=1.0", @@ -583,7 +583,7 @@ name = "fastapi" version = "0.112.0" requires_python = ">=3.8" summary = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" -groups = ["default"] +groups = ["all", "default"] dependencies = [ "pydantic!=1.8,!=1.8.1,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.7.4", "starlette<0.38.0,>=0.37.2", @@ -598,7 +598,7 @@ files = [ name = "ghp-import" version = "2.1.0" summary = "Copy your docs directly to the gh-pages branch." -groups = ["dev"] +groups = ["all", "docs"] dependencies = [ "python-dateutil>=2.8.1", ] @@ -612,7 +612,7 @@ name = "greenlet" version = "3.0.3" requires_python = ">=3.7" summary = "Lightweight in-process concurrent programming" -groups = ["default"] +groups = ["all", "default"] files = [ {file = "greenlet-3.0.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:70fb482fdf2c707765ab5f0b6655e9cfcf3780d8d87355a063547b41177599be"}, {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4d1ac74f5c0c0524e4a24335350edad7e5f03b9532da7ea4d3c54d527784f2e"}, @@ -631,7 +631,7 @@ name = "griffe" version = "1.2.0" requires_python = ">=3.8" summary = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." -groups = ["dev"] +groups = ["all", "docs"] dependencies = [ "colorama>=0.4", ] @@ -642,17 +642,17 @@ files = [ [[package]] name = "griffe-typingdoc" -version = "0.2.6" +version = "0.2.7" requires_python = ">=3.8" summary = "Griffe extension for PEP 727 – Documentation Metadata in Typing." -groups = ["dev"] +groups = ["all", "docs"] dependencies = [ "griffe>=0.49", "typing-extensions>=4.7", ] files = [ - {file = "griffe_typingdoc-0.2.6-py3-none-any.whl", hash = "sha256:2726e6cf1e986f42fe9cab4a95cef103a745327f035a32055816849ca47893e4"}, - {file = "griffe_typingdoc-0.2.6.tar.gz", hash = "sha256:852a17c1e2d29bbbf14a287e7cc5982669343cf60a4ea1618e486eb57aba3248"}, + {file = "griffe_typingdoc-0.2.7-py3-none-any.whl", hash = "sha256:74a825df32fc87fcae2f221df5c5524dca23155cd3c04ec9fa46493669d3cf54"}, + {file = "griffe_typingdoc-0.2.7.tar.gz", hash = "sha256:800841e99f8844ea3c1fae80b19bede7d8eed4195a2586f5db753f7a73f4931d"}, ] [[package]] @@ -660,7 +660,7 @@ name = "gunicorn" version = "22.0.0" requires_python = ">=3.7" summary = "WSGI HTTP Server for UNIX" -groups = ["default"] +groups = ["all", "default"] dependencies = [ "packaging", ] @@ -674,7 +674,7 @@ name = "h11" version = "0.14.0" requires_python = ">=3.7" summary = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" -groups = ["default"] +groups = ["all", "default"] files = [ {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, @@ -685,7 +685,7 @@ name = "hiredis" version = "3.0.0" requires_python = ">=3.8" summary = "Python wrapper for hiredis" -groups = ["default"] +groups = ["all", "default"] files = [ {file = "hiredis-3.0.0-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:484025d2eb8f6348f7876fc5a2ee742f568915039fcb31b478fd5c242bb0fe3a"}, {file = "hiredis-3.0.0-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:fcdb552ffd97151dab8e7bc3ab556dfa1512556b48a367db94b5c20253a35ee1"}, @@ -728,7 +728,7 @@ name = "httpcore" version = "1.0.5" requires_python = ">=3.8" summary = "A minimal low-level HTTP client." -groups = ["default"] +groups = ["all", "default"] dependencies = [ "certifi", "h11<0.15,>=0.13", @@ -743,7 +743,7 @@ name = "httptools" version = "0.6.1" requires_python = ">=3.8.0" summary = "A collection of framework independent HTTP protocol utils." -groups = ["default"] +groups = ["all", "default"] files = [ {file = "httptools-0.6.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:75c8022dca7935cba14741a42744eee13ba05db00b27a4b940f0d646bd4d56d0"}, {file = "httptools-0.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:48ed8129cd9a0d62cf4d1575fcf90fb37e3ff7d5654d3a5814eb3d55f36478c2"}, @@ -760,7 +760,7 @@ name = "httpx" version = "0.27.0" requires_python = ">=3.8" summary = "The next generation HTTP client." -groups = ["default"] +groups = ["all", "default"] dependencies = [ "anyio", "certifi", @@ -778,7 +778,7 @@ name = "idna" version = "3.7" requires_python = ">=3.5" summary = "Internationalized Domain Names in Applications (IDNA)" -groups = ["default", "dev"] +groups = ["all", "default", "docs"] files = [ {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, @@ -800,7 +800,7 @@ name = "jinja2" version = "3.1.4" requires_python = ">=3.7" summary = "A very fast and expressive template engine." -groups = ["default", "dev"] +groups = ["all", "default", "docs"] dependencies = [ "MarkupSafe>=2.0", ] @@ -814,7 +814,7 @@ name = "kombu" version = "5.4.0" requires_python = ">=3.8" summary = "Messaging library for Python." -groups = ["default"] +groups = ["all", "default"] dependencies = [ "amqp<6.0.0,>=5.1.1", "vine==5.1.0", @@ -829,7 +829,7 @@ name = "loguru" version = "0.7.2" requires_python = ">=3.5" summary = "Python logging made (stupidly) simple" -groups = ["default", "dev"] +groups = ["all", "default", "dev", "frontend"] dependencies = [ "colorama>=0.3.4; sys_platform == \"win32\"", "win32-setctime>=1.0.0; sys_platform == \"win32\"", @@ -844,7 +844,7 @@ name = "lxml" version = "5.2.2" requires_python = ">=3.6" summary = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." -groups = ["default"] +groups = ["all", "default"] files = [ {file = "lxml-5.2.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:7429e7faa1a60cad26ae4227f4dd0459efde239e494c7312624ce228e04f6391"}, {file = "lxml-5.2.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:50ccb5d355961c0f12f6cf24b7187dbabd5433f29e15147a67995474f27d1776"}, @@ -899,7 +899,7 @@ name = "mako" version = "1.3.5" requires_python = ">=3.8" summary = "A super-fast templating language that borrows the best ideas from the existing templating languages." -groups = ["default"] +groups = ["all", "default"] dependencies = [ "MarkupSafe>=0.9.2", ] @@ -913,7 +913,7 @@ name = "markdown" version = "3.7" requires_python = ">=3.8" summary = "Python implementation of John Gruber's Markdown." -groups = ["dev"] +groups = ["all", "docs"] files = [ {file = "Markdown-3.7-py3-none-any.whl", hash = "sha256:7eb6df5690b81a1d7942992c97fad2938e956e79df20cbc6186e9c3a77b1c803"}, {file = "markdown-3.7.tar.gz", hash = "sha256:2ae2471477cfd02dbbf038d5d9bc226d40def84b4fe2986e49b59b6b472bbed2"}, @@ -924,7 +924,7 @@ name = "markupsafe" version = "2.1.5" requires_python = ">=3.7" summary = "Safely add untrusted strings to HTML/XML markup." -groups = ["default", "dev"] +groups = ["all", "default", "docs"] files = [ {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"}, {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"}, @@ -946,7 +946,7 @@ requires_python = ">=3.12,<3.13" editable = true path = "./workspaces/frontend" summary = "Materia frontend" -groups = ["dev"] +groups = ["all", "dev", "frontend"] dependencies = [ "loguru<1.0.0,>=0.7.2", ] @@ -956,7 +956,7 @@ name = "mergedeep" version = "1.3.4" requires_python = ">=3.6" summary = "A deep merge function for 🐍." -groups = ["dev"] +groups = ["all", "docs"] files = [ {file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"}, {file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"}, @@ -967,7 +967,7 @@ name = "mkdocs" version = "1.6.1" requires_python = ">=3.8" summary = "Project documentation with Markdown." -groups = ["dev"] +groups = ["all", "docs"] dependencies = [ "click>=7.0", "colorama>=0.4; platform_system == \"Windows\"", @@ -993,7 +993,7 @@ name = "mkdocs-autorefs" version = "1.2.0" requires_python = ">=3.8" summary = "Automatically link across pages in MkDocs." -groups = ["dev"] +groups = ["all", "docs"] dependencies = [ "Markdown>=3.3", "markupsafe>=2.0.1", @@ -1009,7 +1009,7 @@ name = "mkdocs-get-deps" version = "0.2.0" requires_python = ">=3.8" summary = "MkDocs extension that lists all dependencies according to a mkdocs.yml file" -groups = ["dev"] +groups = ["all", "docs"] dependencies = [ "mergedeep>=1.3.4", "platformdirs>=2.2.0", @@ -1022,10 +1022,10 @@ files = [ [[package]] name = "mkdocs-material" -version = "9.5.34" +version = "9.5.38" requires_python = ">=3.8" summary = "Documentation that simply works" -groups = ["dev"] +groups = ["all", "docs"] dependencies = [ "babel~=2.10", "colorama~=0.4", @@ -1040,8 +1040,8 @@ dependencies = [ "requests~=2.26", ] files = [ - {file = "mkdocs_material-9.5.34-py3-none-any.whl", hash = "sha256:54caa8be708de2b75167fd4d3b9f3d949579294f49cb242515d4653dbee9227e"}, - {file = "mkdocs_material-9.5.34.tar.gz", hash = "sha256:1e60ddf716cfb5679dfd65900b8a25d277064ed82d9a53cd5190e3f894df7840"}, + {file = "mkdocs_material-9.5.38-py3-none-any.whl", hash = "sha256:d4779051d52ba9f1e7e344b34de95449c7c366c212b388e4a2db9a3db043c228"}, + {file = "mkdocs_material-9.5.38.tar.gz", hash = "sha256:1843c5171ad6b489550aeaf7358e5b7128cc03ddcf0fb4d91d19aa1e691a63b8"}, ] [[package]] @@ -1049,7 +1049,7 @@ name = "mkdocs-material-extensions" version = "1.3.1" requires_python = ">=3.8" summary = "Extension pack for Python Markdown and MkDocs Material." -groups = ["dev"] +groups = ["all", "docs"] files = [ {file = "mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31"}, {file = "mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443"}, @@ -1060,7 +1060,7 @@ name = "mkdocstrings" version = "0.26.0" requires_python = ">=3.8" summary = "Automatic documentation from sources, for MkDocs." -groups = ["dev"] +groups = ["all", "docs"] dependencies = [ "Jinja2>=2.11.1", "Markdown>=3.6", @@ -1078,18 +1078,18 @@ files = [ [[package]] name = "mkdocstrings-python" -version = "1.10.9" +version = "1.11.1" requires_python = ">=3.8" summary = "A Python handler for mkdocstrings." -groups = ["dev"] +groups = ["all", "docs"] dependencies = [ "griffe>=0.49", - "mkdocs-autorefs>=1.0", - "mkdocstrings>=0.25", + "mkdocs-autorefs>=1.2", + "mkdocstrings>=0.26", ] files = [ - {file = "mkdocstrings_python-1.10.9-py3-none-any.whl", hash = "sha256:cbe98710a6757dfd4dff79bf36cb9731908fb4c69dd2736b15270ae7a488243d"}, - {file = "mkdocstrings_python-1.10.9.tar.gz", hash = "sha256:f344aaa47e727d8a2dc911e063025e58e2b7fb31a41110ccc3902aa6be7ca196"}, + {file = "mkdocstrings_python-1.11.1-py3-none-any.whl", hash = "sha256:a21a1c05acef129a618517bb5aae3e33114f569b11588b1e7af3e9d4061a71af"}, + {file = "mkdocstrings_python-1.11.1.tar.gz", hash = "sha256:8824b115c5359304ab0b5378a91f6202324a849e1da907a3485b59208b797322"}, ] [[package]] @@ -1097,7 +1097,7 @@ name = "more-itertools" version = "10.3.0" requires_python = ">=3.8" summary = "More routines for operating on iterables, beyond itertools" -groups = ["default"] +groups = ["all", "default"] files = [ {file = "more-itertools-10.3.0.tar.gz", hash = "sha256:e5d93ef411224fbcef366a6e8ddc4c5781bc6359d43412a65dd5964e46111463"}, {file = "more_itertools-10.3.0-py3-none-any.whl", hash = "sha256:ea6a02e24a9161e51faad17a8782b92a0df82c12c1c8886fec7f0c3fa1a1b320"}, @@ -1130,7 +1130,7 @@ name = "packaging" version = "24.1" requires_python = ">=3.8" summary = "Core utilities for Python packages" -groups = ["default", "dev"] +groups = ["all", "default", "dev", "docs"] files = [ {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, @@ -1140,7 +1140,7 @@ files = [ name = "paginate" version = "0.5.7" summary = "Divides large result sets into pages for easier browsing" -groups = ["dev"] +groups = ["all", "docs"] files = [ {file = "paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591"}, {file = "paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945"}, @@ -1151,7 +1151,7 @@ name = "pathspec" version = "0.12.1" requires_python = ">=3.8" summary = "Utility library for gitignore style pattern matching of file paths." -groups = ["dev"] +groups = ["all", "dev", "docs"] files = [ {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, @@ -1162,7 +1162,7 @@ name = "pillow" version = "10.4.0" requires_python = ">=3.8" summary = "Python Imaging Library (Fork)" -groups = ["default"] +groups = ["all", "default"] files = [ {file = "pillow-10.4.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:673655af3eadf4df6b5457033f086e90299fdd7a47983a13827acf7459c15d94"}, {file = "pillow-10.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:866b6942a92f56300012f5fbac71f2d610312ee65e22f1aa2609e491284e5597"}, @@ -1197,7 +1197,7 @@ name = "platformdirs" version = "4.2.2" requires_python = ">=3.8" summary = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." -groups = ["dev"] +groups = ["all", "dev", "docs"] files = [ {file = "platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee"}, {file = "platformdirs-4.2.2.tar.gz", hash = "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3"}, @@ -1218,7 +1218,7 @@ files = [ name = "premailer" version = "3.10.0" summary = "Turns CSS blocks into style attributes" -groups = ["default"] +groups = ["all", "default"] dependencies = [ "cachetools", "cssselect", @@ -1236,7 +1236,7 @@ name = "prompt-toolkit" version = "3.0.47" requires_python = ">=3.7.0" summary = "Library for building powerful interactive command lines in Python" -groups = ["default"] +groups = ["all", "default"] dependencies = [ "wcwidth", ] @@ -1250,7 +1250,7 @@ name = "psycopg2-binary" version = "2.9.9" requires_python = ">=3.7" summary = "psycopg2 - Python-PostgreSQL Database Adapter" -groups = ["default"] +groups = ["all", "default"] files = [ {file = "psycopg2-binary-2.9.9.tar.gz", hash = "sha256:7f01846810177d829c7692f1f5ada8096762d9172af1b1a28d4ab5b77c923c1c"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:8532fd6e6e2dc57bcb3bc90b079c60de896d2128c5d9d6f24a63875a95a088cf"}, @@ -1272,7 +1272,7 @@ name = "pycparser" version = "2.22" requires_python = ">=3.8" summary = "C parser in Python" -groups = ["default"] +groups = ["all", "default"] marker = "platform_python_implementation != \"PyPy\"" files = [ {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, @@ -1284,7 +1284,7 @@ name = "pydanclick" version = "0.2.1" requires_python = "<4.0,>=3.8" summary = "Use Pydantic models as Click options" -groups = ["default"] +groups = ["all", "default"] dependencies = [ "annotated-types<0.7.0,>=0.6.0", "click<9.0.0,>=8.1.7", @@ -1302,7 +1302,7 @@ name = "pydantic" version = "2.8.2" requires_python = ">=3.8" summary = "Data validation using Python type hints" -groups = ["default"] +groups = ["all", "default"] dependencies = [ "annotated-types>=0.4.0", "pydantic-core==2.20.1", @@ -1318,7 +1318,7 @@ name = "pydantic-core" version = "2.20.1" requires_python = ">=3.8" summary = "Core functionality for Pydantic validation and serialization" -groups = ["default"] +groups = ["all", "default"] dependencies = [ "typing-extensions!=4.7.0,>=4.6.0", ] @@ -1359,7 +1359,7 @@ name = "pydantic-settings" version = "2.4.0" requires_python = ">=3.8" summary = "Settings management using Pydantic" -groups = ["default"] +groups = ["all", "default"] dependencies = [ "pydantic>=2.7.0", "python-dotenv>=0.21.0", @@ -1385,7 +1385,7 @@ name = "pygments" version = "2.18.0" requires_python = ">=3.8" summary = "Pygments is a syntax highlighting package written in Python." -groups = ["dev"] +groups = ["all", "docs"] files = [ {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, @@ -1396,7 +1396,7 @@ name = "pyjwt" version = "2.9.0" requires_python = ">=3.8" summary = "JSON Web Token implementation in Python" -groups = ["default"] +groups = ["all", "default"] files = [ {file = "PyJWT-2.9.0-py3-none-any.whl", hash = "sha256:3b02fb0f44517787776cf48f2ae25d8e14f300e6d7545a4315cee571a415e850"}, {file = "pyjwt-2.9.0.tar.gz", hash = "sha256:7e1e5b56cc735432a7369cbfa0efe50fa113ebecdc04ae6922deba8b84582d0c"}, @@ -1404,17 +1404,17 @@ files = [ [[package]] name = "pymdown-extensions" -version = "10.9" +version = "10.11" requires_python = ">=3.8" summary = "Extension pack for Python Markdown." -groups = ["dev"] +groups = ["all", "docs"] dependencies = [ "markdown>=3.6", "pyyaml", ] files = [ - {file = "pymdown_extensions-10.9-py3-none-any.whl", hash = "sha256:d323f7e90d83c86113ee78f3fe62fc9dee5f56b54d912660703ea1816fed5626"}, - {file = "pymdown_extensions-10.9.tar.gz", hash = "sha256:6ff740bcd99ec4172a938970d42b96128bdc9d4b9bcad72494f29921dc69b753"}, + {file = "pymdown_extensions-10.11-py3-none-any.whl", hash = "sha256:e68080eac44634406b31f4aec58fbad17b0ec5fca6b086e29008616d54c3906b"}, + {file = "pymdown_extensions-10.11.tar.gz", hash = "sha256:2653fb658bca5f278029f8c67a67f0f08b7bd3c657e2630d261ad542e97c4192"}, ] [[package]] @@ -1482,7 +1482,7 @@ name = "python-dateutil" version = "2.9.0.post0" requires_python = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" summary = "Extensions to the standard Python datetime module" -groups = ["default", "dev"] +groups = ["all", "default", "docs"] dependencies = [ "six>=1.5", ] @@ -1496,7 +1496,7 @@ name = "python-dotenv" version = "1.0.1" requires_python = ">=3.8" summary = "Read key-value pairs from a .env file and set them as environment variables" -groups = ["default"] +groups = ["all", "default"] files = [ {file = "python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca"}, {file = "python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a"}, @@ -1507,7 +1507,7 @@ name = "python-multipart" version = "0.0.9" requires_python = ">=3.8" summary = "A streaming multipart parser for Python" -groups = ["default"] +groups = ["all", "default"] files = [ {file = "python_multipart-0.0.9-py3-none-any.whl", hash = "sha256:97ca7b8ea7b05f977dc3849c3ba99d51689822fab725c3703af7c866a0c2b215"}, {file = "python_multipart-0.0.9.tar.gz", hash = "sha256:03f54688c663f1b7977105f021043b0793151e4cb1c1a9d4a11fc13d622c4026"}, @@ -1518,7 +1518,7 @@ name = "pyyaml" version = "6.0.1" requires_python = ">=3.6" summary = "YAML parser and emitter for Python" -groups = ["default", "dev"] +groups = ["all", "default", "docs"] files = [ {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, @@ -1535,7 +1535,7 @@ name = "pyyaml-env-tag" version = "0.1" requires_python = ">=3.6" summary = "A custom YAML tag for referencing environment variables in YAML files. " -groups = ["dev"] +groups = ["all", "docs"] dependencies = [ "pyyaml", ] @@ -1549,7 +1549,7 @@ name = "redis" version = "5.0.8" requires_python = ">=3.7" summary = "Python client for Redis database and key-value store" -groups = ["default"] +groups = ["all", "default"] files = [ {file = "redis-5.0.8-py3-none-any.whl", hash = "sha256:56134ee08ea909106090934adc36f65c9bcbbaecea5b21ba704ba6fb561f8eb4"}, {file = "redis-5.0.8.tar.gz", hash = "sha256:0c5b10d387568dfe0698c6fad6615750c24170e548ca2deac10c649d463e9870"}, @@ -1561,7 +1561,7 @@ version = "5.0.8" extras = ["hiredis"] requires_python = ">=3.7" summary = "Python client for Redis database and key-value store" -groups = ["default"] +groups = ["all", "default"] dependencies = [ "hiredis>1.0.0", "redis==5.0.8", @@ -1576,7 +1576,7 @@ name = "regex" version = "2024.7.24" requires_python = ">=3.8" summary = "Alternative regular expression module, to replace re." -groups = ["dev"] +groups = ["all", "docs"] files = [ {file = "regex-2024.7.24-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:fe4ebef608553aff8deb845c7f4f1d0740ff76fa672c011cc0bacb2a00fbde86"}, {file = "regex-2024.7.24-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:74007a5b25b7a678459f06559504f1eec2f0f17bca218c9d56f6a0a12bfffdad"}, @@ -1601,7 +1601,7 @@ name = "requests" version = "2.32.3" requires_python = ">=3.8" summary = "Python HTTP for Humans." -groups = ["default", "dev"] +groups = ["all", "default", "docs"] dependencies = [ "certifi>=2017.4.17", "charset-normalizer<4,>=2", @@ -1618,7 +1618,7 @@ name = "six" version = "1.16.0" requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" summary = "Python 2 and 3 compatibility utilities" -groups = ["default", "dev"] +groups = ["all", "default", "docs"] files = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, @@ -1629,7 +1629,7 @@ name = "smart-open" version = "7.0.4" requires_python = "<4.0,>=3.7" summary = "Utils for streaming large files (S3, HDFS, GCS, Azure Blob Storage, gzip, bz2...)" -groups = ["default"] +groups = ["all", "default"] dependencies = [ "wrapt", ] @@ -1643,7 +1643,7 @@ name = "sniffio" version = "1.3.1" requires_python = ">=3.7" summary = "Sniff out which async library your code is running under" -groups = ["default", "dev"] +groups = ["all", "default", "dev"] files = [ {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, @@ -1654,7 +1654,7 @@ name = "sqids" version = "0.4.1" requires_python = ">=3.6" summary = "Generate YouTube-like ids from numbers." -groups = ["default"] +groups = ["all", "default"] files = [ {file = "sqids-0.4.1-py3-none-any.whl", hash = "sha256:fe48319ae1a7ea4faca77920f454fcf2946bbca540a468a98d979ba490d195bd"}, {file = "sqids-0.4.1.tar.gz", hash = "sha256:ffc3fbfef63491bee8b940a98065388345dbefb06d49e415b7a9e475ca200f9d"}, @@ -1665,7 +1665,7 @@ name = "sqlalchemy" version = "2.0.31" requires_python = ">=3.7" summary = "Database Abstraction Library" -groups = ["default"] +groups = ["all", "default"] dependencies = [ "greenlet!=0.4.17; (platform_machine == \"win32\" or platform_machine == \"WIN32\" or platform_machine == \"AMD64\" or platform_machine == \"amd64\" or platform_machine == \"x86_64\" or platform_machine == \"ppc64le\" or platform_machine == \"aarch64\") and python_version < \"3.13\"", "typing-extensions>=4.6.0", @@ -1689,7 +1689,7 @@ version = "2.0.31" extras = ["asyncio"] requires_python = ">=3.7" summary = "Database Abstraction Library" -groups = ["default"] +groups = ["all", "default"] dependencies = [ "greenlet!=0.4.17", "sqlalchemy==2.0.31", @@ -1712,7 +1712,7 @@ name = "starlette" version = "0.37.2" requires_python = ">=3.8" summary = "The little ASGI library that shines." -groups = ["default"] +groups = ["all", "default"] dependencies = [ "anyio<5,>=3.4.0", ] @@ -1726,7 +1726,7 @@ name = "streaming-form-data" version = "1.16.0" requires_python = ">=3.8" summary = "Streaming parser for multipart/form-data" -groups = ["default"] +groups = ["all", "default"] dependencies = [ "smart-open>=6.0", ] @@ -1739,7 +1739,7 @@ name = "toml" version = "0.10.2" requires_python = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" summary = "Python Library for Tom's Obvious, Minimal Language" -groups = ["default"] +groups = ["all", "default"] files = [ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, @@ -1750,7 +1750,7 @@ name = "typing-extensions" version = "4.12.2" requires_python = ">=3.8" summary = "Backported and Experimental Type Hints for Python 3.8+" -groups = ["default", "dev"] +groups = ["all", "default", "docs"] files = [ {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, @@ -1761,7 +1761,7 @@ name = "tzdata" version = "2024.1" requires_python = ">=2" summary = "Provider of IANA time zone data" -groups = ["default"] +groups = ["all", "default"] files = [ {file = "tzdata-2024.1-py2.py3-none-any.whl", hash = "sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252"}, {file = "tzdata-2024.1.tar.gz", hash = "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd"}, @@ -1772,7 +1772,7 @@ name = "urllib3" version = "2.2.2" requires_python = ">=3.8" summary = "HTTP library with thread-safe connection pooling, file post, and more." -groups = ["default", "dev"] +groups = ["all", "default", "docs"] files = [ {file = "urllib3-2.2.2-py3-none-any.whl", hash = "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472"}, {file = "urllib3-2.2.2.tar.gz", hash = "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168"}, @@ -1783,7 +1783,7 @@ name = "uvicorn" version = "0.30.5" requires_python = ">=3.8" summary = "The lightning-fast ASGI server." -groups = ["default"] +groups = ["all", "default"] dependencies = [ "click>=7.0", "h11>=0.8", @@ -1798,7 +1798,7 @@ name = "uvicorn-worker" version = "0.2.0" requires_python = ">=3.8" summary = "Uvicorn worker for Gunicorn! ✨" -groups = ["default"] +groups = ["all", "default"] dependencies = [ "gunicorn>=20.1.0", "uvicorn>=0.14.0", @@ -1814,7 +1814,7 @@ version = "0.30.5" extras = ["standard"] requires_python = ">=3.8" summary = "The lightning-fast ASGI server." -groups = ["default"] +groups = ["all", "default"] dependencies = [ "colorama>=0.4; sys_platform == \"win32\"", "httptools>=0.5.0", @@ -1835,7 +1835,7 @@ name = "uvloop" version = "0.19.0" requires_python = ">=3.8.0" summary = "Fast implementation of asyncio event loop on top of libuv" -groups = ["default"] +groups = ["all", "default"] marker = "(sys_platform != \"cygwin\" and sys_platform != \"win32\") and platform_python_implementation != \"PyPy\"" files = [ {file = "uvloop-0.19.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:da8435a3bd498419ee8c13c34b89b5005130a476bda1d6ca8cfdde3de35cd650"}, @@ -1852,7 +1852,7 @@ name = "vine" version = "5.1.0" requires_python = ">=3.6" summary = "Python promises." -groups = ["default"] +groups = ["all", "default"] files = [ {file = "vine-5.1.0-py3-none-any.whl", hash = "sha256:40fdf3c48b2cfe1c38a49e9ae2da6fda88e4794c810050a728bd7413811fb1dc"}, {file = "vine-5.1.0.tar.gz", hash = "sha256:8b62e981d35c41049211cf62a0a1242d8c1ee9bd15bb196ce38aefd6799e61e0"}, @@ -1863,7 +1863,7 @@ name = "watchdog" version = "5.0.0" requires_python = ">=3.9" summary = "Filesystem events monitoring" -groups = ["dev"] +groups = ["all", "docs"] files = [ {file = "watchdog-5.0.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:1e26f570dd7f5178656affb24d6f0e22ce66c8daf88d4061a27bfb9ac866b40d"}, {file = "watchdog-5.0.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d146331e6b206baa9f6dd40f72b5783ad2302c240df68e7fce196d30588ccf7b"}, @@ -1890,7 +1890,7 @@ name = "watchfiles" version = "0.22.0" requires_python = ">=3.8" summary = "Simple, modern and high performance file watching and code reload in python." -groups = ["default"] +groups = ["all", "default"] dependencies = [ "anyio>=3.0.0", ] @@ -1927,7 +1927,7 @@ files = [ name = "wcwidth" version = "0.2.13" summary = "Measures the displayed width of unicode strings in a terminal" -groups = ["default"] +groups = ["all", "default"] files = [ {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"}, {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, @@ -1938,7 +1938,7 @@ name = "websockets" version = "12.0" requires_python = ">=3.8" summary = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" -groups = ["default"] +groups = ["all", "default"] files = [ {file = "websockets-12.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0e6e2711d5a8e6e482cacb927a49a3d432345dfe7dea8ace7b5790df5932e4df"}, {file = "websockets-12.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:dbcf72a37f0b3316e993e13ecf32f10c0e1259c28ffd0a85cee26e8549595fbc"}, @@ -1975,7 +1975,7 @@ name = "win32-setctime" version = "1.1.0" requires_python = ">=3.5" summary = "A small Python utility to set file creation time on Windows" -groups = ["default", "dev"] +groups = ["all", "default", "dev", "frontend"] marker = "sys_platform == \"win32\"" files = [ {file = "win32_setctime-1.1.0-py3-none-any.whl", hash = "sha256:231db239e959c2fe7eb1d7dc129f11172354f98361c4fa2d6d2d7e278baa8aad"}, @@ -1987,7 +1987,7 @@ name = "wrapt" version = "1.16.0" requires_python = ">=3.6" summary = "Module for decorators, wrappers and monkey patching." -groups = ["default"] +groups = ["all", "default"] files = [ {file = "wrapt-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5eb404d89131ec9b4f748fa5cfb5346802e5ee8836f57d516576e61f304f3b7b"}, {file = "wrapt-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9090c9e676d5236a6948330e83cb89969f433b1943a558968f659ead07cb3b36"}, diff --git a/pdm.toml b/pdm.toml new file mode 100644 index 0000000..d37168f --- /dev/null +++ b/pdm.toml @@ -0,0 +1,2 @@ +[repository.elnafo-vcs] +url = "https://vcs.elnafo.ru/api/packages/L-Nafaryus/pypi" diff --git a/pyproject.toml b/pyproject.toml index ce3cde2..b15b421 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "materia" version = "0.1.1" -description = "Materia is a file server" +description = "Materia is a simple and fast cloud storage" authors = [ {name = "L-Nafaryus", email = "l.nafaryus@gmail.com"}, ] @@ -43,11 +43,26 @@ requires-python = ">=3.12,<3.13" readme = "README.md" license = {text = "MIT"} +[project.optional-dependencies] +docs = [ + "mkdocs-material>=9.5.38", + "mkdocstrings-python>=1.11.1", + "griffe-typingdoc>=0.2.7", + "pymdown-extensions>=10.11", +] +frontend = [ + "materia-frontend>=0.1.1", +] +all = [ + "materia[docs,frontend]", +] + [build-system] requires = ["pdm-backend"] build-backend = "pdm.backend" [project.scripts] + materia = "materia.app.cli:cli" [tool.pyright] @@ -57,9 +72,9 @@ reportGeneralTypeIssues = false pythonpath = ["."] testpaths = ["tests"] - [tool.pdm] distribution = true + [tool.pdm.dev-dependencies] dev = [ "-e file:///${PROJECT_ROOT}/workspaces/frontend", @@ -70,9 +85,6 @@ dev = [ "pytest-asyncio>=0.23.7", "asgi-lifespan>=2.1.0", "pytest-cov>=5.0.0", - "mkdocs-material>=9.5.34", - "mkdocstrings-python>=1.10.9", - "griffe-typingdoc>=0.2.6", ] [tool.pdm.build] @@ -86,3 +98,17 @@ rev.cmd = "alembic revision {args:--autogenerate}" upgrade.cmd = "alembic upgrade {args:head}" downgrade.cmd = "alembic downgrade {args:base}" remove-revs.shell = "rm -v ./src/materia/models/migrations/versions/*.py" +docs.shell = "pdm run mkdocs build -d src/materia/docs/" +pre_build.composite = [ "docs" ] + +[tool.pdm.resolution] +respect-source-order = true + +[[tool.pdm.source]] +name = "pypi" +url = "https://pypi.org/simple" + +[[tool.pdm.source]] +name = "elnafo-vcs" +url = "https://vcs.elnafo.ru/api/packages/L-Nafaryus/pypi" +verify_ssl = true diff --git a/src/materia/core/config.py b/src/materia/core/config.py index 3e3ac42..7f47e28 100644 --- a/src/materia/core/config.py +++ b/src/materia/core/config.py @@ -92,7 +92,7 @@ class Cache(BaseModel): self.scheme, self.address, self.port, self.database ) else: - raise NotImplemented() + raise NotImplementedError() class Security(BaseModel): @@ -110,7 +110,7 @@ class OAuth2(BaseModel): # check if signing algo need a key or generate it | HS256, HS384, HS512, RS256, RS384, RS512, ES256, ES384, ES512, EdDSA jwt_signing_key: Optional[Union[str, Path]] = None jwt_secret: Optional[Union[str, Path]] = ( - None # only for HS256, HS384, HS512 | generate + "changeme" # None # only for HS256, HS384, HS512 | generate ) access_token_lifetime: int = 3600 refresh_token_lifetime: int = 730 * 60 diff --git a/src/materia/routers/docs.py b/src/materia/routers/docs.py index ad5a860..98c1b8c 100644 --- a/src/materia/routers/docs.py +++ b/src/materia/routers/docs.py @@ -7,27 +7,28 @@ from pathlib import Path from materia.core.misc import optional from materia.routers import middleware -from materia import docs as materia_docs router = APIRouter() -# templates = Jinja2Templates(directory=Path(materia_docs.__path__[0])) -# p = Path(__file__).parent.joinpath("..", "docs").resolve() -# router.mount("/docs", StaticFiles(directory="doces", html=True), name="docs") +try: + from materia import docs as materia_docs +except ImportError: + pass +else: -@router.get("/docs/{catchall:path}", include_in_schema=False) -async def docs(request: Request, ctx: middleware.Context = Depends()): - docs_directory = Path(materia_docs.__path__[0]).resolve() - target = docs_directory.joinpath(request.path_params["catchall"]).resolve() + @router.get("/docs/{catchall:path}", include_in_schema=False) + async def docs(request: Request, ctx: middleware.Context = Depends()): + docs_directory = Path(materia_docs.__path__[0]).resolve() + target = docs_directory.joinpath(request.path_params["catchall"]).resolve() - if not optional(target.relative_to, docs_directory): - raise HTTPException(status.HTTP_403_FORBIDDEN) + if not optional(target.relative_to, docs_directory): + raise HTTPException(status.HTTP_403_FORBIDDEN) - if target.is_dir() and (index := target.joinpath("index.html")).is_file(): - return FileResponse(index) + if target.is_dir() and (index := target.joinpath("index.html")).is_file(): + return FileResponse(index) - if not target.is_file(): - raise HTTPException(status.HTTP_404_NOT_FOUND) + if not target.is_file(): + raise HTTPException(status.HTTP_404_NOT_FOUND) - return FileResponse(target) + return FileResponse(target) diff --git a/workspaces/frontend/README.md b/workspaces/frontend/README.md index ec30139..e04481f 100644 --- a/workspaces/frontend/README.md +++ b/workspaces/frontend/README.md @@ -1,16 +1,7 @@ # materia-frontend -## Building (npm) +**Documentation**: [https://storage.elnafo.ru/docs](https://storage.elnafo.ru/docs) -```sh -npm install -npm run build -``` - -## Building / installing (pdm) - -```sh -pdm build -pdm install --prod --no-editable -``` +**Source**: [https://vcs.elnafo.ru/L-Nafaryus/materia](https://vcs.elnafo.ru/L-Nafaryus/materia) +This is part of the Materia project. diff --git a/workspaces/frontend/package-lock.json b/workspaces/frontend/package-lock.json index 8ab3b83..9f8374a 100644 --- a/workspaces/frontend/package-lock.json +++ b/workspaces/frontend/package-lock.json @@ -1,12 +1,12 @@ { - "name": "materia-frontend", - "version": "0.0.5", + "name": "materia-frontend-vue", + "version": "0.1.1", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "materia-frontend", - "version": "0.0.5", + "name": "materia-frontend-vue", + "version": "0.1.1", "dependencies": { "@catppuccin/tailwindcss": "^0.1.6", "@hey-api/client-axios": "^0.2.3", @@ -27,7 +27,6 @@ "@vitejs/plugin-vue-jsx": "^3.1.0", "@vue/tsconfig": "^0.5.0", "npm-run-all2": "^6.1.1", - "openapi-typescript-codegen": "^0.29.0", "typescript": "~5.3.0", "vite": "^5.0.10", "vue-tsc": "^2.0.29" @@ -515,9 +514,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", - "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", "cpu": [ "ppc64" ], @@ -531,9 +530,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", - "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", "cpu": [ "arm" ], @@ -547,9 +546,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", - "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", "cpu": [ "arm64" ], @@ -563,9 +562,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", - "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", "cpu": [ "x64" ], @@ -579,9 +578,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", - "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", "cpu": [ "arm64" ], @@ -595,9 +594,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", - "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", "cpu": [ "x64" ], @@ -611,9 +610,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", - "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", "cpu": [ "arm64" ], @@ -627,9 +626,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", - "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", "cpu": [ "x64" ], @@ -643,9 +642,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", - "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", "cpu": [ "arm" ], @@ -659,9 +658,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", - "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", "cpu": [ "arm64" ], @@ -675,9 +674,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", - "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", "cpu": [ "ia32" ], @@ -691,9 +690,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", - "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", "cpu": [ "loong64" ], @@ -707,9 +706,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", - "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", "cpu": [ "mips64el" ], @@ -723,9 +722,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", - "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", "cpu": [ "ppc64" ], @@ -739,9 +738,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", - "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", "cpu": [ "riscv64" ], @@ -755,9 +754,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", - "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", "cpu": [ "s390x" ], @@ -771,9 +770,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", - "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", "cpu": [ "x64" ], @@ -787,9 +786,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", - "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", "cpu": [ "x64" ], @@ -803,9 +802,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", - "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", "cpu": [ "x64" ], @@ -819,9 +818,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", - "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", "cpu": [ "x64" ], @@ -835,9 +834,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", - "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", "cpu": [ "arm64" ], @@ -851,9 +850,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", - "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", "cpu": [ "ia32" ], @@ -867,9 +866,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", - "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", "cpu": [ "x64" ], @@ -1027,9 +1026,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.0.tgz", - "integrity": "sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.4.tgz", + "integrity": "sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w==", "cpu": [ "arm" ], @@ -1040,9 +1039,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.0.tgz", - "integrity": "sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.4.tgz", + "integrity": "sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA==", "cpu": [ "arm64" ], @@ -1053,9 +1052,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.0.tgz", - "integrity": "sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.4.tgz", + "integrity": "sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==", "cpu": [ "arm64" ], @@ -1066,9 +1065,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.0.tgz", - "integrity": "sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.4.tgz", + "integrity": "sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw==", "cpu": [ "x64" ], @@ -1079,9 +1078,22 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.0.tgz", - "integrity": "sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.4.tgz", + "integrity": "sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.4.tgz", + "integrity": "sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg==", "cpu": [ "arm" ], @@ -1092,9 +1104,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.0.tgz", - "integrity": "sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.4.tgz", + "integrity": "sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw==", "cpu": [ "arm64" ], @@ -1105,9 +1117,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.0.tgz", - "integrity": "sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.4.tgz", + "integrity": "sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA==", "cpu": [ "arm64" ], @@ -1117,10 +1129,23 @@ "linux" ] }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.4.tgz", + "integrity": "sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.0.tgz", - "integrity": "sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.4.tgz", + "integrity": "sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA==", "cpu": [ "riscv64" ], @@ -1130,10 +1155,23 @@ "linux" ] }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.4.tgz", + "integrity": "sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.0.tgz", - "integrity": "sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz", + "integrity": "sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==", "cpu": [ "x64" ], @@ -1144,9 +1182,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.0.tgz", - "integrity": "sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.4.tgz", + "integrity": "sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g==", "cpu": [ "x64" ], @@ -1157,9 +1195,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.0.tgz", - "integrity": "sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.4.tgz", + "integrity": "sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw==", "cpu": [ "arm64" ], @@ -1170,9 +1208,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.0.tgz", - "integrity": "sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.4.tgz", + "integrity": "sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g==", "cpu": [ "ia32" ], @@ -1183,9 +1221,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.0.tgz", - "integrity": "sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.4.tgz", + "integrity": "sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q==", "cpu": [ "x64" ], @@ -1955,9 +1993,9 @@ } }, "node_modules/esbuild": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", - "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", "dev": true, "hasInstallScript": true, "bin": { @@ -1967,29 +2005,29 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.20.2", - "@esbuild/android-arm": "0.20.2", - "@esbuild/android-arm64": "0.20.2", - "@esbuild/android-x64": "0.20.2", - "@esbuild/darwin-arm64": "0.20.2", - "@esbuild/darwin-x64": "0.20.2", - "@esbuild/freebsd-arm64": "0.20.2", - "@esbuild/freebsd-x64": "0.20.2", - "@esbuild/linux-arm": "0.20.2", - "@esbuild/linux-arm64": "0.20.2", - "@esbuild/linux-ia32": "0.20.2", - "@esbuild/linux-loong64": "0.20.2", - "@esbuild/linux-mips64el": "0.20.2", - "@esbuild/linux-ppc64": "0.20.2", - "@esbuild/linux-riscv64": "0.20.2", - "@esbuild/linux-s390x": "0.20.2", - "@esbuild/linux-x64": "0.20.2", - "@esbuild/netbsd-x64": "0.20.2", - "@esbuild/openbsd-x64": "0.20.2", - "@esbuild/sunos-x64": "0.20.2", - "@esbuild/win32-arm64": "0.20.2", - "@esbuild/win32-ia32": "0.20.2", - "@esbuild/win32-x64": "0.20.2" + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" } }, "node_modules/escalade": { @@ -2149,20 +2187,6 @@ "url": "https://github.com/sponsors/rawify" } }, - "node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, "node_modules/fs-minipass": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", @@ -2295,12 +2319,6 @@ "node": ">=4" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, "node_modules/handlebars": { "version": "4.7.8", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", @@ -2522,18 +2540,6 @@ "node": ">=6" } }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, "node_modules/lilconfig": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", @@ -2921,31 +2927,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/openapi-typescript-codegen": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/openapi-typescript-codegen/-/openapi-typescript-codegen-0.29.0.tgz", - "integrity": "sha512-/wC42PkD0LGjDTEULa/XiWQbv4E9NwLjwLjsaJ/62yOsoYhwvmBR31kPttn1DzQ2OlGe5stACcF/EIkZk43M6w==", - "dev": true, - "dependencies": { - "@apidevtools/json-schema-ref-parser": "^11.5.4", - "camelcase": "^6.3.0", - "commander": "^12.0.0", - "fs-extra": "^11.2.0", - "handlebars": "^4.7.8" - }, - "bin": { - "openapi": "bin/index.js" - } - }, - "node_modules/openapi-typescript-codegen/node_modules/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", - "dev": true, - "engines": { - "node": ">=18" - } - }, "node_modules/path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", @@ -3001,9 +2982,9 @@ "dev": true }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==" }, "node_modules/picomatch": { "version": "2.3.1", @@ -3106,9 +3087,9 @@ } }, "node_modules/postcss": { - "version": "8.4.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", - "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "version": "8.4.47", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", + "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", "funding": [ { "type": "opencollective", @@ -3125,8 +3106,8 @@ ], "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.2.0" + "picocolors": "^1.1.0", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" @@ -3338,9 +3319,9 @@ } }, "node_modules/rollup": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.13.0.tgz", - "integrity": "sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.22.4.tgz", + "integrity": "sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==", "dev": true, "dependencies": { "@types/estree": "1.0.5" @@ -3353,19 +3334,22 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.13.0", - "@rollup/rollup-android-arm64": "4.13.0", - "@rollup/rollup-darwin-arm64": "4.13.0", - "@rollup/rollup-darwin-x64": "4.13.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.13.0", - "@rollup/rollup-linux-arm64-gnu": "4.13.0", - "@rollup/rollup-linux-arm64-musl": "4.13.0", - "@rollup/rollup-linux-riscv64-gnu": "4.13.0", - "@rollup/rollup-linux-x64-gnu": "4.13.0", - "@rollup/rollup-linux-x64-musl": "4.13.0", - "@rollup/rollup-win32-arm64-msvc": "4.13.0", - "@rollup/rollup-win32-ia32-msvc": "4.13.0", - "@rollup/rollup-win32-x64-msvc": "4.13.0", + "@rollup/rollup-android-arm-eabi": "4.22.4", + "@rollup/rollup-android-arm64": "4.22.4", + "@rollup/rollup-darwin-arm64": "4.22.4", + "@rollup/rollup-darwin-x64": "4.22.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.22.4", + "@rollup/rollup-linux-arm-musleabihf": "4.22.4", + "@rollup/rollup-linux-arm64-gnu": "4.22.4", + "@rollup/rollup-linux-arm64-musl": "4.22.4", + "@rollup/rollup-linux-powerpc64le-gnu": "4.22.4", + "@rollup/rollup-linux-riscv64-gnu": "4.22.4", + "@rollup/rollup-linux-s390x-gnu": "4.22.4", + "@rollup/rollup-linux-x64-gnu": "4.22.4", + "@rollup/rollup-linux-x64-musl": "4.22.4", + "@rollup/rollup-win32-arm64-msvc": "4.22.4", + "@rollup/rollup-win32-ia32-msvc": "4.22.4", + "@rollup/rollup-win32-x64-msvc": "4.22.4", "fsevents": "~2.3.2" } }, @@ -3449,9 +3433,9 @@ } }, "node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "engines": { "node": ">=0.10.0" } @@ -3756,15 +3740,6 @@ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "dev": true }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, "node_modules/update-browserslist-db": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", @@ -3800,14 +3775,14 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/vite": { - "version": "5.2.12", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.12.tgz", - "integrity": "sha512-/gC8GxzxMK5ntBwb48pR32GGhENnjtY30G4A0jemunsBkiEZFw60s8InGpN8gkhHEkjnRK1aSAxeQgwvFhUHAA==", + "version": "5.4.8", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.8.tgz", + "integrity": "sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==", "dev": true, "dependencies": { - "esbuild": "^0.20.1", - "postcss": "^8.4.38", - "rollup": "^4.13.0" + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" }, "bin": { "vite": "bin/vite.js" @@ -3826,6 +3801,7 @@ "less": "*", "lightningcss": "^1.21.0", "sass": "*", + "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" @@ -3843,6 +3819,9 @@ "sass": { "optional": true }, + "sass-embedded": { + "optional": true + }, "stylus": { "optional": true }, diff --git a/workspaces/frontend/package.json b/workspaces/frontend/package.json index e78d4da..120e008 100644 --- a/workspaces/frontend/package.json +++ b/workspaces/frontend/package.json @@ -1,6 +1,6 @@ { - "name": "materia-frontend", - "version": "0.0.5", + "name": "materia-frontend-vue", + "version": "0.1.1", "private": true, "type": "module", "scripts": { @@ -9,8 +9,7 @@ "preview": "vite preview", "build": "vite build", "type-check": "vue-tsc --build --force", - "generate-client": "openapi --input ./openapi.json --output ./src/client_old/ --client axios --name Client", - "openapi-ts": "openapi-ts --input ./openapi.json --output ./src/client/ --client @hey-api/client-axios" + "openapi": "openapi-ts --input ./openapi.json --output ./src/client/ --client @hey-api/client-axios" }, "dependencies": { "@catppuccin/tailwindcss": "^0.1.6", @@ -32,7 +31,6 @@ "@vitejs/plugin-vue-jsx": "^3.1.0", "@vue/tsconfig": "^0.5.0", "npm-run-all2": "^6.1.1", - "openapi-typescript-codegen": "^0.29.0", "typescript": "~5.3.0", "vite": "^5.0.10", "vue-tsc": "^2.0.29" diff --git a/workspaces/frontend/pyproject.toml b/workspaces/frontend/pyproject.toml index bea5ab8..de22ec2 100644 --- a/workspaces/frontend/pyproject.toml +++ b/workspaces/frontend/pyproject.toml @@ -26,10 +26,12 @@ dev = [ includes = [ "src/materia_frontend" ] [tool.pdm.scripts] +openapi-json.cmd = "pdm run -p ../../ python -m materia export openapi --path ./openapi.json" npm-install.cmd = "npm install --prefix ./" +openapi-client.cmd = "npm run openapi" npm-run-build.cmd = "npm run build --prefix ./" move-dist.shell = "rm -vrf src/materia_frontend/dist && mv -v dist src/materia_frontend/ && cp -v templates/* src/materia_frontend/dist" -pre_build.composite = [ "npm-install", "npm-run-build", "move-dist" ] +pre_build.composite = [ "openapi-json", "npm-install", "openapi-client", "npm-run-build", "move-dist" ] materia-frontend.call = "materia_frontend.main:client" [build-system] diff --git a/workspaces/frontend/src/views/UserPrefs.vue b/workspaces/frontend/src/views/UserPrefs.vue index 047f653..c73cf27 100644 --- a/workspaces/frontend/src/views/UserPrefs.vue +++ b/workspaces/frontend/src/views/UserPrefs.vue @@ -3,9 +3,9 @@ import Base from "@/views/Base.vue"; import { ref, onMounted, watch, getCurrentInstance } from "vue"; -import { useMiscStore } from "@/stores"; +import { store } from "@"; -const miscStore = useMiscStore(); +const miscStore = store.useMisc(); diff --git a/workspaces/frontend/src/views/UserPrefsAccount.vue b/workspaces/frontend/src/views/UserPrefsAccount.vue index 384d2ca..cf3f9b3 100644 --- a/workspaces/frontend/src/views/UserPrefsAccount.vue +++ b/workspaces/frontend/src/views/UserPrefsAccount.vue @@ -3,8 +3,7 @@ import Base from "@/views/Base.vue"; import { ref, onMounted, watch, getCurrentInstance } from "vue"; -import router from "@/router"; -import { useUserStore, useMiscStore } from "@/stores"; +import { router, store } from "@"; const password = defineModel("password"); const new_password = defineModel("new-password"); @@ -16,8 +15,8 @@ const new_email = defineModel("new-email"); const confirm_password = defineModel("confirm-password"); const error = ref(null); -const userStore = useUserStore(); -const miscStore = useMiscStore(); +const userStore = store.useUser(); +const miscStore = store.useMisc(); onMounted(async () => { miscStore.p_current_tab = 1; diff --git a/workspaces/frontend/src/views/UserPrefsProfile.vue b/workspaces/frontend/src/views/UserPrefsProfile.vue index be599c0..f5813f8 100644 --- a/workspaces/frontend/src/views/UserPrefsProfile.vue +++ b/workspaces/frontend/src/views/UserPrefsProfile.vue @@ -3,13 +3,11 @@ import Base from "@/views/Base.vue"; import { ref, onMounted, watch, getCurrentInstance } from "vue"; -import router from "@/router"; -import { api } from "@"; -import { useUserStore, useMiscStore } from "@/stores"; +import { api, router, store } from "@"; const error = ref(null); -const userStore = useUserStore(); -const miscStore = useMiscStore(); +const userStore = store.useUser(); +const miscStore = store.useMisc(); const login = defineModel("login"); const name = defineModel("name"); diff --git a/workspaces/frontend/src/views/UserProfile.vue b/workspaces/frontend/src/views/UserProfile.vue index 421296f..f23b7e2 100644 --- a/workspaces/frontend/src/views/UserProfile.vue +++ b/workspaces/frontend/src/views/UserProfile.vue @@ -5,11 +5,10 @@ import Error from "@/components/error/Error.vue"; import { ref, onMounted, watch, getCurrentInstance } from "vue"; import { onBeforeRouteUpdate, useRoute } from "vue-router" -import { api } from "@"; -import { useUserStore } from "@/stores"; +import { api, store } from "@"; const route = useRoute(); -const userStore = useUserStore(); +const userStore = store.useUser(); const error = ref