From 7816f246958569dacd318d18896f1358613b559c Mon Sep 17 00:00:00 2001 From: Lucien Cartier-Tilet Date: Wed, 4 Dec 2024 21:13:44 +0100 Subject: [PATCH] initial commit --- .cargo/config.toml | 4 + .env | 0 .envrc | 2 + .github/workflows/ci.yaml | 102 + .gitignore | 20 + .rustfmt.toml | 2 + Cargo.lock | 5493 ++++++++++++++++ Cargo.toml | 58 + README.md | 58 + assets/i18n/de-DE/main.ftl | 4 + assets/i18n/en-US/main.ftl | 10 + assets/i18n/shared.ftl | 1 + assets/static/404.html | 3 + assets/static/image.png | Bin 0 -> 304720 bytes assets/views/home/hello.html | 12 + config/development.yaml | 138 + config/test.yaml | 101 + examples/playground.rs | 21 + flake.lock | 96 + flake.nix | 66 + frontend/.dir-locals.el | 11 + frontend/.gitignore | 27 + frontend/.vscode/extensions.json | 6 + frontend/README.md | 39 + frontend/env.d.ts | 1 + frontend/index.html | 13 + frontend/package-lock.json | 5728 +++++++++++++++++ frontend/package.json | 39 + frontend/public/favicon.ico | Bin 0 -> 4286 bytes frontend/src/App.vue | 85 + frontend/src/assets/base.css | 74 + frontend/src/assets/logo.svg | 1 + frontend/src/assets/main.css | 35 + frontend/src/components/HelloWorld.vue | 41 + frontend/src/components/TheWelcome.vue | 90 + frontend/src/components/WelcomeItem.vue | 87 + .../components/__tests__/HelloWorld.spec.ts | 11 + .../src/components/icons/IconCommunity.vue | 7 + .../components/icons/IconDocumentation.vue | 7 + .../src/components/icons/IconEcosystem.vue | 7 + frontend/src/components/icons/IconSupport.vue | 7 + frontend/src/components/icons/IconTooling.vue | 19 + frontend/src/main.ts | 14 + frontend/src/router/index.ts | 23 + frontend/src/stores/counter.ts | 12 + frontend/src/views/AboutView.vue | 15 + frontend/src/views/HomeView.vue | 9 + frontend/tsconfig.app.json | 13 + frontend/tsconfig.json | 14 + frontend/tsconfig.node.json | 19 + frontend/tsconfig.vitest.json | 11 + frontend/vite.config.ts | 18 + frontend/vitest.config.ts | 14 + migration/Cargo.toml | 22 + migration/src/lib.rs | 18 + migration/src/m20220101_000001_users.rs | 50 + rust-toolchain.toml | 4 + src/app.rs | 71 + src/bin/main.rs | 8 + src/bin/tool.rs | 8 + src/controllers/auth.rs | 157 + src/controllers/mod.rs | 1 + src/fixtures/users.yaml | 17 + src/initializers/mod.rs | 2 + src/initializers/view_engine.rs | 36 + src/lib.rs | 8 + src/mailers/auth.rs | 65 + src/mailers/auth/forgot/html.t | 11 + src/mailers/auth/forgot/subject.t | 1 + src/mailers/auth/forgot/text.t | 3 + src/mailers/auth/welcome/html.t | 13 + src/mailers/auth/welcome/subject.t | 1 + src/mailers/auth/welcome/text.t | 4 + src/mailers/mod.rs | 1 + src/models/_entities/mod.rs | 5 + src/models/_entities/prelude.rs | 3 + src/models/_entities/users.rs | 28 + src/models/mod.rs | 2 + src/models/users.rs | 298 + src/tasks/mod.rs | 1 + src/tasks/seed.rs | 45 + src/views/auth.rs | 41 + src/views/mod.rs | 1 + src/workers/downloader.rs | 40 + src/workers/mod.rs | 1 + tests/mod.rs | 4 + tests/models/mod.rs | 1 + .../can_create_with_password@users.snap | 21 + .../snapshots/can_find_by_email-2@users.snap | 7 + .../snapshots/can_find_by_email@users-2.snap | 7 + .../snapshots/can_find_by_email@users.snap | 21 + .../snapshots/can_find_by_pid-2@users.snap | 7 + .../snapshots/can_find_by_pid@users-2.snap | 7 + .../snapshots/can_find_by_pid@users.snap | 21 + .../snapshots/can_validate_model@users.snap | 9 + ...te_with_password_with_duplicate@users.snap | 7 + tests/models/users.rs | 223 + tests/requests/auth.rs | 218 + tests/requests/mod.rs | 2 + tests/requests/prepare_data.rs | 57 + .../can_get_current_user@auth_request.snap | 8 + ...can_login_without_verify@auth_request.snap | 8 + .../can_register@auth_request-2.snap | 10 + .../snapshots/can_register@auth_request.snap | 25 + .../can_reset_password@auth_request-2.snap | 11 + .../can_reset_password@auth_request.snap | 8 + ...in_with_invalid_password@auth_request.snap | 8 + ...ogin_with_valid_password@auth_request.snap | 8 + tests/tasks/mod.rs | 1 + tests/tasks/seed.rs | 17 + tests/workers/mod.rs | 1 + 111 files changed, 14371 insertions(+) create mode 100644 .cargo/config.toml create mode 100644 .env create mode 100644 .envrc create mode 100644 .github/workflows/ci.yaml create mode 100644 .gitignore create mode 100644 .rustfmt.toml create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 README.md create mode 100644 assets/i18n/de-DE/main.ftl create mode 100644 assets/i18n/en-US/main.ftl create mode 100644 assets/i18n/shared.ftl create mode 100644 assets/static/404.html create mode 100644 assets/static/image.png create mode 100644 assets/views/home/hello.html create mode 100644 config/development.yaml create mode 100644 config/test.yaml create mode 100644 examples/playground.rs create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 frontend/.dir-locals.el create mode 100644 frontend/.gitignore create mode 100644 frontend/.vscode/extensions.json create mode 100644 frontend/README.md create mode 100644 frontend/env.d.ts create mode 100644 frontend/index.html create mode 100644 frontend/package-lock.json create mode 100644 frontend/package.json create mode 100644 frontend/public/favicon.ico create mode 100644 frontend/src/App.vue create mode 100644 frontend/src/assets/base.css create mode 100644 frontend/src/assets/logo.svg create mode 100644 frontend/src/assets/main.css create mode 100644 frontend/src/components/HelloWorld.vue create mode 100644 frontend/src/components/TheWelcome.vue create mode 100644 frontend/src/components/WelcomeItem.vue create mode 100644 frontend/src/components/__tests__/HelloWorld.spec.ts create mode 100644 frontend/src/components/icons/IconCommunity.vue create mode 100644 frontend/src/components/icons/IconDocumentation.vue create mode 100644 frontend/src/components/icons/IconEcosystem.vue create mode 100644 frontend/src/components/icons/IconSupport.vue create mode 100644 frontend/src/components/icons/IconTooling.vue create mode 100644 frontend/src/main.ts create mode 100644 frontend/src/router/index.ts create mode 100644 frontend/src/stores/counter.ts create mode 100644 frontend/src/views/AboutView.vue create mode 100644 frontend/src/views/HomeView.vue create mode 100644 frontend/tsconfig.app.json create mode 100644 frontend/tsconfig.json create mode 100644 frontend/tsconfig.node.json create mode 100644 frontend/tsconfig.vitest.json create mode 100644 frontend/vite.config.ts create mode 100644 frontend/vitest.config.ts create mode 100644 migration/Cargo.toml create mode 100644 migration/src/lib.rs create mode 100644 migration/src/m20220101_000001_users.rs create mode 100644 rust-toolchain.toml create mode 100644 src/app.rs create mode 100644 src/bin/main.rs create mode 100644 src/bin/tool.rs create mode 100644 src/controllers/auth.rs create mode 100644 src/controllers/mod.rs create mode 100644 src/fixtures/users.yaml create mode 100644 src/initializers/mod.rs create mode 100644 src/initializers/view_engine.rs create mode 100644 src/lib.rs create mode 100644 src/mailers/auth.rs create mode 100644 src/mailers/auth/forgot/html.t create mode 100644 src/mailers/auth/forgot/subject.t create mode 100644 src/mailers/auth/forgot/text.t create mode 100644 src/mailers/auth/welcome/html.t create mode 100644 src/mailers/auth/welcome/subject.t create mode 100644 src/mailers/auth/welcome/text.t create mode 100644 src/mailers/mod.rs create mode 100644 src/models/_entities/mod.rs create mode 100644 src/models/_entities/prelude.rs create mode 100644 src/models/_entities/users.rs create mode 100644 src/models/mod.rs create mode 100644 src/models/users.rs create mode 100644 src/tasks/mod.rs create mode 100644 src/tasks/seed.rs create mode 100644 src/views/auth.rs create mode 100644 src/views/mod.rs create mode 100644 src/workers/downloader.rs create mode 100644 src/workers/mod.rs create mode 100644 tests/mod.rs create mode 100644 tests/models/mod.rs create mode 100644 tests/models/snapshots/can_create_with_password@users.snap create mode 100644 tests/models/snapshots/can_find_by_email-2@users.snap create mode 100644 tests/models/snapshots/can_find_by_email@users-2.snap create mode 100644 tests/models/snapshots/can_find_by_email@users.snap create mode 100644 tests/models/snapshots/can_find_by_pid-2@users.snap create mode 100644 tests/models/snapshots/can_find_by_pid@users-2.snap create mode 100644 tests/models/snapshots/can_find_by_pid@users.snap create mode 100644 tests/models/snapshots/can_validate_model@users.snap create mode 100644 tests/models/snapshots/handle_create_with_password_with_duplicate@users.snap create mode 100644 tests/models/users.rs create mode 100644 tests/requests/auth.rs create mode 100644 tests/requests/mod.rs create mode 100644 tests/requests/prepare_data.rs create mode 100644 tests/requests/snapshots/can_get_current_user@auth_request.snap create mode 100644 tests/requests/snapshots/can_login_without_verify@auth_request.snap create mode 100644 tests/requests/snapshots/can_register@auth_request-2.snap create mode 100644 tests/requests/snapshots/can_register@auth_request.snap create mode 100644 tests/requests/snapshots/can_reset_password@auth_request-2.snap create mode 100644 tests/requests/snapshots/can_reset_password@auth_request.snap create mode 100644 tests/requests/snapshots/login_with_invalid_password@auth_request.snap create mode 100644 tests/requests/snapshots/login_with_valid_password@auth_request.snap create mode 100644 tests/tasks/mod.rs create mode 100644 tests/tasks/seed.rs create mode 100644 tests/workers/mod.rs diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 0000000..fb921ea --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,4 @@ +[alias] +loco = "run --" +loco-tool = "run --bin tool --" +playground = "run --example playground" diff --git a/.env b/.env new file mode 100644 index 0000000..e69de29 diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..437a1ae --- /dev/null +++ b/.envrc @@ -0,0 +1,2 @@ +use flake +dotenv \ No newline at end of file diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 0000000..75ba8a5 --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,102 @@ +name: CI +on: + push: + branches: + - master + - main + pull_request: + +env: + RUST_TOOLCHAIN: stable + TOOLCHAIN_PROFILE: minimal + +jobs: + rustfmt: + name: Check Style + runs-on: ubuntu-latest + + permissions: + contents: read + + steps: + - name: Checkout the code + uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable + with: + toolchain: ${{ env.RUST_TOOLCHAIN }} + components: rustfmt + - name: Run cargo fmt + uses: actions-rs/cargo@v1 + with: + command: fmt + args: --all -- --check + + clippy: + name: Run Clippy + runs-on: ubuntu-latest + + permissions: + contents: read + + steps: + - name: Checkout the code + uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable + with: + toolchain: ${{ env.RUST_TOOLCHAIN }} + - name: Setup Rust cache + uses: Swatinem/rust-cache@v2 + - name: Run cargo clippy + uses: actions-rs/cargo@v1 + with: + command: clippy + args: --all-features -- -D warnings -W clippy::pedantic -W clippy::nursery -W rust-2018-idioms + + test: + name: Run Tests + runs-on: ubuntu-latest + + permissions: + contents: read + + services: + redis: + image: redis + options: >- + --health-cmd "redis-cli ping" + --health-interval 10s + --health-timeout 5s + --health-retries 5 + ports: + - "6379:6379" + postgres: + image: postgres + env: + POSTGRES_DB: postgres_test + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + ports: + - "5432:5432" + # Set health checks to wait until postgres has started + options: --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + + steps: + - name: Checkout the code + uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable + with: + toolchain: ${{ env.RUST_TOOLCHAIN }} + - name: Setup Rust cache + uses: Swatinem/rust-cache@v2 + - name: Run cargo test + uses: actions-rs/cargo@v1 + with: + command: test + args: --all-features --all + env: + REDIS_URL: redis://localhost:${{job.services.redis.ports[6379]}} + DATABASE_URL: postgres://postgres:postgres@localhost:5432/postgres_test + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..00258e7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,20 @@ +**/config/local.yaml +**/config/*.local.yaml +**/config/production.yaml + +# Generated by Cargo +# will have compiled files and executables +debug/ +target/ + +# include cargo lock +!Cargo.lock + +# These are backup files generated by rustfmt +**/*.rs.bk + +# MSVC Windows builds of rustc generate these, which store debugging information +*.pdb + +*.sqlite +.direnv/ \ No newline at end of file diff --git a/.rustfmt.toml b/.rustfmt.toml new file mode 100644 index 0000000..d862e08 --- /dev/null +++ b/.rustfmt.toml @@ -0,0 +1,2 @@ +max_width = 100 +use_small_heuristics = "Default" diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..bd0ab52 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,5493 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "addr2line" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" +dependencies = [ + "getrandom", + "once_cell", + "version_check", +] + +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "aliasable" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd" + +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +dependencies = [ + "alloc-no-stdlib", +] + +[[package]] +name = "allocator-api2" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anstream" +version = "0.6.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" + +[[package]] +name = "anstyle-parse" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad186efb764318d35165f1758e7dcef3b10628e26d41a44bc5550652e6804391" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" +dependencies = [ + "anstyle", + "windows-sys 0.52.0", +] + +[[package]] +name = "anyhow" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" + +[[package]] +name = "arc-swap" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" + +[[package]] +name = "argon2" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c3610892ee6e0cbce8ae2700349fcf8f98adb0dbfbee85aec3c9179d29cc072" +dependencies = [ + "base64ct", + "blake2", + "cpufeatures", + "password-hash", +] + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "assert-json-diff" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47e4f2b81832e72834d7518d8487a0396a28cc408186a2e8854c0f98011faf12" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "async-attributes" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3203e79f4dd9bdda415ed03cf14dae5a2bf775c683a00f94e9cd1faf0f596e5" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "async-channel" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener 2.5.3", + "futures-core", +] + +[[package]] +name = "async-channel" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-compression" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fec134f64e2bc57411226dfc4e52dec859ddfc7e711fc5e07b612584f000e4aa" +dependencies = [ + "brotli", + "flate2", + "futures-core", + "memchr", + "pin-project-lite", + "tokio", + "zstd", + "zstd-safe", +] + +[[package]] +name = "async-executor" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7ebdfa2ebdab6b1760375fa7d6f382b9f486eac35fc994625a00e89280bdbb7" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand 2.1.0", + "futures-lite 2.3.0", + "slab", +] + +[[package]] +name = "async-global-executor" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" +dependencies = [ + "async-channel 2.3.1", + "async-executor", + "async-io 2.3.3", + "async-lock 3.4.0", + "blocking", + "futures-lite 2.3.0", + "once_cell", + "tokio", +] + +[[package]] +name = "async-io" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" +dependencies = [ + "async-lock 2.8.0", + "autocfg", + "cfg-if", + "concurrent-queue", + "futures-lite 1.13.0", + "log", + "parking", + "polling 2.8.0", + "rustix 0.37.27", + "slab", + "socket2 0.4.10", + "waker-fn", +] + +[[package]] +name = "async-io" +version = "2.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d6baa8f0178795da0e71bc42c9e5d13261aac7ee549853162e66a241ba17964" +dependencies = [ + "async-lock 3.4.0", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite 2.3.0", + "parking", + "polling 3.7.2", + "rustix 0.38.34", + "slab", + "tracing", + "windows-sys 0.52.0", +] + +[[package]] +name = "async-lock" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" +dependencies = [ + "event-listener 2.5.3", +] + +[[package]] +name = "async-lock" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" +dependencies = [ + "event-listener 5.3.1", + "event-listener-strategy", + "pin-project-lite", +] + +[[package]] +name = "async-std" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d" +dependencies = [ + "async-attributes", + "async-channel 1.9.0", + "async-global-executor", + "async-io 1.13.0", + "async-lock 2.8.0", + "crossbeam-utils", + "futures-channel", + "futures-core", + "futures-io", + "futures-lite 1.13.0", + "gloo-timers", + "kv-log-macro", + "log", + "memchr", + "once_cell", + "pin-project-lite", + "pin-utils", + "slab", + "wasm-bindgen-futures", +] + +[[package]] +name = "async-stream" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "async-task" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" + +[[package]] +name = "async-trait" +version = "0.1.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "atoi" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" +dependencies = [ + "num-traits", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "auto-future" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c1e7e457ea78e524f48639f551fd79703ac3f2237f5ecccdf4708f8a75ad373" + +[[package]] +name = "autocfg" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" + +[[package]] +name = "axum" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "504e3947307ac8326a5437504c517c4b56716c9d98fac0028c2acc7ca47d70ae" +dependencies = [ + "async-trait", + "axum-core", + "axum-macros", + "bytes", + "futures-util", + "http 1.1.0", + "http-body", + "http-body-util", + "hyper", + "hyper-util", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "serde_json", + "serde_path_to_error", + "serde_urlencoded", + "sync_wrapper 1.0.1", + "tokio", + "tower 0.5.1", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "axum-core" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http 1.1.0", + "http-body", + "http-body-util", + "mime", + "pin-project-lite", + "rustversion", + "sync_wrapper 1.0.1", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "axum-extra" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0be6ea09c9b96cb5076af0de2e383bd2bc0c18f827cf1967bdd353e0b910d733" +dependencies = [ + "axum", + "axum-core", + "bytes", + "cookie", + "futures-util", + "http 1.1.0", + "http-body", + "http-body-util", + "mime", + "pin-project-lite", + "serde", + "tower 0.4.13", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "axum-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57d123550fa8d071b7255cb0cc04dc302baa6c8c4a79f55701552684d8399bce" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "axum-test" +version = "16.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3254184de359bbae2a8ca10b050870a7a4f1c8332a2c27d53f360b9835bb3911" +dependencies = [ + "anyhow", + "assert-json-diff", + "auto-future", + "axum", + "bytes", + "cookie", + "http 1.1.0", + "http-body-util", + "hyper", + "hyper-util", + "mime", + "pretty_assertions", + "reserve-port", + "rust-multipart-rfc7578_2", + "serde", + "serde_json", + "serde_urlencoded", + "smallvec", + "tokio", + "tower 0.5.1", + "url", +] + +[[package]] +name = "backtrace" +version = "0.3.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "backtrace_printer" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8d28de81c708c843640982b66573df0f0168d87e42854b563971f326745aab7" +dependencies = [ + "btparse-stable", + "colored", + "regex", + "thiserror", +] + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + +[[package]] +name = "bb8" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b10cf871f3ff2ce56432fddc2615ac7acc3aa22ca321f8fea800846fbb32f188" +dependencies = [ + "async-trait", + "futures-util", + "parking_lot", + "tokio", +] + +[[package]] +name = "bigdecimal" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d712318a27c7150326677b321a5fa91b55f6d9034ffd67f20319e147d40cee" +dependencies = [ + "autocfg", + "libm", + "num-bigint", + "num-integer", + "num-traits", + "serde", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +dependencies = [ + "serde", +] + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "blocking" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" +dependencies = [ + "async-channel 2.3.1", + "async-task", + "futures-io", + "futures-lite 2.3.0", + "piper", +] + +[[package]] +name = "borsh" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6362ed55def622cddc70a4746a68554d7b687713770de539e59a739b249f8ed" +dependencies = [ + "borsh-derive", + "cfg_aliases", +] + +[[package]] +name = "borsh-derive" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3ef8005764f53cd4dca619f5bf64cafd4664dada50ece25e4d81de54c80cc0b" +dependencies = [ + "once_cell", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.72", + "syn_derive", +] + +[[package]] +name = "brotli" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74f7971dbd9326d58187408ab83117d8ac1bb9c17b085fdacd1cf2f598719b6b" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "4.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a45bd2e4095a8b518033b128020dd4a55aab1c0a381ba4404a472630f4bc362" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "bstr" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "btparse-stable" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d75b8252ed252f881d1dc4482ae3c3854df6ee8183c1906bac50ff358f4f89f" + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "byte-unit" +version = "4.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da78b32057b8fdfc352504708feeba7216dcd65a2c9ab02978cbd288d1279b6c" +dependencies = [ + "serde", + "utf8-width", +] + +[[package]] +name = "bytecheck" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2" +dependencies = [ + "bytecheck_derive", + "ptr_meta", + "simdutf8", +] + +[[package]] +name = "bytecheck_derive" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "428d9aa8fbc0670b7b8d6030a7fadd0f86151cae55e4dbbece15f3780a3dfaf3" + +[[package]] +name = "cc" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2aba8f4e9906c7ce3c73463f62a7f0c65183ada1a2d47e397cc8810827f9694f" +dependencies = [ + "jobserver", + "libc", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[package]] +name = "chrono" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "serde", + "wasm-bindgen", + "windows-targets 0.52.6", +] + +[[package]] +name = "chrono-tz" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93698b29de5e97ad0ae26447b344c482a7284c737d9ddc5f9e52b74a336671bb" +dependencies = [ + "chrono", + "chrono-tz-build", + "phf", +] + +[[package]] +name = "chrono-tz-build" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c088aee841df9c3041febbb73934cfc39708749bf96dc827e3359cd39ef11b1" +dependencies = [ + "parse-zoneinfo", + "phf", + "phf_codegen", +] + +[[package]] +name = "chumsky" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eebd66744a15ded14960ab4ccdbfb51ad3b81f51f3f04a80adac98c985396c9" +dependencies = [ + "hashbrown 0.14.5", + "stacker", +] + +[[package]] +name = "clap" +version = "4.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f6b81fb3c84f5563d509c59b5a48d935f689e993afa90fe39047f05adef9142" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ca6706fd5224857d9ac5eb9355f6683563cc0541c7cd9d014043b57cbec78ac" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bac35c6dafb060fd4d275d9a4ffae97917c13a6327903a8be2153cd964f7085" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "clap_lex" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b82cf0babdbd58558212896d1a4272303a57bdb245c2bf1147185fb45640e70" + +[[package]] +name = "colorchoice" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" + +[[package]] +name = "colored" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8" +dependencies = [ + "lazy_static", + "windows-sys 0.48.0", +] + +[[package]] +name = "combine" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +dependencies = [ + "bytes", + "futures-core", + "memchr", + "pin-project-lite", + "tokio", + "tokio-util", +] + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "console" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" +dependencies = [ + "encode_unicode", + "lazy_static", + "libc", + "unicode-width", + "windows-sys 0.52.0", +] + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "convert_case" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "cookie" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" +dependencies = [ + "percent-encoding", + "time", + "version_check", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "crc" +version = "3.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "cron" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f8c3e73077b4b4a6ab1ea5047c37c57aee77657bc8ecd6f29b0af082d0b0c07" +dependencies = [ + "chrono", + "nom", + "once_cell", +] + +[[package]] +name = "cron_clock" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a8699d8ed16e3db689f8ae04d8dc3c6666a4ba7e724e5a157884b7cc385d16b" +dependencies = [ + "chrono", + "nom", + "once_cell", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-queue" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" + +[[package]] +name = "cruet" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "113a9e83d8f614be76de8df1f25bf9d0ea6e85ea573710a3d3f3abe1438ae49c" +dependencies = [ + "once_cell", + "regex", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "darling" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.72", +] + +[[package]] +name = "darling_macro" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "der" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +dependencies = [ + "const-oid", + "pem-rfc7468", + "zeroize", +] + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + +[[package]] +name = "deunicode" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "339544cc9e2c4dc3fc7149fd630c5f22263a4fdf18a98afd0075784968b5cf00" + +[[package]] +name = "dialoguer" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "658bce805d770f407bc62102fca7c2c64ceef2fbcb2b8bd19d2765ce093980de" +dependencies = [ + "console", + "shell-words", + "tempfile", + "thiserror", + "zeroize", +] + +[[package]] +name = "diff" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "dirs-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +dependencies = [ + "cfg-if", + "dirs-sys-next", +] + +[[package]] +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "doc-comment" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" + +[[package]] +name = "dotenvy" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" + +[[package]] +name = "duct" +version = "0.13.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4ab5718d1224b63252cd0c6f74f6480f9ffeb117438a2e0f5cf6d9a4798929c" +dependencies = [ + "libc", + "once_cell", + "os_pipe", + "shared_child", +] + +[[package]] +name = "duct_sh" +version = "0.13.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6633cadba557545fbbe0299a2f9adc4bb2fc5fb238773f5e841e0c23d62146" +dependencies = [ + "duct", +] + +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +dependencies = [ + "serde", +] + +[[package]] +name = "email-encoding" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60d1d33cdaede7e24091f039632eb5d3c7469fe5b066a985281a34fc70fa317f" +dependencies = [ + "base64 0.22.1", + "memchr", +] + +[[package]] +name = "email_address" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46b7a0ac6570e31bfe2c6cf575a576a55af9893d1a6b30b4444e6e90b216bb84" + +[[package]] +name = "encode_unicode" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" + +[[package]] +name = "english-to-cron" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c16423ac933fee80f05a52b435a912d5b08edbbbfe936e0042ebb3accdf303da" +dependencies = [ + "lazy_static", + "regex", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "etcetera" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" +dependencies = [ + "cfg-if", + "home", + "windows-sys 0.48.0", +] + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "event-listener" +version = "5.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" +dependencies = [ + "event-listener 5.3.1", + "pin-project-lite", +] + +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + +[[package]] +name = "fastrand" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" + +[[package]] +name = "flate2" +version = "1.0.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fluent" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb74634707bebd0ce645a981148e8fb8c7bccd4c33c652aeffd28bf2f96d555a" +dependencies = [ + "fluent-bundle", + "unic-langid", +] + +[[package]] +name = "fluent-bundle" +version = "0.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fe0a21ee80050c678013f82edf4b705fe2f26f1f9877593d13198612503f493" +dependencies = [ + "fluent-langneg", + "fluent-syntax", + "intl-memoizer", + "intl_pluralrules", + "rustc-hash", + "self_cell 0.10.3", + "smallvec", + "unic-langid", +] + +[[package]] +name = "fluent-langneg" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c4ad0989667548f06ccd0e306ed56b61bd4d35458d54df5ec7587c0e8ed5e94" +dependencies = [ + "unic-langid", +] + +[[package]] +name = "fluent-syntax" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a530c4694a6a8d528794ee9bbd8ba0122e779629ac908d15ad5a7ae7763a33d" +dependencies = [ + "thiserror", +] + +[[package]] +name = "fluent-template-macros" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dec7592cd1f45c1afe9084ce59c62a3a7c266c125c4c2ec97e95b0563c4aa914" +dependencies = [ + "flume 0.10.14", + "ignore", + "once_cell", + "proc-macro2", + "quote", + "syn 1.0.109", + "unic-langid", +] + +[[package]] +name = "fluent-templates" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c3ef2c2152757885365abce32ddf682746062f1b6b3c0824a29fbed6ee4d080" +dependencies = [ + "arc-swap", + "fluent", + "fluent-bundle", + "fluent-langneg", + "fluent-syntax", + "fluent-template-macros", + "flume 0.10.14", + "heck 0.4.1", + "ignore", + "intl-memoizer", + "lazy_static", + "log", + "once_cell", + "serde_json", + "snafu 0.7.5", + "tera", + "unic-langid", +] + +[[package]] +name = "flume" +version = "0.10.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577" +dependencies = [ + "spin", +] + +[[package]] +name = "flume" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" +dependencies = [ + "futures-core", + "futures-sink", + "spin", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "fs-err" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88a41f105fe1d5b6b34b2055e3dc59bb79b46b48b2040b9e6c7b4b5de097aa41" +dependencies = [ + "autocfg", +] + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futures" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-executor" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-intrusive" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" +dependencies = [ + "futures-core", + "lock_api", + "parking_lot", +] + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-lite" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +dependencies = [ + "fastrand 1.9.0", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + +[[package]] +name = "futures-lite" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" +dependencies = [ + "fastrand 2.1.0", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + +[[package]] +name = "futures-macro" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-timer" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "gethostname" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", +] + +[[package]] +name = "gimli" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "globset" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" +dependencies = [ + "aho-corasick", + "bstr", + "log", + "regex-automata 0.4.7", + "regex-syntax 0.8.4", +] + +[[package]] +name = "globwalk" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf760ebf69878d9fd8f110c89703d90ce35095324d1f1edcb595c63945ee757" +dependencies = [ + "bitflags 2.6.0", + "ignore", + "walkdir", +] + +[[package]] +name = "gloo-timers" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash 0.7.8", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash 0.8.11", + "allocator-api2", +] + +[[package]] +name = "hashlink" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af" +dependencies = [ + "hashbrown 0.14.5", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hermit-abi" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hkdf" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +dependencies = [ + "hmac", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + +[[package]] +name = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "hostname" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9c7c7c8ac16c798734b8a24560c1362120597c40d5e1459f09498f8f6c8f2ba" +dependencies = [ + "cfg-if", + "libc", + "windows", +] + +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http 1.1.0", +] + +[[package]] +name = "http-body-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +dependencies = [ + "bytes", + "futures-util", + "http 1.1.0", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "http-range-header" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08a397c49fec283e3d6211adbe480be95aae5f304cfb923e9970e08956d5168a" + +[[package]] +name = "httparse" +version = "1.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "humansize" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6cb51c9a029ddc91b07a787f1d86b53ccfa49b0e86688c946ebe8d3555685dd7" +dependencies = [ + "libm", +] + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "hyper" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.1.0", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-util" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ab92f4f49ee4fb4f997c784b7a2e0fa70050211e0b6a287f898c3c9785ca956" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.1.0", + "http-body", + "hyper", + "pin-project-lite", + "socket2 0.5.7", + "tokio", + "tower 0.4.13", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "ignore" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b46810df39e66e925525d6e38ce1e7f6e1d208f72dc39757880fcb66e2c58af1" +dependencies = [ + "crossbeam-deque", + "globset", + "log", + "memchr", + "regex-automata 0.4.7", + "same-file", + "walkdir", + "winapi-util", +] + +[[package]] +name = "include_dir" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "923d117408f1e49d914f1a379a309cffe4f18c05cf4e3d12e613a15fc81bd0dd" +dependencies = [ + "include_dir_macros", +] + +[[package]] +name = "include_dir_macros" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cab85a7ed0bd5f0e76d93846e0147172bed2e2d3f859bcc33a8d9699cad1a75" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "indexmap" +version = "2.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +dependencies = [ + "equivalent", + "hashbrown 0.14.5", +] + +[[package]] +name = "inherent" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0122b7114117e64a63ac49f752a5ca4624d534c7b1c7de796ac196381cd2d947" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "insta" +version = "1.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "810ae6042d48e2c9e9215043563a58a80b877bc863228a74cf10c49d4620a6f5" +dependencies = [ + "console", + "lazy_static", + "linked-hash-map", + "pest", + "pest_derive", + "regex", + "serde", + "similar", +] + +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "intl-memoizer" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe22e020fce238ae18a6d5d8c502ee76a52a6e880d99477657e6acc30ec57bda" +dependencies = [ + "type-map", + "unic-langid", +] + +[[package]] +name = "intl_pluralrules" +version = "7.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "078ea7b7c29a2b4df841a7f6ac8775ff6074020c6776d48491ce2268e068f972" +dependencies = [ + "unic-langid", +] + +[[package]] +name = "io-lifetimes" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +dependencies = [ + "hermit-abi 0.3.9", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "ipnetwork" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf466541e9d546596ee94f9f69590f89473455f88372423e0008fc1a7daf100e" +dependencies = [ + "serde", +] + +[[package]] +name = "is-terminal" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" +dependencies = [ + "hermit-abi 0.3.9", + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + +[[package]] +name = "jobserver" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "jsonwebtoken" +version = "9.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9ae10193d25051e74945f1ea2d0b42e03cc3b890f7e4cc5faa44997d808193f" +dependencies = [ + "base64 0.21.7", + "js-sys", + "pem", + "ring", + "serde", + "serde_json", + "simple_asn1", +] + +[[package]] +name = "kv-log-macro" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" +dependencies = [ + "log", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +dependencies = [ + "spin", +] + +[[package]] +name = "lettre" +version = "0.11.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a62049a808f1c4e2356a2a380bd5f2aca3b011b0b482cf3b914ba1731426969" +dependencies = [ + "async-trait", + "base64 0.22.1", + "chumsky", + "email-encoding", + "email_address", + "fastrand 2.1.0", + "futures-io", + "futures-util", + "hostname", + "httpdate", + "idna", + "mime", + "nom", + "percent-encoding", + "quoted_printable", + "rustls", + "rustls-pemfile", + "socket2 0.5.7", + "tokio", + "tokio-rustls", + "url", + "webpki-roots", +] + +[[package]] +name = "libc" +version = "0.2.155" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" + +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "libredox" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags 2.6.0", + "libc", +] + +[[package]] +name = "libsqlite3-sys" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149" +dependencies = [ + "cc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "linked-hash-map" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" + +[[package]] +name = "linux-raw-sys" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" + +[[package]] +name = "linux-raw-sys" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "loco-gen" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1815e1bd51c41fceb096b27cf98b52ab23d272025337ef5106e549e697e8ee9f" +dependencies = [ + "chrono", + "clap", + "dialoguer", + "duct", + "lazy_static", + "regex", + "rrgen", + "serde", + "serde_json", + "thiserror", + "tracing", +] + +[[package]] +name = "loco-rs" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4aa14998bbea030a703e8017a5a86c368b022c74b6848f5c16f07adfbc3b98b3" +dependencies = [ + "argon2", + "async-trait", + "axum", + "axum-extra", + "axum-test", + "backtrace_printer", + "bb8", + "byte-unit", + "bytes", + "cfg-if", + "chrono", + "clap", + "colored", + "duct", + "duct_sh", + "english-to-cron", + "fs-err", + "futures-util", + "heck 0.4.1", + "hyper", + "include_dir", + "ipnetwork", + "jsonwebtoken", + "lazy_static", + "lettre", + "loco-gen", + "mime", + "moka", + "object_store", + "rand", + "regex", + "rusty-sidekiq", + "sea-orm", + "sea-orm-migration", + "semver", + "serde", + "serde_json", + "serde_variant", + "serde_yaml", + "sqlx", + "tera", + "thiserror", + "tokio", + "tokio-cron-scheduler", + "tower 0.4.13", + "tower-http", + "tracing", + "tracing-appender", + "tracing-subscriber", + "ulid", + "uuid", + "validator", +] + +[[package]] +name = "loco_starter_template" +version = "0.1.0" +dependencies = [ + "async-trait", + "axum", + "chrono", + "fluent-templates", + "include_dir", + "insta", + "loco-rs", + "migration", + "rstest", + "sea-orm", + "serde", + "serde_json", + "serial_test", + "tokio", + "tracing", + "tracing-subscriber", + "unic-langid", + "uuid", + "validator", +] + +[[package]] +name = "log" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +dependencies = [ + "value-bag", +] + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "matchit" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" + +[[package]] +name = "md-5" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +dependencies = [ + "cfg-if", + "digest", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "migration" +version = "0.1.0" +dependencies = [ + "async-std", + "loco-rs", + "sea-orm-migration", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4569e456d394deccd22ce1c1913e6ea0e54519f577285001215d33557431afe4" +dependencies = [ + "hermit-abi 0.3.9", + "libc", + "wasi", + "windows-sys 0.52.0", +] + +[[package]] +name = "moka" +version = "0.12.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32cf62eb4dd975d2dde76432fb1075c49e3ee2331cf36f1f8fd4b66550d32b6f" +dependencies = [ + "crossbeam-channel", + "crossbeam-epoch", + "crossbeam-utils", + "once_cell", + "parking_lot", + "quanta", + "rustc_version", + "smallvec", + "tagptr", + "thiserror", + "triomphe", + "uuid", +] + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-bigint-dig" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" +dependencies = [ + "byteorder", + "lazy_static", + "libm", + "num-integer", + "num-iter", + "num-traits", + "rand", + "smallvec", + "zeroize", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi 0.3.9", + "libc", +] + +[[package]] +name = "object" +version = "0.36.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f203fa8daa7bb185f760ae12bd8e097f63d17041dcdcaf675ac54cdf863170e" +dependencies = [ + "memchr", +] + +[[package]] +name = "object_store" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25a0c4b3a0e31f8b66f71ad8064521efa773910196e2cde791436f13409f3b45" +dependencies = [ + "async-trait", + "bytes", + "chrono", + "futures", + "humantime", + "itertools 0.13.0", + "parking_lot", + "percent-encoding", + "snafu 0.8.5", + "tokio", + "tracing", + "url", + "walkdir", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "ordered-float" +version = "3.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1e1c390732d15f1d48471625cd92d154e66db2c56645e29a9cd26f4699f72dc" +dependencies = [ + "num-traits", +] + +[[package]] +name = "os_pipe" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29d73ba8daf8fac13b0501d1abeddcfe21ba7401ada61a819144b6c2a4f32209" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "ouroboros" +version = "0.18.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "944fa20996a25aded6b4795c6d63f10014a7a83f8be9828a11860b08c5fc4a67" +dependencies = [ + "aliasable", + "ouroboros_macro", + "static_assertions", +] + +[[package]] +name = "ouroboros_macro" +version = "0.18.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39b0deead1528fd0e5947a8546a9642a9777c25f6e1e26f34c97b204bbb465bd" +dependencies = [ + "heck 0.4.1", + "itertools 0.12.1", + "proc-macro2", + "proc-macro2-diagnostics", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "parking" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" + +[[package]] +name = "parking_lot" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.5.3", + "smallvec", + "windows-targets 0.52.6", +] + +[[package]] +name = "parse-zoneinfo" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f2a05b18d44e2957b88f96ba460715e295bc1d7510468a2f3d3b44535d26c24" +dependencies = [ + "regex", +] + +[[package]] +name = "password-hash" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" +dependencies = [ + "base64ct", + "rand_core", + "subtle", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "pem" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e459365e590736a54c3fa561947c84837534b8e9af6fc5bf781307e82658fae" +dependencies = [ + "base64 0.22.1", + "serde", +] + +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pest" +version = "2.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd53dff83f26735fdc1ca837098ccf133605d794cdae66acfc2bfac3ec809d95" +dependencies = [ + "memchr", + "thiserror", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a548d2beca6773b1c244554d36fcf8548a8a58e74156968211567250e48e49a" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c93a82e8d145725dcbaf44e5ea887c8a869efdcc28706df2d08c69e17077183" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "pest_meta" +version = "2.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a941429fea7e08bedec25e4f6785b6ffaacc6b755da98df5ef3e7dcf4a124c4f" +dependencies = [ + "once_cell", + "pest", + "sha2", +] + +[[package]] +name = "phf" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" +dependencies = [ + "phf_shared", +] + +[[package]] +name = "phf_codegen" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8d39688d359e6b34654d328e262234662d16cc0f60ec8dcbe5e718709342a5a" +dependencies = [ + "phf_generator", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" +dependencies = [ + "phf_shared", + "rand", +] + +[[package]] +name = "phf_shared" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pin-project" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "piper" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae1d5c74c9876f070d3e8fd503d748c7d974c3e48da8f41350fa5222ef9b4391" +dependencies = [ + "atomic-waker", + "fastrand 2.1.0", + "futures-io", +] + +[[package]] +name = "pkcs1" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" +dependencies = [ + "der", + "pkcs8", + "spki", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "pkg-config" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" + +[[package]] +name = "polling" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" +dependencies = [ + "autocfg", + "bitflags 1.3.2", + "cfg-if", + "concurrent-queue", + "libc", + "log", + "pin-project-lite", + "windows-sys 0.48.0", +] + +[[package]] +name = "polling" +version = "3.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3ed00ed3fbf728b5816498ecd316d1716eecaced9c0c8d2c5a6740ca214985b" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi 0.4.0", + "pin-project-lite", + "rustix 0.38.34", + "tracing", + "windows-sys 0.52.0", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "pretty_assertions" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af7cee1a6c8a5b9208b3cb1061f10c0cb689087b3d8ce85fb9d2dd7a29b6ba66" +dependencies = [ + "diff", + "yansi 0.5.1", +] + +[[package]] +name = "proc-macro-crate" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +dependencies = [ + "toml_edit", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro-hack" +version = "0.5.20+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" + +[[package]] +name = "proc-macro2" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "proc-macro2-diagnostics" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", + "version_check", + "yansi 1.0.1", +] + +[[package]] +name = "psm" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874" +dependencies = [ + "cc", +] + +[[package]] +name = "ptr_meta" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" +dependencies = [ + "ptr_meta_derive", +] + +[[package]] +name = "ptr_meta_derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "quanta" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5167a477619228a0b284fac2674e3c388cba90631d7b7de620e6f1fcd08da5" +dependencies = [ + "crossbeam-utils", + "libc", + "once_cell", + "raw-cpuid", + "wasi", + "web-sys", + "winapi", +] + +[[package]] +name = "quote" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "quoted_printable" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "640c9bd8497b02465aeef5375144c26062e0dcd5939dfcbb0f5db76cb8c17c73" + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "raw-cpuid" +version = "11.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb9ee317cfe3fbd54b36a511efc1edd42e216903c9cd575e686dd68a2ba90d8d" +dependencies = [ + "bitflags 2.6.0", +] + +[[package]] +name = "redis" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa8455fa3621f6b41c514946de66ea0531f57ca017b2e6c7cc368035ea5b46df" +dependencies = [ + "async-trait", + "bytes", + "combine", + "futures-util", + "itoa", + "percent-encoding", + "pin-project-lite", + "ryu", + "sha1_smol", + "tokio", + "tokio-util", + "url", +] + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_syscall" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" +dependencies = [ + "bitflags 2.6.0", +] + +[[package]] +name = "redox_users" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" +dependencies = [ + "getrandom", + "libredox", + "thiserror", +] + +[[package]] +name = "regex" +version = "1.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.7", + "regex-syntax 0.8.4", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.4", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" + +[[package]] +name = "relative-path" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba39f3699c378cd8970968dcbff9c43159ea4cfbd88d43c00b22f2ef10a435d2" + +[[package]] +name = "rend" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" +dependencies = [ + "bytecheck", +] + +[[package]] +name = "reserve-port" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9838134a2bfaa8e1f40738fcc972ac799de6e0e06b5157acb95fc2b05a0ea283" +dependencies = [ + "lazy_static", + "thiserror", +] + +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom", + "libc", + "spin", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rkyv" +version = "0.7.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cba464629b3394fc4dbc6f940ff8f5b4ff5c7aef40f29166fd4ad12acbc99c0" +dependencies = [ + "bitvec", + "bytecheck", + "bytes", + "hashbrown 0.12.3", + "ptr_meta", + "rend", + "rkyv_derive", + "seahash", + "tinyvec", + "uuid", +] + +[[package]] +name = "rkyv_derive" +version = "0.7.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7dddfff8de25e6f62b9d64e6e432bf1c6736c57d20323e15ee10435fbda7c65" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "rrgen" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e40013551787f9f535e7dbc8dafc164591d941aeae48881a385d8b0393dd45f6" +dependencies = [ + "cruet", + "fs-err", + "glob", + "heck 0.4.1", + "regex", + "serde", + "serde_json", + "serde_regex", + "serde_yaml", + "tera", + "thiserror", +] + +[[package]] +name = "rsa" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0e5124fcb30e76a7e79bfee683a2746db83784b86289f6251b54b7950a0dfc" +dependencies = [ + "const-oid", + "digest", + "num-bigint-dig", + "num-integer", + "num-traits", + "pkcs1", + "pkcs8", + "rand_core", + "signature", + "spki", + "subtle", + "zeroize", +] + +[[package]] +name = "rstest" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9afd55a67069d6e434a95161415f5beeada95a01c7b815508a82dcb0e1593682" +dependencies = [ + "futures", + "futures-timer", + "rstest_macros", + "rustc_version", +] + +[[package]] +name = "rstest_macros" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4165dfae59a39dd41d8dec720d3cbfbc71f69744efb480a3920f5d4e0cc6798d" +dependencies = [ + "cfg-if", + "glob", + "proc-macro-crate", + "proc-macro2", + "quote", + "regex", + "relative-path", + "rustc_version", + "syn 2.0.72", + "unicode-ident", +] + +[[package]] +name = "rust-multipart-rfc7578_2" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03b748410c0afdef2ebbe3685a6a862e2ee937127cdaae623336a459451c8d57" +dependencies = [ + "bytes", + "futures-core", + "futures-util", + "http 0.2.12", + "mime", + "mime_guess", + "rand", + "thiserror", +] + +[[package]] +name = "rust_decimal" +version = "1.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1790d1c4c0ca81211399e0e0af16333276f375209e71a37b67698a373db5b47a" +dependencies = [ + "arrayvec", + "borsh", + "bytes", + "num-traits", + "rand", + "rkyv", + "serde", + "serde_json", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.37.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" +dependencies = [ + "bitflags 1.3.2", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys 0.3.8", + "windows-sys 0.48.0", +] + +[[package]] +name = "rustix" +version = "0.38.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +dependencies = [ + "bitflags 2.6.0", + "errno", + "libc", + "linux-raw-sys 0.4.14", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustls" +version = "0.23.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c58f8c84392efc0a126acce10fa59ff7b3d2ac06ab451a33f2741989b806b044" +dependencies = [ + "log", + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pemfile" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" +dependencies = [ + "base64 0.22.1", + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" + +[[package]] +name = "rustls-webpki" +version = "0.102.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e6b52d4fda176fd835fdc55a835d4a89b8499cad995885a21149d5ad62f852e" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" + +[[package]] +name = "rusty-sidekiq" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15544f047600b602c7b11ff7ee0882f9034f9cbe2c205693edd5615e2a6c03ee" +dependencies = [ + "async-trait", + "bb8", + "chrono", + "convert_case", + "cron_clock", + "gethostname", + "hex", + "num_cpus", + "rand", + "redis", + "serde", + "serde_json", + "serial_test", + "sha2", + "slog-term", + "thiserror", + "tokio", + "tokio-util", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scc" +version = "2.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fadf67e3cf23f8b11a6c8c48a16cb2437381503615acd91094ec7b4686a5a53" +dependencies = [ + "sdd", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "sdd" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85f05a494052771fc5bd0619742363b5e24e5ad72ab3111ec2e27925b8edc5f3" + +[[package]] +name = "sea-bae" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bd3534a9978d0aa7edd2808dc1f8f31c4d0ecd31ddf71d997b3c98e9f3c9114" +dependencies = [ + "heck 0.4.1", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "sea-orm" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c4872675cc5d5d399a2a202c60f3a393ec8d3f3307c36adb166517f348e4db5" +dependencies = [ + "async-stream", + "async-trait", + "bigdecimal", + "chrono", + "futures", + "log", + "ouroboros", + "rust_decimal", + "sea-orm-macros", + "sea-query", + "sea-query-binder", + "serde", + "serde_json", + "sqlx", + "strum", + "thiserror", + "time", + "tracing", + "url", + "uuid", +] + +[[package]] +name = "sea-orm-cli" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0aefbd960c9ed7b2dfbab97b11890f5d8c314ad6e2f68c7b36c73ea0967fcc25" +dependencies = [ + "chrono", + "clap", + "dotenvy", + "glob", + "regex", + "sea-schema", + "tracing", + "tracing-subscriber", + "url", +] + +[[package]] +name = "sea-orm-macros" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85f714906b72e7265c0b2077d0ad8f235dabebda513c92f1326d5d40cef0dd01" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "sea-bae", + "syn 2.0.72", + "unicode-ident", +] + +[[package]] +name = "sea-orm-migration" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa7bbfbe3bec60b5925193acc9c98b9f8ae9853f52c8004df0c1ea5193c01ea0" +dependencies = [ + "async-trait", + "clap", + "dotenvy", + "futures", + "sea-orm", + "sea-orm-cli", + "sea-schema", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "sea-query" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff504d13b5e4b52fffcf2fb203d0352a5722fa5151696db768933e41e1e591bb" +dependencies = [ + "bigdecimal", + "chrono", + "inherent", + "ordered-float", + "rust_decimal", + "sea-query-derive", + "serde_json", + "time", + "uuid", +] + +[[package]] +name = "sea-query-binder" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0019f47430f7995af63deda77e238c17323359af241233ec768aba1faea7608" +dependencies = [ + "bigdecimal", + "chrono", + "rust_decimal", + "sea-query", + "serde_json", + "sqlx", + "time", + "uuid", +] + +[[package]] +name = "sea-query-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9834af2c4bd8c5162f00c89f1701fb6886119a88062cf76fe842ea9e232b9839" +dependencies = [ + "darling", + "heck 0.4.1", + "proc-macro2", + "quote", + "syn 2.0.72", + "thiserror", +] + +[[package]] +name = "sea-schema" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aab1592d17860a9a8584d9b549aebcd06f7bdc3ff615f71752486ba0b05b1e6e" +dependencies = [ + "futures", + "sea-query", + "sea-schema-derive", +] + +[[package]] +name = "sea-schema-derive" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "debdc8729c37fdbf88472f97fd470393089f997a909e535ff67c544d18cfccf0" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "seahash" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" + +[[package]] +name = "self_cell" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e14e4d63b804dc0c7ec4a1e52bcb63f02c7ac94476755aa579edac21e01f915d" +dependencies = [ + "self_cell 1.0.4", +] + +[[package]] +name = "self_cell" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d369a96f978623eb3dc28807c4852d6cc617fed53da5d3c400feff1ef34a714a" + +[[package]] +name = "semver" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" + +[[package]] +name = "serde" +version = "1.0.204" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.204" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "serde_json" +version = "1.0.120" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e0d21c9a8cae1235ad58a00c11cb40d4b1e5c784f1ef2c537876ed6ffd8b7c5" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_path_to_error" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6" +dependencies = [ + "itoa", + "serde", +] + +[[package]] +name = "serde_regex" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8136f1a4ea815d7eac4101cfd0b16dc0cb5e1fe1b8609dfd728058656b7badf" +dependencies = [ + "regex", + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_variant" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a0068df419f9d9b6488fdded3f1c818522cdea328e02ce9d9f147380265a432" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_yaml" +version = "0.9.34+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +dependencies = [ + "indexmap", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", +] + +[[package]] +name = "serial_test" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b4b487fe2acf240a021cf57c6b2b4903b1e78ca0ecd862a71b71d2a51fed77d" +dependencies = [ + "futures", + "log", + "once_cell", + "parking_lot", + "scc", + "serial_test_derive", +] + +[[package]] +name = "serial_test_derive" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82fe9db325bcef1fbcde82e078a5cc4efdf787e96b3b9cf45b50b529f2083d67" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sha1_smol" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shared_child" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0d94659ad3c2137fef23ae75b03d5241d633f8acded53d672decfa0e6e0caef" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "shell-words" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" + +[[package]] +name = "signal-hook-registry" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +dependencies = [ + "libc", +] + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest", + "rand_core", +] + +[[package]] +name = "simdutf8" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a" + +[[package]] +name = "similar" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1de1d4f81173b03af4c0cbed3c898f6bff5b870e4a7f5d6f4057d62a7a4b686e" + +[[package]] +name = "simple_asn1" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" +dependencies = [ + "num-bigint", + "num-traits", + "thiserror", + "time", +] + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "slog" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8347046d4ebd943127157b94d63abb990fcf729dc4e9978927fdf4ac3c998d06" + +[[package]] +name = "slog-term" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6e022d0b998abfe5c3782c1f03551a596269450ccd677ea51c56f8b214610e8" +dependencies = [ + "is-terminal", + "slog", + "term", + "thread_local", + "time", +] + +[[package]] +name = "slug" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bd94acec9c8da640005f8e135a39fc0372e74535e6b368b7a04b875f784c8c4" +dependencies = [ + "deunicode", + "wasm-bindgen", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +dependencies = [ + "serde", +] + +[[package]] +name = "snafu" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4de37ad025c587a29e8f3f5605c00f70b98715ef90b9061a815b9e59e9042d6" +dependencies = [ + "doc-comment", + "snafu-derive 0.7.5", +] + +[[package]] +name = "snafu" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "223891c85e2a29c3fe8fb900c1fae5e69c2e42415e3177752e8718475efa5019" +dependencies = [ + "snafu-derive 0.8.5", +] + +[[package]] +name = "snafu-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990079665f075b699031e9c08fd3ab99be5029b96f3b78dc0709e8f77e4efebf" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "snafu-derive" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c3c6b7927ffe7ecaa769ee0e3994da3b8cafc8f444578982c83ecb161af917" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "socket2" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "socket2" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "sqlformat" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f895e3734318cc55f1fe66258926c9b910c124d47520339efecbb6c59cec7c1f" +dependencies = [ + "nom", + "unicode_categories", +] + +[[package]] +name = "sqlx" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93334716a037193fac19df402f8571269c84a00852f6a7066b5d2616dcd64d3e" +dependencies = [ + "sqlx-core", + "sqlx-macros", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", +] + +[[package]] +name = "sqlx-core" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4d8060b456358185f7d50c55d9b5066ad956956fddec42ee2e8567134a8936e" +dependencies = [ + "atoi", + "bigdecimal", + "byteorder", + "bytes", + "chrono", + "crc", + "crossbeam-queue", + "either", + "event-listener 5.3.1", + "futures-channel", + "futures-core", + "futures-intrusive", + "futures-io", + "futures-util", + "hashbrown 0.14.5", + "hashlink", + "hex", + "indexmap", + "log", + "memchr", + "once_cell", + "paste", + "percent-encoding", + "rust_decimal", + "rustls", + "rustls-pemfile", + "serde", + "serde_json", + "sha2", + "smallvec", + "sqlformat", + "thiserror", + "time", + "tokio", + "tokio-stream", + "tracing", + "url", + "uuid", + "webpki-roots", +] + +[[package]] +name = "sqlx-macros" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cac0692bcc9de3b073e8d747391827297e075c7710ff6276d9f7a1f3d58c6657" +dependencies = [ + "proc-macro2", + "quote", + "sqlx-core", + "sqlx-macros-core", + "syn 2.0.72", +] + +[[package]] +name = "sqlx-macros-core" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1804e8a7c7865599c9c79be146dc8a9fd8cc86935fa641d3ea58e5f0688abaa5" +dependencies = [ + "dotenvy", + "either", + "heck 0.5.0", + "hex", + "once_cell", + "proc-macro2", + "quote", + "serde", + "serde_json", + "sha2", + "sqlx-core", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", + "syn 2.0.72", + "tempfile", + "tokio", + "url", +] + +[[package]] +name = "sqlx-mysql" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64bb4714269afa44aef2755150a0fc19d756fb580a67db8885608cf02f47d06a" +dependencies = [ + "atoi", + "base64 0.22.1", + "bigdecimal", + "bitflags 2.6.0", + "byteorder", + "bytes", + "chrono", + "crc", + "digest", + "dotenvy", + "either", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "generic-array", + "hex", + "hkdf", + "hmac", + "itoa", + "log", + "md-5", + "memchr", + "once_cell", + "percent-encoding", + "rand", + "rsa", + "rust_decimal", + "serde", + "sha1", + "sha2", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror", + "time", + "tracing", + "uuid", + "whoami", +] + +[[package]] +name = "sqlx-postgres" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fa91a732d854c5d7726349bb4bb879bb9478993ceb764247660aee25f67c2f8" +dependencies = [ + "atoi", + "base64 0.22.1", + "bigdecimal", + "bitflags 2.6.0", + "byteorder", + "chrono", + "crc", + "dotenvy", + "etcetera", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "hex", + "hkdf", + "hmac", + "home", + "itoa", + "log", + "md-5", + "memchr", + "num-bigint", + "once_cell", + "rand", + "rust_decimal", + "serde", + "serde_json", + "sha2", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror", + "time", + "tracing", + "uuid", + "whoami", +] + +[[package]] +name = "sqlx-sqlite" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5b2cf34a45953bfd3daaf3db0f7a7878ab9b7a6b91b422d24a7a9e4c857b680" +dependencies = [ + "atoi", + "chrono", + "flume 0.11.0", + "futures-channel", + "futures-core", + "futures-executor", + "futures-intrusive", + "futures-util", + "libsqlite3-sys", + "log", + "percent-encoding", + "serde", + "serde_urlencoded", + "sqlx-core", + "time", + "tracing", + "url", + "uuid", +] + +[[package]] +name = "stacker" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c886bd4480155fd3ef527d45e9ac8dd7118a898a46530b7b94c3e21866259fce" +dependencies = [ + "cc", + "cfg-if", + "libc", + "psm", + "winapi", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "stringprep" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" +dependencies = [ + "unicode-bidi", + "unicode-normalization", + "unicode-properties", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "strum" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.72" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc4b9b9bf2add8093d3f2c0204471e951b2285580335de42f9d2534f3ae7a8af" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn_derive" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1329189c02ff984e9736652b1631330da25eaa6bc639089ed4915d25446cbe7b" +dependencies = [ + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "sync_wrapper" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" + +[[package]] +name = "tagptr" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "tempfile" +version = "3.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +dependencies = [ + "cfg-if", + "fastrand 2.1.0", + "rustix 0.38.34", + "windows-sys 0.52.0", +] + +[[package]] +name = "tera" +version = "1.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab9d851b45e865f178319da0abdbfe6acbc4328759ff18dafc3a41c16b4cd2ee" +dependencies = [ + "chrono", + "chrono-tz", + "globwalk", + "humansize", + "lazy_static", + "percent-encoding", + "pest", + "pest_derive", + "rand", + "regex", + "serde", + "serde_json", + "slug", + "unic-segment", +] + +[[package]] +name = "term" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f" +dependencies = [ + "dirs-next", + "rustversion", + "winapi", +] + +[[package]] +name = "thiserror" +version = "1.0.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "time" +version = "0.3.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", +] + +[[package]] +name = "tinyvec" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.40.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2 0.5.7", + "tokio-macros", + "windows-sys 0.52.0", +] + +[[package]] +name = "tokio-cron-scheduler" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7b9480125554f0ace1c3c3797a24b5cc56c6a7cd82c739db35fb54c4dc046f3" +dependencies = [ + "chrono", + "cron", + "num-derive", + "num-traits", + "tokio", + "tracing", + "uuid", +] + +[[package]] +name = "tokio-macros" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +dependencies = [ + "rustls", + "rustls-pki-types", + "tokio", +] + +[[package]] +name = "tokio-stream" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "toml_datetime" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" + +[[package]] +name = "toml_edit" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "pin-project", + "pin-project-lite", + "tokio", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2873938d487c3cfb9aed7546dc9f2711d867c9f90c46b889989a2cb84eba6b4f" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper 0.1.2", + "tokio", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8437150ab6bbc8c5f0f519e3d5ed4aa883a83dd4cdd3d1b21f9482936046cb97" +dependencies = [ + "async-compression", + "bitflags 2.6.0", + "bytes", + "futures-core", + "futures-util", + "http 1.1.0", + "http-body", + "http-body-util", + "http-range-header", + "httpdate", + "mime", + "mime_guess", + "percent-encoding", + "pin-project-lite", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-appender" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3566e8ce28cc0a3fe42519fc80e6b4c943cc4c8cef275620eb8dac2d3d4e06cf" +dependencies = [ + "crossbeam-channel", + "thiserror", + "time", + "tracing-subscriber", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-serde" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" +dependencies = [ + "serde", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "serde", + "serde_json", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", + "tracing-serde", +] + +[[package]] +name = "triomphe" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "859eb650cfee7434994602c3a68b25d77ad9e68c8a6cd491616ef86661382eb3" + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "type-map" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "deb68604048ff8fa93347f02441e4487594adc20bb8a084f9e564d2b827a0a9f" +dependencies = [ + "rustc-hash", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "ucd-trie" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" + +[[package]] +name = "ulid" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04f903f293d11f31c0c29e4148f6dc0d033a7f80cebc0282bea147611667d289" +dependencies = [ + "getrandom", + "rand", + "web-time", +] + +[[package]] +name = "unic-char-property" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" +dependencies = [ + "unic-char-range", +] + +[[package]] +name = "unic-char-range" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" + +[[package]] +name = "unic-common" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" + +[[package]] +name = "unic-langid" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23dd9d1e72a73b25e07123a80776aae3e7b0ec461ef94f9151eed6ec88005a44" +dependencies = [ + "unic-langid-impl", + "unic-langid-macros", +] + +[[package]] +name = "unic-langid-impl" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a5422c1f65949306c99240b81de9f3f15929f5a8bfe05bb44b034cc8bf593e5" +dependencies = [ + "tinystr", +] + +[[package]] +name = "unic-langid-macros" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0da1cd2c042d3c7569a1008806b02039e7a4a2bdf8f8e96bd3c792434a0e275e" +dependencies = [ + "proc-macro-hack", + "tinystr", + "unic-langid-impl", + "unic-langid-macros-impl", +] + +[[package]] +name = "unic-langid-macros-impl" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ed7f4237ba393424195053097c1516bd4590dc82b84f2f97c5c69e12704555b" +dependencies = [ + "proc-macro-hack", + "quote", + "syn 2.0.72", + "unic-langid-impl", +] + +[[package]] +name = "unic-segment" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4ed5d26be57f84f176157270c112ef57b86debac9cd21daaabbe56db0f88f23" +dependencies = [ + "unic-ucd-segment", +] + +[[package]] +name = "unic-ucd-segment" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2079c122a62205b421f499da10f3ee0f7697f012f55b675e002483c73ea34700" +dependencies = [ + "unic-char-property", + "unic-char-range", + "unic-ucd-version", +] + +[[package]] +name = "unic-ucd-version" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" +dependencies = [ + "unic-common", +] + +[[package]] +name = "unicase" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" +dependencies = [ + "version_check", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-normalization" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-properties" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4259d9d4425d9f0661581b804cb85fe66a4c631cadd8f490d1c13a35d5d9291" + +[[package]] +name = "unicode-segmentation" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" + +[[package]] +name = "unicode-width" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" + +[[package]] +name = "unicode_categories" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" + +[[package]] +name = "unsafe-libyaml" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "utf8-width" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86bd8d4e895da8537e5315b8254664e6b769c4ff3db18321b297a1e7004392e3" + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "uuid" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" +dependencies = [ + "getrandom", + "rand", + "serde", +] + +[[package]] +name = "validator" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db79c75af171630a3148bd3e6d7c4f42b6a9a014c2945bc5ed0020cbb8d9478e" +dependencies = [ + "idna", + "once_cell", + "regex", + "serde", + "serde_derive", + "serde_json", + "url", + "validator_derive", +] + +[[package]] +name = "validator_derive" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df0bcf92720c40105ac4b2dda2a4ea3aa717d4d6a862cc217da653a4bd5c6b10" +dependencies = [ + "darling", + "once_cell", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "value-bag" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a84c137d37ab0142f0f2ddfe332651fdbf252e7b7dbb4e67b6c1f1b2e925101" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "waker-fn" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" + +[[package]] +name = "wasm-bindgen" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.72", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" + +[[package]] +name = "web-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki-roots" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd7c23921eeb1713a4e851530e9b9756e4fb0e89978582942612524cf09f01cd" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "whoami" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44ab49fad634e88f55bf8f9bb3abd2f27d7204172a112c7c9987e01c1c94ea9" +dependencies = [ + "redox_syscall 0.4.1", + "wasite", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" +dependencies = [ + "windows-core", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "yansi" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" + +[[package]] +name = "yansi" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" + +[[package]] +name = "zstd" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcf2b778a664581e31e389454a7072dab1647606d44f7feea22cd5abb9c9f3f9" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "7.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa556e971e7b568dc775c136fc9de8c779b1c2fc3a63defaafadffdbd3181afa" +dependencies = [ + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.12+zstd.1.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a4e40c320c3cb459d9a9ff6de98cff88f4751ee9275d140e2be94a2b74e4c13" +dependencies = [ + "cc", + "pkg-config", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..ee177aa --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,58 @@ +[workspace] + +[package] +name = "daily_aujourdhui" +version = "0.1.0" +edition = "2021" +publish = false +default-run = "daily_aujourdhui-cli" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[workspace.dependencies] +loco-rs = { version = "0.12.0" } + +[dependencies] + +loco-rs = { workspace = true } +migration = { path = "migration" } + +serde = { version = "1", features = ["derive"] } +serde_json = "1" +tokio = { version = "1.33.0", default-features = false } +async-trait = "0.1.74" +tracing = "0.1.40" +chrono = "0.4" +validator = { version = "0.18" } +sea-orm = { version = "1.1.0", features = [ + "sqlx-sqlite", + "sqlx-postgres", + "runtime-tokio-rustls", + "macros", +] } + +axum = "0.7.5" +include_dir = "0.7" +uuid = { version = "1.6.0", features = ["v4"] } +tracing-subscriber = { version = "0.3.17", features = ["env-filter", "json"] } + +# view engine i18n +fluent-templates = { version = "0.8.0", features = ["tera"] } +unic-langid = "0.9.4" +# /view engine + +[[bin]] +name = "daily_aujourdhui-cli" +path = "src/bin/main.rs" +required-features = [] + +[[bin]] +name = "tool" +path = "src/bin/tool.rs" +required-features = [] + +[dev-dependencies] +serial_test = "3.1.1" +rstest = "0.21.0" +loco-rs = { workspace = true, features = ["testing"] } +insta = { version = "1.34.0", features = ["redactions", "yaml", "filters"] } diff --git a/README.md b/README.md new file mode 100644 index 0000000..43b9bdd --- /dev/null +++ b/README.md @@ -0,0 +1,58 @@ +# Welcome to Loco :train: + +[Loco](https://loco.rs) is a web and API framework running on Rust. + +This is the **SaaS starter** which includes a `User` model and authentication based on JWT. +It also include configuration sections that help you pick either a frontend or a server-side template set up for your fullstack server. + + +## Quick Start + +```sh +cargo loco start +``` + +```sh +$ cargo loco start +Finished dev [unoptimized + debuginfo] target(s) in 21.63s + Running `target/debug/myapp start` + + : + : + : + +controller/app_routes.rs:203: [Middleware] Adding log trace id + + ▄ ▀ + ▀ ▄ + ▄ ▀ ▄ ▄ ▄▀ + ▄ ▀▄▄ + ▄ ▀ ▀ ▀▄▀█▄ + ▀█▄ +▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄ ▀▀█ + ██████ █████ ███ █████ ███ █████ ███ ▀█ + ██████ █████ ███ █████ ▀▀▀ █████ ███ ▄█▄ + ██████ █████ ███ █████ █████ ███ ████▄ + ██████ █████ ███ █████ ▄▄▄ █████ ███ █████ + ██████ █████ ███ ████ ███ █████ ███ ████▀ + ▀▀▀██▄ ▀▀▀▀▀▀▀▀▀▀ ▀▀▀▀▀▀▀▀▀▀ ▀▀▀▀▀▀▀▀▀▀ ██▀ + ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ + https://loco.rs + +environment: development + database: automigrate + logger: debug +compilation: debug + modes: server + +listening on http://localhost:5150 +``` + +## Full Stack Serving + +You can check your [configuration](config/development.yaml) to pick either frontend setup or server-side rendered template, and activate the relevant configuration sections. + + +## Getting help + +Check out [a quick tour](https://loco.rs/docs/getting-started/tour/) or [the complete guide](https://loco.rs/docs/getting-started/guide/). diff --git a/assets/i18n/de-DE/main.ftl b/assets/i18n/de-DE/main.ftl new file mode 100644 index 0000000..ced609f --- /dev/null +++ b/assets/i18n/de-DE/main.ftl @@ -0,0 +1,4 @@ +hello-world = Hallo Welt! +greeting = Hallochen { $name }! + .placeholder = Hallo Freund! +about = Uber diff --git a/assets/i18n/en-US/main.ftl b/assets/i18n/en-US/main.ftl new file mode 100644 index 0000000..9d4d5e7 --- /dev/null +++ b/assets/i18n/en-US/main.ftl @@ -0,0 +1,10 @@ +hello-world = Hello World! +greeting = Hello { $name }! + .placeholder = Hello Friend! +about = About +simple = simple text +reference = simple text with a reference: { -something } +parameter = text with a { $param } +parameter2 = text one { $param } second { $multi-word-param } +email = text with an EMAIL("example@example.org") +fallback = this should fall back diff --git a/assets/i18n/shared.ftl b/assets/i18n/shared.ftl new file mode 100644 index 0000000..f169eca --- /dev/null +++ b/assets/i18n/shared.ftl @@ -0,0 +1 @@ +-something = foo diff --git a/assets/static/404.html b/assets/static/404.html new file mode 100644 index 0000000..66e78fb --- /dev/null +++ b/assets/static/404.html @@ -0,0 +1,3 @@ + +not found :-( + diff --git a/assets/static/image.png b/assets/static/image.png new file mode 100644 index 0000000000000000000000000000000000000000..fa5a09508d1b4510e2de0cb7d0fa20a44eb631c6 GIT binary patch literal 304720 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%0DeQf`{ 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�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%0DZ^Q%>elM^F6+0A)oFJ{$ckKC-VUABW#^>PD3wb_ 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%0DqC9P??cV;AKw1TI!SOt??NfSBi^fWgGAq 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 literal 0 HcmV?d00001 diff --git a/assets/views/home/hello.html b/assets/views/home/hello.html new file mode 100644 index 0000000..6b97c39 --- /dev/null +++ b/assets/views/home/hello.html @@ -0,0 +1,12 @@ + + +
+ find this tera template at assets/views/home/hello.html: +
+
+ {{ t(key="hello-world", lang="en-US") }}, +
+ {{ t(key="hello-world", lang="de-DE") }} + + + \ No newline at end of file diff --git a/config/development.yaml b/config/development.yaml new file mode 100644 index 0000000..bb1259f --- /dev/null +++ b/config/development.yaml @@ -0,0 +1,138 @@ +# Loco configuration file documentation + +# Application logging configuration +logger: + # Enable or disable logging. + enable: true + # Enable pretty backtrace (sets RUST_BACKTRACE=1) + pretty_backtrace: true + # Log level, options: trace, debug, info, warn or error. + level: debug + # Define the logging format. options: compact, pretty or json + format: compact + # By default the logger has filtering only logs that came from your code or logs that came from `loco` framework. to see all third party libraries + # Uncomment the line below to override to see all third party libraries you can enable this config and override the logger filters. + # override_filter: trace + +# Web server configuration +server: + # Port on which the server will listen. the server binding is 0.0.0.0:{PORT} + port: 5150 + # The UI hostname or IP address that mailers will point to. + host: http://localhost + # Out of the box middleware configuration. to disable middleware you can changed the `enable` field to `false` of comment the middleware block + middlewares: + # ############################################# + # Full stack SaaS asset serving + # ############################################# + # + # You can choose from: + # + # (1) Server-side rendered templates (like erb in Ruby, ejs in nodejs) based on the Tera templating engine. + # (2) Client-side frontend set up + # + # You can also choose both. + # + # Uncomment the relevant sections below: + + # + # (1) Server-side static assets config + # ==================================== + # + # for use with the view_engine in initializers/view_engine.rs + # (server-block-start) + # static: + # enable: true + # must_exist: true + # precompressed: false + # folder: + # uri: "/static" + # path: "assets/static" + # fallback: "assets/static/404.html" + # (server-block-end) + + # + # (2) Client side app static config + # ================================= + # + # Note that you need to go in `frontend` and run your frontend build first, + # e.g.: $ npm install & npm build + # + static: + enable: true + must_exist: true + precompressed: false + folder: + uri: "/" + path: "frontend/dist" + fallback: "frontend/dist/index.html" + # + +# Worker Configuration +workers: + # specifies the worker mode. Options: + # - BackgroundQueue - Workers operate asynchronously in the background, processing queued. + # - ForegroundBlocking - Workers operate in the foreground and block until tasks are completed. + # - BackgroundAsync - Workers operate asynchronously in the background, processing tasks with async capabilities. + mode: BackgroundAsync + +# Mailer Configuration. +mailer: + # SMTP mailer configuration. + smtp: + # Enable/Disable smtp mailer. + enable: true + # SMTP server host. e.x localhost, smtp.gmail.com + host: {{ get_env(name="MAILER_HOST", default="localhost") }} + # SMTP server port + port: 1025 + # Use secure connection (SSL/TLS). + secure: false + # auth: + # user: + # password: + +# Initializers Configuration +# initializers: +# oauth2: +# authorization_code: # Authorization code grant type +# - client_identifier: google # Identifier for the OAuth2 provider. Replace 'google' with your provider's name if different, must be unique within the oauth2 config. +# ... other fields + +# Database Configuration +database: + # Database connection URI + uri: {{ get_env(name="DATABASE_URL", default="sqlite://daily_aujourdhui_development.sqlite?mode=rwc") }} + # When enabled, the sql query will be logged. + enable_logging: false + # Set the timeout duration when acquiring a connection. + connect_timeout: {{ get_env(name="DB_CONNECT_TIMEOUT", default="500") }} + # Set the idle duration before closing a connection. + idle_timeout: 500 + # Minimum number of connections for a pool. + min_connections: 1 + # Maximum number of connections for a pool. + max_connections: 1 + # Run migration up when application loaded + auto_migrate: true + # Truncate database when application loaded. This is a dangerous operation, make sure that you using this flag only on dev environments or test mode + dangerously_truncate: false + # Recreating schema when application loaded. This is a dangerous operation, make sure that you using this flag only on dev environments or test mode + dangerously_recreate: false + +# Queue Configuration +queue: + kind: Redis + # Redis connection URI + uri: {{ get_env(name="REDIS_URL", default="redis://127.0.0.1") }} + # Dangerously flush all data in Redis on startup. dangerous operation, make sure that you using this flag only on dev environments or test mode + dangerously_flush: false + +# Authentication Configuration +auth: + # JWT authentication + jwt: + # Secret key for token generation and verification + secret: fwSH8LiNizFRFZR2zZTO + # Token expiration time in seconds + expiration: 604800 # 7 days diff --git a/config/test.yaml b/config/test.yaml new file mode 100644 index 0000000..a57761d --- /dev/null +++ b/config/test.yaml @@ -0,0 +1,101 @@ +# Loco configuration file documentation + +# Application logging configuration +logger: + # Enable or disable logging. + enable: false + # Log level, options: trace, debug, info, warn or error. + level: debug + # Define the logging format. options: compact, pretty or json + format: compact + # By default the logger has filtering only logs that came from your code or logs that came from `loco` framework. to see all third party libraries + # Uncomment the line below to override to see all third party libraries you can enable this config and override the logger filters. + # override_filter: trace + +# Web server configuration +server: + # Port on which the server will listen. the server binding is 0.0.0.0:{PORT} + port: 5150 + # The UI hostname or IP address that mailers will point to. + host: http://localhost + # Out of the box middleware configuration. to disable middleware you can changed the `enable` field to `false` of comment the middleware block + middlewares: + static: + enable: true + precompressed: false + must_exist: false + folder: + uri: "/" + path: "frontend/dist" + fallback: "frontend/dist/index.html" + +# Worker Configuration +workers: + # specifies the worker mode. Options: + # - BackgroundQueue - Workers operate asynchronously in the background, processing queued. + # - ForegroundBlocking - Workers operate in the foreground and block until tasks are completed. + # - BackgroundAsync - Workers operate asynchronously in the background, processing tasks with async capabilities. + mode: ForegroundBlocking + +# Mailer Configuration. +mailer: + # SMTP mailer configuration. + smtp: + # Enable/Disable smtp mailer. + enable: true + # SMTP server host. e.x localhost, smtp.gmail.com + host: localhost + # SMTP server port + port: 1025 + # Use secure connection (SSL/TLS). + secure: false + # auth: + # user: + # password: + stub: true + +# Initializers Configuration +# initializers: +# oauth2: +# authorization_code: # Authorization code grant type +# - client_identifier: google # Identifier for the OAuth2 provider. Replace 'google' with your provider's name if different, must be unique within the oauth2 config. +# ... other fields + +# Database Configuration +database: + # Database connection URI + uri: {{get_env(name="DATABASE_URL", default="sqlite://daily_aujourdhui_test.sqlite?mode=rwc")}} + # When enabled, the sql query will be logged. + enable_logging: false + # Set the timeout duration when acquiring a connection. + connect_timeout: {{ get_env(name="DB_CONNECT_TIMEOUT", default="500") }} + # Set the idle duration before closing a connection. + idle_timeout: 500 + # Minimum number of connections for a pool. + min_connections: 1 + # Maximum number of connections for a pool. + max_connections: 1 + # Run migration up when application loaded + auto_migrate: true + # Truncate database when application loaded. This is a dangerous operation, make sure that you using this flag only on dev environments or test mode + dangerously_truncate: true + # Recreating schema when application loaded. This is a dangerous operation, make sure that you using this flag only on dev environments or test mode + dangerously_recreate: false + +# Queue Configuration +queue: + kind: Redis + # Redis connection URI + uri: {{get_env(name="REDIS_URL", default="redis://127.0.0.1")}} + # Dangerously flush all data in Redis on startup. dangerous operation, make sure that you using this flag only on dev environments or test mode + dangerously_flush: false + +# Authentication Configuration +auth: + # JWT authentication + jwt: + # Secret key for token generation and verification + secret: YOfElH8VE2SHOVCo65Xu + # Token expiration time in seconds + expiration: 604800 # 7 days + diff --git a/examples/playground.rs b/examples/playground.rs new file mode 100644 index 0000000..f0583bc --- /dev/null +++ b/examples/playground.rs @@ -0,0 +1,21 @@ +#[allow(unused_imports)] +use loco_rs::{cli::playground, prelude::*}; +use daily_aujourdhui::app::App; + +#[tokio::main] +async fn main() -> loco_rs::Result<()> { + let _ctx = playground::().await?; + + // let active_model: articles::ActiveModel = ActiveModel { + // title: Set(Some("how to build apps in 3 steps".to_string())), + // content: Set(Some("use Loco: https://loco.rs".to_string())), + // ..Default::default() + // }; + // active_model.insert(&ctx.db).await.unwrap(); + + // let res = articles::Entity::find().all(&ctx.db).await.unwrap(); + // println!("{:?}", res); + println!("welcome to playground. edit me at `examples/playground.rs`"); + + Ok(()) +} diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..36e9d8d --- /dev/null +++ b/flake.lock @@ -0,0 +1,96 @@ +{ + "nodes": { + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1733212471, + "narHash": "sha256-M1+uCoV5igihRfcUKrr1riygbe73/dzNnzPsmaLCmpo=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "55d15ad12a74eb7d4646254e13638ad0c4128776", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1728538411, + "narHash": "sha256-f0SBJz1eZ2yOuKUr5CA9BHULGXVSn6miBuUWdTyhUhU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "b69de56fac8c2b6f8fd27f2eca01dcda8e0a4221", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs", + "rust-overlay": "rust-overlay" + } + }, + "rust-overlay": { + "inputs": { + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1733279627, + "narHash": "sha256-NCNDAGPkdFdu+DLErbmNbavmVW9AwkgP7azROFFSB0U=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "4da5a80ef76039e80468c902f1e9f5c0eab87d96", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..63f0356 --- /dev/null +++ b/flake.nix @@ -0,0 +1,66 @@ +{ + description = ""; + + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + flake-utils.url = "github:numtide/flake-utils"; + rust-overlay.url = "github:oxalica/rust-overlay"; + }; + + outputs = { self, nixpkgs, flake-utils, rust-overlay }: + flake-utils.lib.eachSystem ["x86_64-linux"] (system: + let + overlays = [ (import rust-overlay) ]; + pkgs = import nixpkgs { inherit system overlays; }; + rustVersion = (pkgs.rust-bin.fromRustupToolchainFile ./rust-toolchain.toml); + rustPlatform = pkgs.makeRustPlatform { + cargo = rustVersion; + rustc = rustVersion; + }; + + appName = "rse-backend"; + + appRustBuild = rustPlatform.buildRustPackage { + pname = appName; + version = "0.1.0"; + src = ./.; + cargoLock.lockFile = ./Cargo.lock; + doCheck = false; + }; + + dockerImage = pkgs.dockerTools.buildLayeredImage { + name = appName; + config = { + Entrypoint = [ "${appRustBuild}/bin/${appName}" ]; + Env = [ "SSL_CERT_FILE=${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt" ]; + Tag = "latest"; + }; + contents = [ appRustBuild pkgs.cacert ]; + }; + in { + packages = { + rustPackage = appRustBuild; + docker = dockerImage; + }; + defaultPackage = dockerImage; + devShell = with pkgs; mkShell { + buildInputs = [ + bacon + cargo + cargo-audit + cargo-auditable + cargo-msrv + cargo-tarpaulin + dockerfile-language-server-nodejs + just + loco-cli + nodePackages."@volar/vue-language-server" + nodejs_20 + rust-analyzer + rustVersion + sea-orm-cli + vscode-langservers-extracted + ]; + }; + }); +} diff --git a/frontend/.dir-locals.el b/frontend/.dir-locals.el new file mode 100644 index 0000000..89a1dca --- /dev/null +++ b/frontend/.dir-locals.el @@ -0,0 +1,11 @@ +;;; Directory Local Variables -*- no-byte-compile: t -*- +;;; For more information see (info "(emacs) Directory Variables") + +((js-json-mode . ((js-indent-level . 2))) + (web-mode . ((web-mode-style-padding . 0) + (web-mode-script-padding . 0) + (emmet-indentation . 2) + (web-mode-code-indent-offset . 2) + (web-mode-markup-comment-indent-offset . 2) + (web-mode-markup-indent-offset . 2) + (web-mode-css-indent-offset . 2)))) diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 0000000..39c5c92 --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,27 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.DS_Store +dist +dist-ssr +coverage +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +*.tsbuildinfo diff --git a/frontend/.vscode/extensions.json b/frontend/.vscode/extensions.json new file mode 100644 index 0000000..4c8e9ac --- /dev/null +++ b/frontend/.vscode/extensions.json @@ -0,0 +1,6 @@ +{ + "recommendations": [ + "Vue.volar", + "vitest.explorer" + ] +} diff --git a/frontend/README.md b/frontend/README.md new file mode 100644 index 0000000..f8d457e --- /dev/null +++ b/frontend/README.md @@ -0,0 +1,39 @@ +# daily-aujourdhui + +This template should help get you started developing with Vue 3 in Vite. + +## Recommended IDE Setup + +[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur). + +## Type Support for `.vue` Imports in TS + +TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) to make the TypeScript language service aware of `.vue` types. + +## Customize configuration + +See [Vite Configuration Reference](https://vite.dev/config/). + +## Project Setup + +```sh +npm install +``` + +### Compile and Hot-Reload for Development + +```sh +npm run dev +``` + +### Type-Check, Compile and Minify for Production + +```sh +npm run build +``` + +### Run Unit Tests with [Vitest](https://vitest.dev/) + +```sh +npm run test:unit +``` diff --git a/frontend/env.d.ts b/frontend/env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/frontend/env.d.ts @@ -0,0 +1 @@ +/// diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 0000000..9e5fc8f --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite App + + +
+ + + diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 0000000..892af20 --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,5728 @@ +{ + "name": "daily-aujourdhui", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "daily-aujourdhui", + "version": "0.0.0", + "dependencies": { + "pinia": "^2.2.6", + "vue": "^3.5.13", + "vue-router": "^4.4.5" + }, + "devDependencies": { + "@biomejs/biome": "1.9.4", + "@tsconfig/node22": "^22.0.0", + "@types/jsdom": "^21.1.7", + "@types/node": "^22.9.3", + "@vitejs/plugin-vue": "^5.2.1", + "@vue/test-utils": "^2.4.6", + "@vue/tsconfig": "^0.7.0", + "jsdom": "^25.0.1", + "npm-run-all2": "^7.0.1", + "typescript": "~5.6.3", + "vite": "^6.0.1", + "vite-plugin-vue-devtools": "^7.6.5", + "vitest": "^2.1.5", + "vue-tsc": "^2.1.10" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@antfu/utils": { + "version": "0.7.10", + "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.10.tgz", + "integrity": "sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.3.tgz", + "integrity": "sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.3.tgz", + "integrity": "sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.26.3", + "@babel/types": "^7.26.3", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", + "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz", + "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/traverse": "^7.25.9", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", + "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", + "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", + "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz", + "integrity": "sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", + "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", + "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.3.tgz", + "integrity": "sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.3" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.25.9.tgz", + "integrity": "sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-decorators": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.25.9.tgz", + "integrity": "sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", + "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", + "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", + "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.3.tgz", + "integrity": "sha512-6+5hpdr6mETwSKjmJUdYw0EIkATiQhnELWlE3kJFBwSg/BGIVwVaVbX+gOXBCdc7Ln1RXZxyWGecIXhUfnl7oA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-syntax-typescript": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.3.tgz", + "integrity": "sha512-yTmc8J+Sj8yLzwr4PD5Xb/WF3bOYu2C2OoSZPzbuqRm4n98XirsbzaX+GloeO376UnSYIYJ4NCanwV5/ugZkwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.3", + "@babel/parser": "^7.26.3", + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.3", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz", + "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@biomejs/biome": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-1.9.4.tgz", + "integrity": "sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==", + "dev": true, + "hasInstallScript": true, + "license": "MIT OR Apache-2.0", + "bin": { + "biome": "bin/biome" + }, + "engines": { + "node": ">=14.21.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/biome" + }, + "optionalDependencies": { + "@biomejs/cli-darwin-arm64": "1.9.4", + "@biomejs/cli-darwin-x64": "1.9.4", + "@biomejs/cli-linux-arm64": "1.9.4", + "@biomejs/cli-linux-arm64-musl": "1.9.4", + "@biomejs/cli-linux-x64": "1.9.4", + "@biomejs/cli-linux-x64-musl": "1.9.4", + "@biomejs/cli-win32-arm64": "1.9.4", + "@biomejs/cli-win32-x64": "1.9.4" + } + }, + "node_modules/@biomejs/cli-darwin-arm64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-1.9.4.tgz", + "integrity": "sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-darwin-x64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-1.9.4.tgz", + "integrity": "sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-arm64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-1.9.4.tgz", + "integrity": "sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-arm64-musl": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.9.4.tgz", + "integrity": "sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-x64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-1.9.4.tgz", + "integrity": "sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-x64-musl": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-1.9.4.tgz", + "integrity": "sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-win32-arm64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-1.9.4.tgz", + "integrity": "sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-win32-x64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-1.9.4.tgz", + "integrity": "sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.0.tgz", + "integrity": "sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.0.tgz", + "integrity": "sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.0.tgz", + "integrity": "sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.0.tgz", + "integrity": "sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.0.tgz", + "integrity": "sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.0.tgz", + "integrity": "sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.0.tgz", + "integrity": "sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.0.tgz", + "integrity": "sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.0.tgz", + "integrity": "sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.0.tgz", + "integrity": "sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.0.tgz", + "integrity": "sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.0.tgz", + "integrity": "sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.0.tgz", + "integrity": "sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.0.tgz", + "integrity": "sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.0.tgz", + "integrity": "sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.0.tgz", + "integrity": "sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.0.tgz", + "integrity": "sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.0.tgz", + "integrity": "sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.0.tgz", + "integrity": "sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.0.tgz", + "integrity": "sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.0.tgz", + "integrity": "sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.0.tgz", + "integrity": "sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.0.tgz", + "integrity": "sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.0.tgz", + "integrity": "sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@one-ini/wasm": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz", + "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.28", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz", + "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.3.tgz", + "integrity": "sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.28.0.tgz", + "integrity": "sha512-wLJuPLT6grGZsy34g4N1yRfYeouklTgPhH1gWXCYspenKYD0s3cR99ZevOGw5BexMNywkbV3UkjADisozBmpPQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.28.0.tgz", + "integrity": "sha512-eiNkznlo0dLmVG/6wf+Ifi/v78G4d4QxRhuUl+s8EWZpDewgk7PX3ZyECUXU0Zq/Ca+8nU8cQpNC4Xgn2gFNDA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.28.0.tgz", + "integrity": "sha512-lmKx9yHsppblnLQZOGxdO66gT77bvdBtr/0P+TPOseowE7D9AJoBw8ZDULRasXRWf1Z86/gcOdpBrV6VDUY36Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.28.0.tgz", + "integrity": "sha512-8hxgfReVs7k9Js1uAIhS6zq3I+wKQETInnWQtgzt8JfGx51R1N6DRVy3F4o0lQwumbErRz52YqwjfvuwRxGv1w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.28.0.tgz", + "integrity": "sha512-lA1zZB3bFx5oxu9fYud4+g1mt+lYXCoch0M0V/xhqLoGatbzVse0wlSQ1UYOWKpuSu3gyN4qEc0Dxf/DII1bhQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.28.0.tgz", + "integrity": "sha512-aI2plavbUDjCQB/sRbeUZWX9qp12GfYkYSJOrdYTL/C5D53bsE2/nBPuoiJKoWp5SN78v2Vr8ZPnB+/VbQ2pFA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.28.0.tgz", + "integrity": "sha512-WXveUPKtfqtaNvpf0iOb0M6xC64GzUX/OowbqfiCSXTdi/jLlOmH0Ba94/OkiY2yTGTwteo4/dsHRfh5bDCZ+w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.28.0.tgz", + "integrity": "sha512-yLc3O2NtOQR67lI79zsSc7lk31xjwcaocvdD1twL64PK1yNaIqCeWI9L5B4MFPAVGEVjH5k1oWSGuYX1Wutxpg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.28.0.tgz", + "integrity": "sha512-+P9G9hjEpHucHRXqesY+3X9hD2wh0iNnJXX/QhS/J5vTdG6VhNYMxJ2rJkQOxRUd17u5mbMLHM7yWGZdAASfcg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.28.0.tgz", + "integrity": "sha512-1xsm2rCKSTpKzi5/ypT5wfc+4bOGa/9yI/eaOLW0oMs7qpC542APWhl4A37AENGZ6St6GBMWhCCMM6tXgTIplw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.28.0.tgz", + "integrity": "sha512-zgWxMq8neVQeXL+ouSf6S7DoNeo6EPgi1eeqHXVKQxqPy1B2NvTbaOUWPn/7CfMKL7xvhV0/+fq/Z/J69g1WAQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.28.0.tgz", + "integrity": "sha512-VEdVYacLniRxbRJLNtzwGt5vwS0ycYshofI7cWAfj7Vg5asqj+pt+Q6x4n+AONSZW/kVm+5nklde0qs2EUwU2g==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.28.0.tgz", + "integrity": "sha512-LQlP5t2hcDJh8HV8RELD9/xlYtEzJkm/aWGsauvdO2ulfl3QYRjqrKW+mGAIWP5kdNCBheqqqYIGElSRCaXfpw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.28.0.tgz", + "integrity": "sha512-Nl4KIzteVEKE9BdAvYoTkW19pa7LR/RBrT6F1dJCV/3pbjwDcaOq+edkP0LXuJ9kflW/xOK414X78r+K84+msw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.28.0.tgz", + "integrity": "sha512-eKpJr4vBDOi4goT75MvW+0dXcNUqisK4jvibY9vDdlgLx+yekxSm55StsHbxUsRxSTt3JEQvlr3cGDkzcSP8bw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.28.0.tgz", + "integrity": "sha512-Vi+WR62xWGsE/Oj+mD0FNAPY2MEox3cfyG0zLpotZdehPFXwz6lypkGs5y38Jd/NVSbOD02aVad6q6QYF7i8Bg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.28.0.tgz", + "integrity": "sha512-kN/Vpip8emMLn/eOza+4JwqDZBL6MPNpkdaEsgUtW1NYN3DZvZqSQrbKzJcTL6hd8YNmFTn7XGWMwccOcJBL0A==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.28.0.tgz", + "integrity": "sha512-Bvno2/aZT6usSa7lRDL2+hMjVAGjuqaymF1ApZm31JXzniR/hvr14jpU+/z4X6Gt5BPlzosscyJZGUvguXIqeQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sec-ant/readable-stream": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", + "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@tsconfig/node22": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/@tsconfig/node22/-/node22-22.0.0.tgz", + "integrity": "sha512-twLQ77zevtxobBOD4ToAtVmuYrpeYUh3qh+TEp+08IWhpsrIflVHqQ1F1CiPxQGL7doCdBIOOCF+1Tm833faNg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/jsdom": { + "version": "21.1.7", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-21.1.7.tgz", + "integrity": "sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/tough-cookie": "*", + "parse5": "^7.0.0" + } + }, + "node_modules/@types/node": { + "version": "22.10.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.1.tgz", + "integrity": "sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "node_modules/@types/tough-cookie": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.1.tgz", + "integrity": "sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vitest/expect": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.8.tgz", + "integrity": "sha512-8ytZ/fFHq2g4PJVAtDX57mayemKgDR6X3Oa2Foro+EygiOJHUXhCqBAAKQYYajZpFoIfvBCF1j6R6IYRSIUFuw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "2.1.8", + "@vitest/utils": "2.1.8", + "chai": "^5.1.2", + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/pretty-format": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.8.tgz", + "integrity": "sha512-9HiSZ9zpqNLKlbIDRWOnAWqgcA7xu+8YxXSekhr0Ykab7PAYFkhkwoqVArPOtJhPmYeE2YHgKZlj3CP36z2AJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.8.tgz", + "integrity": "sha512-17ub8vQstRnRlIU5k50bG+QOMLHRhYPAna5tw8tYbj+jzjcspnwnwtPtiOlkuKC4+ixDPTuLZiqiWWQ2PSXHVg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "2.1.8", + "pathe": "^1.1.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.8.tgz", + "integrity": "sha512-20T7xRFbmnkfcmgVEz+z3AU/3b0cEzZOt/zmnvZEctg64/QZbSDJEVm9fLnnlSi74KibmRsO9/Qabi+t0vCRPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "2.1.8", + "magic-string": "^0.30.12", + "pathe": "^1.1.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.8.tgz", + "integrity": "sha512-5swjf2q95gXeYPevtW0BLk6H8+bPlMb4Vw/9Em4hFxDcaOxS+e0LOX4yqNxoHzMR2akEB2xfpnWUzkZokmgWDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^3.0.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.8.tgz", + "integrity": "sha512-dwSoui6djdwbfFmIgbIjX2ZhIoG7Ex/+xpxyiEgIGzjliY8xGkcpITKTlp6B4MgtGkF2ilvm97cPM96XZaAgcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "2.1.8", + "loupe": "^3.1.2", + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@volar/language-core": { + "version": "2.4.10", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.10.tgz", + "integrity": "sha512-hG3Z13+nJmGaT+fnQzAkS0hjJRa2FCeqZt6Bd+oGNhUkQ+mTFsDETg5rqUTxyzIh5pSOGY7FHCWUS8G82AzLCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/source-map": "2.4.10" + } + }, + "node_modules/@volar/source-map": { + "version": "2.4.10", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.10.tgz", + "integrity": "sha512-OCV+b5ihV0RF3A7vEvNyHPi4G4kFa6ukPmyVocmqm5QzOd8r5yAtiNvaPEjl8dNvgC/lj4JPryeeHLdXd62rWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@volar/typescript": { + "version": "2.4.10", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.10.tgz", + "integrity": "sha512-F8ZtBMhSXyYKuBfGpYwqA5rsONnOwAVvjyE7KPYJ7wgZqo2roASqNWUnianOomJX5u1cxeRooHV59N0PhvEOgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.10", + "path-browserify": "^1.0.1", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@vue/babel-helper-vue-transform-on": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.2.5.tgz", + "integrity": "sha512-lOz4t39ZdmU4DJAa2hwPYmKc8EsuGa2U0L9KaZaOJUt0UwQNjNA3AZTq6uEivhOKhhG1Wvy96SvYBoFmCg3uuw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/babel-plugin-jsx": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.2.5.tgz", + "integrity": "sha512-zTrNmOd4939H9KsRIGmmzn3q2zvv1mjxkYZHgqHZgDrXz5B1Q3WyGEjO2f+JrmKghvl1JIRcvo63LgM1kH5zFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/plugin-syntax-jsx": "^7.24.7", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.6", + "@babel/types": "^7.25.6", + "@vue/babel-helper-vue-transform-on": "1.2.5", + "@vue/babel-plugin-resolve-type": "1.2.5", + "html-tags": "^3.3.1", + "svg-tags": "^1.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + } + } + }, + "node_modules/@vue/babel-plugin-resolve-type": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.2.5.tgz", + "integrity": "sha512-U/ibkQrf5sx0XXRnUZD1mo5F7PkpKyTbfXM3a3rC4YnUz6crHEz9Jg09jzzL6QYlXNto/9CePdOg/c87O4Nlfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/parser": "^7.25.6", + "@vue/compiler-sfc": "^3.5.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz", + "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/shared": "3.5.13", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz", + "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz", + "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/compiler-core": "3.5.13", + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.11", + "postcss": "^8.4.48", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz", + "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/compiler-vue2": { + "version": "2.7.16", + "resolved": "https://registry.npmjs.org/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz", + "integrity": "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==", + "dev": true, + "license": "MIT", + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", + "license": "MIT" + }, + "node_modules/@vue/devtools-core": { + "version": "7.6.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-core/-/devtools-core-7.6.7.tgz", + "integrity": "sha512-6fW8Q0H1NHDXdEcuV6dylT5U2Yxg3SdMnVCey99Y6S4R2PNgFL2vC+VU9U9rHIiaoEUkeza42S7FfHxV4VI3Jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^7.6.7", + "@vue/devtools-shared": "^7.6.7", + "mitt": "^3.0.1", + "nanoid": "^5.0.9", + "pathe": "^1.1.2", + "vite-hot-client": "^0.2.4" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@vue/devtools-core/node_modules/nanoid": { + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.9.tgz", + "integrity": "sha512-Aooyr6MXU6HpvvWXKoVoXwKMs/KyVakWwg7xQfv5/S/RIgJMy0Ifa45H9qqYy7pTCszrHzP21Uk4PZq2HpEM8Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^18 || >=20" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "7.6.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.6.7.tgz", + "integrity": "sha512-V8/jrXY/swHgnblABG9U4QCbE60c6RuPasmv2d9FvVqc5d94t1vDiESuvRmdNJBdWz4/D3q6ffgyAfRVjwHYEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^7.6.7", + "birpc": "^0.2.19", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.1" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.6.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.6.7.tgz", + "integrity": "sha512-QggO6SviAsolrePAXZ/sA1dSicSPt4TueZibCvydfhNDieL1lAuyMTgQDGst7TEvMGb4vgYv2I+1sDkO4jWNnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/@vue/language-core": { + "version": "2.1.10", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.1.10.tgz", + "integrity": "sha512-DAI289d0K3AB5TUG3xDp9OuQ71CnrujQwJrQnfuZDwo6eGNf0UoRlPuaVNO+Zrn65PC3j0oB2i7mNmVPggeGeQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "~2.4.8", + "@vue/compiler-dom": "^3.5.0", + "@vue/compiler-vue2": "^2.7.16", + "@vue/shared": "^3.5.0", + "alien-signals": "^0.2.0", + "minimatch": "^9.0.3", + "muggle-string": "^0.4.1", + "path-browserify": "^1.0.1" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/language-core/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.13.tgz", + "integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.13.tgz", + "integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz", + "integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.13", + "@vue/runtime-core": "3.5.13", + "@vue/shared": "3.5.13", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.13.tgz", + "integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13" + }, + "peerDependencies": { + "vue": "3.5.13" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz", + "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==", + "license": "MIT" + }, + "node_modules/@vue/test-utils": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-2.4.6.tgz", + "integrity": "sha512-FMxEjOpYNYiFe0GkaHsnJPXFHxQ6m4t8vI/ElPGpMWxZKpmRvQ33OIrvRXemy6yha03RxhOlQuy+gZMC3CQSow==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-beautify": "^1.14.9", + "vue-component-type-helpers": "^2.0.0" + } + }, + "node_modules/@vue/tsconfig": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.7.0.tgz", + "integrity": "sha512-ku2uNz5MaZ9IerPPUyOHzyjhXoX2kVJaVf7hL315DC17vS6IiZRmmCPfggNbU16QTvM80+uYYy3eYJB59WCtvg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "typescript": "5.x", + "vue": "^3.4.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/alien-signals": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-0.2.2.tgz", + "integrity": "sha512-cZIRkbERILsBOXTQmMrxc9hgpxglstn69zm+F1ARf4aPAzdAFYd6sBq87ErO0Fj3DV94tglcyHG5kQz9nDC/8A==", + "dev": true, + "license": "MIT" + }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/birpc": { + "version": "0.2.19", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-0.2.19.tgz", + "integrity": "sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/browserslist": { + "version": "4.24.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001669", + "electron-to-chromium": "^1.5.41", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001686", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001686.tgz", + "integrity": "sha512-Y7deg0Aergpa24M3qLC5xjNklnKnhsmSyR/V89dLZ1n0ucJIFNs7PgR2Yfa/Zf6W79SbBicgtGxZr2juHkEUIA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chai": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.2.tgz", + "integrity": "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/check-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/copy-anything": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssstyle": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.1.0.tgz", + "integrity": "sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==", + "dev": true, + "license": "MIT", + "dependencies": { + "rrweb-cssom": "^0.7.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/data-urls": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", + "dev": true, + "license": "MIT" + }, + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/editorconfig": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-1.0.4.tgz", + "integrity": "sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@one-ini/wasm": "0.1.1", + "commander": "^10.0.0", + "minimatch": "9.0.1", + "semver": "^7.5.3" + }, + "bin": { + "editorconfig": "bin/editorconfig" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.68", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.68.tgz", + "integrity": "sha512-FgMdJlma0OzUYlbrtZ4AeXjKxKPk6KT8WOP8BjcqxWtlg8qyJQjRzPJzUtUn5GBg1oQ26hFs7HOOHJMYiJRnvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-stack-parser-es": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-0.1.5.tgz", + "integrity": "sha512-xHku1X40RO+fO8yJ8Wh2f2rZWVjqyhb1zgq1yZ8aZRQkv6OOKhKWRUaht3eSCUbAOBaKIgM+ykwFLE+QUxgGeg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/es-module-lexer": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.0.tgz", + "integrity": "sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.24.0", + "@esbuild/android-arm": "0.24.0", + "@esbuild/android-arm64": "0.24.0", + "@esbuild/android-x64": "0.24.0", + "@esbuild/darwin-arm64": "0.24.0", + "@esbuild/darwin-x64": "0.24.0", + "@esbuild/freebsd-arm64": "0.24.0", + "@esbuild/freebsd-x64": "0.24.0", + "@esbuild/linux-arm": "0.24.0", + "@esbuild/linux-arm64": "0.24.0", + "@esbuild/linux-ia32": "0.24.0", + "@esbuild/linux-loong64": "0.24.0", + "@esbuild/linux-mips64el": "0.24.0", + "@esbuild/linux-ppc64": "0.24.0", + "@esbuild/linux-riscv64": "0.24.0", + "@esbuild/linux-s390x": "0.24.0", + "@esbuild/linux-x64": "0.24.0", + "@esbuild/netbsd-x64": "0.24.0", + "@esbuild/openbsd-arm64": "0.24.0", + "@esbuild/openbsd-x64": "0.24.0", + "@esbuild/sunos-x64": "0.24.0", + "@esbuild/win32-arm64": "0.24.0", + "@esbuild/win32-ia32": "0.24.0", + "@esbuild/win32-x64": "0.24.0" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/execa": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-9.5.1.tgz", + "integrity": "sha512-QY5PPtSonnGwhhHDNI7+3RvY285c7iuJFFB+lU+oEzMY/gEGJ808owqJsrr8Otd1E/x07po1LkUBmdAc5duPAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^4.0.0", + "cross-spawn": "^7.0.3", + "figures": "^6.1.0", + "get-stream": "^9.0.0", + "human-signals": "^8.0.0", + "is-plain-obj": "^4.1.0", + "is-stream": "^4.0.1", + "npm-run-path": "^6.0.0", + "pretty-ms": "^9.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^4.0.0", + "yoctocolors": "^2.0.0" + }, + "engines": { + "node": "^18.19.0 || >=20.5.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/expect-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.1.0.tgz", + "integrity": "sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/figures": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", + "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-unicode-supported": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "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, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-stream": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "license": "MIT", + "engines": { + "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, + "license": "ISC" + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/html-encoding-sniffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^3.1.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/human-signals": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.0.tgz", + "integrity": "sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "license": "ISC" + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/js-beautify": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.15.1.tgz", + "integrity": "sha512-ESjNzSlt/sWE8sciZH8kBF8BPlwXPwhR6pWKAw8bw4Bwj+iZcnKW6ONWUutJ7eObuBZQpiIb8S7OYspWrKt7rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "config-chain": "^1.1.13", + "editorconfig": "^1.0.4", + "glob": "^10.3.3", + "js-cookie": "^3.0.5", + "nopt": "^7.2.0" + }, + "bin": { + "css-beautify": "js/bin/css-beautify.js", + "html-beautify": "js/bin/html-beautify.js", + "js-beautify": "js/bin/js-beautify.js" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/js-cookie": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", + "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsdom": { + "version": "25.0.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-25.0.1.tgz", + "integrity": "sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssstyle": "^4.1.0", + "data-urls": "^5.0.0", + "decimal.js": "^10.4.3", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.5", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.12", + "parse5": "^7.1.2", + "rrweb-cssom": "^0.7.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^5.0.0", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0", + "ws": "^8.18.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "canvas": "^2.11.2" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-4.0.0.tgz", + "integrity": "sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "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, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/kolorist": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/loupe": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.2.tgz", + "integrity": "sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/magic-string": { + "version": "0.30.14", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.14.tgz", + "integrity": "sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "dev": true, + "license": "MIT" + }, + "node_modules/mrmime": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", + "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/muggle-string": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true, + "license": "MIT" + }, + "node_modules/nopt": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", + "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz", + "integrity": "sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-run-all2": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/npm-run-all2/-/npm-run-all2-7.0.1.tgz", + "integrity": "sha512-Adbv+bJQ8UTAM03rRODqrO5cx0YU5KCG2CvHtSURiadvdTjjgGJXdbc1oQ9CXBh9dnGfHSoSB1Web/0Dzp6kOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "cross-spawn": "^7.0.3", + "memorystream": "^0.3.1", + "minimatch": "^9.0.0", + "pidtree": "^0.6.0", + "read-package-json-fast": "^4.0.0", + "shell-quote": "^1.7.3", + "which": "^5.0.0" + }, + "bin": { + "npm-run-all": "bin/npm-run-all/index.js", + "npm-run-all2": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0", + "npm": ">= 9" + } + }, + "node_modules/npm-run-all2/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/npm-run-all2/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-run-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", + "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nwsapi": { + "version": "2.2.16", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.16.tgz", + "integrity": "sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/open": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", + "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/parse-ms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", + "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz", + "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^4.5.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/pathval": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", + "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.16" + } + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true, + "license": "MIT", + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pinia": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.3.0.tgz", + "integrity": "sha512-ohZj3jla0LL0OH5PlLTDMzqKiVw2XARmC1XYLdLWIPBMdhDW/123ZWr4zVAhtJm+aoSkFa13pYXskAvAscIkhQ==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.6.3", + "vue-demi": "^0.14.10" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "typescript": ">=4.4.4", + "vue": "^2.7.0 || ^3.5.11" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/postcss": { + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/pretty-ms": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.2.0.tgz", + "integrity": "sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse-ms": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true, + "license": "ISC" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/read-package-json-fast": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-4.0.0.tgz", + "integrity": "sha512-qpt8EwugBWDw2cgE2W+/3oxC+KTez2uSVR8JU9Q36TXPAGCaozfQUs59v4j4GFpWTaw0i6hAZSvOmu1J0uOEUg==", + "dev": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^4.0.0", + "npm-normalize-package-bin": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true, + "license": "MIT" + }, + "node_modules/rollup": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.28.0.tgz", + "integrity": "sha512-G9GOrmgWHBma4YfCcX8PjH0qhXSdH8B4HDE2o4/jaxj93S4DPCIDoLcXz99eWMji4hB29UFCEd7B2gwGJDR9cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.6" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.28.0", + "@rollup/rollup-android-arm64": "4.28.0", + "@rollup/rollup-darwin-arm64": "4.28.0", + "@rollup/rollup-darwin-x64": "4.28.0", + "@rollup/rollup-freebsd-arm64": "4.28.0", + "@rollup/rollup-freebsd-x64": "4.28.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.28.0", + "@rollup/rollup-linux-arm-musleabihf": "4.28.0", + "@rollup/rollup-linux-arm64-gnu": "4.28.0", + "@rollup/rollup-linux-arm64-musl": "4.28.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.28.0", + "@rollup/rollup-linux-riscv64-gnu": "4.28.0", + "@rollup/rollup-linux-s390x-gnu": "4.28.0", + "@rollup/rollup-linux-x64-gnu": "4.28.0", + "@rollup/rollup-linux-x64-musl": "4.28.0", + "@rollup/rollup-win32-arm64-msvc": "4.28.0", + "@rollup/rollup-win32-ia32-msvc": "4.28.0", + "@rollup/rollup-win32-x64-msvc": "4.28.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/rrweb-cssom": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz", + "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==", + "dev": true, + "license": "MIT" + }, + "node_modules/run-applescript": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", + "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sirv": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.0.tgz", + "integrity": "sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/source-map-js": { + "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==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/std-env": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.0.tgz", + "integrity": "sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", + "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/superjson": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.1.tgz", + "integrity": "sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "copy-anything": "^3.0.2" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", + "dev": true + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.1.tgz", + "integrity": "sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinypool": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.2.tgz", + "integrity": "sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, + "node_modules/tinyrainbow": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", + "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", + "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tldts": { + "version": "6.1.65", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.65.tgz", + "integrity": "sha512-xU9gLTfAGsADQ2PcWee6Hg8RFAv0DnjMGVJmDnUmI8a9+nYmapMQix4afwrdaCtT+AqP4MaxEzu7cCrYmBPbzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tldts-core": "^6.1.65" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "6.1.65", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.65.tgz", + "integrity": "sha512-Uq5t0N0Oj4nQSbU8wFN1YYENvMthvwU13MQrMJRspYCGLSAZjAfoBOJki5IQpnBM/WFskxxC/gIOTwaedmHaSg==", + "dev": true, + "license": "MIT" + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz", + "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^6.1.32" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tr46": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz", + "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/typescript": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", + "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "dev": true, + "license": "MIT" + }, + "node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/vite": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.2.tgz", + "integrity": "sha512-XdQ+VsY2tJpBsKGs0wf3U/+azx8BBpYRHFAyKm5VeEZNOJZRB63q7Sc8Iup3k0TrN3KO6QgyzFf+opSbfY1y0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.24.0", + "postcss": "^8.4.49", + "rollup": "^4.23.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-hot-client": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/vite-hot-client/-/vite-hot-client-0.2.4.tgz", + "integrity": "sha512-a1nzURqO7DDmnXqabFOliz908FRmIppkBKsJthS8rbe8hBEXwEwe4C3Pp33Z1JoFCYfVL4kTOMLKk0ZZxREIeA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0" + } + }, + "node_modules/vite-node": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.8.tgz", + "integrity": "sha512-uPAwSr57kYjAUux+8E2j0q0Fxpn8M9VoyfGiRI8Kfktz9NcYMCenwY5RnZxnF1WTu3TGiYipirIzacLL3VVGFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.3.7", + "es-module-lexer": "^1.5.4", + "pathe": "^1.1.2", + "vite": "^5.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vite-node/node_modules/@esbuild/aix-ppc64": { + "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" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/android-arm": { + "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" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/android-arm64": { + "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" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/darwin-arm64": { + "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" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/darwin-x64": { + "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" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/freebsd-arm64": { + "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" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/freebsd-x64": { + "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" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-arm64": { + "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" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-loong64": { + "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" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-ppc64": { + "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" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-riscv64": { + "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" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-x64": { + "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" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/sunos-x64": { + "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" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/win32-ia32": { + "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" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/win32-x64": { + "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" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/esbuild": { + "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, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@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/vite-node/node_modules/vite": { + "version": "5.4.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", + "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-plugin-vue-devtools": { + "version": "7.6.7", + "resolved": "https://registry.npmjs.org/vite-plugin-vue-devtools/-/vite-plugin-vue-devtools-7.6.7.tgz", + "integrity": "sha512-H1ZyjtpWjP5mHA5R15sQeYgAARuh2Myg3TDFXWZK6QOQRy8s3XjTIt319DogVjU/x3rC3L/jJQjIasRU04mWXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/devtools-core": "^7.6.7", + "@vue/devtools-kit": "^7.6.7", + "@vue/devtools-shared": "^7.6.7", + "execa": "^9.5.1", + "sirv": "^3.0.0", + "vite-plugin-inspect": "0.8.8", + "vite-plugin-vue-inspector": "^5.3.1" + }, + "engines": { + "node": ">=v14.21.3" + }, + "peerDependencies": { + "vite": "^3.1.0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0" + } + }, + "node_modules/vite-plugin-vue-devtools/node_modules/vite-plugin-inspect": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/vite-plugin-inspect/-/vite-plugin-inspect-0.8.8.tgz", + "integrity": "sha512-aZlBuXsWUPJFmMK92GIv6lH7LrwG2POu4KJ+aEdcqnu92OAf+rhBnfMDQvxIJPEB7hE2t5EyY/PMgf5aDLT8EA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@antfu/utils": "^0.7.10", + "@rollup/pluginutils": "^5.1.3", + "debug": "^4.3.7", + "error-stack-parser-es": "^0.1.5", + "fs-extra": "^11.2.0", + "open": "^10.1.0", + "perfect-debounce": "^1.0.0", + "picocolors": "^1.1.1", + "sirv": "^3.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + } + } + }, + "node_modules/vite-plugin-vue-inspector": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/vite-plugin-vue-inspector/-/vite-plugin-vue-inspector-5.3.1.tgz", + "integrity": "sha512-cBk172kZKTdvGpJuzCCLg8lJ909wopwsu3Ve9FsL1XsnLBiRT9U3MePcqrgGHgCX2ZgkqZmAGR8taxw+TV6s7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.23.0", + "@babel/plugin-proposal-decorators": "^7.23.0", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-transform-typescript": "^7.22.15", + "@vue/babel-plugin-jsx": "^1.1.5", + "@vue/compiler-dom": "^3.3.4", + "kolorist": "^1.8.0", + "magic-string": "^0.30.4" + }, + "peerDependencies": { + "vite": "^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0" + } + }, + "node_modules/vitest": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.8.tgz", + "integrity": "sha512-1vBKTZskHw/aosXqQUlVWWlGUxSJR8YtiyZDJAFeW2kPAeX6S3Sool0mjspO+kXLuxVWlEDDowBAeqeAQefqLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/expect": "2.1.8", + "@vitest/mocker": "2.1.8", + "@vitest/pretty-format": "^2.1.8", + "@vitest/runner": "2.1.8", + "@vitest/snapshot": "2.1.8", + "@vitest/spy": "2.1.8", + "@vitest/utils": "2.1.8", + "chai": "^5.1.2", + "debug": "^4.3.7", + "expect-type": "^1.1.0", + "magic-string": "^0.30.12", + "pathe": "^1.1.2", + "std-env": "^3.8.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.1", + "tinypool": "^1.0.1", + "tinyrainbow": "^1.2.0", + "vite": "^5.0.0", + "vite-node": "2.1.8", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/node": "^18.0.0 || >=20.0.0", + "@vitest/browser": "2.1.8", + "@vitest/ui": "2.1.8", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/vitest/node_modules/@esbuild/aix-ppc64": { + "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" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/android-arm": { + "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" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/android-arm64": { + "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" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/darwin-arm64": { + "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" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/darwin-x64": { + "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" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/freebsd-arm64": { + "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" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/freebsd-x64": { + "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" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-arm64": { + "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" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-loong64": { + "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" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-ppc64": { + "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" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-riscv64": { + "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" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-x64": { + "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" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/sunos-x64": { + "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" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/win32-ia32": { + "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" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/win32-x64": { + "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" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@vitest/mocker": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.8.tgz", + "integrity": "sha512-7guJ/47I6uqfttp33mgo6ga5Gr1VnL58rcqYKyShoRK9ebu8T5Rs6HN3s1NABiBeVTdWNrwUMcHH54uXZBN4zA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "2.1.8", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.12" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/vitest/node_modules/esbuild": { + "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, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@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/vitest/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/vitest/node_modules/vite": { + "version": "5.4.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", + "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vscode-uri": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", + "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/vue": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.13.tgz", + "integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-sfc": "3.5.13", + "@vue/runtime-dom": "3.5.13", + "@vue/server-renderer": "3.5.13", + "@vue/shared": "3.5.13" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-component-type-helpers": { + "version": "2.1.10", + "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-2.1.10.tgz", + "integrity": "sha512-lfgdSLQKrUmADiSV6PbBvYgQ33KF3Ztv6gP85MfGaGaSGMTXORVaHT1EHfsqCgzRNBstPKYDmvAV9Do5CmJ07A==", + "dev": true, + "license": "MIT" + }, + "node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/vue-router": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.5.0.tgz", + "integrity": "sha512-HDuk+PuH5monfNuY+ct49mNmkCRK4xJAV9Ts4z9UFc4rzdDnxQLyCMGGc8pKhZhHTVzfanpNwB/lwqevcBwI4w==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.6.4" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/vue-tsc": { + "version": "2.1.10", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.1.10.tgz", + "integrity": "sha512-RBNSfaaRHcN5uqVqJSZh++Gy/YUzryuv9u1aFWhsammDJXNtUiJMNoJ747lZcQ68wUQFx6E73y4FY3D8E7FGMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/typescript": "~2.4.8", + "@vue/language-core": "2.1.10", + "semver": "^7.5.4" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": ">=5.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-url": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.1.0.tgz", + "integrity": "sha512-jlf/foYIKywAt3x/XWKZ/3rz8OSJPiWktjmk891alJUEjiVxKX9LEO92qH3hv4aJ0mN3MWPvGMCy8jQi95xK4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "^5.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true, + "license": "MIT" + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yoctocolors": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.1.tgz", + "integrity": "sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..af4ca2e --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,39 @@ +{ + "name": "daily-aujourdhui", + "version": "0.0.0", + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "run-p type-check \"build-only {@}\" --", + "preview": "vite preview", + "test:unit": "vitest", + "build-only": "vite build", + "type-check": "vue-tsc --build", + "lint": "biome check src/", + "format": "biome format --write src/", + "check": "biome check --write src/", + "ci": "biome ci src/" + }, + "dependencies": { + "pinia": "^2.2.6", + "vue": "^3.5.13", + "vue-router": "^4.4.5" + }, + "devDependencies": { + "@biomejs/biome": "1.9.4", + "@tsconfig/node22": "^22.0.0", + "@types/jsdom": "^21.1.7", + "@types/node": "^22.9.3", + "@vitejs/plugin-vue": "^5.2.1", + "@vue/test-utils": "^2.4.6", + "@vue/tsconfig": "^0.7.0", + "jsdom": "^25.0.1", + "npm-run-all2": "^7.0.1", + "typescript": "~5.6.3", + "vite": "^6.0.1", + "vite-plugin-vue-devtools": "^7.6.5", + "vitest": "^2.1.5", + "vue-tsc": "^2.1.10" + } +} diff --git a/frontend/public/favicon.ico b/frontend/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..df36fcfb72584e00488330b560ebcf34a41c64c2 GIT binary patch literal 4286 zcmds*O-Phc6o&64GDVCEQHxsW(p4>LW*W<827=Unuo8sGpRux(DN@jWP-e29Wl%wj zY84_aq9}^Am9-cWTD5GGEo#+5Fi2wX_P*bo+xO!)p*7B;iKlbFd(U~_d(U?#hLj56 zPhFkj-|A6~Qk#@g^#D^U0XT1cu=c-vu1+SElX9NR;kzAUV(q0|dl0|%h|dI$%VICy zJnu2^L*Te9JrJMGh%-P79CL0}dq92RGU6gI{v2~|)p}sG5x0U*z<8U;Ij*hB9z?ei z@g6Xq-pDoPl=MANPiR7%172VA%r)kevtV-_5H*QJKFmd;8yA$98zCxBZYXTNZ#QFk2(TX0;Y2dt&WitL#$96|gJY=3xX zpCoi|YNzgO3R`f@IiEeSmKrPSf#h#Qd<$%Ej^RIeeYfsxhPMOG`S`Pz8q``=511zm zAm)MX5AV^5xIWPyEu7u>qYs?pn$I4nL9J!=K=SGlKLXpE<5x+2cDTXq?brj?n6sp= zphe9;_JHf40^9~}9i08r{XM$7HB!`{Ys~TK0kx<}ZQng`UPvH*11|q7&l9?@FQz;8 zx!=3<4seY*%=OlbCbcae?5^V_}*K>Uo6ZWV8mTyE^B=DKy7-sdLYkR5Z?paTgK-zyIkKjIcpyO z{+uIt&YSa_$QnN_@t~L014dyK(fOOo+W*MIxbA6Ndgr=Y!f#Tokqv}n<7-9qfHkc3 z=>a|HWqcX8fzQCT=dqVbogRq!-S>H%yA{1w#2Pn;=e>JiEj7Hl;zdt-2f+j2%DeVD zsW0Ab)ZK@0cIW%W7z}H{&~yGhn~D;aiP4=;m-HCo`BEI+Kd6 z={Xwx{TKxD#iCLfl2vQGDitKtN>z|-AdCN|$jTFDg0m3O`WLD4_s#$S literal 0 HcmV?d00001 diff --git a/frontend/src/App.vue b/frontend/src/App.vue new file mode 100644 index 0000000..2410e7d --- /dev/null +++ b/frontend/src/App.vue @@ -0,0 +1,85 @@ + + + + + diff --git a/frontend/src/assets/base.css b/frontend/src/assets/base.css new file mode 100644 index 0000000..3ecd9f4 --- /dev/null +++ b/frontend/src/assets/base.css @@ -0,0 +1,74 @@ +/* color palette from */ +:root { + --vt-c-white: #ffffff; + --vt-c-white-soft: #f8f8f8; + --vt-c-white-mute: #f2f2f2; + + --vt-c-black: #181818; + --vt-c-black-soft: #222222; + --vt-c-black-mute: #282828; + + --vt-c-indigo: #2c3e50; + + --vt-c-divider-light-1: rgba(60, 60, 60, 0.29); + --vt-c-divider-light-2: rgba(60, 60, 60, 0.12); + --vt-c-divider-dark-1: rgba(84, 84, 84, 0.65); + --vt-c-divider-dark-2: rgba(84, 84, 84, 0.48); + + --vt-c-text-light-1: var(--vt-c-indigo); + --vt-c-text-light-2: rgba(60, 60, 60, 0.66); + --vt-c-text-dark-1: var(--vt-c-white); + --vt-c-text-dark-2: rgba(235, 235, 235, 0.64); +} + +/* semantic color variables for this project */ +:root { + --color-background: var(--vt-c-white); + --color-background-soft: var(--vt-c-white-soft); + --color-background-mute: var(--vt-c-white-mute); + + --color-border: var(--vt-c-divider-light-2); + --color-border-hover: var(--vt-c-divider-light-1); + + --color-heading: var(--vt-c-text-light-1); + --color-text: var(--vt-c-text-light-1); + + --section-gap: 160px; +} + +@media (prefers-color-scheme: dark) { + :root { + --color-background: var(--vt-c-black); + --color-background-soft: var(--vt-c-black-soft); + --color-background-mute: var(--vt-c-black-mute); + + --color-border: var(--vt-c-divider-dark-2); + --color-border-hover: var(--vt-c-divider-dark-1); + + --color-heading: var(--vt-c-text-dark-1); + --color-text: var(--vt-c-text-dark-2); + } +} + +*, +*::before, +*::after { + box-sizing: border-box; + margin: 0; + font-weight: normal; +} + +body { + min-height: 100vh; + color: var(--color-text); + background: var(--color-background); + transition: color 0.5s, background-color 0.5s; + line-height: 1.6; + font-family: Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, + Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", + sans-serif; + font-size: 15px; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} diff --git a/frontend/src/assets/logo.svg b/frontend/src/assets/logo.svg new file mode 100644 index 0000000..7565660 --- /dev/null +++ b/frontend/src/assets/logo.svg @@ -0,0 +1 @@ + diff --git a/frontend/src/assets/main.css b/frontend/src/assets/main.css new file mode 100644 index 0000000..70d4943 --- /dev/null +++ b/frontend/src/assets/main.css @@ -0,0 +1,35 @@ +@import "./base.css"; + +#app { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + font-weight: normal; +} + +a, +.green { + text-decoration: none; + color: hsla(160, 100%, 37%, 1); + transition: 0.4s; + padding: 3px; +} + +@media (hover: hover) { + a:hover { + background-color: hsla(160, 100%, 37%, 0.2); + } +} + +@media (min-width: 1024px) { + body { + display: flex; + place-items: center; + } + + #app { + display: grid; + grid-template-columns: 1fr 1fr; + padding: 0 2rem; + } +} diff --git a/frontend/src/components/HelloWorld.vue b/frontend/src/components/HelloWorld.vue new file mode 100644 index 0000000..148e9d5 --- /dev/null +++ b/frontend/src/components/HelloWorld.vue @@ -0,0 +1,41 @@ + + + + + diff --git a/frontend/src/components/TheWelcome.vue b/frontend/src/components/TheWelcome.vue new file mode 100644 index 0000000..b99fdcf --- /dev/null +++ b/frontend/src/components/TheWelcome.vue @@ -0,0 +1,90 @@ + + + diff --git a/frontend/src/components/WelcomeItem.vue b/frontend/src/components/WelcomeItem.vue new file mode 100644 index 0000000..6d7086a --- /dev/null +++ b/frontend/src/components/WelcomeItem.vue @@ -0,0 +1,87 @@ + + + diff --git a/frontend/src/components/__tests__/HelloWorld.spec.ts b/frontend/src/components/__tests__/HelloWorld.spec.ts new file mode 100644 index 0000000..c80503c --- /dev/null +++ b/frontend/src/components/__tests__/HelloWorld.spec.ts @@ -0,0 +1,11 @@ +import { describe, expect, it } from "vitest"; + +import { mount } from "@vue/test-utils"; +import HelloWorld from "../HelloWorld.vue"; + +describe("HelloWorld", () => { + it("renders properly", () => { + const wrapper = mount(HelloWorld, { props: { msg: "Hello Vitest" } }); + expect(wrapper.text()).toContain("Hello Vitest"); + }); +}); diff --git a/frontend/src/components/icons/IconCommunity.vue b/frontend/src/components/icons/IconCommunity.vue new file mode 100644 index 0000000..2dc8b05 --- /dev/null +++ b/frontend/src/components/icons/IconCommunity.vue @@ -0,0 +1,7 @@ + diff --git a/frontend/src/components/icons/IconDocumentation.vue b/frontend/src/components/icons/IconDocumentation.vue new file mode 100644 index 0000000..6d4791c --- /dev/null +++ b/frontend/src/components/icons/IconDocumentation.vue @@ -0,0 +1,7 @@ + diff --git a/frontend/src/components/icons/IconEcosystem.vue b/frontend/src/components/icons/IconEcosystem.vue new file mode 100644 index 0000000..c3a4f07 --- /dev/null +++ b/frontend/src/components/icons/IconEcosystem.vue @@ -0,0 +1,7 @@ + diff --git a/frontend/src/components/icons/IconSupport.vue b/frontend/src/components/icons/IconSupport.vue new file mode 100644 index 0000000..7452834 --- /dev/null +++ b/frontend/src/components/icons/IconSupport.vue @@ -0,0 +1,7 @@ + diff --git a/frontend/src/components/icons/IconTooling.vue b/frontend/src/components/icons/IconTooling.vue new file mode 100644 index 0000000..660598d --- /dev/null +++ b/frontend/src/components/icons/IconTooling.vue @@ -0,0 +1,19 @@ + + diff --git a/frontend/src/main.ts b/frontend/src/main.ts new file mode 100644 index 0000000..fb14360 --- /dev/null +++ b/frontend/src/main.ts @@ -0,0 +1,14 @@ +import "./assets/main.css"; + +import { createPinia } from "pinia"; +import { createApp } from "vue"; + +import App from "./App.vue"; +import router from "./router"; + +const app = createApp(App); + +app.use(createPinia()); +app.use(router); + +app.mount("#app"); diff --git a/frontend/src/router/index.ts b/frontend/src/router/index.ts new file mode 100644 index 0000000..35612dc --- /dev/null +++ b/frontend/src/router/index.ts @@ -0,0 +1,23 @@ +import { createRouter, createWebHistory } from "vue-router"; +import HomeView from "../views/HomeView.vue"; + +const router = createRouter({ + history: createWebHistory(import.meta.env.BASE_URL), + routes: [ + { + path: "/", + name: "home", + component: HomeView, + }, + { + path: "/about", + name: "about", + // route level code-splitting + // this generates a separate chunk (About.[hash].js) for this route + // which is lazy-loaded when the route is visited. + component: () => import("../views/AboutView.vue"), + }, + ], +}); + +export default router; diff --git a/frontend/src/stores/counter.ts b/frontend/src/stores/counter.ts new file mode 100644 index 0000000..de4b569 --- /dev/null +++ b/frontend/src/stores/counter.ts @@ -0,0 +1,12 @@ +import { defineStore } from "pinia"; +import { computed, ref } from "vue"; + +export const useCounterStore = defineStore("counter", () => { + const count = ref(0); + const doubleCount = computed(() => count.value * 2); + function increment() { + count.value++; + } + + return { count, doubleCount, increment }; +}); diff --git a/frontend/src/views/AboutView.vue b/frontend/src/views/AboutView.vue new file mode 100644 index 0000000..756ad2a --- /dev/null +++ b/frontend/src/views/AboutView.vue @@ -0,0 +1,15 @@ + + + diff --git a/frontend/src/views/HomeView.vue b/frontend/src/views/HomeView.vue new file mode 100644 index 0000000..23a53cd --- /dev/null +++ b/frontend/src/views/HomeView.vue @@ -0,0 +1,9 @@ + + + diff --git a/frontend/tsconfig.app.json b/frontend/tsconfig.app.json new file mode 100644 index 0000000..93f952f --- /dev/null +++ b/frontend/tsconfig.app.json @@ -0,0 +1,13 @@ +{ + "extends": "@vue/tsconfig/tsconfig.dom.json", + "include": ["env.d.ts", "src/**/*", "src/**/*.vue"], + "exclude": ["src/**/__tests__/*"], + "compilerOptions": { + "composite": true, + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + + "paths": { + "@/*": ["./src/*"] + } + } +} diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json new file mode 100644 index 0000000..100cf6a --- /dev/null +++ b/frontend/tsconfig.json @@ -0,0 +1,14 @@ +{ + "files": [], + "references": [ + { + "path": "./tsconfig.node.json" + }, + { + "path": "./tsconfig.app.json" + }, + { + "path": "./tsconfig.vitest.json" + } + ] +} diff --git a/frontend/tsconfig.node.json b/frontend/tsconfig.node.json new file mode 100644 index 0000000..5a0c6a5 --- /dev/null +++ b/frontend/tsconfig.node.json @@ -0,0 +1,19 @@ +{ + "extends": "@tsconfig/node22/tsconfig.json", + "include": [ + "vite.config.*", + "vitest.config.*", + "cypress.config.*", + "nightwatch.conf.*", + "playwright.config.*" + ], + "compilerOptions": { + "composite": true, + "noEmit": true, + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + + "module": "ESNext", + "moduleResolution": "Bundler", + "types": ["node"] + } +} diff --git a/frontend/tsconfig.vitest.json b/frontend/tsconfig.vitest.json new file mode 100644 index 0000000..571995d --- /dev/null +++ b/frontend/tsconfig.vitest.json @@ -0,0 +1,11 @@ +{ + "extends": "./tsconfig.app.json", + "exclude": [], + "compilerOptions": { + "composite": true, + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.vitest.tsbuildinfo", + + "lib": [], + "types": ["node", "jsdom"] + } +} diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts new file mode 100644 index 0000000..4217010 --- /dev/null +++ b/frontend/vite.config.ts @@ -0,0 +1,18 @@ +import { fileURLToPath, URL } from 'node:url' + +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' +import vueDevTools from 'vite-plugin-vue-devtools' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [ + vue(), + vueDevTools(), + ], + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)) + }, + }, +}) diff --git a/frontend/vitest.config.ts b/frontend/vitest.config.ts new file mode 100644 index 0000000..c328717 --- /dev/null +++ b/frontend/vitest.config.ts @@ -0,0 +1,14 @@ +import { fileURLToPath } from 'node:url' +import { mergeConfig, defineConfig, configDefaults } from 'vitest/config' +import viteConfig from './vite.config' + +export default mergeConfig( + viteConfig, + defineConfig({ + test: { + environment: 'jsdom', + exclude: [...configDefaults.exclude, 'e2e/**'], + root: fileURLToPath(new URL('./', import.meta.url)), + }, + }), +) diff --git a/migration/Cargo.toml b/migration/Cargo.toml new file mode 100644 index 0000000..edbaa4b --- /dev/null +++ b/migration/Cargo.toml @@ -0,0 +1,22 @@ +[package] +name = "migration" +version = "0.1.0" +edition = "2021" +publish = false + +[lib] +name = "migration" +path = "src/lib.rs" + +[dependencies] +async-std = { version = "1", features = ["attributes", "tokio1"] } +loco-rs = { workspace = true } + +[dependencies.sea-orm-migration] +version = "1.1.0" +features = [ + # Enable at least one `ASYNC_RUNTIME` and `DATABASE_DRIVER` feature if you want to run migration via CLI. + # View the list of supported features at https://www.sea-ql.org/SeaORM/docs/install-and-config/database-and-async-runtime. + # e.g. + "runtime-tokio-rustls", # `ASYNC_RUNTIME` feature +] diff --git a/migration/src/lib.rs b/migration/src/lib.rs new file mode 100644 index 0000000..a8e6b4e --- /dev/null +++ b/migration/src/lib.rs @@ -0,0 +1,18 @@ +#![allow(elided_lifetimes_in_paths)] +#![allow(clippy::wildcard_imports)] +pub use sea_orm_migration::prelude::*; + +mod m20220101_000001_users; + +pub struct Migrator; + +#[async_trait::async_trait] +impl MigratorTrait for Migrator { + fn migrations() -> Vec> { + vec![ + // inject-below (do not remove this comment) + Box::new(m20220101_000001_users::Migration), + // inject-above (do not remove this comment) + ] + } +} diff --git a/migration/src/m20220101_000001_users.rs b/migration/src/m20220101_000001_users.rs new file mode 100644 index 0000000..936ad3d --- /dev/null +++ b/migration/src/m20220101_000001_users.rs @@ -0,0 +1,50 @@ +use loco_rs::schema::table_auto_tz; +use sea_orm_migration::{prelude::*, schema::*}; + +#[derive(DeriveMigrationName)] +pub struct Migration; + +#[async_trait::async_trait] +impl MigrationTrait for Migration { + async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> { + let table = table_auto_tz(Users::Table) + .col(pk_auto(Users::Id)) + .col(uuid(Users::Pid)) + .col(string_uniq(Users::Email)) + .col(string(Users::Password)) + .col(string(Users::ApiKey).unique_key()) + .col(string(Users::Name)) + .col(string_null(Users::ResetToken)) + .col(timestamp_with_time_zone_null(Users::ResetSentAt)) + .col(string_null(Users::EmailVerificationToken)) + .col(timestamp_with_time_zone_null( + Users::EmailVerificationSentAt, + )) + .col(timestamp_with_time_zone_null(Users::EmailVerifiedAt)) + .to_owned(); + manager.create_table(table).await?; + Ok(()) + } + + async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .drop_table(Table::drop().table(Users::Table).to_owned()) + .await + } +} + +#[derive(Iden)] +pub enum Users { + Table, + Id, + Pid, + Email, + Name, + Password, + ApiKey, + ResetToken, + ResetSentAt, + EmailVerificationToken, + EmailVerificationSentAt, + EmailVerifiedAt, +} diff --git a/rust-toolchain.toml b/rust-toolchain.toml new file mode 100644 index 0000000..1313875 --- /dev/null +++ b/rust-toolchain.toml @@ -0,0 +1,4 @@ +[toolchain] +channel = "1.81.0" +components = [ "rustfmt", "rust-src", "clippy", "rust-analyzer" ] +profile = "default" diff --git a/src/app.rs b/src/app.rs new file mode 100644 index 0000000..f635b37 --- /dev/null +++ b/src/app.rs @@ -0,0 +1,71 @@ +use std::path::Path; + +use async_trait::async_trait; +use loco_rs::{ + app::{AppContext, Hooks, Initializer}, + bgworker::{BackgroundWorker, Queue}, + boot::{create_app, BootResult, StartMode}, + controller::AppRoutes, + db::{self, truncate_table}, + environment::Environment, + task::Tasks, + Result, +}; +use migration::Migrator; +use sea_orm::DatabaseConnection; + +use crate::{ + controllers, initializers, models::_entities::users, tasks, workers::downloader::DownloadWorker, +}; + +pub struct App; +#[async_trait] +impl Hooks for App { + fn app_name() -> &'static str { + env!("CARGO_CRATE_NAME") + } + + fn app_version() -> String { + format!( + "{} ({})", + env!("CARGO_PKG_VERSION"), + option_env!("BUILD_SHA") + .or(option_env!("GITHUB_SHA")) + .unwrap_or("dev") + ) + } + + async fn boot(mode: StartMode, environment: &Environment) -> Result { + create_app::(mode, environment).await + } + + async fn initializers(_ctx: &AppContext) -> Result>> { + Ok(vec![Box::new( + initializers::view_engine::ViewEngineInitializer, + )]) + } + + fn routes(_ctx: &AppContext) -> AppRoutes { + AppRoutes::with_default_routes() // controller routes below + .add_route(controllers::auth::routes()) + } + + async fn connect_workers(ctx: &AppContext, queue: &Queue) -> Result<()> { + queue.register(DownloadWorker::build(ctx)).await?; + Ok(()) + } + + fn register_tasks(tasks: &mut Tasks) { + tasks.register(tasks::seed::SeedData); + } + + async fn truncate(db: &DatabaseConnection) -> Result<()> { + truncate_table(db, users::Entity).await?; + Ok(()) + } + + async fn seed(db: &DatabaseConnection, base: &Path) -> Result<()> { + db::seed::(db, &base.join("users.yaml").display().to_string()).await?; + Ok(()) + } +} diff --git a/src/bin/main.rs b/src/bin/main.rs new file mode 100644 index 0000000..372c09f --- /dev/null +++ b/src/bin/main.rs @@ -0,0 +1,8 @@ +use loco_rs::cli; +use daily_aujourdhui::app::App; +use migration::Migrator; + +#[tokio::main] +async fn main() -> loco_rs::Result<()> { + cli::main::().await +} diff --git a/src/bin/tool.rs b/src/bin/tool.rs new file mode 100644 index 0000000..372c09f --- /dev/null +++ b/src/bin/tool.rs @@ -0,0 +1,8 @@ +use loco_rs::cli; +use daily_aujourdhui::app::App; +use migration::Migrator; + +#[tokio::main] +async fn main() -> loco_rs::Result<()> { + cli::main::().await +} diff --git a/src/controllers/auth.rs b/src/controllers/auth.rs new file mode 100644 index 0000000..27e3de7 --- /dev/null +++ b/src/controllers/auth.rs @@ -0,0 +1,157 @@ +use axum::debug_handler; +use loco_rs::prelude::*; +use serde::{Deserialize, Serialize}; + +use crate::{ + mailers::auth::AuthMailer, + models::{ + _entities::users, + users::{LoginParams, RegisterParams}, + }, + views::auth::{CurrentResponse, LoginResponse}, +}; +#[derive(Debug, Deserialize, Serialize)] +pub struct VerifyParams { + pub token: String, +} + +#[derive(Debug, Deserialize, Serialize)] +pub struct ForgotParams { + pub email: String, +} + +#[derive(Debug, Deserialize, Serialize)] +pub struct ResetParams { + pub token: String, + pub password: String, +} + +/// Register function creates a new user with the given parameters and sends a +/// welcome email to the user +#[debug_handler] +async fn register( + State(ctx): State, + Json(params): Json, +) -> Result { + let res = users::Model::create_with_password(&ctx.db, ¶ms).await; + + let user = match res { + Ok(user) => user, + Err(err) => { + tracing::info!( + message = err.to_string(), + user_email = ¶ms.email, + "could not register user", + ); + return format::json(()); + } + }; + + let user = user + .into_active_model() + .set_email_verification_sent(&ctx.db) + .await?; + + AuthMailer::send_welcome(&ctx, &user).await?; + + format::json(()) +} + +/// Verify register user. if the user not verified his email, he can't login to +/// the system. +#[debug_handler] +async fn verify( + State(ctx): State, + Json(params): Json, +) -> Result { + let user = users::Model::find_by_verification_token(&ctx.db, ¶ms.token).await?; + + if user.email_verified_at.is_some() { + tracing::info!(pid = user.pid.to_string(), "user already verified"); + } else { + let active_model = user.into_active_model(); + let user = active_model.verified(&ctx.db).await?; + tracing::info!(pid = user.pid.to_string(), "user verified"); + } + + format::json(()) +} + +/// In case the user forgot his password this endpoints generate a forgot token +/// and send email to the user. In case the email not found in our DB, we are +/// returning a valid request for for security reasons (not exposing users DB +/// list). +#[debug_handler] +async fn forgot( + State(ctx): State, + Json(params): Json, +) -> Result { + let Ok(user) = users::Model::find_by_email(&ctx.db, ¶ms.email).await else { + // we don't want to expose our users email. if the email is invalid we still + // returning success to the caller + return format::json(()); + }; + + let user = user + .into_active_model() + .set_forgot_password_sent(&ctx.db) + .await?; + + AuthMailer::forgot_password(&ctx, &user).await?; + + format::json(()) +} + +/// reset user password by the given parameters +#[debug_handler] +async fn reset(State(ctx): State, Json(params): Json) -> Result { + let Ok(user) = users::Model::find_by_reset_token(&ctx.db, ¶ms.token).await else { + // we don't want to expose our users email. if the email is invalid we still + // returning success to the caller + tracing::info!("reset token not found"); + + return format::json(()); + }; + user.into_active_model() + .reset_password(&ctx.db, ¶ms.password) + .await?; + + format::json(()) +} + +/// Creates a user login and returns a token +#[debug_handler] +async fn login(State(ctx): State, Json(params): Json) -> Result { + let user = users::Model::find_by_email(&ctx.db, ¶ms.email).await?; + + let valid = user.verify_password(¶ms.password); + + if !valid { + return unauthorized("unauthorized!"); + } + + let jwt_secret = ctx.config.get_jwt_config()?; + + let token = user + .generate_jwt(&jwt_secret.secret, &jwt_secret.expiration) + .or_else(|_| unauthorized("unauthorized!"))?; + + format::json(LoginResponse::new(&user, &token)) +} + +#[debug_handler] +async fn current(auth: auth::JWT, State(ctx): State) -> Result { + let user = users::Model::find_by_pid(&ctx.db, &auth.claims.pid).await?; + format::json(CurrentResponse::new(&user)) +} + +pub fn routes() -> Routes { + Routes::new() + .prefix("/api/auth") + .add("/register", post(register)) + .add("/verify", post(verify)) + .add("/login", post(login)) + .add("/forgot", post(forgot)) + .add("/reset", post(reset)) + .add("/current", get(current)) +} diff --git a/src/controllers/mod.rs b/src/controllers/mod.rs new file mode 100644 index 0000000..0e4a05d --- /dev/null +++ b/src/controllers/mod.rs @@ -0,0 +1 @@ +pub mod auth; diff --git a/src/fixtures/users.yaml b/src/fixtures/users.yaml new file mode 100644 index 0000000..8f5b5ed --- /dev/null +++ b/src/fixtures/users.yaml @@ -0,0 +1,17 @@ +--- +- id: 1 + pid: 11111111-1111-1111-1111-111111111111 + email: user1@example.com + password: "$argon2id$v=19$m=19456,t=2,p=1$ETQBx4rTgNAZhSaeYZKOZg$eYTdH26CRT6nUJtacLDEboP0li6xUwUF/q5nSlQ8uuc" + api_key: lo-95ec80d7-cb60-4b70-9b4b-9ef74cb88758 + name: user1 + created_at: "2023-11-12T12:34:56.789Z" + updated_at: "2023-11-12T12:34:56.789Z" +- id: 2 + pid: 22222222-2222-2222-2222-222222222222 + email: user2@example.com + password: "$argon2id$v=19$m=19456,t=2,p=1$ETQBx4rTgNAZhSaeYZKOZg$eYTdH26CRT6nUJtacLDEboP0li6xUwUF/q5nSlQ8uuc" + api_key: lo-153561ca-fa84-4e1b-813a-c62526d0a77e + name: user2 + created_at: "2023-11-12T12:34:56.789Z" + updated_at: "2023-11-12T12:34:56.789Z" diff --git a/src/initializers/mod.rs b/src/initializers/mod.rs new file mode 100644 index 0000000..8b3bec4 --- /dev/null +++ b/src/initializers/mod.rs @@ -0,0 +1,2 @@ +#![allow(clippy::module_name_repetitions)] +pub mod view_engine; diff --git a/src/initializers/view_engine.rs b/src/initializers/view_engine.rs new file mode 100644 index 0000000..f0a5ffb --- /dev/null +++ b/src/initializers/view_engine.rs @@ -0,0 +1,36 @@ +use axum::{async_trait, Extension, Router as AxumRouter}; +use fluent_templates::{ArcLoader, FluentLoader}; +use loco_rs::{ + app::{AppContext, Initializer}, + controller::views::{engines, ViewEngine}, + Error, Result, +}; +use tracing::info; + +const I18N_DIR: &str = "assets/i18n"; +const I18N_SHARED: &str = "assets/i18n/shared.ftl"; + +pub struct ViewEngineInitializer; +#[async_trait] +impl Initializer for ViewEngineInitializer { + fn name(&self) -> String { + "view-engine".to_string() + } + + async fn after_routes(&self, router: AxumRouter, _ctx: &AppContext) -> Result { + let mut tera_engine = engines::TeraView::build()?; + if std::path::Path::new(I18N_DIR).exists() { + let arc = ArcLoader::builder(&I18N_DIR, unic_langid::langid!("en-US")) + .shared_resources(Some(&[I18N_SHARED.into()])) + .customize(|bundle| bundle.set_use_isolating(false)) + .build() + .map_err(|e| Error::string(&e.to_string()))?; + tera_engine + .tera + .register_function("t", FluentLoader::new(arc)); + info!("locales loaded"); + } + + Ok(router.layer(Extension(ViewEngine::from(tera_engine)))) + } +} diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..dc3ea76 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,8 @@ +pub mod app; +pub mod controllers; +pub mod initializers; +pub mod mailers; +pub mod models; +pub mod tasks; +pub mod views; +pub mod workers; diff --git a/src/mailers/auth.rs b/src/mailers/auth.rs new file mode 100644 index 0000000..30bb1bf --- /dev/null +++ b/src/mailers/auth.rs @@ -0,0 +1,65 @@ +// auth mailer +#![allow(non_upper_case_globals)] + +use loco_rs::prelude::*; +use serde_json::json; + +use crate::models::users; + +static welcome: Dir<'_> = include_dir!("src/mailers/auth/welcome"); +static forgot: Dir<'_> = include_dir!("src/mailers/auth/forgot"); +// #[derive(Mailer)] // -- disabled for faster build speed. it works. but lets +// move on for now. + +#[allow(clippy::module_name_repetitions)] +pub struct AuthMailer {} +impl Mailer for AuthMailer {} +impl AuthMailer { + /// Sending welcome email the the given user + /// + /// # Errors + /// + /// When email sending is failed + pub async fn send_welcome(ctx: &AppContext, user: &users::Model) -> Result<()> { + Self::mail_template( + ctx, + &welcome, + mailer::Args { + to: user.email.to_string(), + locals: json!({ + "name": user.name, + "verifyToken": user.email_verification_token, + "domain": ctx.config.server.full_url() + }), + ..Default::default() + }, + ) + .await?; + + Ok(()) + } + + /// Sending forgot password email + /// + /// # Errors + /// + /// When email sending is failed + pub async fn forgot_password(ctx: &AppContext, user: &users::Model) -> Result<()> { + Self::mail_template( + ctx, + &forgot, + mailer::Args { + to: user.email.to_string(), + locals: json!({ + "name": user.name, + "resetToken": user.reset_token, + "domain": ctx.config.server.full_url() + }), + ..Default::default() + }, + ) + .await?; + + Ok(()) + } +} diff --git a/src/mailers/auth/forgot/html.t b/src/mailers/auth/forgot/html.t new file mode 100644 index 0000000..221dd60 --- /dev/null +++ b/src/mailers/auth/forgot/html.t @@ -0,0 +1,11 @@ +; + + + Hey {{name}}, + Forgot your password? No worries! You can reset it by clicking the link below: +
Reset Your Password + If you didn't request a password reset, please ignore this email. + Best regards,
The Loco Team
+ + + diff --git a/src/mailers/auth/forgot/subject.t b/src/mailers/auth/forgot/subject.t new file mode 100644 index 0000000..4938df1 --- /dev/null +++ b/src/mailers/auth/forgot/subject.t @@ -0,0 +1 @@ +Your reset password link diff --git a/src/mailers/auth/forgot/text.t b/src/mailers/auth/forgot/text.t new file mode 100644 index 0000000..58c30fd --- /dev/null +++ b/src/mailers/auth/forgot/text.t @@ -0,0 +1,3 @@ +Reset your password with this link: + +http://localhost/reset#{{resetToken}} diff --git a/src/mailers/auth/welcome/html.t b/src/mailers/auth/welcome/html.t new file mode 100644 index 0000000..ae4c41c --- /dev/null +++ b/src/mailers/auth/welcome/html.t @@ -0,0 +1,13 @@ +; + + + Dear {{name}}, + Welcome to Loco! You can now log in to your account. + Before you get started, please verify your account by clicking the link below: + + Verify Your Account + +

Best regards,
The Loco Team

+ + + diff --git a/src/mailers/auth/welcome/subject.t b/src/mailers/auth/welcome/subject.t new file mode 100644 index 0000000..82cc6fb --- /dev/null +++ b/src/mailers/auth/welcome/subject.t @@ -0,0 +1 @@ +Welcome {{name}} diff --git a/src/mailers/auth/welcome/text.t b/src/mailers/auth/welcome/text.t new file mode 100644 index 0000000..63beefd --- /dev/null +++ b/src/mailers/auth/welcome/text.t @@ -0,0 +1,4 @@ +Welcome {{name}}, you can now log in. + Verify your account with the link below: + + http://localhost/verify#{{verifyToken}} diff --git a/src/mailers/mod.rs b/src/mailers/mod.rs new file mode 100644 index 0000000..0e4a05d --- /dev/null +++ b/src/mailers/mod.rs @@ -0,0 +1 @@ +pub mod auth; diff --git a/src/models/_entities/mod.rs b/src/models/_entities/mod.rs new file mode 100644 index 0000000..095dade --- /dev/null +++ b/src/models/_entities/mod.rs @@ -0,0 +1,5 @@ +//! `SeaORM` Entity, @generated by sea-orm-codegen 1.0.0 + +pub mod prelude; + +pub mod users; diff --git a/src/models/_entities/prelude.rs b/src/models/_entities/prelude.rs new file mode 100644 index 0000000..4036ade --- /dev/null +++ b/src/models/_entities/prelude.rs @@ -0,0 +1,3 @@ +//! `SeaORM` Entity, @generated by sea-orm-codegen 1.0.0 + +pub use super::users::Entity as Users; diff --git a/src/models/_entities/users.rs b/src/models/_entities/users.rs new file mode 100644 index 0000000..120b1a1 --- /dev/null +++ b/src/models/_entities/users.rs @@ -0,0 +1,28 @@ +//! `SeaORM` Entity, @generated by sea-orm-codegen 1.0.0 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[sea_orm(table_name = "users")] +pub struct Model { + pub created_at: DateTimeWithTimeZone, + pub updated_at: DateTimeWithTimeZone, + #[sea_orm(primary_key)] + pub id: i32, + pub pid: Uuid, + #[sea_orm(unique)] + pub email: String, + pub password: String, + #[sea_orm(unique)] + pub api_key: String, + pub name: String, + pub reset_token: Option, + pub reset_sent_at: Option, + pub email_verification_token: Option, + pub email_verification_sent_at: Option, + pub email_verified_at: Option, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation {} diff --git a/src/models/mod.rs b/src/models/mod.rs new file mode 100644 index 0000000..48da463 --- /dev/null +++ b/src/models/mod.rs @@ -0,0 +1,2 @@ +pub mod _entities; +pub mod users; diff --git a/src/models/users.rs b/src/models/users.rs new file mode 100644 index 0000000..b4f3aae --- /dev/null +++ b/src/models/users.rs @@ -0,0 +1,298 @@ +use async_trait::async_trait; +use chrono::offset::Local; +use loco_rs::{auth::jwt, hash, prelude::*}; +use serde::{Deserialize, Serialize}; +use uuid::Uuid; + +pub use super::_entities::users::{self, ActiveModel, Entity, Model}; + +#[derive(Debug, Deserialize, Serialize)] +pub struct LoginParams { + pub email: String, + pub password: String, +} + +#[derive(Debug, Deserialize, Serialize)] +pub struct RegisterParams { + pub email: String, + pub password: String, + pub name: String, +} + +#[derive(Debug, Validate, Deserialize)] +pub struct Validator { + #[validate(length(min = 2, message = "Name must be at least 2 characters long."))] + pub name: String, + #[validate(custom(function = "validation::is_valid_email"))] + pub email: String, +} + +impl Validatable for super::_entities::users::ActiveModel { + fn validator(&self) -> Box { + Box::new(Validator { + name: self.name.as_ref().to_owned(), + email: self.email.as_ref().to_owned(), + }) + } +} + +#[async_trait::async_trait] +impl ActiveModelBehavior for super::_entities::users::ActiveModel { + async fn before_save(self, _db: &C, insert: bool) -> Result + where + C: ConnectionTrait, + { + self.validate()?; + if insert { + let mut this = self; + this.pid = ActiveValue::Set(Uuid::new_v4()); + this.api_key = ActiveValue::Set(format!("lo-{}", Uuid::new_v4())); + Ok(this) + } else { + Ok(self) + } + } +} + +#[async_trait] +impl Authenticable for super::_entities::users::Model { + async fn find_by_api_key(db: &DatabaseConnection, api_key: &str) -> ModelResult { + let user = users::Entity::find() + .filter( + model::query::condition() + .eq(users::Column::ApiKey, api_key) + .build(), + ) + .one(db) + .await?; + user.ok_or_else(|| ModelError::EntityNotFound) + } + + async fn find_by_claims_key(db: &DatabaseConnection, claims_key: &str) -> ModelResult { + Self::find_by_pid(db, claims_key).await + } +} + +impl super::_entities::users::Model { + /// finds a user by the provided email + /// + /// # Errors + /// + /// When could not find user by the given token or DB query error + pub async fn find_by_email(db: &DatabaseConnection, email: &str) -> ModelResult { + let user = users::Entity::find() + .filter( + model::query::condition() + .eq(users::Column::Email, email) + .build(), + ) + .one(db) + .await?; + user.ok_or_else(|| ModelError::EntityNotFound) + } + + /// finds a user by the provided verification token + /// + /// # Errors + /// + /// When could not find user by the given token or DB query error + pub async fn find_by_verification_token( + db: &DatabaseConnection, + token: &str, + ) -> ModelResult { + let user = users::Entity::find() + .filter( + model::query::condition() + .eq(users::Column::EmailVerificationToken, token) + .build(), + ) + .one(db) + .await?; + user.ok_or_else(|| ModelError::EntityNotFound) + } + + /// finds a user by the provided reset token + /// + /// # Errors + /// + /// When could not find user by the given token or DB query error + pub async fn find_by_reset_token(db: &DatabaseConnection, token: &str) -> ModelResult { + let user = users::Entity::find() + .filter( + model::query::condition() + .eq(users::Column::ResetToken, token) + .build(), + ) + .one(db) + .await?; + user.ok_or_else(|| ModelError::EntityNotFound) + } + + /// finds a user by the provided pid + /// + /// # Errors + /// + /// When could not find user or DB query error + pub async fn find_by_pid(db: &DatabaseConnection, pid: &str) -> ModelResult { + let parse_uuid = Uuid::parse_str(pid).map_err(|e| ModelError::Any(e.into()))?; + let user = users::Entity::find() + .filter( + model::query::condition() + .eq(users::Column::Pid, parse_uuid) + .build(), + ) + .one(db) + .await?; + user.ok_or_else(|| ModelError::EntityNotFound) + } + + /// finds a user by the provided api key + /// + /// # Errors + /// + /// When could not find user by the given token or DB query error + pub async fn find_by_api_key(db: &DatabaseConnection, api_key: &str) -> ModelResult { + let user = users::Entity::find() + .filter( + model::query::condition() + .eq(users::Column::ApiKey, api_key) + .build(), + ) + .one(db) + .await?; + user.ok_or_else(|| ModelError::EntityNotFound) + } + + /// Verifies whether the provided plain password matches the hashed password + /// + /// # Errors + /// + /// when could not verify password + #[must_use] + pub fn verify_password(&self, password: &str) -> bool { + hash::verify_password(password, &self.password) + } + + /// Asynchronously creates a user with a password and saves it to the + /// database. + /// + /// # Errors + /// + /// When could not save the user into the DB + pub async fn create_with_password( + db: &DatabaseConnection, + params: &RegisterParams, + ) -> ModelResult { + let txn = db.begin().await?; + + if users::Entity::find() + .filter( + model::query::condition() + .eq(users::Column::Email, ¶ms.email) + .build(), + ) + .one(&txn) + .await? + .is_some() + { + return Err(ModelError::EntityAlreadyExists {}); + } + + let password_hash = + hash::hash_password(¶ms.password).map_err(|e| ModelError::Any(e.into()))?; + let user = users::ActiveModel { + email: ActiveValue::set(params.email.to_string()), + password: ActiveValue::set(password_hash), + name: ActiveValue::set(params.name.to_string()), + ..Default::default() + } + .insert(&txn) + .await?; + + txn.commit().await?; + + Ok(user) + } + + /// Creates a JWT + /// + /// # Errors + /// + /// when could not convert user claims to jwt token + pub fn generate_jwt(&self, secret: &str, expiration: &u64) -> ModelResult { + Ok(jwt::JWT::new(secret).generate_token(expiration, self.pid.to_string(), None)?) + } +} + +impl super::_entities::users::ActiveModel { + /// Sets the email verification information for the user and + /// updates it in the database. + /// + /// This method is used to record the timestamp when the email verification + /// was sent and generate a unique verification token for the user. + /// + /// # Errors + /// + /// when has DB query error + pub async fn set_email_verification_sent( + mut self, + db: &DatabaseConnection, + ) -> ModelResult { + self.email_verification_sent_at = ActiveValue::set(Some(Local::now().into())); + self.email_verification_token = ActiveValue::Set(Some(Uuid::new_v4().to_string())); + Ok(self.update(db).await?) + } + + /// Sets the information for a reset password request, + /// generates a unique reset password token, and updates it in the + /// database. + /// + /// This method records the timestamp when the reset password token is sent + /// and generates a unique token for the user. + /// + /// # Arguments + /// + /// # Errors + /// + /// when has DB query error + pub async fn set_forgot_password_sent(mut self, db: &DatabaseConnection) -> ModelResult { + self.reset_sent_at = ActiveValue::set(Some(Local::now().into())); + self.reset_token = ActiveValue::Set(Some(Uuid::new_v4().to_string())); + Ok(self.update(db).await?) + } + + /// Records the verification time when a user verifies their + /// email and updates it in the database. + /// + /// This method sets the timestamp when the user successfully verifies their + /// email. + /// + /// # Errors + /// + /// when has DB query error + pub async fn verified(mut self, db: &DatabaseConnection) -> ModelResult { + self.email_verified_at = ActiveValue::set(Some(Local::now().into())); + Ok(self.update(db).await?) + } + + /// Resets the current user password with a new password and + /// updates it in the database. + /// + /// This method hashes the provided password and sets it as the new password + /// for the user. + /// + /// # Errors + /// + /// when has DB query error or could not hashed the given password + pub async fn reset_password( + mut self, + db: &DatabaseConnection, + password: &str, + ) -> ModelResult { + self.password = + ActiveValue::set(hash::hash_password(password).map_err(|e| ModelError::Any(e.into()))?); + self.reset_token = ActiveValue::Set(None); + self.reset_sent_at = ActiveValue::Set(None); + Ok(self.update(db).await?) + } +} diff --git a/src/tasks/mod.rs b/src/tasks/mod.rs new file mode 100644 index 0000000..01fbdda --- /dev/null +++ b/src/tasks/mod.rs @@ -0,0 +1 @@ +pub mod seed; diff --git a/src/tasks/seed.rs b/src/tasks/seed.rs new file mode 100644 index 0000000..1647beb --- /dev/null +++ b/src/tasks/seed.rs @@ -0,0 +1,45 @@ +//! This task implements data seeding functionality for initializing new +//! development/demo environments. +//! +//! # Example +//! +//! Run the task with the following command: +//! ```sh +//! cargo run task +//! ``` +//! +//! To override existing data and reset the data structure, use the following +//! command with the `refresh:true` argument: +//! ```sh +//! cargo run task seed_data refresh:true +//! ``` + +use loco_rs::{db, prelude::*}; +use migration::Migrator; + +use crate::app::App; + +#[allow(clippy::module_name_repetitions)] +pub struct SeedData; +#[async_trait] +impl Task for SeedData { + fn task(&self) -> TaskInfo { + TaskInfo { + name: "seed_data".to_string(), + detail: "Task for seeding data".to_string(), + } + } + + async fn run(&self, app_context: &AppContext, vars: &task::Vars) -> Result<()> { + let refresh = vars + .cli_arg("refresh") + .is_ok_and(|refresh| refresh == "true"); + + if refresh { + db::reset::(&app_context.db).await?; + } + let path = std::path::Path::new("src/fixtures"); + db::run_app_seed::(&app_context.db, path).await?; + Ok(()) + } +} diff --git a/src/views/auth.rs b/src/views/auth.rs new file mode 100644 index 0000000..3d2d74f --- /dev/null +++ b/src/views/auth.rs @@ -0,0 +1,41 @@ +use serde::{Deserialize, Serialize}; + +use crate::models::_entities::users; + +#[derive(Debug, Deserialize, Serialize)] +pub struct LoginResponse { + pub token: String, + pub pid: String, + pub name: String, + pub is_verified: bool, +} + +impl LoginResponse { + #[must_use] + pub fn new(user: &users::Model, token: &String) -> Self { + Self { + token: token.to_string(), + pid: user.pid.to_string(), + name: user.name.clone(), + is_verified: user.email_verified_at.is_some(), + } + } +} + +#[derive(Debug, Deserialize, Serialize)] +pub struct CurrentResponse { + pub pid: String, + pub name: String, + pub email: String, +} + +impl CurrentResponse { + #[must_use] + pub fn new(user: &users::Model) -> Self { + Self { + pid: user.pid.to_string(), + name: user.name.clone(), + email: user.email.clone(), + } + } +} diff --git a/src/views/mod.rs b/src/views/mod.rs new file mode 100644 index 0000000..0e4a05d --- /dev/null +++ b/src/views/mod.rs @@ -0,0 +1 @@ +pub mod auth; diff --git a/src/workers/downloader.rs b/src/workers/downloader.rs new file mode 100644 index 0000000..fa094d5 --- /dev/null +++ b/src/workers/downloader.rs @@ -0,0 +1,40 @@ +use std::time::Duration; + +use loco_rs::prelude::*; +use serde::{Deserialize, Serialize}; +use tokio::time::sleep; + +use crate::models::users; + +pub struct DownloadWorker { + pub ctx: AppContext, +} + +#[derive(Deserialize, Debug, Serialize)] +pub struct DownloadWorkerArgs { + pub user_guid: String, +} + +#[async_trait] +impl BackgroundWorker for DownloadWorker { + fn build(ctx: &AppContext) -> Self { + Self { ctx: ctx.clone() } + } + async fn perform(&self, args: DownloadWorkerArgs) -> Result<()> { + // TODO: Some actual work goes here... + println!("================================================"); + println!("Sending payment report to user {}", args.user_guid); + + sleep(Duration::from_millis(2000)).await; + + let all = users::Entity::find() + .all(&self.ctx.db) + .await + .map_err(Box::from)?; + for user in &all { + println!("user: {}", user.id); + } + println!("================================================"); + Ok(()) + } +} diff --git a/src/workers/mod.rs b/src/workers/mod.rs new file mode 100644 index 0000000..acb5733 --- /dev/null +++ b/src/workers/mod.rs @@ -0,0 +1 @@ +pub mod downloader; diff --git a/tests/mod.rs b/tests/mod.rs new file mode 100644 index 0000000..b42f234 --- /dev/null +++ b/tests/mod.rs @@ -0,0 +1,4 @@ +mod models; +mod requests; +mod tasks; +mod workers; diff --git a/tests/models/mod.rs b/tests/models/mod.rs new file mode 100644 index 0000000..5975988 --- /dev/null +++ b/tests/models/mod.rs @@ -0,0 +1 @@ +mod users; diff --git a/tests/models/snapshots/can_create_with_password@users.snap b/tests/models/snapshots/can_create_with_password@users.snap new file mode 100644 index 0000000..6e66fd3 --- /dev/null +++ b/tests/models/snapshots/can_create_with_password@users.snap @@ -0,0 +1,21 @@ +--- +source: tests/models/users.rs +expression: res +--- +Ok( + Model { + created_at: DATE, + updated_at: DATE, + id: ID + pid: PID, + email: "test@framework.com", + password: "PASSWORD", + api_key: "lo-PID", + name: "framework", + reset_token: None, + reset_sent_at: None, + email_verification_token: None, + email_verification_sent_at: None, + email_verified_at: None, + }, +) diff --git a/tests/models/snapshots/can_find_by_email-2@users.snap b/tests/models/snapshots/can_find_by_email-2@users.snap new file mode 100644 index 0000000..83dc06e --- /dev/null +++ b/tests/models/snapshots/can_find_by_email-2@users.snap @@ -0,0 +1,7 @@ +--- +source: tests/models/main.rs +expression: non_existing_user_results +--- +Err( + EntityNotFound, +) diff --git a/tests/models/snapshots/can_find_by_email@users-2.snap b/tests/models/snapshots/can_find_by_email@users-2.snap new file mode 100644 index 0000000..25c700a --- /dev/null +++ b/tests/models/snapshots/can_find_by_email@users-2.snap @@ -0,0 +1,7 @@ +--- +source: tests/models/users.rs +expression: non_existing_user_results +--- +Err( + EntityNotFound, +) diff --git a/tests/models/snapshots/can_find_by_email@users.snap b/tests/models/snapshots/can_find_by_email@users.snap new file mode 100644 index 0000000..067d0e7 --- /dev/null +++ b/tests/models/snapshots/can_find_by_email@users.snap @@ -0,0 +1,21 @@ +--- +source: tests/models/users.rs +expression: existing_user +--- +Ok( + Model { + created_at: 2023-11-12T12:34:56.789+00:00, + updated_at: 2023-11-12T12:34:56.789+00:00, + id: 1, + pid: 11111111-1111-1111-1111-111111111111, + email: "user1@example.com", + password: "$argon2id$v=19$m=19456,t=2,p=1$ETQBx4rTgNAZhSaeYZKOZg$eYTdH26CRT6nUJtacLDEboP0li6xUwUF/q5nSlQ8uuc", + api_key: "lo-95ec80d7-cb60-4b70-9b4b-9ef74cb88758", + name: "user1", + reset_token: None, + reset_sent_at: None, + email_verification_token: None, + email_verification_sent_at: None, + email_verified_at: None, + }, +) diff --git a/tests/models/snapshots/can_find_by_pid-2@users.snap b/tests/models/snapshots/can_find_by_pid-2@users.snap new file mode 100644 index 0000000..83dc06e --- /dev/null +++ b/tests/models/snapshots/can_find_by_pid-2@users.snap @@ -0,0 +1,7 @@ +--- +source: tests/models/main.rs +expression: non_existing_user_results +--- +Err( + EntityNotFound, +) diff --git a/tests/models/snapshots/can_find_by_pid@users-2.snap b/tests/models/snapshots/can_find_by_pid@users-2.snap new file mode 100644 index 0000000..25c700a --- /dev/null +++ b/tests/models/snapshots/can_find_by_pid@users-2.snap @@ -0,0 +1,7 @@ +--- +source: tests/models/users.rs +expression: non_existing_user_results +--- +Err( + EntityNotFound, +) diff --git a/tests/models/snapshots/can_find_by_pid@users.snap b/tests/models/snapshots/can_find_by_pid@users.snap new file mode 100644 index 0000000..067d0e7 --- /dev/null +++ b/tests/models/snapshots/can_find_by_pid@users.snap @@ -0,0 +1,21 @@ +--- +source: tests/models/users.rs +expression: existing_user +--- +Ok( + Model { + created_at: 2023-11-12T12:34:56.789+00:00, + updated_at: 2023-11-12T12:34:56.789+00:00, + id: 1, + pid: 11111111-1111-1111-1111-111111111111, + email: "user1@example.com", + password: "$argon2id$v=19$m=19456,t=2,p=1$ETQBx4rTgNAZhSaeYZKOZg$eYTdH26CRT6nUJtacLDEboP0li6xUwUF/q5nSlQ8uuc", + api_key: "lo-95ec80d7-cb60-4b70-9b4b-9ef74cb88758", + name: "user1", + reset_token: None, + reset_sent_at: None, + email_verification_token: None, + email_verification_sent_at: None, + email_verified_at: None, + }, +) diff --git a/tests/models/snapshots/can_validate_model@users.snap b/tests/models/snapshots/can_validate_model@users.snap new file mode 100644 index 0000000..4d457a7 --- /dev/null +++ b/tests/models/snapshots/can_validate_model@users.snap @@ -0,0 +1,9 @@ +--- +source: tests/models/main.rs +expression: res +--- +Err( + Custom( + "{\"email\":[{\"code\":\"invalid email\",\"message\":null}],\"name\":[{\"code\":\"length\",\"message\":\"Name must be at least 2 characters long.\"}]}", + ), +) diff --git a/tests/models/snapshots/handle_create_with_password_with_duplicate@users.snap b/tests/models/snapshots/handle_create_with_password_with_duplicate@users.snap new file mode 100644 index 0000000..ff28ea1 --- /dev/null +++ b/tests/models/snapshots/handle_create_with_password_with_duplicate@users.snap @@ -0,0 +1,7 @@ +--- +source: tests/models/users.rs +expression: new_user +--- +Err( + EntityAlreadyExists, +) diff --git a/tests/models/users.rs b/tests/models/users.rs new file mode 100644 index 0000000..d7110b3 --- /dev/null +++ b/tests/models/users.rs @@ -0,0 +1,223 @@ +use insta::assert_debug_snapshot; +use loco_rs::{model::ModelError, testing}; +use daily_aujourdhui::{ + app::App, + models::users::{self, Model, RegisterParams}, +}; +use sea_orm::{ActiveModelTrait, ActiveValue, IntoActiveModel}; +use serial_test::serial; + +macro_rules! configure_insta { + ($($expr:expr),*) => { + let mut settings = insta::Settings::clone_current(); + settings.set_prepend_module_to_snapshot(false); + settings.set_snapshot_suffix("users"); + let _guard = settings.bind_to_scope(); + }; +} + +#[tokio::test] +#[serial] +async fn test_can_validate_model() { + configure_insta!(); + + let boot = testing::boot_test::().await.unwrap(); + + let res = users::ActiveModel { + name: ActiveValue::set("1".to_string()), + email: ActiveValue::set("invalid-email".to_string()), + ..Default::default() + } + .insert(&boot.app_context.db) + .await; + + assert_debug_snapshot!(res); +} + +#[tokio::test] +#[serial] +async fn can_create_with_password() { + configure_insta!(); + + let boot = testing::boot_test::().await.unwrap(); + + let params = RegisterParams { + email: "test@framework.com".to_string(), + password: "1234".to_string(), + name: "framework".to_string(), + }; + let res = Model::create_with_password(&boot.app_context.db, ¶ms).await; + + insta::with_settings!({ + filters => testing::cleanup_user_model() + }, { + assert_debug_snapshot!(res); + }); +} + +#[tokio::test] +#[serial] +async fn handle_create_with_password_with_duplicate() { + configure_insta!(); + + let boot = testing::boot_test::().await.unwrap(); + testing::seed::(&boot.app_context.db).await.unwrap(); + + let new_user: Result = Model::create_with_password( + &boot.app_context.db, + &RegisterParams { + email: "user1@example.com".to_string(), + password: "1234".to_string(), + name: "framework".to_string(), + }, + ) + .await; + assert_debug_snapshot!(new_user); +} + +#[tokio::test] +#[serial] +async fn can_find_by_email() { + configure_insta!(); + + let boot = testing::boot_test::().await.unwrap(); + testing::seed::(&boot.app_context.db).await.unwrap(); + + let existing_user = Model::find_by_email(&boot.app_context.db, "user1@example.com").await; + let non_existing_user_results = + Model::find_by_email(&boot.app_context.db, "un@existing-email.com").await; + + assert_debug_snapshot!(existing_user); + assert_debug_snapshot!(non_existing_user_results); +} + +#[tokio::test] +#[serial] +async fn can_find_by_pid() { + configure_insta!(); + + let boot = testing::boot_test::().await.unwrap(); + testing::seed::(&boot.app_context.db).await.unwrap(); + + let existing_user = + Model::find_by_pid(&boot.app_context.db, "11111111-1111-1111-1111-111111111111").await; + let non_existing_user_results = + Model::find_by_pid(&boot.app_context.db, "23232323-2323-2323-2323-232323232323").await; + + assert_debug_snapshot!(existing_user); + assert_debug_snapshot!(non_existing_user_results); +} + +#[tokio::test] +#[serial] +async fn can_verification_token() { + configure_insta!(); + + let boot = testing::boot_test::().await.unwrap(); + testing::seed::(&boot.app_context.db).await.unwrap(); + + let user = Model::find_by_pid(&boot.app_context.db, "11111111-1111-1111-1111-111111111111") + .await + .unwrap(); + + assert!(user.email_verification_sent_at.is_none()); + assert!(user.email_verification_token.is_none()); + + assert!(user + .into_active_model() + .set_email_verification_sent(&boot.app_context.db) + .await + .is_ok()); + + let user = Model::find_by_pid(&boot.app_context.db, "11111111-1111-1111-1111-111111111111") + .await + .unwrap(); + + assert!(user.email_verification_sent_at.is_some()); + assert!(user.email_verification_token.is_some()); +} + +#[tokio::test] +#[serial] +async fn can_set_forgot_password_sent() { + configure_insta!(); + + let boot = testing::boot_test::().await.unwrap(); + testing::seed::(&boot.app_context.db).await.unwrap(); + + let user = Model::find_by_pid(&boot.app_context.db, "11111111-1111-1111-1111-111111111111") + .await + .unwrap(); + + assert!(user.reset_sent_at.is_none()); + assert!(user.reset_token.is_none()); + + assert!(user + .into_active_model() + .set_forgot_password_sent(&boot.app_context.db) + .await + .is_ok()); + + let user = Model::find_by_pid(&boot.app_context.db, "11111111-1111-1111-1111-111111111111") + .await + .unwrap(); + + assert!(user.reset_sent_at.is_some()); + assert!(user.reset_token.is_some()); +} + +#[tokio::test] +#[serial] +async fn can_verified() { + configure_insta!(); + + let boot = testing::boot_test::().await.unwrap(); + testing::seed::(&boot.app_context.db).await.unwrap(); + + let user = Model::find_by_pid(&boot.app_context.db, "11111111-1111-1111-1111-111111111111") + .await + .unwrap(); + + assert!(user.email_verified_at.is_none()); + + assert!(user + .into_active_model() + .verified(&boot.app_context.db) + .await + .is_ok()); + + let user = Model::find_by_pid(&boot.app_context.db, "11111111-1111-1111-1111-111111111111") + .await + .unwrap(); + + assert!(user.email_verified_at.is_some()); +} + +#[tokio::test] +#[serial] +async fn can_reset_password() { + configure_insta!(); + + let boot = testing::boot_test::().await.unwrap(); + testing::seed::(&boot.app_context.db).await.unwrap(); + + let user = Model::find_by_pid(&boot.app_context.db, "11111111-1111-1111-1111-111111111111") + .await + .unwrap(); + + assert!(user.verify_password("12341234")); + + assert!(user + .clone() + .into_active_model() + .reset_password(&boot.app_context.db, "new-password") + .await + .is_ok()); + + assert!( + Model::find_by_pid(&boot.app_context.db, "11111111-1111-1111-1111-111111111111") + .await + .unwrap() + .verify_password("new-password") + ); +} diff --git a/tests/requests/auth.rs b/tests/requests/auth.rs new file mode 100644 index 0000000..22fb722 --- /dev/null +++ b/tests/requests/auth.rs @@ -0,0 +1,218 @@ +use insta::{assert_debug_snapshot, with_settings}; +use loco_rs::testing; +use daily_aujourdhui::{app::App, models::users}; +use rstest::rstest; +use serial_test::serial; + +use super::prepare_data; + +// TODO: see how to dedup / extract this to app-local test utils +// not to framework, because that would require a runtime dep on insta +macro_rules! configure_insta { + ($($expr:expr),*) => { + let mut settings = insta::Settings::clone_current(); + settings.set_prepend_module_to_snapshot(false); + settings.set_snapshot_suffix("auth_request"); + let _guard = settings.bind_to_scope(); + }; +} + +#[tokio::test] +#[serial] +async fn can_register() { + configure_insta!(); + + testing::request::(|request, ctx| async move { + let email = "test@loco.com"; + let payload = serde_json::json!({ + "name": "loco", + "email": email, + "password": "12341234" + }); + + let _response = request.post("/api/auth/register").json(&payload).await; + let saved_user = users::Model::find_by_email(&ctx.db, email).await; + + with_settings!({ + filters => testing::cleanup_user_model() + }, { + assert_debug_snapshot!(saved_user); + }); + + with_settings!({ + filters => testing::cleanup_email() + }, { + assert_debug_snapshot!(ctx.mailer.unwrap().deliveries()); + }); + }) + .await; +} + +#[rstest] +#[case("login_with_valid_password", "12341234")] +#[case("login_with_invalid_password", "invalid-password")] +#[tokio::test] +#[serial] +async fn can_login_with_verify(#[case] test_name: &str, #[case] password: &str) { + configure_insta!(); + + testing::request::(|request, ctx| async move { + let email = "test@loco.com"; + let register_payload = serde_json::json!({ + "name": "loco", + "email": email, + "password": "12341234" + }); + + //Creating a new user + _ = request + .post("/api/auth/register") + .json(®ister_payload) + .await; + + let user = users::Model::find_by_email(&ctx.db, email).await.unwrap(); + let verify_payload = serde_json::json!({ + "token": user.email_verification_token, + }); + request.post("/api/auth/verify").json(&verify_payload).await; + + //verify user request + let response = request + .post("/api/auth/login") + .json(&serde_json::json!({ + "email": email, + "password": password + })) + .await; + + // Make sure email_verified_at is set + assert!(users::Model::find_by_email(&ctx.db, email) + .await + .unwrap() + .email_verified_at + .is_some()); + + with_settings!({ + filters => testing::cleanup_user_model() + }, { + assert_debug_snapshot!(test_name, (response.status_code(), response.text())); + }); + }) + .await; +} + +#[tokio::test] +#[serial] +async fn can_login_without_verify() { + configure_insta!(); + + testing::request::(|request, _ctx| async move { + let email = "test@loco.com"; + let password = "12341234"; + let register_payload = serde_json::json!({ + "name": "loco", + "email": email, + "password": password + }); + + //Creating a new user + _ = request + .post("/api/auth/register") + .json(®ister_payload) + .await; + + //verify user request + let response = request + .post("/api/auth/login") + .json(&serde_json::json!({ + "email": email, + "password": password + })) + .await; + + with_settings!({ + filters => testing::cleanup_user_model() + }, { + assert_debug_snapshot!((response.status_code(), response.text())); + }); + }) + .await; +} + +#[tokio::test] +#[serial] +async fn can_reset_password() { + configure_insta!(); + + testing::request::(|request, ctx| async move { + let login_data = prepare_data::init_user_login(&request, &ctx).await; + + let forgot_payload = serde_json::json!({ + "email": login_data.user.email, + }); + _ = request.post("/api/auth/forgot").json(&forgot_payload).await; + + let user = users::Model::find_by_email(&ctx.db, &login_data.user.email) + .await + .unwrap(); + assert!(user.reset_token.is_some()); + assert!(user.reset_sent_at.is_some()); + + let new_password = "new-password"; + let reset_payload = serde_json::json!({ + "token": user.reset_token, + "password": new_password, + }); + + let reset_response = request.post("/api/auth/reset").json(&reset_payload).await; + + let user = users::Model::find_by_email(&ctx.db, &user.email) + .await + .unwrap(); + + assert!(user.reset_token.is_none()); + assert!(user.reset_sent_at.is_none()); + + assert_debug_snapshot!((reset_response.status_code(), reset_response.text())); + + let response = request + .post("/api/auth/login") + .json(&serde_json::json!({ + "email": user.email, + "password": new_password + })) + .await; + + assert_eq!(response.status_code(), 200); + + with_settings!({ + filters => testing::cleanup_email() + }, { + assert_debug_snapshot!(ctx.mailer.unwrap().deliveries()); + }); + }) + .await; +} + +#[tokio::test] +#[serial] +async fn can_get_current_user() { + configure_insta!(); + + testing::request::(|request, ctx| async move { + let user = prepare_data::init_user_login(&request, &ctx).await; + + let (auth_key, auth_value) = prepare_data::auth_header(&user.token); + let response = request + .get("/api/auth/current") + .add_header(auth_key, auth_value) + .await; + + with_settings!({ + filters => testing::cleanup_user_model() + }, { + assert_debug_snapshot!((response.status_code(), response.text())); + }); + }) + .await; +} diff --git a/tests/requests/mod.rs b/tests/requests/mod.rs new file mode 100644 index 0000000..887b7ce --- /dev/null +++ b/tests/requests/mod.rs @@ -0,0 +1,2 @@ +mod auth; +mod prepare_data; diff --git a/tests/requests/prepare_data.rs b/tests/requests/prepare_data.rs new file mode 100644 index 0000000..638ea0d --- /dev/null +++ b/tests/requests/prepare_data.rs @@ -0,0 +1,57 @@ +use axum::http::{HeaderName, HeaderValue}; +use loco_rs::{app::AppContext, TestServer}; +use daily_aujourdhui::{models::users, views::auth::LoginResponse}; + +const USER_EMAIL: &str = "test@loco.com"; +const USER_PASSWORD: &str = "1234"; + +pub struct LoggedInUser { + pub user: users::Model, + pub token: String, +} + +pub async fn init_user_login(request: &TestServer, ctx: &AppContext) -> LoggedInUser { + let register_payload = serde_json::json!({ + "name": "loco", + "email": USER_EMAIL, + "password": USER_PASSWORD + }); + + //Creating a new user + request + .post("/api/auth/register") + .json(®ister_payload) + .await; + let user = users::Model::find_by_email(&ctx.db, USER_EMAIL) + .await + .unwrap(); + + let verify_payload = serde_json::json!({ + "token": user.email_verification_token, + }); + + request.post("/api/auth/verify").json(&verify_payload).await; + + let response = request + .post("/api/auth/login") + .json(&serde_json::json!({ + "email": USER_EMAIL, + "password": USER_PASSWORD + })) + .await; + + let login_response: LoginResponse = serde_json::from_str(&response.text()).unwrap(); + + LoggedInUser { + user: users::Model::find_by_email(&ctx.db, USER_EMAIL) + .await + .unwrap(), + token: login_response.token, + } +} + +pub fn auth_header(token: &str) -> (HeaderName, HeaderValue) { + let auth_header_value = HeaderValue::from_str(&format!("Bearer {}", &token)).unwrap(); + + (HeaderName::from_static("authorization"), auth_header_value) +} diff --git a/tests/requests/snapshots/can_get_current_user@auth_request.snap b/tests/requests/snapshots/can_get_current_user@auth_request.snap new file mode 100644 index 0000000..85d53db --- /dev/null +++ b/tests/requests/snapshots/can_get_current_user@auth_request.snap @@ -0,0 +1,8 @@ +--- +source: tests/requests/user.rs +expression: "(response.status_code(), response.text())" +--- +( + 200, + "{\"pid\":\"PID\",\"name\":\"loco\",\"email\":\"test@loco.com\"}", +) diff --git a/tests/requests/snapshots/can_login_without_verify@auth_request.snap b/tests/requests/snapshots/can_login_without_verify@auth_request.snap new file mode 100644 index 0000000..ef54ba6 --- /dev/null +++ b/tests/requests/snapshots/can_login_without_verify@auth_request.snap @@ -0,0 +1,8 @@ +--- +source: tests/requests/auth.rs +expression: "(response.status_code(), response.text())" +--- +( + 200, + "{\"token\":\"TOKEN\",\"pid\":\"PID\",\"name\":\"loco\",\"is_verified\":false}", +) diff --git a/tests/requests/snapshots/can_register@auth_request-2.snap b/tests/requests/snapshots/can_register@auth_request-2.snap new file mode 100644 index 0000000..45c63cb --- /dev/null +++ b/tests/requests/snapshots/can_register@auth_request-2.snap @@ -0,0 +1,10 @@ +--- +source: tests/requests/auth.rs +expression: ctx.mailer.unwrap().deliveries() +--- +Deliveries { + count: 1, + messages: [ + "From: System \r\nTo: test@loco.com\r\nSubject: Welcome =?utf-8?b?bG9jbwo=?=\r\nMIME-Version: 1.0\r\nDate: DATE\r\nContent-Type: multipart/alternative;\r\n boundary=\"IDENTIFIER\"\r\n\r\n--IDENTIFIER\r\nContent-Type: text/plain; charset=utf-8\r\nContent-Transfer-Encoding: 7bit\r\n\r\nWelcome loco, you can now log in.\r\n Verify your account with the link below:\r\n\r\n http://localhost/verify#RANDOM_ID\r\n\r\n--IDENTIFIER\r\nContent-Type: text/html; charset=utf-8\r\nContent-Transfer-Encoding: quoted-printable\r\n\r\n;\r\n\r\n\r\n Dear loco,\r\n Welcome to Loco! You can now log in to your account.\r\n Before you get started, please verify your account by clicking the link b=\r\nelow:\r\n \r\nTo: test@loco.com\r\nSubject: Welcome =?utf-8?b?bG9jbwo=?=\r\nMIME-Version: 1.0\r\nDate: DATE\r\nContent-Type: multipart/alternative;\r\n boundary=\"IDENTIFIER\"\r\n\r\n--IDENTIFIER\r\nContent-Type: text/plain; charset=utf-8\r\nContent-Transfer-Encoding: 7bit\r\n\r\nWelcome loco, you can now log in.\r\n Verify your account with the link below:\r\n\r\n http://localhost/verify#RANDOM_ID\r\n\r\n--IDENTIFIER\r\nContent-Type: text/html; charset=utf-8\r\nContent-Transfer-Encoding: quoted-printable\r\n\r\n;\r\n\r\n\r\n Dear loco,\r\n Welcome to Loco! You can now log in to your account.\r\n Before you get started, please verify your account by clicking the link b=\r\nelow:\r\n \r\nTo: test@loco.com\r\nSubject: Your reset password =?utf-8?b?bGluawo=?=\r\nMIME-Version: 1.0\r\nDate: DATE\r\nContent-Type: multipart/alternative;\r\n boundary=\"IDENTIFIER\"\r\n\r\n--IDENTIFIER\r\nContent-Type: text/plain; charset=utf-8\r\nContent-Transfer-Encoding: 7bit\r\n\r\nReset your password with this link:\r\n\r\nhttp://localhost/reset#RANDOM_ID\r\n\r\n--IDENTIFIER\r\nContent-Type: text/html; charset=utf-8\r\nContent-Transfer-Encoding: quoted-printable\r\n\r\n;\r\n\r\n\r\n Hey loco,\r\n Forgot your password? No worries! You can reset it by clicking the link b=\r\nelow:\r\n ().await.unwrap(); + + assert!(run_task::( + &boot.app_context, + Some(&"seed_data".to_string()), + &task::Vars::default() + ) + .await + .is_ok()); +} diff --git a/tests/workers/mod.rs b/tests/workers/mod.rs new file mode 100644 index 0000000..090884b --- /dev/null +++ b/tests/workers/mod.rs @@ -0,0 +1 @@ +// workers mod