diff --git a/fake_signal/scenarios/pack_add_custom.yaml b/fake_signal/scenarios/pack_add_custom.yaml deleted file mode 100644 index b17cb7c..0000000 --- a/fake_signal/scenarios/pack_add_custom.yaml +++ /dev/null @@ -1,9 +0,0 @@ -# A label matching nobody becomes a custom tag, and !losowe is the only door -# to it. The typed label must appear in neither reply. -name: "!dodaj mints a custom tag and !losowe finds it" -inject: - - { text: "!dodaj wakacje", uuid: uuid-add-custom, name: AddCustom, attachment: att-custom } - - { text: "!losowe wakacje", uuid: uuid-add-custom-b, name: AddCustomB } -expect: - - { kind: text, to: reply, contains: "NOWA ETYKIETA" } - - { kind: image, to: reply } diff --git a/fake_signal/scenarios/pack_add_heic.yaml b/fake_signal/scenarios/pack_add_heic.yaml deleted file mode 100644 index 7012df4..0000000 --- a/fake_signal/scenarios/pack_add_heic.yaml +++ /dev/null @@ -1,14 +0,0 @@ -# The iPhone default. Its HEVC parameter set survives `-all=` and is on the -# structural allowlist by kuhy's decision of 2026-08-31; the GPS and the Make -# do not survive, which is what e2e.sh re-reads the stored file to prove. -name: "a geotagged heic is accepted and comes out without its GPS" -inject: - - { - text: "!dodaj gamma", uuid: uuid-add-heic, name: AddHeic, - attachment: att-heic, attachment_type: "image/heic", - } -# Tagged to gamma rather than alfa on purpose: pack_command.yaml asserts -# !alfa returns an image, and the pick is random -- putting a clip in p1 -# would make that scenario fail about half the time. -expect: - - { kind: text, to: reply, contains: "dodano" } diff --git a/fake_signal/scenarios/pack_add_no_attachment.yaml b/fake_signal/scenarios/pack_add_no_attachment.yaml deleted file mode 100644 index bd00e89..0000000 --- a/fake_signal/scenarios/pack_add_no_attachment.yaml +++ /dev/null @@ -1,8 +0,0 @@ -# The pending mint is held in memory and never reaches custom.json: this is -# the case that must leave the album byte-identical. scripts/e2e.sh checks -# the file itself, because a reply cannot prove what was not written. -name: "!dodaj with no attachment changes nothing on disk" -inject: - - { text: "!dodaj piesek", uuid: uuid-add-none, name: AddNone } -expect: - - { kind: text, to: reply, contains: "DOŁĄCZ ZDJĘCIE" } diff --git a/fake_signal/scenarios/pack_add_person.yaml b/fake_signal/scenarios/pack_add_person.yaml deleted file mode 100644 index 46fb438..0000000 --- a/fake_signal/scenarios/pack_add_person.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# The feature working, in the shape the group will actually use it: a photo -# captioned with somebody's name, retrievable through their own command with -# no restart in between. The attachment carries a real APP1 Exif segment -# (tool/e2e_media.py puts GPS, a Make and an XMP creator in it); the reply -# must still be counts and pseudonyms only. -name: "!dodaj tags an existing person and !alfa returns it without a restart" -inject: - - { text: "!dodaj alfa", uuid: uuid-add-person, name: AddPerson, attachment: att-person } - - { text: "!alfa", uuid: uuid-add-person-b, name: AddPersonB } -expect: - - { kind: text, to: reply, contains: "dodano · p1:" } - - { kind: image, to: reply } diff --git a/fake_signal/scenarios/pack_add_rejected.yaml b/fake_signal/scenarios/pack_add_rejected.yaml deleted file mode 100644 index c35e809..0000000 --- a/fake_signal/scenarios/pack_add_rejected.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# Sniffed on the bytes, never on the filename or the stated contentType -- -# this one claims to be a photo and is a text file. -name: "a file that is not media is refused and never stored" -inject: - - { - text: "!dodaj alfa", uuid: uuid-add-junk, name: AddJunk, - attachment: att-junk, attachment_type: "image/jpeg", - } -expect: - - { kind: text, to: reply, contains: "NIE PRZYJMUJĘ" } diff --git a/fake_signal/scenarios/pack_add_scoping.yaml b/fake_signal/scenarios/pack_add_scoping.yaml deleted file mode 100644 index 2309104..0000000 --- a/fake_signal/scenarios/pack_add_scoping.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# The privacy guarantee, for the write path this time. In a group the album -# was not given to, !dodaj is not a command at all: nothing is stored, nothing -# is answered, and nothing names the album in a group that does not have one. -name: "!dodaj does not exist in a group the album was not given to" -inject: - - { - text: "!dodaj alfa", group: second, uuid: uuid-add-scope, name: AddScope, - attachment: att-second, - } -expect: [] diff --git a/fake_signal/scenarios/pack_add_svg.yaml b/fake_signal/scenarios/pack_add_svg.yaml deleted file mode 100644 index 9b1da4f..0000000 --- a/fake_signal/scenarios/pack_add_svg.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# kuhy's decision of 2026-08-31: exiftool 13.55 can write neither .svg nor -# .webm, and both stay on the allowlist and are stored exactly as they -# arrive -- metadata included. This scenario exists so that hole is -# demonstrated by the suite rather than only described in the docs. -name: "an svg is accepted and stored unstripped, by decision" -inject: - - { - text: "!dodaj alfa", uuid: uuid-add-svg, name: AddSvg, - attachment: att-svg, attachment_type: "image/svg+xml", - } -expect: - - { kind: text, to: reply, contains: "dodano" } diff --git a/fake_signal/scenarios/pack_add_video.yaml b/fake_signal/scenarios/pack_add_video.yaml deleted file mode 100644 index 12d6635..0000000 --- a/fake_signal/scenarios/pack_add_video.yaml +++ /dev/null @@ -1,15 +0,0 @@ -# An mp4 geotagged the way a phone does it: a QuickTime udta atom, which a -# naive "-GPS:all" gate passes straight through because exiftool files it -# under QuickTime and not under GPS. It is accepted, and scripts/e2e.sh then -# re-reads the stored file and fails the run if the atom survived. -name: "a geotagged mp4 is stripped of its QuickTime atom and stored" -inject: - - { - text: "!dodaj gamma", uuid: uuid-add-video, name: AddVideo, - attachment: att-video, attachment_type: "video/mp4", - } -# Tagged to gamma rather than alfa on purpose: pack_command.yaml asserts -# !alfa returns an image, and the pick is random -- putting a clip in p1 -# would make that scenario fail about half the time. -expect: - - { kind: text, to: reply, contains: "dodano" } diff --git a/pyproject.toml b/pyproject.toml index 58ed40f..864ce42 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,7 +26,7 @@ dev = [ "pytest==9.1.1", "pytest-asyncio==1.4.0", "pytest-cov==7.1.0", - "ruff==0.16.5", + "ruff==0.16.6", "types-PyYAML==6.0.12.20260815", ] diff --git a/tests/conftest.py b/tests/conftest.py index 7ec6353..bf4c46e 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -112,6 +112,11 @@ def _no_test_ever_reads_a_real_photo_pack(tmp_path: Path, monkeypatch: pytest.Mo monkeypatch.delenv("PHOTO_PACK_DIR", raising=False) monkeypatch.delenv("STATE_DIRECTORY", raising=False) monkeypatch.setenv("XDG_DATA_HOME", str(tmp_path / "share")) + # The two lines above are not enough on their own: load_config() calls + # load_dotenv(), which happily *adds* a PHOTO_PACK_DIR the test just + # deleted. test_app.py found this out on 2026-09-04, when the real + # album stopped loading and the ASGI tests failed with it. + monkeypatch.setattr("signal_bot.config_env.load_dotenv", lambda *a, **k: None) @pytest.fixture diff --git a/web/package.json b/web/package.json index 2bc313a..cf60680 100644 --- a/web/package.json +++ b/web/package.json @@ -2,7 +2,7 @@ "name": "signal-bot-web", "private": true, "type": "module", - "packageManager": "pnpm@11.24.0", + "packageManager": "pnpm@11.25.0", "engines": { "node": ">=24", "pnpm": ">=10" @@ -29,20 +29,20 @@ "@eslint/js": "10.0.1", "@testing-library/jest-dom": "7.0.1", "@testing-library/react": "16.3.3", - "@testing-library/user-event": "14.6.6", - "@types/node": "26.4.0", + "@testing-library/user-event": "14.6.7", + "@types/node": "26.4.1", "@types/react": "19.2.18", "@types/react-dom": "19.2.5", "@vitejs/plugin-react": "6.1.1", "@vitest/coverage-v8": "4.1.11", "eslint": "10.9.1", - "eslint-plugin-perfectionist": "5.10.1", + "eslint-plugin-perfectionist": "5.11.0", "eslint-plugin-react-hooks": "7.1.1", "eslint-plugin-sonarjs": "4.2.0", "eslint-plugin-unicorn": "74.0.0", "jsdom": "30.0.1", "typescript": "6.0.3", - "typescript-eslint": "8.68.0", + "typescript-eslint": "8.69.0", "vite": "8.2.2", "vitest": "4.1.11" } diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml index 7197a2f..69beef9 100644 --- a/web/pnpm-lock.yaml +++ b/web/pnpm-lock.yaml @@ -43,11 +43,11 @@ importers: specifier: 16.3.3 version: 16.3.3(@testing-library/dom@10.4.1)(@types/react-dom@19.2.5(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) '@testing-library/user-event': - specifier: 14.6.6 - version: 14.6.6(@testing-library/dom@10.4.1) + specifier: 14.6.7 + version: 14.6.7(@testing-library/dom@10.4.1) '@types/node': - specifier: 26.4.0 - version: 26.4.0 + specifier: 26.4.1 + version: 26.4.1 '@types/react': specifier: 19.2.18 version: 19.2.18 @@ -56,7 +56,7 @@ importers: version: 19.2.5(@types/react@19.2.18) '@vitejs/plugin-react': specifier: 6.1.1 - version: 6.1.1(vite@8.2.2(@types/node@26.4.0)(yaml@2.9.0)) + version: 6.1.1(vite@8.2.2(@types/node@26.4.1)(yaml@2.9.0)) '@vitest/coverage-v8': specifier: 4.1.11 version: 4.1.11(vitest@4.1.11) @@ -64,8 +64,8 @@ importers: specifier: 10.9.1 version: 10.9.1(supports-color@7.2.0) eslint-plugin-perfectionist: - specifier: 5.10.1 - version: 5.10.1(eslint@10.9.1(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) + specifier: 5.11.0 + version: 5.11.0(eslint@10.9.1(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) eslint-plugin-react-hooks: specifier: 7.1.1 version: 7.1.1(eslint@10.9.1(supports-color@7.2.0))(supports-color@7.2.0) @@ -82,14 +82,14 @@ importers: specifier: 6.0.3 version: 6.0.3 typescript-eslint: - specifier: 8.68.0 - version: 8.68.0(eslint@10.9.1(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) + specifier: 8.69.0 + version: 8.69.0(eslint@10.9.1(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) vite: specifier: 8.2.2 - version: 8.2.2(@types/node@26.4.0)(yaml@2.9.0) + version: 8.2.2(@types/node@26.4.1)(yaml@2.9.0) vitest: specifier: 4.1.11 - version: 4.1.11(@types/node@26.4.0)(@vitest/coverage-v8@4.1.11)(jsdom@30.0.1)(vite@8.2.2(@types/node@26.4.0)(yaml@2.9.0)) + version: 4.1.11(@types/node@26.4.1)(@vitest/coverage-v8@4.1.11)(jsdom@30.0.1)(vite@8.2.2(@types/node@26.4.1)(yaml@2.9.0)) packages: @@ -308,7 +308,7 @@ packages: resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} '@kuhyx/web-ui@https://codeload.github.com/kuhyx/utils/tar.gz/6714d131983f05a0e67f55ac836e3e8d57045425#path:/web_ui': - resolution: {gitHosted: true, path: /web_ui, tarball: https://codeload.github.com/kuhyx/utils/tar.gz/6714d131983f05a0e67f55ac836e3e8d57045425} + resolution: {gitHosted: true, integrity: sha512-jaYClL+dn3oPl3umd8IkeI9MSalBmu2++f9unbWX33PoLgjtl5uN2Ta9/wm83HDW6Wd2cIqeCAtDXYvySZi8rQ==, path: /web_ui, tarball: https://codeload.github.com/kuhyx/utils/tar.gz/6714d131983f05a0e67f55ac836e3e8d57045425} version: 0.3.1 engines: {node: '>=24', pnpm: '>=10'} peerDependencies: @@ -546,8 +546,8 @@ packages: '@types/react-dom': optional: true - '@testing-library/user-event@14.6.6': - resolution: {integrity: sha512-Jbs9FpkkIDw8FgSc6kOVsOv8JuuqGAL7J4X1oot77JxAoDlkNn2GRkd0aYRVuQ+pVQAiHWVkE4rX/dkF5fBiCw==} + '@testing-library/user-event@14.6.7': + resolution: {integrity: sha512-MPCpX8bxe8zS+JmmTwLp8jd0dy1rAm60Te/SL8JrQM3qvQJcBOs1d7IefJMyZzqM3EWBrDn/LWDt1BCGu4ASfg==} engines: {node: '>=12', npm: '>=6'} peerDependencies: '@testing-library/dom': '>=7.21.4' @@ -606,8 +606,8 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/node@26.4.0': - resolution: {integrity: sha512-faiGnoIrLH/V8cibOMEAZ8pMw6oXqSukl29ra4mN8GdaB2ZewzeaLj+INpV5N+Z1eKWzY+IzaIZH2EIR6YZRNQ==} + '@types/node@26.4.1': + resolution: {integrity: sha512-k97ENvZWtvA6yqz5/FS6a7duDgOPEeOQOc2iKS/nY6mX6qJUKtLnWzQS+Xj6tXweyj6ZcTAK2Qecetnvi9nCLA==} '@types/react-dom@19.2.5': resolution: {integrity: sha512-fMPwH9v7r/pp43yUd2/Mbiex5KouJwwR3dzHkhLREUC6764VyDsqxhAxv6OFEYR1RhjOyD1naqba8ECDBe7ZQg==} @@ -617,16 +617,16 @@ packages: '@types/react@19.2.18': resolution: {integrity: sha512-AnzbBERsrLKtk2XSfTbYRLjQPdy116Sty4q+T+Bp3IC4l6jNBvreVPAHmpq9qhXQM7CXZPjLVmGMw9sy+hxQ3w==} - '@typescript-eslint/eslint-plugin@8.68.0': - resolution: {integrity: sha512-WASHDpCm6qO5jj9g1a+8NiW5+GCkAyLReR56/4VruYmNgfUmqpxOfZ2Yfb8xGfJPWv5Qi6LSD8sXdces3vbp/Q==} + '@typescript-eslint/eslint-plugin@8.69.0': + resolution: {integrity: sha512-t5jQTKPIgVW1PE6dR6H6Qz5gm8zjMlX5/2gRaOGd9eO6V7J+tQc6iWKukEe7dY8u9HyYasQ0yfF0/FSSTEO2gA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.68.0 + '@typescript-eslint/parser': ^8.69.0 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/parser@8.68.0': - resolution: {integrity: sha512-fHq2VC1kpyYfvEcbiMjOpySY4WS7voEp89yAThrHRX5sm9j2lzYppCb2umFMEed4fWcyeLjHxrz0mpjNBaBxMQ==} + '@typescript-eslint/parser@8.69.0': + resolution: {integrity: sha512-l4b0DhWioGg6Gt2ebGlvfkFMOjRsauxtsnDRwUSRX1qHq3HdTfQHV8wW9zEXeciai6HfeaKOedQn2Zoofx3WBw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 @@ -638,18 +638,34 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/project-service@8.69.0': + resolution: {integrity: sha512-yi4obFrHMmnsesWehHbkg9zMA7Jt8cXT+mKM08G999pH1yT6nqgsHx7MYm0uY1wAj8CqiBXYRJ7WAT0QdQHQXg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/scope-manager@8.68.0': resolution: {integrity: sha512-T5eXpcaJNg8bhjHJ8Rjp68Vq/QBteYtTKY8TZqVNPaUbuz0f6jI9t6aDkylwvalpAB9XTTFeFOjrjXAZ3YvmVA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/scope-manager@8.69.0': + resolution: {integrity: sha512-ewfspqWvSxKSOaplqAUNbaSFO0eB6w1EtQ+esfYFRm3614Ty4uNtExkcbgd6nWsXphbqKyf9ZYdbZdv2xEoWEQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/tsconfig-utils@8.68.0': resolution: {integrity: sha512-F7zrGQfiJHojPwi8vhxZQC1tWtJzvL74cK/nqri2lk8YUXvYaYwl263xOJ69jDWPUk1hmcdoayFwk9lX09npVw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@8.68.0': - resolution: {integrity: sha512-X77zqoY1EjeWGs/0JNxeaMfp5C5lIz4Tw8y66F1Ne8Faq6g424sBNYM6xBAqElfGZPLpWS+CZAp0DXyKDzWiHg==} + '@typescript-eslint/tsconfig-utils@8.69.0': + resolution: {integrity: sha512-xNqK7YTDZsLniQMV/4rpFR8Z5JlqeRvVjuG1YgF/mdPVH84HSD19L8CczMA0qg2RfwEV231GHH3VnToJDo4MfQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/type-utils@8.69.0': + resolution: {integrity: sha512-ZfoJAVg3JZndQEpEl9petVlxau3lRuElc4HRMuAlLCf8to04/iHz692RUSNmXKDjEuJmIL+KZ2/BsOcBc16dsA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 @@ -659,12 +675,22 @@ packages: resolution: {integrity: sha512-9RnpsGJjrAllCMefGVVsImJM24YurhC0Q1h4UbvivtvOqXmR/vEJge2OoE++z9m6hyg8T1Q8t5SNT6tHSbrxcg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.69.0': + resolution: {integrity: sha512-K3VrubUPhlo9VDBS6QdI8YB5j7ClpqLRdefcz6PFrhnwicehBweqQ9Evhl4l+FYz0HdDmMqIiSX0aldGRYtDCA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@8.68.0': resolution: {integrity: sha512-OKKsD0tYmoNiU5PW2zehO1yO56jYOm1ShYlxon/Z0SJNidAkdVg86eg9ruRuoXf8xfnuWZGbwDsStkoXbZtIIA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/typescript-estree@8.69.0': + resolution: {integrity: sha512-AdFkgqck3Vudb/kWnxlyafU/4aBhHrbQ9locP2N4psXTy5mOBg0SHJumnLvx7r6g1gV4DKvUFwV2nJZBoqOD8w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/utils@8.68.0': resolution: {integrity: sha512-PB5gJMMOg0Q5P1tsgWtEAqQacJXq0qEqRHDX/YJ4FaTMLfZPpHB3gjl2EJuiZyPABxmj4ZQYiY9m1bdAJ5y7tQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -672,10 +698,21 @@ packages: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/utils@8.69.0': + resolution: {integrity: sha512-tUbx60BBqQa31kXF5MCsOOLL5E/WzUuxIn7YpAvq+eaUlqvk8/NXnXMBNAdLCr0icjkzem7iUA5QqWHe/hJ1aw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/visitor-keys@8.68.0': resolution: {integrity: sha512-YR65gGdGvTUAWLldC3xLOvOzamdGzB4A5/N8rehEaHs3Zvoe39BhgY+u0SPch1OvrVTfLcc55wsSgK2NcnTS/A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/visitor-keys@8.69.0': + resolution: {integrity: sha512-+rmdgPA+EXkNgKYvHvFfhrs35utXbwaC5PGpDquSXcoXQDKUA5UjV0LmTucG/4JXkM31BTu4TilHtrN8IVBe8w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@vitejs/plugin-react@6.1.1': resolution: {integrity: sha512-yxLaQV9gkhS8ezJqCM6+ndU7mDY6gqAg75NQ+0IjwEI8IYOmQCgkRwHKVSfWXW076DsqMo0Dk+0FK1U+M5RgFw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -948,8 +985,8 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - eslint-plugin-perfectionist@5.10.1: - resolution: {integrity: sha512-Kprsp9Us0GqAesYaAIzUViw57xYp5WBqzXrcE0Mtww++E5fexWXYBipMuuD7yvyH4vvpBH0+oJ+OMAmZ0oYXkw==} + eslint-plugin-perfectionist@5.11.0: + resolution: {integrity: sha512-kZV1otBcu4xT5R1p+0x1N1wRv4pS+OIbxrA47n5a1fTnN3MWbexOx5eQgbQhGyCNbpvF/rqrbnpkGjumHF+Y0Q==} engines: {node: ^20.0.0 || >=22.0.0} peerDependencies: eslint: ^8.45.0 || ^9.0.0 || ^10.0.0 @@ -1574,8 +1611,8 @@ packages: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} - typescript-eslint@8.68.0: - resolution: {integrity: sha512-MHy0Y0ynqeEbx/S45+i/bBssdy3X6KNBfmJAP35GrgtNxu2TQ5K5xsFDhAnmsq1jvpdoZOPG1LGtJo0HWqYCrQ==} + typescript-eslint@8.69.0: + resolution: {integrity: sha512-B3MltX0VqjUBNEe3b3sSuiRbfa6XrfHFtBiPamjT5AsW/dfq+y+bc0wyuS9DxAS1LyzCxRp2+rxzpLUvqM2BvA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 @@ -2293,7 +2330,7 @@ snapshots: picocolors: 1.1.1 redent: 3.0.0 optionalDependencies: - vitest: 4.1.11(@types/node@26.4.0)(@vitest/coverage-v8@4.1.11)(jsdom@30.0.1)(vite@8.2.2(@types/node@26.4.0)(yaml@2.9.0)) + vitest: 4.1.11(@types/node@26.4.1)(@vitest/coverage-v8@4.1.11)(jsdom@30.0.1)(vite@8.2.2(@types/node@26.4.1)(yaml@2.9.0)) '@testing-library/react@16.3.3(@testing-library/dom@10.4.1)(@types/react-dom@19.2.5(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: @@ -2305,7 +2342,7 @@ snapshots: '@types/react': 19.2.18 '@types/react-dom': 19.2.5(@types/react@19.2.18) - '@testing-library/user-event@14.6.6(@testing-library/dom@10.4.1)': + '@testing-library/user-event@14.6.7(@testing-library/dom@10.4.1)': dependencies: '@testing-library/dom': 10.4.1 @@ -2354,7 +2391,7 @@ snapshots: '@types/json-schema@7.0.15': {} - '@types/node@26.4.0': + '@types/node@26.4.1': dependencies: undici-types: 8.3.0 @@ -2366,14 +2403,14 @@ snapshots: dependencies: csstype: 3.2.3 - '@typescript-eslint/eslint-plugin@8.68.0(@typescript-eslint/parser@8.68.0(eslint@10.9.1(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3))(eslint@10.9.1(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)': + '@typescript-eslint/eslint-plugin@8.69.0(@typescript-eslint/parser@8.69.0(eslint@10.9.1(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3))(eslint@10.9.1(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.68.0(eslint@10.9.1(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) - '@typescript-eslint/scope-manager': 8.68.0 - '@typescript-eslint/type-utils': 8.68.0(eslint@10.9.1(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) - '@typescript-eslint/utils': 8.68.0(eslint@10.9.1(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) - '@typescript-eslint/visitor-keys': 8.68.0 + '@typescript-eslint/parser': 8.69.0(eslint@10.9.1(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) + '@typescript-eslint/scope-manager': 8.69.0 + '@typescript-eslint/type-utils': 8.69.0(eslint@10.9.1(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) + '@typescript-eslint/utils': 8.69.0(eslint@10.9.1(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.69.0 eslint: 10.9.1(supports-color@7.2.0) ignore: 7.0.6 natural-compare: 1.4.0 @@ -2382,12 +2419,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.68.0(eslint@10.9.1(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)': + '@typescript-eslint/parser@8.69.0(eslint@10.9.1(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)': dependencies: - '@typescript-eslint/scope-manager': 8.68.0 - '@typescript-eslint/types': 8.68.0 - '@typescript-eslint/typescript-estree': 8.68.0(supports-color@7.2.0)(typescript@6.0.3) - '@typescript-eslint/visitor-keys': 8.68.0 + '@typescript-eslint/scope-manager': 8.69.0 + '@typescript-eslint/types': 8.69.0 + '@typescript-eslint/typescript-estree': 8.69.0(supports-color@7.2.0)(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.69.0 debug: 4.4.3(supports-color@7.2.0) eslint: 10.9.1(supports-color@7.2.0) typescript: 6.0.3 @@ -2403,20 +2440,38 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/project-service@8.69.0(supports-color@7.2.0)(typescript@6.0.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.69.0(typescript@6.0.3) + '@typescript-eslint/types': 8.69.0 + debug: 4.4.3(supports-color@7.2.0) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/scope-manager@8.68.0': dependencies: '@typescript-eslint/types': 8.68.0 '@typescript-eslint/visitor-keys': 8.68.0 + '@typescript-eslint/scope-manager@8.69.0': + dependencies: + '@typescript-eslint/types': 8.69.0 + '@typescript-eslint/visitor-keys': 8.69.0 + '@typescript-eslint/tsconfig-utils@8.68.0(typescript@6.0.3)': dependencies: typescript: 6.0.3 - '@typescript-eslint/type-utils@8.68.0(eslint@10.9.1(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)': + '@typescript-eslint/tsconfig-utils@8.69.0(typescript@6.0.3)': dependencies: - '@typescript-eslint/types': 8.68.0 - '@typescript-eslint/typescript-estree': 8.68.0(supports-color@7.2.0)(typescript@6.0.3) - '@typescript-eslint/utils': 8.68.0(eslint@10.9.1(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) + typescript: 6.0.3 + + '@typescript-eslint/type-utils@8.69.0(eslint@10.9.1(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)': + dependencies: + '@typescript-eslint/types': 8.69.0 + '@typescript-eslint/typescript-estree': 8.69.0(supports-color@7.2.0)(typescript@6.0.3) + '@typescript-eslint/utils': 8.69.0(eslint@10.9.1(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) debug: 4.4.3(supports-color@7.2.0) eslint: 10.9.1(supports-color@7.2.0) ts-api-utils: 2.5.0(typescript@6.0.3) @@ -2426,6 +2481,8 @@ snapshots: '@typescript-eslint/types@8.68.0': {} + '@typescript-eslint/types@8.69.0': {} + '@typescript-eslint/typescript-estree@8.68.0(supports-color@7.2.0)(typescript@6.0.3)': dependencies: '@typescript-eslint/project-service': 8.68.0(supports-color@7.2.0)(typescript@6.0.3) @@ -2441,6 +2498,21 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/typescript-estree@8.69.0(supports-color@7.2.0)(typescript@6.0.3)': + dependencies: + '@typescript-eslint/project-service': 8.69.0(supports-color@7.2.0)(typescript@6.0.3) + '@typescript-eslint/tsconfig-utils': 8.69.0(typescript@6.0.3) + '@typescript-eslint/types': 8.69.0 + '@typescript-eslint/visitor-keys': 8.69.0 + debug: 4.4.3(supports-color@7.2.0) + minimatch: 10.2.6 + semver: 7.8.5 + tinyglobby: 0.2.17 + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/utils@8.68.0(eslint@10.9.1(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)': dependencies: '@eslint-community/eslint-utils': 4.10.1(eslint@10.9.1(supports-color@7.2.0)) @@ -2452,15 +2524,31 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/utils@8.69.0(eslint@10.9.1(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)': + dependencies: + '@eslint-community/eslint-utils': 4.10.1(eslint@10.9.1(supports-color@7.2.0)) + '@typescript-eslint/scope-manager': 8.69.0 + '@typescript-eslint/types': 8.69.0 + '@typescript-eslint/typescript-estree': 8.69.0(supports-color@7.2.0)(typescript@6.0.3) + eslint: 10.9.1(supports-color@7.2.0) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/visitor-keys@8.68.0': dependencies: '@typescript-eslint/types': 8.68.0 eslint-visitor-keys: 5.0.1 - '@vitejs/plugin-react@6.1.1(vite@8.2.2(@types/node@26.4.0)(yaml@2.9.0))': + '@typescript-eslint/visitor-keys@8.69.0': + dependencies: + '@typescript-eslint/types': 8.69.0 + eslint-visitor-keys: 5.0.1 + + '@vitejs/plugin-react@6.1.1(vite@8.2.2(@types/node@26.4.1)(yaml@2.9.0))': dependencies: '@rolldown/pluginutils': 1.0.1 - vite: 8.2.2(@types/node@26.4.0)(yaml@2.9.0) + vite: 8.2.2(@types/node@26.4.1)(yaml@2.9.0) '@vitest/coverage-v8@4.1.11(vitest@4.1.11)': dependencies: @@ -2474,7 +2562,7 @@ snapshots: obug: 2.1.4 std-env: 4.2.0 tinyrainbow: 3.1.1 - vitest: 4.1.11(@types/node@26.4.0)(@vitest/coverage-v8@4.1.11)(jsdom@30.0.1)(vite@8.2.2(@types/node@26.4.0)(yaml@2.9.0)) + vitest: 4.1.11(@types/node@26.4.1)(@vitest/coverage-v8@4.1.11)(jsdom@30.0.1)(vite@8.2.2(@types/node@26.4.1)(yaml@2.9.0)) '@vitest/expect@4.1.11': dependencies: @@ -2485,13 +2573,13 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.1 - '@vitest/mocker@4.1.11(vite@8.2.2(@types/node@26.4.0)(yaml@2.9.0))': + '@vitest/mocker@4.1.11(vite@8.2.2(@types/node@26.4.1)(yaml@2.9.0))': dependencies: '@vitest/spy': 4.1.11 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.2.2(@types/node@26.4.0)(yaml@2.9.0) + vite: 8.2.2(@types/node@26.4.1)(yaml@2.9.0) '@vitest/pretty-format@4.1.11': dependencies: @@ -2697,7 +2785,7 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-plugin-perfectionist@5.10.1(eslint@10.9.1(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3): + eslint-plugin-perfectionist@5.11.0(eslint@10.9.1(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3): dependencies: '@typescript-eslint/utils': 8.68.0(eslint@10.9.1(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) eslint: 10.9.1(supports-color@7.2.0) @@ -3296,12 +3384,12 @@ snapshots: type-fest@4.41.0: {} - typescript-eslint@8.68.0(eslint@10.9.1(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3): + typescript-eslint@8.69.0(eslint@10.9.1(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.68.0(@typescript-eslint/parser@8.68.0(eslint@10.9.1(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3))(eslint@10.9.1(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) - '@typescript-eslint/parser': 8.68.0(eslint@10.9.1(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) - '@typescript-eslint/typescript-estree': 8.68.0(supports-color@7.2.0)(typescript@6.0.3) - '@typescript-eslint/utils': 8.68.0(eslint@10.9.1(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) + '@typescript-eslint/eslint-plugin': 8.69.0(@typescript-eslint/parser@8.69.0(eslint@10.9.1(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3))(eslint@10.9.1(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) + '@typescript-eslint/parser': 8.69.0(eslint@10.9.1(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) + '@typescript-eslint/typescript-estree': 8.69.0(supports-color@7.2.0)(typescript@6.0.3) + '@typescript-eslint/utils': 8.69.0(eslint@10.9.1(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) eslint: 10.9.1(supports-color@7.2.0) typescript: 6.0.3 transitivePeerDependencies: @@ -3327,7 +3415,7 @@ snapshots: dependencies: react: 19.2.8 - vite@8.2.2(@types/node@26.4.0)(yaml@2.9.0): + vite@8.2.2(@types/node@26.4.1)(yaml@2.9.0): dependencies: lightningcss: 1.33.0 picomatch: 4.0.7 @@ -3335,14 +3423,14 @@ snapshots: rolldown: 1.2.6 tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 26.4.0 + '@types/node': 26.4.1 fsevents: 2.3.3 yaml: 2.9.0 - vitest@4.1.11(@types/node@26.4.0)(@vitest/coverage-v8@4.1.11)(jsdom@30.0.1)(vite@8.2.2(@types/node@26.4.0)(yaml@2.9.0)): + vitest@4.1.11(@types/node@26.4.1)(@vitest/coverage-v8@4.1.11)(jsdom@30.0.1)(vite@8.2.2(@types/node@26.4.1)(yaml@2.9.0)): dependencies: '@vitest/expect': 4.1.11 - '@vitest/mocker': 4.1.11(vite@8.2.2(@types/node@26.4.0)(yaml@2.9.0)) + '@vitest/mocker': 4.1.11(vite@8.2.2(@types/node@26.4.1)(yaml@2.9.0)) '@vitest/pretty-format': 4.1.11 '@vitest/runner': 4.1.11 '@vitest/snapshot': 4.1.11 @@ -3359,10 +3447,10 @@ snapshots: tinyexec: 1.3.0 tinyglobby: 0.2.17 tinyrainbow: 3.1.1 - vite: 8.2.2(@types/node@26.4.0)(yaml@2.9.0) + vite: 8.2.2(@types/node@26.4.1)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 26.4.0 + '@types/node': 26.4.1 '@vitest/coverage-v8': 4.1.11(vitest@4.1.11) jsdom: 30.0.1 transitivePeerDependencies: