From 7b5a595d58a912a34654c7dc81ce04c9799399b1 Mon Sep 17 00:00:00 2001 From: gcch Date: Tue, 14 Apr 2026 11:00:55 +0200 Subject: [PATCH 1/6] =?UTF-8?q?corv=C3=A9e:=20met=20=C3=A0=20jour=20les=20?= =?UTF-8?q?d=C3=A9pendances?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - applique effect-ts go --- bun.lock | 303 +++++++++++++++++++++++++++++++++++++++----------- composer.lock | 151 +++++++++++++------------ package.json | 38 ++++--- tsconfig.json | 61 ++++++++++ 4 files changed, 397 insertions(+), 156 deletions(-) diff --git a/bun.lock b/bun.lock index 18fe1f35..46c965aa 100644 --- a/bun.lock +++ b/bun.lock @@ -6,54 +6,55 @@ "name": "haikuatelier.fr", "dependencies": { "@mobily/ts-belt": "v4.0.0-rc.5", - "@sentry/browser": "^10.47.0", + "@sentry/browser": "^10.49.0", "a11y-dialog": "^8.1.5", - "effect": "^4.0.0-beta.48", + "effect": "^4.0.0-beta.51", "lit-html": "^3.3.2", "purify-ts": "2.1.2", "ts-pattern": "^5.9.0", "valibot": "1.1.0", }, "devDependencies": { - "@effect/language-service": "^0.85.0", + "@effect/language-service": "^0.85.1", + "@effect/tsgo": "0.4.0", "@gcch/configuration-eslint": "git+https://git.gcch.fr/gcch/configuration-eslint#62ee424274", "@gcch/configuration-oxlint": "git+https://git.gcch.fr/gcch/configuration-oxlint#0968f683", "@gcch/configuration-prettier": "git+https://git.gcch.fr/gcch/configuration-prettier#8de937e801", "@playwright/test": "^1.59.1", - "@sentry/core": "^10.47.0", - "@types/bun": "^1.3.11", - "@types/node": "^25.5.2", + "@sentry/core": "^10.49.0", + "@types/bun": "^1.3.12", + "@types/node": "^25.6.0", + "@typescript/native-preview": "latest", "@vitejs/plugin-legacy": "^8.0.1", "better-typescript-lib": "^2.12.0", "browserslist": "^4.28.2", - "caniuse-lite": "^1.0.30001787", - "eslint": "^10.2.0", + "caniuse-lite": "^1.0.30001788", + "eslint": "^10.2.1", "eslint-plugin-functional": "^9.0.4", "eslint-plugin-jsx-a11y": "^6.10.2", - "eslint-plugin-oxlint": "^1.59.0", - "eslint-plugin-perfectionist": "^5.8.0", - "eslint-plugin-sonarjs": "^4.0.2", + "eslint-plugin-oxlint": "^1.60.0", + "eslint-plugin-perfectionist": "^5.9.0", "fdir": "^6.5.0", "globals": "^17.5.0", "jiti": "^2.6.1", "knip": "^6.4.1", "lightningcss": "^1.32.0", "lightningcss-cli": "^1.32.0", - "oxlint": "^1.59.0", - "oxlint-tsgolint": "^0.20.0", + "oxlint": "^1.60.0", + "oxlint-tsgolint": "^0.21.1", "playwright": "^1.59.1", - "prettier": "^3.8.1", + "prettier": "^3.8.3", "prettier-plugin-pkg": "^0.22.1", "prettier-plugin-sh": "^0.18.1", "sass-embedded": "^1.99.0", - "stylelint": "^17.7.0", + "stylelint": "^17.8.0", "stylelint-config-clean-order": "^8.0.1", "stylelint-config-sass-guidelines": "^13.0.0", "stylelint-config-standard-scss": "^17.0.0", "stylelint-declaration-block-no-ignored-properties": "^3.0.0", "stylelint-plugin-logical-css": "^2.1.0", - "typescript": "6.0.2", - "typescript-eslint": "^8.58.1", + "typescript": "6.0.3", + "typescript-eslint": "^8.58.2", "vite": "^8.0.8", "vite-tsconfig-paths": "^6.1.1", }, @@ -268,6 +269,22 @@ "@effect/language-service": ["@effect/language-service@0.85.1", "", { "bin": { "effect-language-service": "cli.js" } }, "sha512-EXnJjIy6zQ3nUO/MZ+ynWUb8B895KZPotd1++oTs9JjDkplwM7cb6zo8Zq2zU6piwq+KflO7amXbEfj1UMpHkw=="], + "@effect/tsgo": ["@effect/tsgo@0.4.0", "", { "optionalDependencies": { "@effect/tsgo-darwin-arm64": "0.4.0", "@effect/tsgo-darwin-x64": "0.4.0", "@effect/tsgo-linux-arm": "0.4.0", "@effect/tsgo-linux-arm64": "0.4.0", "@effect/tsgo-linux-x64": "0.4.0", "@effect/tsgo-win32-arm64": "0.4.0", "@effect/tsgo-win32-x64": "0.4.0" }, "bin": { "effect-tsgo": "dist/effect-tsgo.js" } }, "sha512-RhB8EW97Bu1OW1fOZnMJsX9Et1IDvByMSPE/fnY+/a5+VDEUniM+Q4PMPVYOdcRRSKHrPeEVzQLSSjcaBPIqCQ=="], + + "@effect/tsgo-darwin-arm64": ["@effect/tsgo-darwin-arm64@0.4.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-O7dg5zdT0x8/QRF1LTsTKO89QwKOd1WTar1qqZV3SbEGMJeld4klQXMU4Uzpa8JMybDFlyhU2aBEiKxwllKhIQ=="], + + "@effect/tsgo-darwin-x64": ["@effect/tsgo-darwin-x64@0.4.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-gS1wqbJFbeVFad9qNe8O75Lcth5bxaDI4DbXXK9vBD4BeX9MhY9kv78/Ror89xMtQqiyaOfUf3WbCwHs0TQQHw=="], + + "@effect/tsgo-linux-arm": ["@effect/tsgo-linux-arm@0.4.0", "", { "os": "linux", "cpu": "arm" }, "sha512-4i8R0CR0cJigpH8FiaGB90auu8fZ5cH4lK1v4U/Ji0CYlQzCOQ9ytXaAxvFN3vVdkfKT1QEaisoSrwv01TkDkQ=="], + + "@effect/tsgo-linux-arm64": ["@effect/tsgo-linux-arm64@0.4.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-H8TK5KvZVosevH0V8zi6vHZWXchHQg87Y5OVGqPB2pnJ3zx0x9JflVENg+yWbovP7tKkd+EB14Nn+L98Mm7hlA=="], + + "@effect/tsgo-linux-x64": ["@effect/tsgo-linux-x64@0.4.0", "", { "os": "linux", "cpu": "x64" }, "sha512-+JW566Kitimkr/1t4aeVYqKu3EMufMNgfGo+HH31yFD04IGBXwfqOjLVrHrp8wzh0s3NNABHkQmT1G5TnkMRlw=="], + + "@effect/tsgo-win32-arm64": ["@effect/tsgo-win32-arm64@0.4.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-KuGpUb2/hKtTSGfBksydVaN94DUSGUUxG7hQUaPvEo87WtHYBnLl7xqpdlKzKxvmim3gv2i7uzkbL6ef65+lqw=="], + + "@effect/tsgo-win32-x64": ["@effect/tsgo-win32-x64@0.4.0", "", { "os": "win32", "cpu": "x64" }, "sha512-pI5MMLiKR9fFmuPtqG+gyudrmqfnrPR7Cf+ENHzn+XXgkARA9UmLW9VC0GN1h3SH1oQiQp3Qw814LQ1qRizPkA=="], + "@emnapi/core": ["@emnapi/core@1.9.2", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" } }, "sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA=="], "@emnapi/runtime": ["@emnapi/runtime@1.9.2", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw=="], @@ -428,55 +445,55 @@ "@oxc-resolver/binding-win32-x64-msvc": ["@oxc-resolver/binding-win32-x64-msvc@11.19.1", "", { "os": "win32", "cpu": "x64" }, "sha512-6hIU3RQu45B+VNTY4Ru8ppFwjVS/S5qwYyGhBotmjxfEKk41I2DlGtRfGJndZ5+6lneE2pwloqunlOyZuX/XAw=="], - "@oxlint-tsgolint/darwin-arm64": ["@oxlint-tsgolint/darwin-arm64@0.20.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-KKQcIHZHMxqpHUA1VXIbOG6chNCFkUWbQy6M+AFVtPKkA/3xAeJkJ3njoV66bfzwPHRcWQO+kcj5XqtbkjakoA=="], + "@oxlint-tsgolint/darwin-arm64": ["@oxlint-tsgolint/darwin-arm64@0.21.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-7TLjyWe4wG9saJc992VWmaHq2hwKfOEEVTjheReXJXaDhavMZI4X9a6nKhbEng4IVkYtzjD2jw16vw2WFXLYLw=="], - "@oxlint-tsgolint/darwin-x64": ["@oxlint-tsgolint/darwin-x64@0.20.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-7HeVMuclGfG+NLZi2ybY0T4fMI7/XxO/208rJk+zEIloKkVnlh11Wd241JMGwgNFXn+MLJbOqOfojDb2Dt4L1g=="], + "@oxlint-tsgolint/darwin-x64": ["@oxlint-tsgolint/darwin-x64@0.21.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-7wf9Wf75nTzA7zpL9myhFe2RKvfuqGUOADNvUooCjEWvh7hmPz3lSEqTMh5Z/VQhzsG04mM9ACyghxhRzq7zFw=="], - "@oxlint-tsgolint/linux-arm64": ["@oxlint-tsgolint/linux-arm64@0.20.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-zxhUwz+WSxE6oWlZLK2z2ps9yC6ebmgoYmjAl0Oa48+GqkZ56NVgo+wb8DURNv6xrggzHStQxqQxe3mK51HZag=="], + "@oxlint-tsgolint/linux-arm64": ["@oxlint-tsgolint/linux-arm64@0.21.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-IPuQN/Vd0Rjklg/cCGBbQyUuRBp2f6LQXpZYwk5ivOR6V/+CgiYsv8pn/PVY7gjeyoNvPQrXB7xMjHUO2YZbdw=="], - "@oxlint-tsgolint/linux-x64": ["@oxlint-tsgolint/linux-x64@0.20.0", "", { "os": "linux", "cpu": "x64" }, "sha512-/1l6FnahC9im8PK+Ekkx/V3yetO/PzZnJegE2FXcv/iXEhbeVxP/ouiTYcUQu9shT1FWJCSNti1VJHH+21Y1dg=="], + "@oxlint-tsgolint/linux-x64": ["@oxlint-tsgolint/linux-x64@0.21.1", "", { "os": "linux", "cpu": "x64" }, "sha512-d1niGuTbh2qiv7dR7tqkbOcM5cIR63of0lMBFdEQavL1KrJV8zuRdwdi68K7MNGdgoR+J5A9ajpGGvsHwp1bPg=="], - "@oxlint-tsgolint/win32-arm64": ["@oxlint-tsgolint/win32-arm64@0.20.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-oPZ5Yz8sVdo7P/5q+i3IKeix31eFZ55JAPa1+RGPoe9PoaYVsdMvR6Jvib6YtrqoJnFPlg3fjEjlEPL8VBKYJA=="], + "@oxlint-tsgolint/win32-arm64": ["@oxlint-tsgolint/win32-arm64@0.21.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-ICu9y2JLnFPvFqstnWPPNqBM8LK8BWw2OTeaR0UgEMm4hOSbrZAKv1/hwZYyiLqnCNjBL87AGSQIgTHCYlsipw=="], - "@oxlint-tsgolint/win32-x64": ["@oxlint-tsgolint/win32-x64@0.20.0", "", { "os": "win32", "cpu": "x64" }, "sha512-4stx8RHj3SP9vQyRF/yZbz5igtPvYMEUR8CUoha4BVNZihi39DpCR8qkU7lpjB5Ga1DRMo2pHaA4bdTOMaY4mw=="], + "@oxlint-tsgolint/win32-x64": ["@oxlint-tsgolint/win32-x64@0.21.1", "", { "os": "win32", "cpu": "x64" }, "sha512-cTEFCFjCj6iXfrSHcvajSPNqhEA4TxSzU3gFxbdGSAUTNXGToU99IbdhWAPSbhcucoym0XE4Zl7E41NiSkNTug=="], - "@oxlint/binding-android-arm-eabi": ["@oxlint/binding-android-arm-eabi@1.59.0", "", { "os": "android", "cpu": "arm" }, "sha512-etYDw/UaEv936AQUd/CRMBVd+e+XuuU6wC+VzOv1STvsTyZenLChepLWqLtnyTTp4YMlM22ypzogDDwqYxv5cg=="], + "@oxlint/binding-android-arm-eabi": ["@oxlint/binding-android-arm-eabi@1.60.0", "", { "os": "android", "cpu": "arm" }, "sha512-YdeJKaZckDQL1qa62a1aKq/goyq48aX3yOxaaWqWb4sau4Ee4IiLbamftNLU3zbePky6QsDj6thnSSzHRBjDfA=="], - "@oxlint/binding-android-arm64": ["@oxlint/binding-android-arm64@1.59.0", "", { "os": "android", "cpu": "arm64" }, "sha512-TgLc7XVLKH2a4h8j3vn1MDjfK33i9MY60f/bKhRGWyVzbk5LCZ4X01VZG7iHrMmi5vYbAp8//Ponigx03CLsdw=="], + "@oxlint/binding-android-arm64": ["@oxlint/binding-android-arm64@1.60.0", "", { "os": "android", "cpu": "arm64" }, "sha512-7ANS7PpXCfq84xZQ8E5WPs14gwcuPcl+/8TFNXfpSu0CQBXz3cUo2fDpHT8v8HJN+Ut02eacvMAzTnc9s6X4tw=="], - "@oxlint/binding-darwin-arm64": ["@oxlint/binding-darwin-arm64@1.59.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-DXyFPf5ZKldMLloRHx/B9fsxsiTQomaw7cmEW3YIJko2HgCh+GUhp9gGYwHrqlLJPsEe3dYj9JebjX92D3j3AA=="], + "@oxlint/binding-darwin-arm64": ["@oxlint/binding-darwin-arm64@1.60.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-pJsgd9AfplLGBm1fIr25V6V14vMrayhx4uIQvlfH7jWs2SZwSrvi3TfgfJySB8T+hvyEH8K2zXljQiUnkgUnfQ=="], - "@oxlint/binding-darwin-x64": ["@oxlint/binding-darwin-x64@1.59.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-LgvrsdgVLX1qWqIEmNsSmMXJhpAWdtUQ0M+oR0CySwi+9IHWyOGuIL8w8+u/kbZNMyZr4WUyYB5i0+D+AKgkLg=="], + "@oxlint/binding-darwin-x64": ["@oxlint/binding-darwin-x64@1.60.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-Ue1aXHX49ivwflKqGJc7zcd/LeLgbhaTcDCQStgx5x06AXgjEAZmvrlMuIkWd4AL4FHQe6QJ9f33z04Cg448VQ=="], - "@oxlint/binding-freebsd-x64": ["@oxlint/binding-freebsd-x64@1.59.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-bOJhqX/ny4hrFuTPlyk8foSRx/vLRpxJh0jOOKN2NWW6FScXHPAA5rQbrwdQPcgGB5V8Ua51RS03fke8ssBcug=="], + "@oxlint/binding-freebsd-x64": ["@oxlint/binding-freebsd-x64@1.60.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-YCyQzsQtusQw+gNRW9rRTifSO+Dt/+dtCl2NHoDMZqJlRTEZ/Oht9YnuporI9yiTx7+cB+eqzX3MtHHVHGIWhg=="], - "@oxlint/binding-linux-arm-gnueabihf": ["@oxlint/binding-linux-arm-gnueabihf@1.59.0", "", { "os": "linux", "cpu": "arm" }, "sha512-vVUXxYMF9trXCsz4m9H6U0IjehosVHxBzVgJUxly1uz4W1PdDyicaBnpC0KRXsHYretLVe+uS9pJy8iM57Kujw=="], + "@oxlint/binding-linux-arm-gnueabihf": ["@oxlint/binding-linux-arm-gnueabihf@1.60.0", "", { "os": "linux", "cpu": "arm" }, "sha512-c7dxM2Zksa45Qw16i2iGY3Fti2NirJ38FrsBsKw+qcJ0OtqTsBgKJLF0xV+yLG56UH01Z8WRPgsw31e0MoRoGQ=="], - "@oxlint/binding-linux-arm-musleabihf": ["@oxlint/binding-linux-arm-musleabihf@1.59.0", "", { "os": "linux", "cpu": "arm" }, "sha512-TULQW8YBPGRWg5yZpFPL54HLOnJ3/HiX6VenDPi6YfxB/jlItwSMFh3/hCeSNbh+DAMaE1Py0j5MOaivHkI/9Q=="], + "@oxlint/binding-linux-arm-musleabihf": ["@oxlint/binding-linux-arm-musleabihf@1.60.0", "", { "os": "linux", "cpu": "arm" }, "sha512-ZWALoA42UYqBEP1Tbw9OWURgFGS1nWj2AAvLdY6ZcGx/Gj93qVCBKjcvwXMupZibYwFbi9s/rzqkZseb/6gVtQ=="], - "@oxlint/binding-linux-arm64-gnu": ["@oxlint/binding-linux-arm64-gnu@1.59.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-Gt54Y4eqSgYJ90xipm24xeyaPV854706o/kiT8oZvUt3VDY7qqxdqyGqchMaujd87ib+/MXvnl9WkK8Cc1BExg=="], + "@oxlint/binding-linux-arm64-gnu": ["@oxlint/binding-linux-arm64-gnu@1.60.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-tpy+1w4p9hN5CicMCxqNy6ymfRtV5ayE573vFNjp1k1TN/qhLFgflveZoE/0++RlkHikBz2vY545NWm/hp7big=="], - "@oxlint/binding-linux-arm64-musl": ["@oxlint/binding-linux-arm64-musl@1.59.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-3CtsKp7NFB3OfqQzbuAecrY7GIZeiv7AD+xutU4tefVQzlfmTI7/ygWLrvkzsDEjTlMq41rYHxgsn6Yh8tybmA=="], + "@oxlint/binding-linux-arm64-musl": ["@oxlint/binding-linux-arm64-musl@1.60.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-eDYDXZGhQAXyn6GwtwiX/qcLS0HlOLPJ/+iiIY8RYr+3P8oKBmgKxADLlniL6FtWfE7pPk7IGN9/xvDEvDvFeg=="], - "@oxlint/binding-linux-ppc64-gnu": ["@oxlint/binding-linux-ppc64-gnu@1.59.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-K0diOpT3ncDmOfl9I1HuvpEsAuTxkts0VYwIv/w6Xiy9CdwyPBVX88Ga9l8VlGgMrwBMnSY4xIvVlVY/fkQk7Q=="], + "@oxlint/binding-linux-ppc64-gnu": ["@oxlint/binding-linux-ppc64-gnu@1.60.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-nxehly5XYBHUWI9VJX1bqCf9j/B43DaK/aS/T1fcxCpX3PA4Rm9BB54nPD1CKayT8xg6REN1ao+01hSRNgy8OA=="], - "@oxlint/binding-linux-riscv64-gnu": ["@oxlint/binding-linux-riscv64-gnu@1.59.0", "", { "os": "linux", "cpu": "none" }, "sha512-xAU7+QDU6kTJJ7mJLOGgo7oOjtAtkKyFZ0Yjdb5cEo3DiCCPFLvyr08rWiQh6evZ7RiUTf+o65NY/bqttzJiQQ=="], + "@oxlint/binding-linux-riscv64-gnu": ["@oxlint/binding-linux-riscv64-gnu@1.60.0", "", { "os": "linux", "cpu": "none" }, "sha512-j1qf/NaUfOWQutjeoooNG1Q0zsK0XGmSu1uDLq3cctquRF3j7t9Hxqf/76ehCc5GEUAanth2W4Fa+XT1RFg/nw=="], - "@oxlint/binding-linux-riscv64-musl": ["@oxlint/binding-linux-riscv64-musl@1.59.0", "", { "os": "linux", "cpu": "none" }, "sha512-KUmZmKlTTyauOnvUNVxK7G40sSSx0+w5l1UhaGsC6KPpOYHenx2oqJTnabmpLJicok7IC+3Y6fXAUOMyexaeJQ=="], + "@oxlint/binding-linux-riscv64-musl": ["@oxlint/binding-linux-riscv64-musl@1.60.0", "", { "os": "linux", "cpu": "none" }, "sha512-YELKPRefQ/q/h3RUmeRfPCUhh2wBvgV1RyZ/F9M9u8cDyXsQW2ojv1DeWQTt466yczDITjZnIOg/s05pk7Ve2A=="], - "@oxlint/binding-linux-s390x-gnu": ["@oxlint/binding-linux-s390x-gnu@1.59.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-4usRxC8gS0PGdkHnRmwJt/4zrQNZyk6vL0trCxwZSsAKM+OxhB8nKiR+mhjdBbl8lbMh2gc3bZpNN/ik8c4c2A=="], + "@oxlint/binding-linux-s390x-gnu": ["@oxlint/binding-linux-s390x-gnu@1.60.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-JkO3C6Gki7Y6h/MiIkFKvHFOz98/YWvQ4WYbK9DLXACMP2rjULzkeGyAzorJE5S1dzLQGFgeqvN779kSFwoV1g=="], - "@oxlint/binding-linux-x64-gnu": ["@oxlint/binding-linux-x64-gnu@1.59.0", "", { "os": "linux", "cpu": "x64" }, "sha512-s/rNE2gDmbwAOOP493xk2X7M8LZfI1LJFSSW1+yanz3vuQCFPiHkx4GY+O1HuLUDtkzGlhtMrIcxxzyYLv308w=="], + "@oxlint/binding-linux-x64-gnu": ["@oxlint/binding-linux-x64-gnu@1.60.0", "", { "os": "linux", "cpu": "x64" }, "sha512-XjKHdFVCpZZZSWBCKyyqCq65s2AKXykMXkjLoKYODrD+f5toLhlwsMESscu8FbgnJQ4Y/dpR/zdazsahmgBJIA=="], - "@oxlint/binding-linux-x64-musl": ["@oxlint/binding-linux-x64-musl@1.59.0", "", { "os": "linux", "cpu": "x64" }, "sha512-+yYj1udJa2UvvIUmEm0IcKgc0UlPMgz0nsSTvkPL2y6n0uU5LgIHSwVu4AHhrve6j9BpVSoRksnz8c9QcvITJA=="], + "@oxlint/binding-linux-x64-musl": ["@oxlint/binding-linux-x64-musl@1.60.0", "", { "os": "linux", "cpu": "x64" }, "sha512-js29ZWIuPhNWzY8NC7KoffEMEeWG105vbmm+8EOJsC+T/jHBiKIJEUF78+F/IrgEWMMP9N0kRND4Pp75+xAhKg=="], - "@oxlint/binding-openharmony-arm64": ["@oxlint/binding-openharmony-arm64@1.59.0", "", { "os": "none", "cpu": "arm64" }, "sha512-bUplUb48LYsB3hHlQXP2ZMOenpieWoOyppLAnnAhuPag3MGPnt+7caxE3w/Vl9wpQsTA3gzLntQi9rxWrs7Xqg=="], + "@oxlint/binding-openharmony-arm64": ["@oxlint/binding-openharmony-arm64@1.60.0", "", { "os": "none", "cpu": "arm64" }, "sha512-H+PUITKHk04stFpWj3x3Kg08Afp/bcXSBi0EhasR5a0Vw7StXHTzdl655PUI0fB4qdh2Wsu6Dsi+3ACxPoyQnA=="], - "@oxlint/binding-win32-arm64-msvc": ["@oxlint/binding-win32-arm64-msvc@1.59.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-/HLsLuz42rWl7h7ePdmMTpHm2HIDmPtcEMYgm5BBEHiEiuNOrzMaUpd2z7UnNni5LGN9obJy2YoAYBLXQwazrA=="], + "@oxlint/binding-win32-arm64-msvc": ["@oxlint/binding-win32-arm64-msvc@1.60.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-WA/yc7f7ZfCefBXVzNHn1Ztulb1EFwNBb4jMZ6pjML0zz6pHujlF3Q3jySluz3XHl/GNeMTntG1seUBWVMlMag=="], - "@oxlint/binding-win32-ia32-msvc": ["@oxlint/binding-win32-ia32-msvc@1.59.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-rUPy+JnanpPwV/aJCPnxAD1fW50+XPI0VkWr7f0vEbqcdsS8NpB24Rw6RsS7SdpFv8Dw+8ugCwao5nCFbqOUSg=="], + "@oxlint/binding-win32-ia32-msvc": ["@oxlint/binding-win32-ia32-msvc@1.60.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-33YxL1sqwYNZXtn3MD/4dno6s0xeedXOJlT1WohkVD565WvohClZUr7vwKdAk954n4xiEWJkewiCr+zLeq7AeA=="], - "@oxlint/binding-win32-x64-msvc": ["@oxlint/binding-win32-x64-msvc@1.59.0", "", { "os": "win32", "cpu": "x64" }, "sha512-xkE7puteDS/vUyRngLXW0t8WgdWoS/tfxXjhP/P7SMqPDx+hs44SpssO3h3qmTqECYEuXBUPzcAw5257Ka+ofA=="], + "@oxlint/binding-win32-x64-msvc": ["@oxlint/binding-win32-x64-msvc@1.60.0", "", { "os": "win32", "cpu": "x64" }, "sha512-JOro4ZcfBLamJCyfURQmOQByoorgOdx3ZjAkSqnb/CyG/i+lN3KoV5LAgk5ZAW6DPq7/Cx7n23f8DuTWXTWgyQ=="], "@parcel/watcher": ["@parcel/watcher@2.5.6", "", { "dependencies": { "detect-libc": "^2.0.3", "is-glob": "^4.0.3", "node-addon-api": "^7.0.0", "picomatch": "^4.0.3" }, "optionalDependencies": { "@parcel/watcher-android-arm64": "2.5.6", "@parcel/watcher-darwin-arm64": "2.5.6", "@parcel/watcher-darwin-x64": "2.5.6", "@parcel/watcher-freebsd-x64": "2.5.6", "@parcel/watcher-linux-arm-glibc": "2.5.6", "@parcel/watcher-linux-arm-musl": "2.5.6", "@parcel/watcher-linux-arm64-glibc": "2.5.6", "@parcel/watcher-linux-arm64-musl": "2.5.6", "@parcel/watcher-linux-x64-glibc": "2.5.6", "@parcel/watcher-linux-x64-musl": "2.5.6", "@parcel/watcher-win32-arm64": "2.5.6", "@parcel/watcher-win32-ia32": "2.5.6", "@parcel/watcher-win32-x64": "2.5.6" } }, "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ=="], @@ -544,17 +561,17 @@ "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-rc.15", "", {}, "sha512-UromN0peaE53IaBRe9W7CjrZgXl90fqGpK+mIZbA3qSTeYqg3pqpROBdIPvOG3F5ereDHNwoHBI2e50n1BDr1g=="], - "@sentry-internal/browser-utils": ["@sentry-internal/browser-utils@10.48.0", "", { "dependencies": { "@sentry/core": "10.48.0" } }, "sha512-SCiTLBXzugFKxev6NoKYBIhQoDk0gUh0AVVVepCBqfCJiWBG01Zvv0R5tCVohr4cWRllkQ8mlBdNQd/I7s9tdA=="], + "@sentry-internal/browser-utils": ["@sentry-internal/browser-utils@10.49.0", "", { "dependencies": { "@sentry/core": "10.49.0" } }, "sha512-n0QRx0Ysx6mPfIydTkz7VP0FmwM+/EqMZiRqdsU3aTYsngE9GmEDV0OL1bAy6a8N/C1xf9vntkuAtj6N/8Z51w=="], - "@sentry-internal/feedback": ["@sentry-internal/feedback@10.48.0", "", { "dependencies": { "@sentry/core": "10.48.0" } }, "sha512-tGkEyOM1HDS9qebDphUMEnyk3qq/50AnuTBiFmMJyjNzowylVGmRRk0sr3xkmbVHCDXQCiYnDmSVlJ2x4SDMrQ=="], + "@sentry-internal/feedback": ["@sentry-internal/feedback@10.49.0", "", { "dependencies": { "@sentry/core": "10.49.0" } }, "sha512-JNsUBGv0faCFE7MeZUH99Y9lU9qq3LBALbLxpE1x7ngNrQnVYRlcFgdqaD/btNBKr8awjYL8gmcSkHBWskGqLQ=="], - "@sentry-internal/replay": ["@sentry-internal/replay@10.48.0", "", { "dependencies": { "@sentry-internal/browser-utils": "10.48.0", "@sentry/core": "10.48.0" } }, "sha512-sevRTePfuk4PNuz9KAKpmTZEomAU0aLXyIhOwA0OnUDdxPhkY8kq5lwDbuxTHv6DQUjUX3YgFbY45VH1JEqHKA=="], + "@sentry-internal/replay": ["@sentry-internal/replay@10.49.0", "", { "dependencies": { "@sentry-internal/browser-utils": "10.49.0", "@sentry/core": "10.49.0" } }, "sha512-IEy4lwHVMiRE3JAcn+kFKjsTgalDOCSTf20SoFd+nkt6rN/k1RDyr4xpdfF//Kj3UdeTmbuibYjK5H/FLhhnGg=="], - "@sentry-internal/replay-canvas": ["@sentry-internal/replay-canvas@10.48.0", "", { "dependencies": { "@sentry-internal/replay": "10.48.0", "@sentry/core": "10.48.0" } }, "sha512-9nWuN2z4O+iwbTfuYV5ZmngBgJU/ZxfOo47A5RJP3Nu/kl59aJ1lUhILYOKyeNOIC/JyeERmpIcTxnlPXQzZ3Q=="], + "@sentry-internal/replay-canvas": ["@sentry-internal/replay-canvas@10.49.0", "", { "dependencies": { "@sentry-internal/replay": "10.49.0", "@sentry/core": "10.49.0" } }, "sha512-7D/NrgH1Qwx5trDYaaTSSJmCb1yVQQLqFG4G/S9x2ltzl9876lSGJL8UeW8ReNQgF3CDAcwbmm/9aXaVSBUNZA=="], - "@sentry/browser": ["@sentry/browser@10.48.0", "", { "dependencies": { "@sentry-internal/browser-utils": "10.48.0", "@sentry-internal/feedback": "10.48.0", "@sentry-internal/replay": "10.48.0", "@sentry-internal/replay-canvas": "10.48.0", "@sentry/core": "10.48.0" } }, "sha512-4jt2zX2ExgFcNe2x+W+/k81fmDUsOrquGtt028CiGuDuma6kEsWBI4JbooT1jhj2T+eeUxe3YGbM23Zhh7Ghhw=="], + "@sentry/browser": ["@sentry/browser@10.49.0", "", { "dependencies": { "@sentry-internal/browser-utils": "10.49.0", "@sentry-internal/feedback": "10.49.0", "@sentry-internal/replay": "10.49.0", "@sentry-internal/replay-canvas": "10.49.0", "@sentry/core": "10.49.0" } }, "sha512-bGCHc+wK2Dx67YoSbmtlt04alqWfQ+dasD/GVipVOq50gvw/BBIDHTEWRJEjACl+LrvszeY54V+24p8z4IgysA=="], - "@sentry/core": ["@sentry/core@10.48.0", "", {}, "sha512-h8F+fXVwYC9ro5ZaO8V+v3vqc0awlXHGblEAuVxSGgh4IV/oFX+QVzXeDTTrFOFS6v/Vn5vAyu240eJrJAS6/g=="], + "@sentry/core": ["@sentry/core@10.49.0", "", {}, "sha512-UaFeum3LUM1mB0d67jvKnqId1yWQjyqmaDV6kWngG03x+jqXb08tJdGpSoxjXZe13jFBbiBL/wKDDYIK7rCK4g=="], "@sindresorhus/base62": ["@sindresorhus/base62@1.0.0", "", {}, "sha512-TeheYy0ILzBEI/CO55CP6zJCSdSWeRtGnHy8U8dWSUH4I68iqTsy7HkMktR4xakThc9jotkPQUXT4ITdbV7cHA=="], @@ -586,25 +603,25 @@ "@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], - "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.58.1", "", { "dependencies": { "@eslint-community/regexpp": "^4.12.2", "@typescript-eslint/scope-manager": "8.58.1", "@typescript-eslint/type-utils": "8.58.1", "@typescript-eslint/utils": "8.58.1", "@typescript-eslint/visitor-keys": "8.58.1", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.58.1", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-eSkwoemjo76bdXl2MYqtxg51HNwUSkWfODUOQ3PaTLZGh9uIWWFZIjyjaJnex7wXDu+TRx+ATsnSxdN9YWfRTQ=="], + "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.58.2", "", { "dependencies": { "@eslint-community/regexpp": "^4.12.2", "@typescript-eslint/scope-manager": "8.58.2", "@typescript-eslint/type-utils": "8.58.2", "@typescript-eslint/utils": "8.58.2", "@typescript-eslint/visitor-keys": "8.58.2", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.58.2", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-aC2qc5thQahutKjP+cl8cgN9DWe3ZUqVko30CMSZHnFEHyhOYoZSzkGtAI2mcwZ38xeImDucI4dnqsHiOYuuCw=="], - "@typescript-eslint/parser": ["@typescript-eslint/parser@8.58.1", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.58.1", "@typescript-eslint/types": "8.58.1", "@typescript-eslint/typescript-estree": "8.58.1", "@typescript-eslint/visitor-keys": "8.58.1", "debug": "^4.4.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-gGkiNMPqerb2cJSVcruigx9eHBlLG14fSdPdqMoOcBfh+vvn4iCq2C8MzUB89PrxOXk0y3GZ1yIWb9aOzL93bw=="], + "@typescript-eslint/parser": ["@typescript-eslint/parser@8.58.2", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.58.2", "@typescript-eslint/types": "8.58.2", "@typescript-eslint/typescript-estree": "8.58.2", "@typescript-eslint/visitor-keys": "8.58.2", "debug": "^4.4.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-/Zb/xaIDfxeJnvishjGdcR4jmr7S+bda8PKNhRGdljDM+elXhlvN0FyPSsMnLmJUrVG9aPO6dof80wjMawsASg=="], - "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.58.1", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.58.1", "@typescript-eslint/types": "^8.58.1", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-gfQ8fk6cxhtptek+/8ZIqw8YrRW5048Gug8Ts5IYcMLCw18iUgrZAEY/D7s4hkI0FxEfGakKuPK/XUMPzPxi5g=="], + "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.58.2", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.58.2", "@typescript-eslint/types": "^8.58.2", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-Cq6UfpZZk15+r87BkIh5rDpi38W4b+Sjnb8wQCPPDDweS/LRCFjCyViEbzHk5Ck3f2QDfgmlxqSa7S7clDtlfg=="], "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.58.1", "", { "dependencies": { "@typescript-eslint/types": "8.58.1", "@typescript-eslint/visitor-keys": "8.58.1" } }, "sha512-TPYUEqJK6avLcEjumWsIuTpuYODTTDAtoMdt8ZZa93uWMTX13Nb8L5leSje1NluammvU+oI3QRr5lLXPgihX3w=="], - "@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.58.1", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-JAr2hOIct2Q+qk3G+8YFfqkqi7sC86uNryT+2i5HzMa2MPjw4qNFvtjnw1IiA1rP7QhNKVe21mSSLaSjwA1Olw=="], + "@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.58.2", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-3SR+RukipDvkkKp/d0jP0dyzuls3DbGmwDpVEc5wqk5f38KFThakqAAO0XMirWAE+kT00oTauTbzMFGPoAzB0A=="], "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.58.1", "", { "dependencies": { "@typescript-eslint/types": "8.58.1", "@typescript-eslint/typescript-estree": "8.58.1", "@typescript-eslint/utils": "8.58.1", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-HUFxvTJVroT+0rXVJC7eD5zol6ID+Sn5npVPWoFuHGg9Ncq5Q4EYstqR+UOqaNRFXi5TYkpXXkLhoCHe3G0+7w=="], "@typescript-eslint/types": ["@typescript-eslint/types@8.58.1", "", {}, "sha512-io/dV5Aw5ezwzfPBBWLoT+5QfVtP8O7q4Kftjn5azJ88bYyp/ZMCsyW1lpKK46EXJcaYMZ1JtYj+s/7TdzmQMw=="], - "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.58.1", "", { "dependencies": { "@typescript-eslint/project-service": "8.58.1", "@typescript-eslint/tsconfig-utils": "8.58.1", "@typescript-eslint/types": "8.58.1", "@typescript-eslint/visitor-keys": "8.58.1", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-w4w7WR7GHOjqqPnvAYbazq+Y5oS68b9CzasGtnd6jIeOIeKUzYzupGTB2T4LTPSv4d+WPeccbxuneTFHYgAAWg=="], + "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.58.2", "", { "dependencies": { "@typescript-eslint/project-service": "8.58.2", "@typescript-eslint/tsconfig-utils": "8.58.2", "@typescript-eslint/types": "8.58.2", "@typescript-eslint/visitor-keys": "8.58.2", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-ELGuoofuhhoCvNbQjFFiobFcGgcDCEm0ThWdmO4Z0UzLqPXS3KFvnEZ+SHewwOYHjM09tkzOWXNTv9u6Gqtyuw=="], "@typescript-eslint/utils": ["@typescript-eslint/utils@8.58.1", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/scope-manager": "8.58.1", "@typescript-eslint/types": "8.58.1", "@typescript-eslint/typescript-estree": "8.58.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-Ln8R0tmWC7pTtLOzgJzYTXSCjJ9rDNHAqTaVONF4FEi2qwce8mD9iSOxOpLFFvWp/wBFlew0mjM1L1ihYWfBdQ=="], - "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.58.1", "", { "dependencies": { "@typescript-eslint/types": "8.58.1", "eslint-visitor-keys": "^5.0.0" } }, "sha512-y+vH7QE8ycjoa0bWciFg7OpFcipUuem1ujhrdLtq1gByKwfbC7bPeKsiny9e0urg93DqwGcHey+bGRKCnF1nZQ=="], + "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.58.2", "", { "dependencies": { "@typescript-eslint/types": "8.58.2", "eslint-visitor-keys": "^5.0.0" } }, "sha512-f1WO2Lx8a9t8DARmcWAUPJbu0G20bJlj8L4z72K00TMeJAoyLr/tHhI/pzYBLrR4dXWkcxO1cWYZEOX8DKHTqA=="], "@typescript/lib-decorators": ["@better-typescript-lib/decorators@2.12.0", "", { "peerDependencies": { "typescript": ">=4.5.2" } }, "sha512-/m9Q5Xk66ThUJidTsxmXJH0+49iCLl5PFmue0HkNSGrcPU96oaoKNY5sH1AslwA/OWVvBg3hE58ZwSGm6TQFuQ=="], @@ -640,6 +657,22 @@ "@typescript/lib-webworker": ["@better-typescript-lib/webworker@2.12.0", "", { "peerDependencies": { "typescript": ">=4.5.2" } }, "sha512-YktWJCUYdrRORhd4NgnPZCEzElDglPZzVnfkxGNmEhPpFE1W6ThKDQqkvMZapf3T+0xGeDqJx9V4xhFNnv56Xw=="], + "@typescript/native-preview": ["@typescript/native-preview@7.0.0-dev.20260419.1", "", { "optionalDependencies": { "@typescript/native-preview-darwin-arm64": "7.0.0-dev.20260419.1", "@typescript/native-preview-darwin-x64": "7.0.0-dev.20260419.1", "@typescript/native-preview-linux-arm": "7.0.0-dev.20260419.1", "@typescript/native-preview-linux-arm64": "7.0.0-dev.20260419.1", "@typescript/native-preview-linux-x64": "7.0.0-dev.20260419.1", "@typescript/native-preview-win32-arm64": "7.0.0-dev.20260419.1", "@typescript/native-preview-win32-x64": "7.0.0-dev.20260419.1" }, "bin": { "tsgo": "bin/tsgo.js" } }, "sha512-PzN1nqNe0B4vqyUzZD0Da9LbbdOYhcjLVS0Rkd/lDZEuLuovZCdIpXg1hz2S7JnD4P5P+Uy1aAdO5ubv8vQVTw=="], + + "@typescript/native-preview-darwin-arm64": ["@typescript/native-preview-darwin-arm64@7.0.0-dev.20260419.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-qgoZvmBsEE928tqDg7l27qciCrCWRU5bXdiWUykkt4+er3OaNYKUt+UtJvNiuNxiPaVwnRMEjnVyFiO/KNo3gA=="], + + "@typescript/native-preview-darwin-x64": ["@typescript/native-preview-darwin-x64@7.0.0-dev.20260419.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-3+bXF/Mi4u3jbtuPp0gO4bjk+uaDhQLWR/h7JRrmL6KgVJQ9uywEOorx+1SgbidH6a1neO/pUPAlCvJ7+9zUQA=="], + + "@typescript/native-preview-linux-arm": ["@typescript/native-preview-linux-arm@7.0.0-dev.20260419.1", "", { "os": "linux", "cpu": "arm" }, "sha512-e+BjeErUxpHb8FAYfCCrM9MvAl7yL4eYpYEW3jAaPle/K2+6BJPnUpytgB1fbrMWDmbnTWhC4m9NgTPfNHznxA=="], + + "@typescript/native-preview-linux-arm64": ["@typescript/native-preview-linux-arm64@7.0.0-dev.20260419.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-cxK8SJ0tLeAV67hKfPEkPyv6rDIeL8AyGFHJFMz+gz3mKNy6ZEPK+9B8fl/JFGPylOhspgm6+IqFepRJcw74eg=="], + + "@typescript/native-preview-linux-x64": ["@typescript/native-preview-linux-x64@7.0.0-dev.20260419.1", "", { "os": "linux", "cpu": "x64" }, "sha512-6cf/o48dN5px6mrW8Hq7duGpimoCFAlpEsgbjYWex8Vjv2EH+S1QcWUbh3L0cAhygnxnb4f2gwovBGJqKgf6jg=="], + + "@typescript/native-preview-win32-arm64": ["@typescript/native-preview-win32-arm64@7.0.0-dev.20260419.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-yz7AxGsNf1cueTUv0SF5Q1LvRGVHh+F4cSwmwucGVkHJGKdLCQO7cLs4MTFY0gcqsLNr7qKH7gMh5WCQqsPVXQ=="], + + "@typescript/native-preview-win32-x64": ["@typescript/native-preview-win32-x64@7.0.0-dev.20260419.1", "", { "os": "win32", "cpu": "x64" }, "sha512-3sXtVGB4dt/kNp/bQMj0H1q7WhFzVe//rTin9DWV9CpbPXY+Ue8aUIRNevneHBPp5zSsBkkJlg1BlMH1Z87mGA=="], + "@vitejs/plugin-legacy": ["@vitejs/plugin-legacy@8.0.1", "", { "dependencies": { "@babel/core": "^7.29.0", "@babel/plugin-transform-dynamic-import": "^7.27.1", "@babel/plugin-transform-modules-systemjs": "^7.29.0", "@babel/preset-env": "^7.29.2", "babel-plugin-polyfill-corejs3": "^0.14.2", "babel-plugin-polyfill-regenerator": "^0.6.8", "browserslist": "^4.28.1", "browserslist-to-esbuild": "^2.1.1", "core-js": "^3.49.0", "magic-string": "^0.30.21", "regenerator-runtime": "^0.14.1", "systemjs": "^6.15.1" }, "peerDependencies": { "terser": "^5.16.0", "vite": "^8.0.0" } }, "sha512-8zeDeuNPqXd49rIVgFgluQYB8vQICHR7l+W2I3CxYK4gTjTorajVr0wLvSjALIwEwLRxBn68EgNVyGP4j6hP7w=="], "a11y-dialog": ["a11y-dialog@8.1.5", "", { "dependencies": { "focusable-selectors": "^0.8.0" } }, "sha512-SlFk3QSqeuvmN/anaIteUkB6ipBHoG1jq5gfQZU2kqvbkDW3Iab7SNufj4io4e8StvuIshD+loJnsQgTEvq6dA=="], @@ -726,7 +759,7 @@ "callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="], - "caniuse-lite": ["caniuse-lite@1.0.30001787", "", {}, "sha512-mNcrMN9KeI68u7muanUpEejSLghOKlVhRqS/Za2IeyGllJ9I9otGpR9g3nsw7n4W378TE/LyIteA0+/FOZm4Kg=="], + "caniuse-lite": ["caniuse-lite@1.0.30001788", "", {}, "sha512-6q8HFp+lOQtcf7wBK+uEenxymVWkGKkjFpCvw5W25cmMwEDU45p1xQFBQv8JDlMMry7eNxyBaR+qxgmTUZkIRQ=="], "change-case": ["change-case@5.4.4", "", {}, "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w=="], @@ -796,7 +829,7 @@ "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], - "effect": ["effect@4.0.0-beta.48", "", { "dependencies": { "@standard-schema/spec": "^1.1.0", "fast-check": "^4.6.0", "find-my-way-ts": "^0.1.6", "ini": "^6.0.0", "kubernetes-types": "^1.30.0", "msgpackr": "^1.11.9", "multipasta": "^0.2.7", "toml": "^4.1.1", "uuid": "^13.0.0", "yaml": "^2.8.3" } }, "sha512-MMAM/ZabuNdNmgXiin+BAanQXK7qM8mlt7nfXDoJ/Gn9V8i89JlCq+2N0AiWmqFLXjGLA0u3FjiOjSOYQk5uMw=="], + "effect": ["effect@4.0.0-beta.51", "", { "dependencies": { "@standard-schema/spec": "^1.1.0", "fast-check": "^4.6.0", "find-my-way-ts": "^0.1.6", "ini": "^6.0.0", "kubernetes-types": "^1.30.0", "msgpackr": "^1.11.9", "multipasta": "^0.2.7", "toml": "^4.1.1", "uuid": "^13.0.0", "yaml": "^2.8.3" } }, "sha512-Xo4MDGMhAAw/jPTT5zYk1H2FnllAVsSdZWLag+0yY4Hi1rksgReE2M4vFdqgl9wPV+30wVMvd95oPAczs71HIg=="], "electron-to-chromium": ["electron-to-chromium@1.5.334", "", {}, "sha512-mgjZAz7Jyx1SRCwEpy9wefDS7GvNPazLthHg8eQMJ76wBdGQQDW33TCrUTvQ4wzpmOrv2zrFoD3oNufMdyMpog=="], @@ -826,7 +859,7 @@ "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], - "eslint": ["eslint@10.2.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.2", "@eslint/config-array": "^0.23.4", "@eslint/config-helpers": "^0.5.4", "@eslint/core": "^1.2.0", "@eslint/plugin-kit": "^0.7.0", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "ajv": "^6.14.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^9.1.2", "eslint-visitor-keys": "^5.0.1", "espree": "^11.2.0", "esquery": "^1.7.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "minimatch": "^10.2.4", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA=="], + "eslint": ["eslint@10.2.1", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.2", "@eslint/config-array": "^0.23.5", "@eslint/config-helpers": "^0.5.5", "@eslint/core": "^1.2.1", "@eslint/plugin-kit": "^0.7.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "ajv": "^6.14.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^9.1.2", "eslint-visitor-keys": "^5.0.1", "espree": "^11.2.0", "esquery": "^1.7.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "minimatch": "^10.2.4", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-wiyGaKsDgqXvF40P8mDwiUp/KQjE1FdrIEJsM8PZ3XCiniTMXS3OHWWUe5FI5agoCnr8x4xPrTDZuxsBlNHl+Q=="], "eslint-compat-utils": ["eslint-compat-utils@0.6.5", "", { "dependencies": { "semver": "^7.5.4" }, "peerDependencies": { "eslint": ">=6.0.0" } }, "sha512-vAUHYzue4YAa2hNACjB8HvUQj5yehAZgiClyFVVom9cP8z5NSFq3PwB/TtJslN2zAMgRX6FCFCjYBbQh71g5RQ=="], @@ -838,9 +871,9 @@ "eslint-plugin-jsx-a11y": ["eslint-plugin-jsx-a11y@6.10.2", "", { "dependencies": { "aria-query": "^5.3.2", "array-includes": "^3.1.8", "array.prototype.flatmap": "^1.3.2", "ast-types-flow": "^0.0.8", "axe-core": "^4.10.0", "axobject-query": "^4.1.0", "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", "hasown": "^2.0.2", "jsx-ast-utils": "^3.3.5", "language-tags": "^1.0.9", "minimatch": "^3.1.2", "object.fromentries": "^2.0.8", "safe-regex-test": "^1.0.3", "string.prototype.includes": "^2.0.1" }, "peerDependencies": { "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" } }, "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q=="], - "eslint-plugin-oxlint": ["eslint-plugin-oxlint@1.59.0", "", { "dependencies": { "jsonc-parser": "^3.3.1" }, "peerDependencies": { "oxlint": "~1.59.0" } }, "sha512-g0DR+xSsnUdyaMc2KAXvBVGWz5V4GwlAE1PM+ocKxl2Eg7YgOjkRLLbxgJ3bhYOhRLhD8F0X4DjJu2FSDvrvAg=="], + "eslint-plugin-oxlint": ["eslint-plugin-oxlint@1.60.0", "", { "dependencies": { "jsonc-parser": "^3.3.1" }, "peerDependencies": { "oxlint": "~1.60.0" } }, "sha512-9RUD23k7ablez1qg7JWnyPYPOlbucDDqaDr+qNUi0TbIQCPqIPCLzfllgqKF9lOxlg+l17H8hISErmarvm2J1w=="], - "eslint-plugin-perfectionist": ["eslint-plugin-perfectionist@5.8.0", "", { "dependencies": { "@typescript-eslint/utils": "^8.58.0", "natural-orderby": "^5.0.0" }, "peerDependencies": { "eslint": "^8.45.0 || ^9.0.0 || ^10.0.0" } }, "sha512-k8uIptWIxkUclonCFGyDzgYs9NI+Qh0a7cUXS3L7IYZDEsjXuimFBVbxXPQQngWqMiaxJRwbtYB4smMGMqF+cw=="], + "eslint-plugin-perfectionist": ["eslint-plugin-perfectionist@5.9.0", "", { "dependencies": { "@typescript-eslint/utils": "^8.58.2", "natural-orderby": "^5.0.0" }, "peerDependencies": { "eslint": "^8.45.0 || ^9.0.0 || ^10.0.0" } }, "sha512-8TWzg02zmnBdZwCkWLi8jhzqXI+fE7Z/RwV8SL6xD45tJ8Bp3wGuYL2XtQgfe/Wd0eBqOUX+s6ey73IyszvKTA=="], "eslint-plugin-sonarjs": ["eslint-plugin-sonarjs@4.0.2", "", { "dependencies": { "@eslint-community/regexpp": "^4.12.2", "builtin-modules": "^3.3.0", "bytes": "^3.1.2", "functional-red-black-tree": "^1.0.1", "globals": "^17.4.0", "jsx-ast-utils-x": "^0.1.0", "lodash.merge": "^4.6.2", "minimatch": "^10.2.4", "scslre": "^0.3.0", "semver": "^7.7.4", "ts-api-utils": "^2.4.0", "typescript": ">=5" }, "peerDependencies": { "eslint": "^8.0.0 || ^9.0.0 || ^10.0.0" } }, "sha512-BTcT1zr1iTbmJtVlcesISwnXzh+9uhf9LEOr+RRNf4kR8xA0HQTPft4oiyOCzCOGKkpSJxjR8ZYF6H7VPyplyw=="], @@ -1256,9 +1289,9 @@ "oxc-resolver": ["oxc-resolver@11.19.1", "", { "optionalDependencies": { "@oxc-resolver/binding-android-arm-eabi": "11.19.1", "@oxc-resolver/binding-android-arm64": "11.19.1", "@oxc-resolver/binding-darwin-arm64": "11.19.1", "@oxc-resolver/binding-darwin-x64": "11.19.1", "@oxc-resolver/binding-freebsd-x64": "11.19.1", "@oxc-resolver/binding-linux-arm-gnueabihf": "11.19.1", "@oxc-resolver/binding-linux-arm-musleabihf": "11.19.1", "@oxc-resolver/binding-linux-arm64-gnu": "11.19.1", "@oxc-resolver/binding-linux-arm64-musl": "11.19.1", "@oxc-resolver/binding-linux-ppc64-gnu": "11.19.1", "@oxc-resolver/binding-linux-riscv64-gnu": "11.19.1", "@oxc-resolver/binding-linux-riscv64-musl": "11.19.1", "@oxc-resolver/binding-linux-s390x-gnu": "11.19.1", "@oxc-resolver/binding-linux-x64-gnu": "11.19.1", "@oxc-resolver/binding-linux-x64-musl": "11.19.1", "@oxc-resolver/binding-openharmony-arm64": "11.19.1", "@oxc-resolver/binding-wasm32-wasi": "11.19.1", "@oxc-resolver/binding-win32-arm64-msvc": "11.19.1", "@oxc-resolver/binding-win32-ia32-msvc": "11.19.1", "@oxc-resolver/binding-win32-x64-msvc": "11.19.1" } }, "sha512-qE/CIg/spwrTBFt5aKmwe3ifeDdLfA2NESN30E42X/lII5ClF8V7Wt6WIJhcGZjp0/Q+nQ+9vgxGk//xZNX2hg=="], - "oxlint": ["oxlint@1.59.0", "", { "optionalDependencies": { "@oxlint/binding-android-arm-eabi": "1.59.0", "@oxlint/binding-android-arm64": "1.59.0", "@oxlint/binding-darwin-arm64": "1.59.0", "@oxlint/binding-darwin-x64": "1.59.0", "@oxlint/binding-freebsd-x64": "1.59.0", "@oxlint/binding-linux-arm-gnueabihf": "1.59.0", "@oxlint/binding-linux-arm-musleabihf": "1.59.0", "@oxlint/binding-linux-arm64-gnu": "1.59.0", "@oxlint/binding-linux-arm64-musl": "1.59.0", "@oxlint/binding-linux-ppc64-gnu": "1.59.0", "@oxlint/binding-linux-riscv64-gnu": "1.59.0", "@oxlint/binding-linux-riscv64-musl": "1.59.0", "@oxlint/binding-linux-s390x-gnu": "1.59.0", "@oxlint/binding-linux-x64-gnu": "1.59.0", "@oxlint/binding-linux-x64-musl": "1.59.0", "@oxlint/binding-openharmony-arm64": "1.59.0", "@oxlint/binding-win32-arm64-msvc": "1.59.0", "@oxlint/binding-win32-ia32-msvc": "1.59.0", "@oxlint/binding-win32-x64-msvc": "1.59.0" }, "peerDependencies": { "oxlint-tsgolint": ">=0.18.0" }, "optionalPeers": ["oxlint-tsgolint"], "bin": { "oxlint": "bin/oxlint" } }, "sha512-0xBLeGGjP4vD9pygRo8iuOkOzEU1MqOnfiOl7KYezL/QvWL8NUg6n03zXc7ZVqltiOpUxBk2zgHI3PnRIEdAvw=="], + "oxlint": ["oxlint@1.60.0", "", { "optionalDependencies": { "@oxlint/binding-android-arm-eabi": "1.60.0", "@oxlint/binding-android-arm64": "1.60.0", "@oxlint/binding-darwin-arm64": "1.60.0", "@oxlint/binding-darwin-x64": "1.60.0", "@oxlint/binding-freebsd-x64": "1.60.0", "@oxlint/binding-linux-arm-gnueabihf": "1.60.0", "@oxlint/binding-linux-arm-musleabihf": "1.60.0", "@oxlint/binding-linux-arm64-gnu": "1.60.0", "@oxlint/binding-linux-arm64-musl": "1.60.0", "@oxlint/binding-linux-ppc64-gnu": "1.60.0", "@oxlint/binding-linux-riscv64-gnu": "1.60.0", "@oxlint/binding-linux-riscv64-musl": "1.60.0", "@oxlint/binding-linux-s390x-gnu": "1.60.0", "@oxlint/binding-linux-x64-gnu": "1.60.0", "@oxlint/binding-linux-x64-musl": "1.60.0", "@oxlint/binding-openharmony-arm64": "1.60.0", "@oxlint/binding-win32-arm64-msvc": "1.60.0", "@oxlint/binding-win32-ia32-msvc": "1.60.0", "@oxlint/binding-win32-x64-msvc": "1.60.0" }, "peerDependencies": { "oxlint-tsgolint": ">=0.18.0" }, "optionalPeers": ["oxlint-tsgolint"], "bin": { "oxlint": "bin/oxlint" } }, "sha512-tnRzTWiWJ9pg3ftRWnD0+Oqh78L6ZSwcEudvCZaER0PIqiAnNyXj5N1dPwjmNpDalkKS9m/WMLN1CTPUBPmsgw=="], - "oxlint-tsgolint": ["oxlint-tsgolint@0.20.0", "", { "optionalDependencies": { "@oxlint-tsgolint/darwin-arm64": "0.20.0", "@oxlint-tsgolint/darwin-x64": "0.20.0", "@oxlint-tsgolint/linux-arm64": "0.20.0", "@oxlint-tsgolint/linux-x64": "0.20.0", "@oxlint-tsgolint/win32-arm64": "0.20.0", "@oxlint-tsgolint/win32-x64": "0.20.0" }, "bin": { "tsgolint": "bin/tsgolint.js" } }, "sha512-/Uc9TQyN1l8w9QNvXtVHYtz+SzDJHKpb5X0UnHodl0BVzijUPk0LPlDOHAvogd1UI+iy9ZSF6gQxEqfzUxCULQ=="], + "oxlint-tsgolint": ["oxlint-tsgolint@0.21.1", "", { "optionalDependencies": { "@oxlint-tsgolint/darwin-arm64": "0.21.1", "@oxlint-tsgolint/darwin-x64": "0.21.1", "@oxlint-tsgolint/linux-arm64": "0.21.1", "@oxlint-tsgolint/linux-x64": "0.21.1", "@oxlint-tsgolint/win32-arm64": "0.21.1", "@oxlint-tsgolint/win32-x64": "0.21.1" }, "bin": { "tsgolint": "bin/tsgolint.js" } }, "sha512-O2hxiT14C2HJkwzBU6CQBFPoagSd/IcV+Tt3e3UUaXFwbW4BO5DSDPSSboc3UM5MIDY+MLyepvtQwBQafNxWdw=="], "p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], @@ -1308,7 +1341,7 @@ "prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="], - "prettier": ["prettier@3.8.2", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-8c3mgTe0ASwWAJK+78dpviD+A8EqhndQPUBpNUIPt6+xWlIigCwfN01lWr9MAede4uqXGTEKeQWTvzb3vjia0Q=="], + "prettier": ["prettier@3.8.3", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw=="], "prettier-plugin-curly": ["prettier-plugin-curly@0.4.1", "", { "peerDependencies": { "prettier": "^3" } }, "sha512-Xc7zatoD0/08zYFv+hwnlqT5ekM81DCbBr73CWAsr1Fmx7qLQT/M0wfPx6w/+zfnmXH009xYvjzLUPcwzq7Fbw=="], @@ -1484,7 +1517,7 @@ "style-search": ["style-search@0.1.0", "", {}, "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg=="], - "stylelint": ["stylelint@17.7.0", "", { "dependencies": { "@csstools/css-calc": "^3.1.1", "@csstools/css-parser-algorithms": "^4.0.0", "@csstools/css-syntax-patches-for-csstree": "^1.1.2", "@csstools/css-tokenizer": "^4.0.0", "@csstools/media-query-list-parser": "^5.0.0", "@csstools/selector-resolve-nested": "^4.0.0", "@csstools/selector-specificity": "^6.0.0", "colord": "^2.9.3", "cosmiconfig": "^9.0.1", "css-functions-list": "^3.3.3", "css-tree": "^3.2.1", "debug": "^4.4.3", "fast-glob": "^3.3.3", "fastest-levenshtein": "^1.0.16", "file-entry-cache": "^11.1.2", "global-modules": "^2.0.0", "globby": "^16.2.0", "globjoin": "^0.1.4", "html-tags": "^5.1.0", "ignore": "^7.0.5", "import-meta-resolve": "^4.2.0", "is-plain-object": "^5.0.0", "mathml-tag-names": "^4.0.0", "meow": "^14.1.0", "micromatch": "^4.0.8", "normalize-path": "^3.0.0", "picocolors": "^1.1.1", "postcss": "^8.5.8", "postcss-safe-parser": "^7.0.1", "postcss-selector-parser": "^7.1.1", "postcss-value-parser": "^4.2.0", "string-width": "^8.2.0", "supports-hyperlinks": "^4.4.0", "svg-tags": "^1.0.0", "table": "^6.9.0", "write-file-atomic": "^7.0.1" }, "bin": { "stylelint": "bin/stylelint.mjs" } }, "sha512-n/+4RheCRl+cecGnF+S/Adz59iCRaK9BVznJYB+a7GOksfwNzjiOPnYv17pTO0HgRse9IiqbMtekGNhOb2tVYQ=="], + "stylelint": ["stylelint@17.8.0", "", { "dependencies": { "@csstools/css-calc": "^3.1.1", "@csstools/css-parser-algorithms": "^4.0.0", "@csstools/css-syntax-patches-for-csstree": "^1.1.2", "@csstools/css-tokenizer": "^4.0.0", "@csstools/media-query-list-parser": "^5.0.0", "@csstools/selector-resolve-nested": "^4.0.0", "@csstools/selector-specificity": "^6.0.0", "colord": "^2.9.3", "cosmiconfig": "^9.0.1", "css-functions-list": "^3.3.3", "css-tree": "^3.2.1", "debug": "^4.4.3", "fast-glob": "^3.3.3", "fastest-levenshtein": "^1.0.16", "file-entry-cache": "^11.1.2", "global-modules": "^2.0.0", "globby": "^16.2.0", "globjoin": "^0.1.4", "html-tags": "^5.1.0", "ignore": "^7.0.5", "import-meta-resolve": "^4.2.0", "is-plain-object": "^5.0.0", "mathml-tag-names": "^4.0.0", "meow": "^14.1.0", "micromatch": "^4.0.8", "normalize-path": "^3.0.0", "picocolors": "^1.1.1", "postcss": "^8.5.9", "postcss-safe-parser": "^7.0.1", "postcss-selector-parser": "^7.1.1", "postcss-value-parser": "^4.2.0", "string-width": "^8.2.0", "supports-hyperlinks": "^4.4.0", "svg-tags": "^1.0.0", "table": "^6.9.0", "write-file-atomic": "^7.0.1" }, "bin": { "stylelint": "bin/stylelint.mjs" } }, "sha512-oHkld9T60LDSaUQ4CSVc+tlt9eUoDlxhaGWShsUCKyIL14boZfmK5bSphZqx64aiC5tCqX+BsQMTMoSz8D1zIg=="], "stylelint-config-clean-order": ["stylelint-config-clean-order@8.0.1", "", { "peerDependencies": { "stylelint": ">=16", "stylelint-order": ">=6" } }, "sha512-zKjp7BiINXRZOG9m0fE/6UKoM6clPekL+LoAiHMCiQU2hgirKL5G0mKc5Z0ygIhQXfb1+DTRDM0mu6Ecdv4q8g=="], @@ -1554,9 +1587,9 @@ "typed-array-length": ["typed-array-length@1.0.7", "", { "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "is-typed-array": "^1.1.13", "possible-typed-array-names": "^1.0.0", "reflect.getprototypeof": "^1.0.6" } }, "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg=="], - "typescript": ["typescript@6.0.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ=="], + "typescript": ["typescript@6.0.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw=="], - "typescript-eslint": ["typescript-eslint@8.58.1", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.58.1", "@typescript-eslint/parser": "8.58.1", "@typescript-eslint/typescript-estree": "8.58.1", "@typescript-eslint/utils": "8.58.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-gf6/oHChByg9HJvhMO1iBexJh12AqqTfnuxscMDOVqfJW3htsdRJI/GfPpHTTcyeB8cSTUY2JcZmVgoyPqcrDg=="], + "typescript-eslint": ["typescript-eslint@8.58.2", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.58.2", "@typescript-eslint/parser": "8.58.2", "@typescript-eslint/typescript-estree": "8.58.2", "@typescript-eslint/utils": "8.58.2" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-V8iSng9mRbdZjl54VJ9NKr6ZB+dW0J3TzRXRGcSbLIej9jV86ZRtlYeTKDR/QLxXykocJ5icNzbsl2+5TzIvcQ=="], "unbash": ["unbash@2.2.0", "", {}, "sha512-X2wH19RAPZE3+ldGicOkoj/SIA83OIxcJ6Cuaw23hf8Xc6fQpvZXY0SftE2JgS0QhYLUG4uwodSI3R53keyh7w=="], @@ -1632,14 +1665,50 @@ "@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], + "@gcch/configuration-eslint/eslint": ["eslint@10.2.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.2", "@eslint/config-array": "^0.23.4", "@eslint/config-helpers": "^0.5.4", "@eslint/core": "^1.2.0", "@eslint/plugin-kit": "^0.7.0", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "ajv": "^6.14.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^9.1.2", "eslint-visitor-keys": "^5.0.1", "espree": "^11.2.0", "esquery": "^1.7.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "minimatch": "^10.2.4", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA=="], + + "@gcch/configuration-eslint/eslint-plugin-perfectionist": ["eslint-plugin-perfectionist@5.8.0", "", { "dependencies": { "@typescript-eslint/utils": "^8.58.0", "natural-orderby": "^5.0.0" }, "peerDependencies": { "eslint": "^8.45.0 || ^9.0.0 || ^10.0.0" } }, "sha512-k8uIptWIxkUclonCFGyDzgYs9NI+Qh0a7cUXS3L7IYZDEsjXuimFBVbxXPQQngWqMiaxJRwbtYB4smMGMqF+cw=="], + "@gcch/configuration-eslint/globals": ["globals@17.4.0", "", {}, "sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw=="], + "@gcch/configuration-eslint/typescript-eslint": ["typescript-eslint@8.58.1", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.58.1", "@typescript-eslint/parser": "8.58.1", "@typescript-eslint/typescript-estree": "8.58.1", "@typescript-eslint/utils": "8.58.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-gf6/oHChByg9HJvhMO1iBexJh12AqqTfnuxscMDOVqfJW3htsdRJI/GfPpHTTcyeB8cSTUY2JcZmVgoyPqcrDg=="], + + "@gcch/configuration-oxlint/eslint-plugin-perfectionist": ["eslint-plugin-perfectionist@5.8.0", "", { "dependencies": { "@typescript-eslint/utils": "^8.58.0", "natural-orderby": "^5.0.0" }, "peerDependencies": { "eslint": "^8.45.0 || ^9.0.0 || ^10.0.0" } }, "sha512-k8uIptWIxkUclonCFGyDzgYs9NI+Qh0a7cUXS3L7IYZDEsjXuimFBVbxXPQQngWqMiaxJRwbtYB4smMGMqF+cw=="], + "@gcch/configuration-oxlint/globals": ["globals@17.4.0", "", {}, "sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw=="], + "@gcch/configuration-oxlint/oxlint": ["oxlint@1.59.0", "", { "optionalDependencies": { "@oxlint/binding-android-arm-eabi": "1.59.0", "@oxlint/binding-android-arm64": "1.59.0", "@oxlint/binding-darwin-arm64": "1.59.0", "@oxlint/binding-darwin-x64": "1.59.0", "@oxlint/binding-freebsd-x64": "1.59.0", "@oxlint/binding-linux-arm-gnueabihf": "1.59.0", "@oxlint/binding-linux-arm-musleabihf": "1.59.0", "@oxlint/binding-linux-arm64-gnu": "1.59.0", "@oxlint/binding-linux-arm64-musl": "1.59.0", "@oxlint/binding-linux-ppc64-gnu": "1.59.0", "@oxlint/binding-linux-riscv64-gnu": "1.59.0", "@oxlint/binding-linux-riscv64-musl": "1.59.0", "@oxlint/binding-linux-s390x-gnu": "1.59.0", "@oxlint/binding-linux-x64-gnu": "1.59.0", "@oxlint/binding-linux-x64-musl": "1.59.0", "@oxlint/binding-openharmony-arm64": "1.59.0", "@oxlint/binding-win32-arm64-msvc": "1.59.0", "@oxlint/binding-win32-ia32-msvc": "1.59.0", "@oxlint/binding-win32-x64-msvc": "1.59.0" }, "peerDependencies": { "oxlint-tsgolint": ">=0.18.0" }, "optionalPeers": ["oxlint-tsgolint"], "bin": { "oxlint": "bin/oxlint" } }, "sha512-0xBLeGGjP4vD9pygRo8iuOkOzEU1MqOnfiOl7KYezL/QvWL8NUg6n03zXc7ZVqltiOpUxBk2zgHI3PnRIEdAvw=="], + + "@gcch/configuration-oxlint/oxlint-tsgolint": ["oxlint-tsgolint@0.20.0", "", { "optionalDependencies": { "@oxlint-tsgolint/darwin-arm64": "0.20.0", "@oxlint-tsgolint/darwin-x64": "0.20.0", "@oxlint-tsgolint/linux-arm64": "0.20.0", "@oxlint-tsgolint/linux-x64": "0.20.0", "@oxlint-tsgolint/win32-arm64": "0.20.0", "@oxlint-tsgolint/win32-x64": "0.20.0" }, "bin": { "tsgolint": "bin/tsgolint.js" } }, "sha512-/Uc9TQyN1l8w9QNvXtVHYtz+SzDJHKpb5X0UnHodl0BVzijUPk0LPlDOHAvogd1UI+iy9ZSF6gQxEqfzUxCULQ=="], + + "@gcch/configuration-prettier/prettier": ["prettier@3.8.2", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-8c3mgTe0ASwWAJK+78dpviD+A8EqhndQPUBpNUIPt6+xWlIigCwfN01lWr9MAede4uqXGTEKeQWTvzb3vjia0Q=="], + "@keyv/bigmap/keyv": ["keyv@5.6.0", "", { "dependencies": { "@keyv/serialize": "^1.1.1" } }, "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw=="], + "@typescript-eslint/eslint-plugin/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.58.2", "", { "dependencies": { "@typescript-eslint/types": "8.58.2", "@typescript-eslint/visitor-keys": "8.58.2" } }, "sha512-SgmyvDPexWETQek+qzZnrG6844IaO02UVyOLhI4wpo82dpZJY9+6YZCKAMFzXb7qhx37mFK1QcPQ18tud+vo6Q=="], + + "@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.58.2", "", { "dependencies": { "@typescript-eslint/types": "8.58.2", "@typescript-eslint/typescript-estree": "8.58.2", "@typescript-eslint/utils": "8.58.2", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-Z7EloNR/B389FvabdGeTo2XMs4W9TjtPiO9DAsmT0yom0bwlPyRjkJ1uCdW1DvrrrYP50AJZ9Xc3sByZA9+dcg=="], + + "@typescript-eslint/eslint-plugin/@typescript-eslint/utils": ["@typescript-eslint/utils@8.58.2", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/scope-manager": "8.58.2", "@typescript-eslint/types": "8.58.2", "@typescript-eslint/typescript-estree": "8.58.2" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-QZfjHNEzPY8+l0+fIXMvuQ2sJlplB4zgDZvA+NmvZsZv3EQwOcc1DuIU1VJUTWZ/RKouBMhDyNaBMx4sWvrzRA=="], + "@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], + "@typescript-eslint/parser/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.58.2", "", { "dependencies": { "@typescript-eslint/types": "8.58.2", "@typescript-eslint/visitor-keys": "8.58.2" } }, "sha512-SgmyvDPexWETQek+qzZnrG6844IaO02UVyOLhI4wpo82dpZJY9+6YZCKAMFzXb7qhx37mFK1QcPQ18tud+vo6Q=="], + + "@typescript-eslint/parser/@typescript-eslint/types": ["@typescript-eslint/types@8.58.2", "", {}, "sha512-9TukXyATBQf/Jq9AMQXfvurk+G5R2MwfqQGDR2GzGz28HvY/lXNKGhkY+6IOubwcquikWk5cjlgPvD2uAA7htQ=="], + + "@typescript-eslint/project-service/@typescript-eslint/types": ["@typescript-eslint/types@8.58.2", "", {}, "sha512-9TukXyATBQf/Jq9AMQXfvurk+G5R2MwfqQGDR2GzGz28HvY/lXNKGhkY+6IOubwcquikWk5cjlgPvD2uAA7htQ=="], + + "@typescript-eslint/scope-manager/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.58.1", "", { "dependencies": { "@typescript-eslint/types": "8.58.1", "eslint-visitor-keys": "^5.0.0" } }, "sha512-y+vH7QE8ycjoa0bWciFg7OpFcipUuem1ujhrdLtq1gByKwfbC7bPeKsiny9e0urg93DqwGcHey+bGRKCnF1nZQ=="], + + "@typescript-eslint/type-utils/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.58.1", "", { "dependencies": { "@typescript-eslint/project-service": "8.58.1", "@typescript-eslint/tsconfig-utils": "8.58.1", "@typescript-eslint/types": "8.58.1", "@typescript-eslint/visitor-keys": "8.58.1", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-w4w7WR7GHOjqqPnvAYbazq+Y5oS68b9CzasGtnd6jIeOIeKUzYzupGTB2T4LTPSv4d+WPeccbxuneTFHYgAAWg=="], + + "@typescript-eslint/typescript-estree/@typescript-eslint/types": ["@typescript-eslint/types@8.58.2", "", {}, "sha512-9TukXyATBQf/Jq9AMQXfvurk+G5R2MwfqQGDR2GzGz28HvY/lXNKGhkY+6IOubwcquikWk5cjlgPvD2uAA7htQ=="], + + "@typescript-eslint/utils/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.58.1", "", { "dependencies": { "@typescript-eslint/project-service": "8.58.1", "@typescript-eslint/tsconfig-utils": "8.58.1", "@typescript-eslint/types": "8.58.1", "@typescript-eslint/visitor-keys": "8.58.1", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-w4w7WR7GHOjqqPnvAYbazq+Y5oS68b9CzasGtnd6jIeOIeKUzYzupGTB2T4LTPSv4d+WPeccbxuneTFHYgAAWg=="], + + "@typescript-eslint/visitor-keys/@typescript-eslint/types": ["@typescript-eslint/types@8.58.2", "", {}, "sha512-9TukXyATBQf/Jq9AMQXfvurk+G5R2MwfqQGDR2GzGz28HvY/lXNKGhkY+6IOubwcquikWk5cjlgPvD2uAA7htQ=="], + "astro-eslint-parser/eslint-scope": ["eslint-scope@8.4.0", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg=="], "astro-eslint-parser/eslint-visitor-keys": ["eslint-visitor-keys@4.2.1", "", {}, "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ=="], @@ -1648,6 +1717,8 @@ "babel-plugin-polyfill-corejs2/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + "browserslist/caniuse-lite": ["caniuse-lite@1.0.30001787", "", {}, "sha512-mNcrMN9KeI68u7muanUpEejSLghOKlVhRqS/Za2IeyGllJ9I9otGpR9g3nsw7n4W378TE/LyIteA0+/FOZm4Kg=="], + "browserslist-to-esbuild/meow": ["meow@13.2.0", "", {}, "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA=="], "cacheable/keyv": ["keyv@5.6.0", "", { "dependencies": { "@keyv/serialize": "^1.1.1" } }, "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw=="], @@ -1660,8 +1731,12 @@ "eslint-plugin-jsx-a11y/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], + "eslint-plugin-perfectionist/@typescript-eslint/utils": ["@typescript-eslint/utils@8.58.2", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/scope-manager": "8.58.2", "@typescript-eslint/types": "8.58.2", "@typescript-eslint/typescript-estree": "8.58.2" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-QZfjHNEzPY8+l0+fIXMvuQ2sJlplB4zgDZvA+NmvZsZv3EQwOcc1DuIU1VJUTWZ/RKouBMhDyNaBMx4sWvrzRA=="], + "eslint-plugin-sonarjs/globals": ["globals@17.4.0", "", {}, "sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw=="], + "eslint-plugin-sonarjs/typescript": ["typescript@6.0.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ=="], + "eslint-plugin-unicorn/globals": ["globals@16.5.0", "", {}, "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ=="], "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], @@ -1676,6 +1751,8 @@ "micromatch/picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="], + "prettier-plugin-ini/prettier": ["prettier@3.8.2", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-8c3mgTe0ASwWAJK+78dpviD+A8EqhndQPUBpNUIPt6+xWlIigCwfN01lWr9MAede4uqXGTEKeQWTvzb3vjia0Q=="], + "qified/hookified": ["hookified@2.1.1", "", {}, "sha512-AHb76R16GB5EsPBE2J7Ko5kiEyXwviB9P5SMrAKcuAu4vJPZttViAbj9+tZeaQE5zjDme+1vcHP78Yj/WoAveA=="], "rolldown/@oxc-project/types": ["@oxc-project/types@0.124.0", "", {}, "sha512-VBFWMTBvHxS11Z5Lvlr3IWgrwhMTXV+Md+EQF0Xf60+wAdsGFTBx7X7K/hP4pi8N7dcm1RvcHwDxZ16Qx8keUg=="], @@ -1694,10 +1771,90 @@ "table/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "typescript-eslint/@typescript-eslint/utils": ["@typescript-eslint/utils@8.58.2", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/scope-manager": "8.58.2", "@typescript-eslint/types": "8.58.2", "@typescript-eslint/typescript-estree": "8.58.2" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-QZfjHNEzPY8+l0+fIXMvuQ2sJlplB4zgDZvA+NmvZsZv3EQwOcc1DuIU1VJUTWZ/RKouBMhDyNaBMx4sWvrzRA=="], + "vite/fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + "@gcch/configuration-eslint/typescript-eslint/@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.58.1", "", { "dependencies": { "@eslint-community/regexpp": "^4.12.2", "@typescript-eslint/scope-manager": "8.58.1", "@typescript-eslint/type-utils": "8.58.1", "@typescript-eslint/utils": "8.58.1", "@typescript-eslint/visitor-keys": "8.58.1", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.58.1", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-eSkwoemjo76bdXl2MYqtxg51HNwUSkWfODUOQ3PaTLZGh9uIWWFZIjyjaJnex7wXDu+TRx+ATsnSxdN9YWfRTQ=="], + + "@gcch/configuration-eslint/typescript-eslint/@typescript-eslint/parser": ["@typescript-eslint/parser@8.58.1", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.58.1", "@typescript-eslint/types": "8.58.1", "@typescript-eslint/typescript-estree": "8.58.1", "@typescript-eslint/visitor-keys": "8.58.1", "debug": "^4.4.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-gGkiNMPqerb2cJSVcruigx9eHBlLG14fSdPdqMoOcBfh+vvn4iCq2C8MzUB89PrxOXk0y3GZ1yIWb9aOzL93bw=="], + + "@gcch/configuration-eslint/typescript-eslint/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.58.1", "", { "dependencies": { "@typescript-eslint/project-service": "8.58.1", "@typescript-eslint/tsconfig-utils": "8.58.1", "@typescript-eslint/types": "8.58.1", "@typescript-eslint/visitor-keys": "8.58.1", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-w4w7WR7GHOjqqPnvAYbazq+Y5oS68b9CzasGtnd6jIeOIeKUzYzupGTB2T4LTPSv4d+WPeccbxuneTFHYgAAWg=="], + + "@gcch/configuration-oxlint/oxlint/@oxlint/binding-android-arm-eabi": ["@oxlint/binding-android-arm-eabi@1.59.0", "", { "os": "android", "cpu": "arm" }, "sha512-etYDw/UaEv936AQUd/CRMBVd+e+XuuU6wC+VzOv1STvsTyZenLChepLWqLtnyTTp4YMlM22ypzogDDwqYxv5cg=="], + + "@gcch/configuration-oxlint/oxlint/@oxlint/binding-android-arm64": ["@oxlint/binding-android-arm64@1.59.0", "", { "os": "android", "cpu": "arm64" }, "sha512-TgLc7XVLKH2a4h8j3vn1MDjfK33i9MY60f/bKhRGWyVzbk5LCZ4X01VZG7iHrMmi5vYbAp8//Ponigx03CLsdw=="], + + "@gcch/configuration-oxlint/oxlint/@oxlint/binding-darwin-arm64": ["@oxlint/binding-darwin-arm64@1.59.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-DXyFPf5ZKldMLloRHx/B9fsxsiTQomaw7cmEW3YIJko2HgCh+GUhp9gGYwHrqlLJPsEe3dYj9JebjX92D3j3AA=="], + + "@gcch/configuration-oxlint/oxlint/@oxlint/binding-darwin-x64": ["@oxlint/binding-darwin-x64@1.59.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-LgvrsdgVLX1qWqIEmNsSmMXJhpAWdtUQ0M+oR0CySwi+9IHWyOGuIL8w8+u/kbZNMyZr4WUyYB5i0+D+AKgkLg=="], + + "@gcch/configuration-oxlint/oxlint/@oxlint/binding-freebsd-x64": ["@oxlint/binding-freebsd-x64@1.59.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-bOJhqX/ny4hrFuTPlyk8foSRx/vLRpxJh0jOOKN2NWW6FScXHPAA5rQbrwdQPcgGB5V8Ua51RS03fke8ssBcug=="], + + "@gcch/configuration-oxlint/oxlint/@oxlint/binding-linux-arm-gnueabihf": ["@oxlint/binding-linux-arm-gnueabihf@1.59.0", "", { "os": "linux", "cpu": "arm" }, "sha512-vVUXxYMF9trXCsz4m9H6U0IjehosVHxBzVgJUxly1uz4W1PdDyicaBnpC0KRXsHYretLVe+uS9pJy8iM57Kujw=="], + + "@gcch/configuration-oxlint/oxlint/@oxlint/binding-linux-arm-musleabihf": ["@oxlint/binding-linux-arm-musleabihf@1.59.0", "", { "os": "linux", "cpu": "arm" }, "sha512-TULQW8YBPGRWg5yZpFPL54HLOnJ3/HiX6VenDPi6YfxB/jlItwSMFh3/hCeSNbh+DAMaE1Py0j5MOaivHkI/9Q=="], + + "@gcch/configuration-oxlint/oxlint/@oxlint/binding-linux-arm64-gnu": ["@oxlint/binding-linux-arm64-gnu@1.59.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-Gt54Y4eqSgYJ90xipm24xeyaPV854706o/kiT8oZvUt3VDY7qqxdqyGqchMaujd87ib+/MXvnl9WkK8Cc1BExg=="], + + "@gcch/configuration-oxlint/oxlint/@oxlint/binding-linux-arm64-musl": ["@oxlint/binding-linux-arm64-musl@1.59.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-3CtsKp7NFB3OfqQzbuAecrY7GIZeiv7AD+xutU4tefVQzlfmTI7/ygWLrvkzsDEjTlMq41rYHxgsn6Yh8tybmA=="], + + "@gcch/configuration-oxlint/oxlint/@oxlint/binding-linux-ppc64-gnu": ["@oxlint/binding-linux-ppc64-gnu@1.59.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-K0diOpT3ncDmOfl9I1HuvpEsAuTxkts0VYwIv/w6Xiy9CdwyPBVX88Ga9l8VlGgMrwBMnSY4xIvVlVY/fkQk7Q=="], + + "@gcch/configuration-oxlint/oxlint/@oxlint/binding-linux-riscv64-gnu": ["@oxlint/binding-linux-riscv64-gnu@1.59.0", "", { "os": "linux", "cpu": "none" }, "sha512-xAU7+QDU6kTJJ7mJLOGgo7oOjtAtkKyFZ0Yjdb5cEo3DiCCPFLvyr08rWiQh6evZ7RiUTf+o65NY/bqttzJiQQ=="], + + "@gcch/configuration-oxlint/oxlint/@oxlint/binding-linux-riscv64-musl": ["@oxlint/binding-linux-riscv64-musl@1.59.0", "", { "os": "linux", "cpu": "none" }, "sha512-KUmZmKlTTyauOnvUNVxK7G40sSSx0+w5l1UhaGsC6KPpOYHenx2oqJTnabmpLJicok7IC+3Y6fXAUOMyexaeJQ=="], + + "@gcch/configuration-oxlint/oxlint/@oxlint/binding-linux-s390x-gnu": ["@oxlint/binding-linux-s390x-gnu@1.59.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-4usRxC8gS0PGdkHnRmwJt/4zrQNZyk6vL0trCxwZSsAKM+OxhB8nKiR+mhjdBbl8lbMh2gc3bZpNN/ik8c4c2A=="], + + "@gcch/configuration-oxlint/oxlint/@oxlint/binding-linux-x64-gnu": ["@oxlint/binding-linux-x64-gnu@1.59.0", "", { "os": "linux", "cpu": "x64" }, "sha512-s/rNE2gDmbwAOOP493xk2X7M8LZfI1LJFSSW1+yanz3vuQCFPiHkx4GY+O1HuLUDtkzGlhtMrIcxxzyYLv308w=="], + + "@gcch/configuration-oxlint/oxlint/@oxlint/binding-linux-x64-musl": ["@oxlint/binding-linux-x64-musl@1.59.0", "", { "os": "linux", "cpu": "x64" }, "sha512-+yYj1udJa2UvvIUmEm0IcKgc0UlPMgz0nsSTvkPL2y6n0uU5LgIHSwVu4AHhrve6j9BpVSoRksnz8c9QcvITJA=="], + + "@gcch/configuration-oxlint/oxlint/@oxlint/binding-openharmony-arm64": ["@oxlint/binding-openharmony-arm64@1.59.0", "", { "os": "none", "cpu": "arm64" }, "sha512-bUplUb48LYsB3hHlQXP2ZMOenpieWoOyppLAnnAhuPag3MGPnt+7caxE3w/Vl9wpQsTA3gzLntQi9rxWrs7Xqg=="], + + "@gcch/configuration-oxlint/oxlint/@oxlint/binding-win32-arm64-msvc": ["@oxlint/binding-win32-arm64-msvc@1.59.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-/HLsLuz42rWl7h7ePdmMTpHm2HIDmPtcEMYgm5BBEHiEiuNOrzMaUpd2z7UnNni5LGN9obJy2YoAYBLXQwazrA=="], + + "@gcch/configuration-oxlint/oxlint/@oxlint/binding-win32-ia32-msvc": ["@oxlint/binding-win32-ia32-msvc@1.59.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-rUPy+JnanpPwV/aJCPnxAD1fW50+XPI0VkWr7f0vEbqcdsS8NpB24Rw6RsS7SdpFv8Dw+8ugCwao5nCFbqOUSg=="], + + "@gcch/configuration-oxlint/oxlint/@oxlint/binding-win32-x64-msvc": ["@oxlint/binding-win32-x64-msvc@1.59.0", "", { "os": "win32", "cpu": "x64" }, "sha512-xkE7puteDS/vUyRngLXW0t8WgdWoS/tfxXjhP/P7SMqPDx+hs44SpssO3h3qmTqECYEuXBUPzcAw5257Ka+ofA=="], + + "@gcch/configuration-oxlint/oxlint-tsgolint/@oxlint-tsgolint/darwin-arm64": ["@oxlint-tsgolint/darwin-arm64@0.20.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-KKQcIHZHMxqpHUA1VXIbOG6chNCFkUWbQy6M+AFVtPKkA/3xAeJkJ3njoV66bfzwPHRcWQO+kcj5XqtbkjakoA=="], + + "@gcch/configuration-oxlint/oxlint-tsgolint/@oxlint-tsgolint/darwin-x64": ["@oxlint-tsgolint/darwin-x64@0.20.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-7HeVMuclGfG+NLZi2ybY0T4fMI7/XxO/208rJk+zEIloKkVnlh11Wd241JMGwgNFXn+MLJbOqOfojDb2Dt4L1g=="], + + "@gcch/configuration-oxlint/oxlint-tsgolint/@oxlint-tsgolint/linux-arm64": ["@oxlint-tsgolint/linux-arm64@0.20.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-zxhUwz+WSxE6oWlZLK2z2ps9yC6ebmgoYmjAl0Oa48+GqkZ56NVgo+wb8DURNv6xrggzHStQxqQxe3mK51HZag=="], + + "@gcch/configuration-oxlint/oxlint-tsgolint/@oxlint-tsgolint/linux-x64": ["@oxlint-tsgolint/linux-x64@0.20.0", "", { "os": "linux", "cpu": "x64" }, "sha512-/1l6FnahC9im8PK+Ekkx/V3yetO/PzZnJegE2FXcv/iXEhbeVxP/ouiTYcUQu9shT1FWJCSNti1VJHH+21Y1dg=="], + + "@gcch/configuration-oxlint/oxlint-tsgolint/@oxlint-tsgolint/win32-arm64": ["@oxlint-tsgolint/win32-arm64@0.20.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-oPZ5Yz8sVdo7P/5q+i3IKeix31eFZ55JAPa1+RGPoe9PoaYVsdMvR6Jvib6YtrqoJnFPlg3fjEjlEPL8VBKYJA=="], + + "@gcch/configuration-oxlint/oxlint-tsgolint/@oxlint-tsgolint/win32-x64": ["@oxlint-tsgolint/win32-x64@0.20.0", "", { "os": "win32", "cpu": "x64" }, "sha512-4stx8RHj3SP9vQyRF/yZbz5igtPvYMEUR8CUoha4BVNZihi39DpCR8qkU7lpjB5Ga1DRMo2pHaA4bdTOMaY4mw=="], + + "@typescript-eslint/eslint-plugin/@typescript-eslint/scope-manager/@typescript-eslint/types": ["@typescript-eslint/types@8.58.2", "", {}, "sha512-9TukXyATBQf/Jq9AMQXfvurk+G5R2MwfqQGDR2GzGz28HvY/lXNKGhkY+6IOubwcquikWk5cjlgPvD2uAA7htQ=="], + + "@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils/@typescript-eslint/types": ["@typescript-eslint/types@8.58.2", "", {}, "sha512-9TukXyATBQf/Jq9AMQXfvurk+G5R2MwfqQGDR2GzGz28HvY/lXNKGhkY+6IOubwcquikWk5cjlgPvD2uAA7htQ=="], + + "@typescript-eslint/eslint-plugin/@typescript-eslint/utils/@typescript-eslint/types": ["@typescript-eslint/types@8.58.2", "", {}, "sha512-9TukXyATBQf/Jq9AMQXfvurk+G5R2MwfqQGDR2GzGz28HvY/lXNKGhkY+6IOubwcquikWk5cjlgPvD2uAA7htQ=="], + + "@typescript-eslint/type-utils/@typescript-eslint/typescript-estree/@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.58.1", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.58.1", "@typescript-eslint/types": "^8.58.1", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-gfQ8fk6cxhtptek+/8ZIqw8YrRW5048Gug8Ts5IYcMLCw18iUgrZAEY/D7s4hkI0FxEfGakKuPK/XUMPzPxi5g=="], + + "@typescript-eslint/type-utils/@typescript-eslint/typescript-estree/@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.58.1", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-JAr2hOIct2Q+qk3G+8YFfqkqi7sC86uNryT+2i5HzMa2MPjw4qNFvtjnw1IiA1rP7QhNKVe21mSSLaSjwA1Olw=="], + + "@typescript-eslint/type-utils/@typescript-eslint/typescript-estree/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.58.1", "", { "dependencies": { "@typescript-eslint/types": "8.58.1", "eslint-visitor-keys": "^5.0.0" } }, "sha512-y+vH7QE8ycjoa0bWciFg7OpFcipUuem1ujhrdLtq1gByKwfbC7bPeKsiny9e0urg93DqwGcHey+bGRKCnF1nZQ=="], + + "@typescript-eslint/utils/@typescript-eslint/typescript-estree/@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.58.1", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.58.1", "@typescript-eslint/types": "^8.58.1", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-gfQ8fk6cxhtptek+/8ZIqw8YrRW5048Gug8Ts5IYcMLCw18iUgrZAEY/D7s4hkI0FxEfGakKuPK/XUMPzPxi5g=="], + + "@typescript-eslint/utils/@typescript-eslint/typescript-estree/@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.58.1", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-JAr2hOIct2Q+qk3G+8YFfqkqi7sC86uNryT+2i5HzMa2MPjw4qNFvtjnw1IiA1rP7QhNKVe21mSSLaSjwA1Olw=="], + + "@typescript-eslint/utils/@typescript-eslint/typescript-estree/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.58.1", "", { "dependencies": { "@typescript-eslint/types": "8.58.1", "eslint-visitor-keys": "^5.0.0" } }, "sha512-y+vH7QE8ycjoa0bWciFg7OpFcipUuem1ujhrdLtq1gByKwfbC7bPeKsiny9e0urg93DqwGcHey+bGRKCnF1nZQ=="], + "eslint-plugin-jsx-a11y/minimatch/brace-expansion": ["brace-expansion@1.1.13", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w=="], + "eslint-plugin-perfectionist/@typescript-eslint/utils/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.58.2", "", { "dependencies": { "@typescript-eslint/types": "8.58.2", "@typescript-eslint/visitor-keys": "8.58.2" } }, "sha512-SgmyvDPexWETQek+qzZnrG6844IaO02UVyOLhI4wpo82dpZJY9+6YZCKAMFzXb7qhx37mFK1QcPQ18tud+vo6Q=="], + + "eslint-plugin-perfectionist/@typescript-eslint/utils/@typescript-eslint/types": ["@typescript-eslint/types@8.58.2", "", {}, "sha512-9TukXyATBQf/Jq9AMQXfvurk+G5R2MwfqQGDR2GzGz28HvY/lXNKGhkY+6IOubwcquikWk5cjlgPvD2uAA7htQ=="], + "stylelint/file-entry-cache/flat-cache": ["flat-cache@6.1.22", "", { "dependencies": { "cacheable": "^2.3.4", "flatted": "^3.4.2", "hookified": "^1.15.0" } }, "sha512-N2dnzVJIphnNsjHcrxGW7DePckJ6haPrSFqpsBUhHYgwtKGVq4JrBGielEGD2fCVnsGm1zlBVZ8wGhkyuetgug=="], "table/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], @@ -1706,6 +1863,22 @@ "table/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "typescript-eslint/@typescript-eslint/utils/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.58.2", "", { "dependencies": { "@typescript-eslint/types": "8.58.2", "@typescript-eslint/visitor-keys": "8.58.2" } }, "sha512-SgmyvDPexWETQek+qzZnrG6844IaO02UVyOLhI4wpo82dpZJY9+6YZCKAMFzXb7qhx37mFK1QcPQ18tud+vo6Q=="], + + "typescript-eslint/@typescript-eslint/utils/@typescript-eslint/types": ["@typescript-eslint/types@8.58.2", "", {}, "sha512-9TukXyATBQf/Jq9AMQXfvurk+G5R2MwfqQGDR2GzGz28HvY/lXNKGhkY+6IOubwcquikWk5cjlgPvD2uAA7htQ=="], + + "@gcch/configuration-eslint/typescript-eslint/@typescript-eslint/eslint-plugin/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.58.1", "", { "dependencies": { "@typescript-eslint/types": "8.58.1", "eslint-visitor-keys": "^5.0.0" } }, "sha512-y+vH7QE8ycjoa0bWciFg7OpFcipUuem1ujhrdLtq1gByKwfbC7bPeKsiny9e0urg93DqwGcHey+bGRKCnF1nZQ=="], + + "@gcch/configuration-eslint/typescript-eslint/@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], + + "@gcch/configuration-eslint/typescript-eslint/@typescript-eslint/parser/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.58.1", "", { "dependencies": { "@typescript-eslint/types": "8.58.1", "eslint-visitor-keys": "^5.0.0" } }, "sha512-y+vH7QE8ycjoa0bWciFg7OpFcipUuem1ujhrdLtq1gByKwfbC7bPeKsiny9e0urg93DqwGcHey+bGRKCnF1nZQ=="], + + "@gcch/configuration-eslint/typescript-eslint/@typescript-eslint/typescript-estree/@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.58.1", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.58.1", "@typescript-eslint/types": "^8.58.1", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-gfQ8fk6cxhtptek+/8ZIqw8YrRW5048Gug8Ts5IYcMLCw18iUgrZAEY/D7s4hkI0FxEfGakKuPK/XUMPzPxi5g=="], + + "@gcch/configuration-eslint/typescript-eslint/@typescript-eslint/typescript-estree/@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.58.1", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-JAr2hOIct2Q+qk3G+8YFfqkqi7sC86uNryT+2i5HzMa2MPjw4qNFvtjnw1IiA1rP7QhNKVe21mSSLaSjwA1Olw=="], + + "@gcch/configuration-eslint/typescript-eslint/@typescript-eslint/typescript-estree/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.58.1", "", { "dependencies": { "@typescript-eslint/types": "8.58.1", "eslint-visitor-keys": "^5.0.0" } }, "sha512-y+vH7QE8ycjoa0bWciFg7OpFcipUuem1ujhrdLtq1gByKwfbC7bPeKsiny9e0urg93DqwGcHey+bGRKCnF1nZQ=="], + "eslint-plugin-jsx-a11y/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], } } diff --git a/composer.lock b/composer.lock index 745e769e..20877acf 100644 --- a/composer.lock +++ b/composer.lock @@ -585,7 +585,7 @@ }, { "name": "illuminate/collections", - "version": "v13.4.0", + "version": "v13.5.0", "source": { "type": "git", "url": "https://github.com/illuminate/collections.git", @@ -644,7 +644,7 @@ }, { "name": "illuminate/conditionable", - "version": "v13.4.0", + "version": "v13.5.0", "source": { "type": "git", "url": "https://github.com/illuminate/conditionable.git", @@ -690,16 +690,16 @@ }, { "name": "illuminate/contracts", - "version": "v13.4.0", + "version": "v13.5.0", "source": { "type": "git", "url": "https://github.com/illuminate/contracts.git", - "reference": "8796cc5f30124b81210ae2f3b2ae0f69ad4fc7f8" + "reference": "022d9816b4ff052a3db5946a86be3cd2e224db0f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/contracts/zipball/8796cc5f30124b81210ae2f3b2ae0f69ad4fc7f8", - "reference": "8796cc5f30124b81210ae2f3b2ae0f69ad4fc7f8", + "url": "https://api.github.com/repos/illuminate/contracts/zipball/022d9816b4ff052a3db5946a86be3cd2e224db0f", + "reference": "022d9816b4ff052a3db5946a86be3cd2e224db0f", "shasum": "" }, "require": { @@ -734,11 +734,11 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2026-03-26T17:13:01+00:00" + "time": "2026-04-12T17:46:48+00:00" }, { "name": "illuminate/macroable", - "version": "v13.4.0", + "version": "v13.5.0", "source": { "type": "git", "url": "https://github.com/illuminate/macroable.git", @@ -784,7 +784,7 @@ }, { "name": "illuminate/reflection", - "version": "v13.4.0", + "version": "v13.5.0", "source": { "type": "git", "url": "https://github.com/illuminate/reflection.git", @@ -835,16 +835,16 @@ }, { "name": "illuminate/support", - "version": "v13.4.0", + "version": "v13.5.0", "source": { "type": "git", "url": "https://github.com/illuminate/support.git", - "reference": "e7ce0496cae80c3e1aa72e37f09335a6454846dc" + "reference": "0e8642a79d385c644a75400cad176b042242c894" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/support/zipball/e7ce0496cae80c3e1aa72e37f09335a6454846dc", - "reference": "e7ce0496cae80c3e1aa72e37f09335a6454846dc", + "url": "https://api.github.com/repos/illuminate/support/zipball/0e8642a79d385c644a75400cad176b042242c894", + "reference": "0e8642a79d385c644a75400cad176b042242c894", "shasum": "" }, "require": { @@ -910,7 +910,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2026-04-07T13:34:38+00:00" + "time": "2026-04-13T14:52:53+00:00" }, { "name": "laravel/helpers", @@ -2506,7 +2506,7 @@ }, { "name": "symfony/polyfill-ctype", - "version": "v1.34.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", @@ -2565,7 +2565,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.34.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.36.0" }, "funding": [ { @@ -2589,7 +2589,7 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.34.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", @@ -2650,7 +2650,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.34.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.36.0" }, "funding": [ { @@ -2674,7 +2674,7 @@ }, { "name": "symfony/polyfill-php80", - "version": "v1.34.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", @@ -2734,7 +2734,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.34.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.36.0" }, "funding": [ { @@ -2758,7 +2758,7 @@ }, { "name": "symfony/polyfill-php84", - "version": "v1.34.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php84.git", @@ -2814,7 +2814,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php84/tree/v1.34.0" + "source": "https://github.com/symfony/polyfill-php84/tree/v1.36.0" }, "funding": [ { @@ -2838,7 +2838,7 @@ }, { "name": "symfony/polyfill-php85", - "version": "v1.34.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php85.git", @@ -2894,7 +2894,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php85/tree/v1.34.0" + "source": "https://github.com/symfony/polyfill-php85/tree/v1.36.0" }, "funding": [ { @@ -2918,7 +2918,7 @@ }, { "name": "symfony/polyfill-uuid", - "version": "v1.34.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-uuid.git", @@ -2977,7 +2977,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.34.0" + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.36.0" }, "funding": [ { @@ -3519,23 +3519,23 @@ }, { "name": "voku/portable-ascii", - "version": "2.0.3", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/voku/portable-ascii.git", - "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d" + "reference": "d870a33f0f79d2b4579740b0620200221ee44aeb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", - "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/d870a33f0f79d2b4579740b0620200221ee44aeb", + "reference": "d870a33f0f79d2b4579740b0620200221ee44aeb", "shasum": "" }, "require": { - "php": ">=7.0.0" + "php": ">=7.1.0" }, "require-dev": { - "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" + "phpunit/phpunit": "~8.5 || ~9.6 || ~10.5 || ~11.5" }, "suggest": { "ext-intl": "Use Intl for transliterator_transliterate() support" @@ -3565,7 +3565,7 @@ ], "support": { "issues": "https://github.com/voku/portable-ascii/issues", - "source": "https://github.com/voku/portable-ascii/tree/2.0.3" + "source": "https://github.com/voku/portable-ascii/tree/2.1.0" }, "funding": [ { @@ -3589,19 +3589,19 @@ "type": "tidelift" } ], - "time": "2024-11-21T01:49:47+00:00" + "time": "2026-04-16T23:10:39+00:00" }, { "name": "wpackagist-plugin/falcon", - "version": "2.9.3", + "version": "2.10.0", "source": { "type": "svn", "url": "https://plugins.svn.wordpress.org/falcon/", - "reference": "tags/2.9.3" + "reference": "tags/2.10.0" }, "dist": { "type": "zip", - "url": "https://downloads.wordpress.org/plugin/falcon.2.9.3.zip" + "url": "https://downloads.wordpress.org/plugin/falcon.2.10.0.zip" }, "require": { "composer/installers": "^1.0 || ^2.0" @@ -3701,15 +3701,15 @@ }, { "name": "wpackagist-plugin/woocommerce", - "version": "10.6.2", + "version": "10.7.0", "source": { "type": "svn", "url": "https://plugins.svn.wordpress.org/woocommerce/", - "reference": "tags/10.6.2" + "reference": "tags/10.7.0" }, "dist": { "type": "zip", - "url": "https://downloads.wordpress.org/plugin/woocommerce.10.6.2.zip" + "url": "https://downloads.wordpress.org/plugin/woocommerce.10.7.0.zip" }, "require": { "composer/installers": "^1.0 || ^2.0" @@ -3737,15 +3737,15 @@ }, { "name": "wpackagist-plugin/wp-mail-smtp", - "version": "4.7.1", + "version": "4.8.0", "source": { "type": "svn", "url": "https://plugins.svn.wordpress.org/wp-mail-smtp/", - "reference": "tags/4.7.1" + "reference": "tags/4.8.0" }, "dist": { "type": "zip", - "url": "https://downloads.wordpress.org/plugin/wp-mail-smtp.4.7.1.zip" + "url": "https://downloads.wordpress.org/plugin/wp-mail-smtp.4.8.0.zip" }, "require": { "composer/installers": "^1.0 || ^2.0" @@ -4516,11 +4516,11 @@ }, { "name": "phpstan/phpstan", - "version": "2.1.46", + "version": "2.1.50", "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/a193923fc2d6325ef4e741cf3af8c3e8f54dbf25", - "reference": "a193923fc2d6325ef4e741cf3af8c3e8f54dbf25", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/d452086fb4cf648c6b2d8cf3b639351f79e4f3e2", + "reference": "d452086fb4cf648c6b2d8cf3b639351f79e4f3e2", "shasum": "" }, "require": { @@ -4565,7 +4565,7 @@ "type": "github" } ], - "time": "2026-04-01T09:25:14+00:00" + "time": "2026-04-17T13:10:32+00:00" }, { "name": "psr/event-dispatcher", @@ -5199,12 +5199,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "d830a949e5c180e97c2245221daf8b589552cc2c" + "reference": "7d0034bc560ba3be5d93736256a9a500c907c37a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/d830a949e5c180e97c2245221daf8b589552cc2c", - "reference": "d830a949e5c180e97c2245221daf8b589552cc2c", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/7d0034bc560ba3be5d93736256a9a500c907c37a", + "reference": "7d0034bc560ba3be5d93736256a9a500c907c37a", "shasum": "" }, "conflict": { @@ -5334,7 +5334,7 @@ "codingms/modules": "<4.3.11|>=5,<5.7.4|>=6,<6.4.2|>=7,<7.5.5", "commerceteam/commerce": ">=0.9.6,<0.9.9", "components/jquery": ">=1.0.3,<3.5", - "composer/composer": "<1.10.27|>=2,<2.2.26|>=2.3,<2.9.3", + "composer/composer": "<2.2.27|>=2.3,<2.9.6", "concrete5/concrete5": "<9.4.8", "concrete5/core": "<8.5.8|>=9,<9.1", "contao-components/mediaelement": ">=2.14.2,<2.21.1", @@ -5351,7 +5351,7 @@ "cpsit/typo3-mailqueue": "<0.4.5|>=0.5,<0.5.2", "craftcms/aws-s3": ">=2.0.2,<=2.2.4", "craftcms/azure-blob": ">=2.0.0.0-beta1,<=2.1", - "craftcms/cms": "<=4.17.7|>=5,<=5.9.13", + "craftcms/cms": "<=4.17.8|>=5,<5.9.15", "craftcms/commerce": ">=4,<4.11|>=5,<5.6", "craftcms/composer": ">=4.0.0.0-RC1-dev,<=4.10|>=5.0.0.0-RC1-dev,<=5.5.1", "craftcms/craft": ">=3.5,<=4.16.17|>=5.0.0.0-RC1-dev,<=5.8.21", @@ -5513,7 +5513,7 @@ "friendsoftypo3/openid": ">=4.5,<4.5.31|>=4.7,<4.7.16|>=6,<6.0.11|>=6.1,<6.1.6", "froala/wysiwyg-editor": "<=4.3", "frosh/adminer-platform": "<2.2.1", - "froxlor/froxlor": "<=2.3.4", + "froxlor/froxlor": "<2.3.6", "frozennode/administrator": "<=5.0.12", "fuel/core": "<1.8.1", "funadmin/funadmin": "<=7.1.0.0-RC4", @@ -5532,6 +5532,7 @@ "globalpayments/php-sdk": "<2", "goalgorilla/open_social": "<12.3.11|>=12.4,<12.4.10|>=13.0.0.0-alpha1,<13.0.0.0-alpha11", "gogentooss/samlbase": "<1.2.7", + "goodoneuz/pay-uz": "<=2.2.24", "google/protobuf": "<4.33.6", "gos/web-socket-bundle": "<1.10.4|>=2,<2.6.1|>=3,<3.3", "gp247/core": "<1.1.24", @@ -5594,6 +5595,7 @@ "jasig/phpcas": "<1.3.3", "jbartels/wec-map": "<3.0.3", "jcbrand/converse.js": "<3.3.3", + "joedolson/my-calendar": "<3.7.7", "joelbutcher/socialstream": "<5.6|>=6,<6.2", "johnbillion/query-monitor": "<3.20.4", "johnbillion/wp-crontrol": "<1.16.2|>=1.17,<1.19.2", @@ -5618,8 +5620,8 @@ "kelvinmo/simplejwt": "<=1.1", "kelvinmo/simplexrd": "<3.1.1", "kevinpapst/kimai2": "<1.16.7", - "khodakhah/nodcms": "<=3", - "kimai/kimai": "<=2.50", + "khodakhah/nodcms": "<=3.4.1", + "kimai/kimai": "<=2.53", "kitodo/presentation": "<3.2.3|>=3.3,<3.3.4", "klaviyo/magento2-extension": ">=1,<3", "knplabs/knp-snappy": "<=1.4.2", @@ -5637,7 +5639,7 @@ "laravel/fortify": "<1.11.1", "laravel/framework": "<10.48.29|>=11,<11.44.1|>=12,<12.1.1", "laravel/laravel": ">=5.4,<5.4.22", - "laravel/passport": "<13.7.1", + "laravel/passport": ">=13,<13.7.1", "laravel/pulse": "<1.3.1", "laravel/reverb": "<1.7", "laravel/socialite": ">=1,<2.0.10", @@ -5679,6 +5681,7 @@ "manogi/nova-tiptap": "<=3.2.6", "mantisbt/mantisbt": "<2.28.1", "marcwillmann/turn": "<0.3.3", + "markhuot/craftql": "<=1.3.7", "marshmallow/nova-tiptap": "<5.7", "matomo/matomo": "<1.11", "matyhtf/framework": "<3.0.6", @@ -5760,8 +5763,8 @@ "october/backend": "<1.1.2", "october/cms": "<1.0.469|==1.0.469|==1.0.471|==1.1.1", "october/october": "<3.7.5", - "october/rain": "<1.0.472|>=1.1,<1.1.2", - "october/system": "<=3.7.12|>=4,<=4.0.11", + "october/rain": "<=3.7.13|>=4,<=4.1.9", + "october/system": "<=3.7.13|>=4,<=4.1.9", "oliverklee/phpunit": "<3.5.15", "omeka/omeka-s": "<4.0.3", "onelogin/php-saml": "<2.21.1|>=3,<3.8.1|>=4,<4.3.1", @@ -5821,7 +5824,7 @@ "phpseclib/phpseclib": "<2.0.53|>=3,<3.0.51", "phpservermon/phpservermon": "<3.6", "phpsysinfo/phpsysinfo": "<3.4.3", - "phpunit/phpunit": "<8.5.52|>=9,<9.6.33|>=10,<10.5.62|>=11,<11.5.50|>=12,<12.5.8", + "phpunit/phpunit": "<12.5.22|>=13,<13.1.6", "phpwhois/phpwhois": "<=4.2.5", "phpxmlrpc/extras": "<0.6.1", "phpxmlrpc/phpxmlrpc": "<4.9.2", @@ -5840,7 +5843,7 @@ "pixelfed/pixelfed": "<0.12.5", "plotly/plotly.js": "<2.25.2", "pocketmine/bedrock-protocol": "<8.0.2", - "pocketmine/pocketmine-mp": "<5.41.1", + "pocketmine/pocketmine-mp": "<5.42.1", "pocketmine/raklib": ">=0.14,<0.14.6|>=0.15,<0.15.1", "pressbooks/pressbooks": "<5.18", "prestashop/autoupgrade": ">=4,<4.10.1", @@ -5856,7 +5859,7 @@ "prestashop/ps_facetedsearch": "<3.4.1", "prestashop/ps_linklist": "<3.1", "privatebin/privatebin": "<1.4|>=1.5,<1.7.4|>=1.7.7,<2.0.3", - "processwire/processwire": "<=3.0.246", + "processwire/processwire": "<=3.0.255", "propel/propel": ">=2.0.0.0-alpha1,<=2.0.0.0-alpha7", "propel/propel1": ">=1,<=1.7.1", "psy/psysh": "<=0.11.22|>=0.12,<=0.12.18", @@ -5894,6 +5897,7 @@ "rudloff/rtmpdump-bin": "<=2.3.1", "s-cart/core": "<=9.0.5", "s-cart/s-cart": "<6.9", + "s9y/serendipity": "<2.6", "sabberworm/php-css-parser": ">=1,<1.0.1|>=2,<2.0.1|>=3,<3.0.1|>=4,<4.0.1|>=5,<5.0.9|>=5.1,<5.1.3|>=5.2,<5.2.1|>=6,<6.0.2|>=7,<7.0.4|>=8,<8.0.1|>=8.1,<8.1.1|>=8.2,<8.2.1|>=8.3,<8.3.1", "sabre/dav": ">=1.6,<1.7.11|>=1.8,<1.8.9", "saloonphp/saloon": "<4", @@ -5914,7 +5918,7 @@ "shuchkin/simplexlsx": ">=1.0.12,<1.1.13", "silverstripe-australia/advancedreports": ">=1,<=2", "silverstripe/admin": "<1.13.19|>=2,<2.1.8", - "silverstripe/assets": ">=1,<1.11.1", + "silverstripe/assets": "<2.4.5|>=3,<3.1.3", "silverstripe/cms": "<4.11.3", "silverstripe/comments": ">=1.3,<3.1.1", "silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3", @@ -5967,9 +5971,9 @@ "starcitizentools/short-description": ">=4,<4.0.1", "starcitizentools/tabber-neue": ">=1.9.1,<2.7.2|>=3,<3.1.1", "starcitizenwiki/embedvideo": "<=4", - "statamic/cms": "<5.73.16|>=6,<6.7.2", + "statamic/cms": "<5.73.20|>=6,<6.13", "stormpath/sdk": "<9.9.99", - "studio-42/elfinder": "<=2.1.64", + "studio-42/elfinder": "<2.1.67", "studiomitte/friendlycaptcha": "<0.1.4", "subhh/libconnect": "<7.0.8|>=8,<8.1", "sukohi/surpass": "<1", @@ -6123,6 +6127,7 @@ "webcoast/deferred-image-processing": "<1.0.2", "webklex/laravel-imap": "<5.3", "webklex/php-imap": "<5.3", + "webonyx/graphql-php": "<=15.31.4", "webpa/webpa": "<3.1.2", "webreinvent/vaahcms": "<=2.3.1", "wikibase/wikibase": "<=1.39.3", @@ -6142,12 +6147,12 @@ "wpcloud/wp-stateless": "<3.2", "wpglobus/wpglobus": "<=1.9.6", "wpmetabox/meta-box": "<5.11.2", - "wwbn/avideo": "<=26", + "wwbn/avideo": "<=29", "xataface/xataface": "<3", "xpressengine/xpressengine": "<3.0.15", "yab/quarx": "<2.4.5", "yansongda/pay": "<=3.7.19", - "yeswiki/yeswiki": "<4.6", + "yeswiki/yeswiki": "<=4.6", "yetiforce/yetiforce-crm": "<6.5", "yidashi/yii2cmf": "<=2", "yii2mod/yii2-cms": "<1.9.2", @@ -6242,7 +6247,7 @@ "type": "tidelift" } ], - "time": "2026-04-10T21:13:58+00:00" + "time": "2026-04-18T09:19:46+00:00" }, { "name": "sebastian/diff", @@ -6785,7 +6790,7 @@ }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.34.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", @@ -6843,7 +6848,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.34.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.36.0" }, "funding": [ { @@ -6867,7 +6872,7 @@ }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.34.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", @@ -6928,7 +6933,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.34.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.36.0" }, "funding": [ { @@ -6952,7 +6957,7 @@ }, { "name": "symfony/polyfill-php81", - "version": "v1.34.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", @@ -7008,7 +7013,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.34.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.36.0" }, "funding": [ { diff --git a/package.json b/package.json index 2817ca75..0d306703 100755 --- a/package.json +++ b/package.json @@ -8,58 +8,60 @@ "main": "index.js", "keywords": [], "scripts": { - "knip": "knip" + "knip": "knip", + "prepare": "effect-tsgo patch" }, "dependencies": { "@mobily/ts-belt": "v4.0.0-rc.5", - "@sentry/browser": "^10.47.0", + "@sentry/browser": "^10.49.0", "a11y-dialog": "^8.1.5", - "effect": "^4.0.0-beta.48", + "effect": "^4.0.0-beta.51", "lit-html": "^3.3.2", "purify-ts": "2.1.2", "ts-pattern": "^5.9.0", "valibot": "1.1.0" }, "devDependencies": { - "@effect/language-service": "^0.85.0", + "@effect/language-service": "^0.85.1", + "@effect/tsgo": "0.4.0", "@gcch/configuration-eslint": "git+https://git.gcch.fr/gcch/configuration-eslint#62ee424274", "@gcch/configuration-oxlint": "git+https://git.gcch.fr/gcch/configuration-oxlint#0968f683", "@gcch/configuration-prettier": "git+https://git.gcch.fr/gcch/configuration-prettier#8de937e801", "@playwright/test": "^1.59.1", - "@sentry/core": "^10.47.0", - "@types/bun": "^1.3.11", - "@types/node": "^25.5.2", + "@sentry/core": "^10.49.0", + "@types/bun": "^1.3.12", + "@types/node": "^25.6.0", + "@typescript/native-preview": "latest", "@vitejs/plugin-legacy": "^8.0.1", "better-typescript-lib": "^2.12.0", "browserslist": "^4.28.2", - "caniuse-lite": "^1.0.30001787", - "eslint": "^10.2.0", + "caniuse-lite": "^1.0.30001788", + "eslint": "^10.2.1", "eslint-plugin-functional": "^9.0.4", "eslint-plugin-jsx-a11y": "^6.10.2", - "eslint-plugin-oxlint": "^1.59.0", - "eslint-plugin-perfectionist": "^5.8.0", - "eslint-plugin-sonarjs": "^4.0.2", + "eslint-plugin-oxlint": "^1.60.0", + "eslint-plugin-perfectionist": "^5.9.0", "fdir": "^6.5.0", "globals": "^17.5.0", "jiti": "^2.6.1", "knip": "^6.4.1", "lightningcss": "^1.32.0", "lightningcss-cli": "^1.32.0", - "oxlint": "^1.59.0", - "oxlint-tsgolint": "^0.20.0", + "oxlint": "^1.60.0", + "oxlint-tsgolint": "^0.21.1", "playwright": "^1.59.1", - "prettier": "^3.8.1", + "prettier": "^3.8.3", "prettier-plugin-pkg": "^0.22.1", "prettier-plugin-sh": "^0.18.1", "sass-embedded": "^1.99.0", - "stylelint": "^17.7.0", + "stylelint": "^17.8.0", "stylelint-config-clean-order": "^8.0.1", "stylelint-config-sass-guidelines": "^13.0.0", "stylelint-config-standard-scss": "^17.0.0", "stylelint-declaration-block-no-ignored-properties": "^3.0.0", "stylelint-plugin-logical-css": "^2.1.0", - "typescript": "6.0.2", - "typescript-eslint": "^8.58.1", + "typescript": "6.0.3", + "typescript-eslint": "^8.58.2", "vite": "^8.0.8", "vite-tsconfig-paths": "^6.1.1" }, diff --git a/tsconfig.json b/tsconfig.json index 7653e882..42793b84 100755 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,4 +1,5 @@ { + "$schema": "https://raw.githubusercontent.com/Effect-TS/tsgo/refs/heads/main/schema.json", "compilerOptions": { "allowArbitraryExtensions": true, "allowImportingTsExtensions": true, @@ -36,6 +37,66 @@ "noUnusedParameters": true, "plugins": [ { + "diagnosticSeverity": { + "anyUnknownInErrorContext": "error", + "asyncFunction": "warning", + "catchAllToMapError": "error", + "catchUnfailableEffect": "error", + "classSelfMismatch": "error", + "cryptoRandomUUID": "warning", + "cryptoRandomUUIDInEffect": "warning", + "deterministicKeys": "off", + "duplicatePackage": "warning", + "effectDoNotation": "error", + "effectFnIife": "error", + "effectFnImplicitAny": "error", + "effectFnOpportunity": "error", + "effectGenUsesAdapter": "error", + "effectInFailure": "error", + "effectInVoidSuccess": "error", + "effectMapFlatten": "warning", + "effectMapVoid": "error", + "effectSucceedWithVoid": "error", + "extendsNativeError": "warning", + "floatingEffect": "error", + "genericEffectServices": "off", + "globalConsole": "warning", + "globalConsoleInEffect": "warning", + "globalDate": "warning", + "globalDateInEffect": "warning", + "globalErrorInEffectCatch": "warning", + "globalErrorInEffectFailure": "warning", + "globalFetch": "warning", + "globalFetchInEffect": "warning", + "globalRandom": "warning", + "globalRandomInEffect": "warning", + "globalTimers": "warning", + "globalTimersInEffect": "warning", + "instanceOfSchema": "warning", + "layerMergeAllWithDependencies": "suggestion", + "lazyPromiseInEffectSync": "error", + "leakingRequirements": "warning", + "missedPipeableOpportunity": "warning", + "multipleEffectProvide": "error", + "newPromise": "warning", + "nodeBuiltinImport": "warning", + "nonObjectEffectServiceType": "error", + "outdatedApi": "error", + "preferSchemaOverJson": "warning", + "processEnv": "warning", + "processEnvInEffect": "warning", + "redundantSchemaTagIdentifier": "error", + "returnEffectInGen": "warning", + "runEffectInsideEffect": "error", + "scopeInLayerEffect": "warning", + "strictEffectProvide": "warning", + "tryCatchInEffectGen": "error", + "unnecessaryArrowBlock": "suggestion", + "unnecessaryEffectGen": "suggestion", + "unnecessaryFailYieldableError": "suggestion", + "unnecessaryPipe": "warning", + "unnecessaryPipeChain": "warning" + }, "name": "@effect/language-service" } ], From 8d61dbba4d115785b48db9fb3ac7d1e6c337544f Mon Sep 17 00:00:00 2001 From: gcch Date: Tue, 14 Apr 2026 11:10:39 +0200 Subject: [PATCH 2/6] =?UTF-8?q?fonc:=20d=C3=A9place=20l'injection=20de=20d?= =?UTF-8?q?onn=C3=A9es=20du=20Produit=20dans=20un=20script=20JSON?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../haiku-atelier-2024/single-product.php | 21 +++++++++++----- .../haiku-atelier-2024/views/produit.twig | 25 ++++++------------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/web/app/themes/haiku-atelier-2024/single-product.php b/web/app/themes/haiku-atelier-2024/single-product.php index e08501e1..445b0b68 100755 --- a/web/app/themes/haiku-atelier-2024/single-product.php +++ b/web/app/themes/haiku-atelier-2024/single-product.php @@ -22,7 +22,9 @@ use function add_action; use function assert; use function collect; use function is_array; +use function is_string; use function wc_get_product; +use function wp_create_nonce; use function wp_json_encode; $context = Timber::context(); @@ -66,12 +68,19 @@ $product_tags = $raw_product->get_tag_ids() |> (static fn(/** @var list> */ $tags) => Arr::map($tags, static fn($tag) => $tag->unwrap())); $tags = get_terms(['taxonomy' => 'product_tag', 'hide_empty' => true]); -// echo '
';
-// print_r($product_tags);
-// print_r($tags);
-// echo '
'; - -// exit(); +// Injecte les états initiaux des données du Produit sous forme de JSON dans le contexte. +$page_states = [ + 'nonce' => wp_create_nonce('wc_store_api'), + 'product' => [ + 'attributes' => $product->attributes, + 'id' => $product->id, + 'price' => $product->price, + 'variations' => $product->variations, + ], +] + |> wp_json_encode(...); +assert(is_string($page_states)); +$context['page_states'] = $page_states; add_action('wp_enqueue_scripts', function (): void { Resource::enqueue_script_module_file( diff --git a/web/app/themes/haiku-atelier-2024/views/produit.twig b/web/app/themes/haiku-atelier-2024/views/produit.twig index 8835f74b..fe259b74 100755 --- a/web/app/themes/haiku-atelier-2024/views/produit.twig +++ b/web/app/themes/haiku-atelier-2024/views/produit.twig @@ -1,23 +1,6 @@ {% extends 'base.twig' %} {% block head %} - - + + + {% endblock head %} {% block contenu %} From 673b1d7d2092cf7fff923953fe71630c7c32d6c9 Mon Sep 17 00:00:00 2001 From: gcch Date: Tue, 14 Apr 2026 11:30:27 +0200 Subject: [PATCH 3/6] =?UTF-8?q?fix:=20linte=20avec=20oxc=20seulement=20?= =?UTF-8?q?=C3=A0=20la=20sauvegarde=20du=20fichier?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Un passage de lint peut prendre jusqu'à 100% du CPU. --- .zed/settings.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.zed/settings.json b/.zed/settings.json index fd002a27..ec9c977f 100644 --- a/.zed/settings.json +++ b/.zed/settings.json @@ -17,7 +17,7 @@ "configPath": "cfg/oxlint.config.ts", "disableNestedConfig": false, "fixKind": "safe_fix", - "run": "onType", + "run": "onSave", "unusedDisableDirectives": "deny" } } From 19181afe00edb9ccb0624a0189b8c4889dfaf092 Mon Sep 17 00:00:00 2001 From: gcch Date: Tue, 14 Apr 2026 11:30:27 +0200 Subject: [PATCH 4/6] =?UTF-8?q?corv=C3=A9e:=20met=20=C3=A0=20jour=20Mago?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mago-schema.json | 1689 +++++++++++++++++++++++++++++----------------- mago.toml | 8 +- 2 files changed, 1063 insertions(+), 634 deletions(-) diff --git a/mago-schema.json b/mago-schema.json index a4a12e52..6d8bf9d4 100644 --- a/mago-schema.json +++ b/mago-schema.json @@ -9,6 +9,11 @@ "description": "Allow accessing array keys that may not be defined without reporting an issue.", "type": "boolean" }, + "allow-side-effects-in-conditions": { + "default": true, + "description": "Whether to allow calls to impure functions inside conditions.\n\nWhen set to `false`, any call to a function not marked `@pure` or\n`@mutation-free` inside an `if`, `while`, `for`, ternary, or `match`\ncondition is reported. This helps catch surprising evaluation-order\nbugs where a side effect in one part of a condition silently alters\na variable used in another part.\n\nDefaults to `true` (impure calls in conditions are allowed).", + "type": "boolean" + }, "analyze-dead-code": { "default": false, "description": "Whether to analyze dead code.", @@ -98,6 +103,11 @@ }, "type": "array" }, + "find-overly-wide-return-types": { + "default": false, + "description": "Whether to warn when a function's declared return type contains a branch the body never\nactually returns (e.g. `: string|false` on a function that always returns a string).", + "type": "boolean" + }, "find-unused-definitions": { "default": true, "description": "Whether to find unused definitions.", @@ -147,11 +157,12 @@ "performance": { "$ref": "#/$defs/PerformanceConfiguration", "default": { - "array-combination-threshold": 128, + "array-combination-threshold": 32, "consensus-limit-threshold": 256, "disjunction-complexity-threshold": 4096, "formula-size-threshold": 512, "integer-combination-threshold": 128, + "loop-assignment-depth-threshold": 1, "negation-complexity-threshold": 4096, "saturation-complexity-threshold": 8192, "string-combination-threshold": 128 @@ -271,6 +282,33 @@ ], "description": "An entry that can be either a simple string or an object with name and optional help." }, + "DisallowedTypeEntry": { + "anyOf": [ + { + "description": "Simple string entry (just the name).", + "type": "string" + }, + { + "description": "Entry with name and optional help message.", + "properties": { + "help": { + "type": [ + "null", + "string" + ] + }, + "name": { + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + } + ], + "description": "An entry that can be either a simple string or an object with name and optional help." + }, "EndOfLine": { "description": "Specifies the style of line endings.", "enum": [ @@ -290,6 +328,16 @@ "description": "Whether to align consecutive assignment-like constructs in columns.\n\nWhen enabled, consecutive variable assignments, class properties, class constants,\nglobal constants, array key-value pairs, and backed enum cases are column-aligned.\n\nFor arrays, this applies to multiline or width-broken mappings. Compact inline arrays\nstay compact and are not padded into columns.\n\nExample with `true`:\n```php\n$foo = 1;\n$b = 2;\n$ccccccc = 3;\n\nclass X {\n public string $foo = 1;\n public readonly int $barrrr = 2;\n}\n```\n\nExample with `false`:\n```php\n$foo = 1;\n$b = 2;\n$ccccccc = 3;\n```\n\nNote: Blank lines and comments break alignment runs. In class bodies,\ndifferent member types (properties vs constants) are aligned separately.\n\nDefault: false", "type": "boolean" }, + "align-named-arguments": { + "default": false, + "description": "Whether to align named arguments in multiline argument lists.\n\nWhen enabled:\n```php\nsome_function(\n short: 1,\n longerName: 2,\n longestName: 3,\n);\n```\n\nSingle-line argument lists remain inline, and positional arguments are not aligned.\n\nDefault: false", + "type": "boolean" + }, + "align-parameters": { + "default": false, + "description": "Whether to align multiline function and method parameter lists by the variable column.\n\nThis is especially useful for promoted constructor properties with visibility modifiers.\n\nDefault: false", + "type": "boolean" + }, "always-break-attribute-named-argument-lists": { "default": false, "description": "Whether to always break named argument lists in attributes into multiple lines.\n\nWhen enabled:\n```php\n#[SomeAttribute(\n argument1: 'value1',\n argument2: 'value2',\n)]\nclass Foo {}\n```\n\nDefault: false", @@ -512,6 +560,16 @@ "default": "question", "description": "How to format null type hints.\n\nWith `Question`:\n```php\nfunction foo(\n ?string $a,\n null|int|string $b,\n int|null|string $c,\n) {}\n```\n\nWith `NullPipe`:\n```php\nfunction foo(\n null|string $a,\n null|int|string $b,\n int|null|string $c,\n) {}\n```\n\nWith `NullPipeLast`:\n```php\nfunction foo(\n string|null $a,\n int|string|null $b,\n int|string|null $c,\n) {}\n```\n\nDefault: `Question`" }, + "omit-redundant-arithmetic-binary-expression-parentheses": { + "default": false, + "description": "Whether to omit redundant parentheses around arithmetic binary expressions under comparison and null coalesce expressions.\n\nWhen enabled, parentheses are omitted where PHP precedence already preserves meaning:\n```php\nif ($i === $retries - 1) {\n}\n```\n\nWhen disabled, arithmetic binary expressions keep Mago's default grouping style:\n```php\nif ($i === ($retries - 1)) {\n}\n```\n\nDefault: false", + "type": "boolean" + }, + "omit-redundant-bitwise-binary-expression-parentheses": { + "default": false, + "description": "Whether to omit redundant parentheses around bitwise binary child expressions.\n\nWhen enabled, parentheses are omitted around bitwise binary child expressions where PHP precedence and\nassociativity already preserve meaning:\n```php\nif ($mask === $flags << 1) {\n}\n```\n\nWhen disabled, bitwise binary child expressions keep Mago's default grouping style:\n```php\nif ($mask === ($flags << 1)) {\n}\n```\n\nDefault: false", + "type": "boolean" + }, "opening-tag-on-own-line": { "default": true, "description": "Whether the opening `method1()\n ->method2()\n ->method3();\n```\n\nWhen disabled:\n```php\n$object\n ->method1()\n ->method2()\n ->method3();\n```\n\nDefault: false", + "type": "boolean" + }, "preserve-breaking-parameter-list": { "default": false, "description": "Whether to preserve line breaks in parameter lists, even if they could fit on a single line.\n\nDefault: false", @@ -833,7 +896,7 @@ "type": "string" }, { - "description": "Ignore a code in specific paths: `{ code = \"code2\", in = \"path/\" }`", + "description": "Ignore a code in specific paths or glob patterns:\n`{ code = \"code2\", in = [\"tests/\", \"src/**/*.php\"] }`", "properties": { "code": { "type": "string" @@ -852,7 +915,7 @@ "type": "object" } ], - "description": "Represents an entry in the analyzer's `ignore` configuration.\n\nCan be either a plain code string (ignored everywhere) or a scoped entry\nthat only ignores a code in specific paths." + "description": "Represents an entry in the analyzer's `ignore` configuration.\n\nCan be either a plain code string (ignored everywhere) or a scoped entry\nthat only ignores a code in specific paths. Scoped paths accept both\nplain directory/file prefixes (e.g. `\"tests/\"`, `\"src/Legacy.php\"`) and\nglob patterns (e.g. `\"src/**/*.php\"`); entries\ncontaining any of `*`, `?`, `[`, `{` are matched with [`ExclusionMatcher`]." }, "Level": { "description": "Represents the severity level of an issue.", @@ -990,6 +1053,11 @@ "functions": [], "level": "Warning" }, + "disallowed-type-instantiation": { + "enabled": false, + "level": "Warning", + "types": [] + }, "enum-name": { "enabled": true, "level": "Help" @@ -1241,6 +1309,10 @@ "enabled": false, "level": "Warning" }, + "no-literal-namespace-string": { + "enabled": false, + "level": "Warning" + }, "no-literal-password": { "enabled": true, "level": "Error" @@ -1257,6 +1329,10 @@ "enabled": true, "level": "Help" }, + "no-null-property-init": { + "enabled": false, + "level": "Help" + }, "no-only": { "enabled": true, "level": "Error" @@ -1357,6 +1433,25 @@ "enabled": true, "level": "Warning" }, + "no-service-state-mutation": { + "allowed-methods": [ + "__construct", + "reset" + ], + "enabled": false, + "exclude-namespaces": [ + "App\\DTO\\", + "App\\Entity\\", + "App\\ValueObject\\" + ], + "include-namespaces": [ + "App\\" + ], + "level": "Warning", + "reset-interfaces": [ + "Symfony\\Contracts\\Service\\ResetInterface" + ] + }, "no-shell-execute-string": { "enabled": true, "level": "Error" @@ -1373,6 +1468,13 @@ "enabled": true, "level": "Warning" }, + "no-side-effects-with-declarations": { + "allow-class-alias": true, + "allow-class-exists": true, + "allow-conditional-declarations": true, + "enabled": false, + "level": "Warning" + }, "no-sprintf-concat": { "enabled": true, "level": "Warning" @@ -1536,6 +1638,11 @@ "enabled": true, "level": "Warning" }, + "string-style": { + "enabled": false, + "level": "Note", + "style": "interpolation" + }, "switch-continue-to-break": { "enabled": false, "level": "Warning" @@ -1663,8 +1770,8 @@ "description": "Performance tuning settings for the analyzer.\n\nThese thresholds control the complexity limits for logical formula operations.\nAdjusting these values allows trading off between analysis precision and speed.", "properties": { "array-combination-threshold": { - "default": 128, - "description": "Maximum number of array elements to track individually.\n\nWhen building array types through repeated push operations (`$arr[] = ...`),\nthis limits how many individual elements are tracked before generalizing\nto a simpler array type. This prevents memory explosion on files with\nthousands of array pushes.\n\nDefaults to `128`.", + "default": 32, + "description": "Maximum number of array elements to track individually.\n\nWhen building array types through repeated push operations (`$arr[] = ...`),\nthis limits how many individual elements are tracked before generalizing\nto a simpler array type. This prevents memory explosion on files with\nthousands of array pushes.\n\nDefaults to `32`.", "format": "uint16", "maximum": 65535, "minimum": 0, @@ -1702,6 +1809,14 @@ "minimum": 0, "type": "integer" }, + "loop-assignment-depth-threshold": { + "default": 1, + "description": "Maximum depth of the loop assignment dependency graph that the\nfixed-point analyzer will explore when re-analysing loop bodies.\n\nThe analyzer uses fixed-point iteration to propagate widened types\nalong loop-carried dependency chains. A chain of length `N` can\nrequire up to `N` extra passes for the type at the end of the chain\nto fully stabilise, and each pass re-analyses the entire loop body.\nOn large, complex loops the per-pass cost dominates file analysis\ntime.\n\nThe default of `1` means each loop body is re-analysed at most once\nafter the initial pass; enough to stabilise virtually all real-world\ncode while keeping analysis cost bounded. Projects that require\nmaximally precise narrowing of long loop-carried chains can raise\nthis value (typically to `2` or `3`) at the cost of significantly\nslower analysis on complex files. Setting this to `0` disables\nfixed-point iteration entirely.\n\nDefaults to `1`.", + "format": "uint8", + "maximum": 255, + "minimum": 0, + "type": "integer" + }, "negation-complexity-threshold": { "default": 4096, "description": "Maximum cumulative complexity during formula negation.\n\nControls how complex the negation of a formula can become.\nIf exceeded, negation gives up to avoid exponential blowup.\n\nDefaults to `4096`.", @@ -1888,12 +2003,32 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Help" + "default": "Warning" } }, "type": "object" }, "RuleSettings102": { + "additionalProperties": false, + "properties": { + "enabled": { + "default": true, + "type": "boolean" + }, + "exclude": { + "items": { + "type": "string" + }, + "type": "array" + }, + "level": { + "$ref": "#/$defs/Level", + "default": "Help" + } + }, + "type": "object" + }, + "RuleSettings103": { "additionalProperties": false, "properties": { "enabled": { @@ -1919,7 +2054,7 @@ }, "type": "object" }, - "RuleSettings103": { + "RuleSettings104": { "additionalProperties": false, "properties": { "enabled": { @@ -1939,7 +2074,7 @@ }, "type": "object" }, - "RuleSettings104": { + "RuleSettings105": { "additionalProperties": false, "properties": { "enabled": { @@ -1959,7 +2094,7 @@ }, "type": "object" }, - "RuleSettings105": { + "RuleSettings106": { "additionalProperties": false, "properties": { "enabled": { @@ -1979,7 +2114,7 @@ }, "type": "object" }, - "RuleSettings106": { + "RuleSettings107": { "additionalProperties": false, "properties": { "enabled": { @@ -1999,26 +2134,6 @@ }, "type": "object" }, - "RuleSettings107": { - "additionalProperties": false, - "properties": { - "enabled": { - "default": true, - "type": "boolean" - }, - "exclude": { - "items": { - "type": "string" - }, - "type": "array" - }, - "level": { - "$ref": "#/$defs/Level", - "default": "Note" - } - }, - "type": "object" - }, "RuleSettings108": { "additionalProperties": false, "properties": { @@ -2034,7 +2149,7 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Warning" + "default": "Note" } }, "type": "object" @@ -2138,7 +2253,7 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Error" + "default": "Warning" } }, "type": "object" @@ -2158,7 +2273,7 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Warning" + "default": "Error" } }, "type": "object" @@ -2266,10 +2381,6 @@ "RuleSettings119": { "additionalProperties": false, "properties": { - "allow-loose-behavior": { - "default": false, - "type": "boolean" - }, "enabled": { "default": true, "type": "boolean" @@ -2310,7 +2421,7 @@ "RuleSettings120": { "additionalProperties": false, "properties": { - "allow-disabling": { + "allow-loose-behavior": { "default": false, "type": "boolean" }, @@ -2334,6 +2445,10 @@ "RuleSettings121": { "additionalProperties": false, "properties": { + "allow-disabling": { + "default": false, + "type": "boolean" + }, "enabled": { "default": true, "type": "boolean" @@ -2386,14 +2501,7 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Error" - }, - "threshold": { - "default": 20, - "format": "uint16", - "maximum": 65535, - "minimum": 0, - "type": "integer" + "default": "Warning" } }, "type": "object" @@ -2401,14 +2509,6 @@ "RuleSettings124": { "additionalProperties": false, "properties": { - "count-hooks": { - "default": false, - "type": "boolean" - }, - "count-setters-and-getters": { - "default": false, - "type": "boolean" - }, "enabled": { "default": true, "type": "boolean" @@ -2424,7 +2524,7 @@ "default": "Error" }, "threshold": { - "default": 10, + "default": 20, "format": "uint16", "maximum": 65535, "minimum": 0, @@ -2436,6 +2536,14 @@ "RuleSettings125": { "additionalProperties": false, "properties": { + "count-hooks": { + "default": false, + "type": "boolean" + }, + "count-setters-and-getters": { + "default": false, + "type": "boolean" + }, "enabled": { "default": true, "type": "boolean" @@ -2475,11 +2583,14 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Help" + "default": "Error" }, - "psr": { - "default": false, - "type": "boolean" + "threshold": { + "default": 10, + "format": "uint16", + "maximum": 65535, + "minimum": 0, + "type": "integer" } }, "type": "object" @@ -2499,12 +2610,36 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Note" + "default": "Help" + }, + "psr": { + "default": false, + "type": "boolean" } }, "type": "object" }, "RuleSettings128": { + "additionalProperties": false, + "properties": { + "enabled": { + "default": true, + "type": "boolean" + }, + "exclude": { + "items": { + "type": "string" + }, + "type": "array" + }, + "level": { + "$ref": "#/$defs/Level", + "default": "Note" + } + }, + "type": "object" + }, + "RuleSettings129": { "additionalProperties": false, "properties": { "camel": { @@ -2536,26 +2671,6 @@ }, "type": "object" }, - "RuleSettings129": { - "additionalProperties": false, - "properties": { - "enabled": { - "default": true, - "type": "boolean" - }, - "exclude": { - "items": { - "type": "string" - }, - "type": "array" - }, - "level": { - "$ref": "#/$defs/Level", - "default": "Help" - } - }, - "type": "object" - }, "RuleSettings13": { "additionalProperties": false, "properties": { @@ -2580,7 +2695,7 @@ "additionalProperties": false, "properties": { "enabled": { - "default": false, + "default": true, "type": "boolean" }, "exclude": { @@ -2591,7 +2706,7 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Warning" + "default": "Help" } }, "type": "object" @@ -2600,7 +2715,7 @@ "additionalProperties": false, "properties": { "enabled": { - "default": true, + "default": false, "type": "boolean" }, "exclude": { @@ -2620,7 +2735,7 @@ "additionalProperties": false, "properties": { "enabled": { - "default": false, + "default": true, "type": "boolean" }, "exclude": { @@ -2651,7 +2766,7 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Error" + "default": "Warning" } }, "type": "object" @@ -2660,7 +2775,7 @@ "additionalProperties": false, "properties": { "enabled": { - "default": true, + "default": false, "type": "boolean" }, "exclude": { @@ -2679,8 +2794,23 @@ "RuleSettings135": { "additionalProperties": false, "properties": { - "enabled": { + "allow-class-alias": { "default": true, + "description": "When true, top-level `class_alias(...)` calls are allowed alongside\ndeclarations.", + "type": "boolean" + }, + "allow-class-exists": { + "default": true, + "description": "When true, top-level `class_exists(...)` calls are allowed alongside\ndeclarations. This is commonly used to trigger autoloading/preloading.", + "type": "boolean" + }, + "allow-conditional-declarations": { + "default": true, + "description": "When true, conditional declarations (`if (...) { class Foo {} }`)\nare allowed alongside declarations. This covers the common pattern\nof polyfilling a class depending on an extension or PHP version.", + "type": "boolean" + }, + "enabled": { + "default": false, "type": "boolean" }, "exclude": { @@ -2691,7 +2821,7 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Error" + "default": "Warning" } }, "type": "object" @@ -2709,16 +2839,6 @@ }, "type": "array" }, - "known-sink-functions": { - "default": [ - "printf" - ], - "items": { - "type": "string" - }, - "type": "array", - "uniqueItems": true - }, "level": { "$ref": "#/$defs/Level", "default": "Error" @@ -2749,16 +2869,8 @@ "RuleSettings138": { "additionalProperties": false, "properties": { - "camel": { - "default": true, - "type": "boolean" - }, - "either": { - "default": false, - "type": "boolean" - }, "enabled": { - "default": false, + "default": true, "type": "boolean" }, "exclude": { @@ -2767,9 +2879,19 @@ }, "type": "array" }, + "known-sink-functions": { + "default": [ + "printf" + ], + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, "level": { "$ref": "#/$defs/Level", - "default": "Help" + "default": "Error" } }, "type": "object" @@ -2833,10 +2955,18 @@ "RuleSettings140": { "additionalProperties": false, "properties": { - "enabled": { + "camel": { "default": true, "type": "boolean" }, + "either": { + "default": false, + "type": "boolean" + }, + "enabled": { + "default": false, + "type": "boolean" + }, "exclude": { "items": { "type": "string" @@ -2845,7 +2975,7 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Warning" + "default": "Help" } }, "type": "object" @@ -2865,7 +2995,7 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Warning" + "default": "Error" } }, "type": "object" @@ -2925,12 +3055,71 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Help" + "default": "Warning" } }, "type": "object" }, "RuleSettings145": { + "additionalProperties": false, + "properties": { + "allowed-methods": { + "default": [ + "__construct", + "reset" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "enabled": { + "default": false, + "type": "boolean" + }, + "exclude": { + "items": { + "type": "string" + }, + "type": "array" + }, + "exclude-namespaces": { + "default": [ + "App\\DTO\\", + "App\\Entity\\", + "App\\ValueObject\\" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "include-namespaces": { + "default": [ + "App\\" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "level": { + "$ref": "#/$defs/Level", + "default": "Warning" + }, + "reset-interfaces": { + "default": [ + "Symfony\\Contracts\\Service\\ResetInterface" + ], + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "RuleSettings146": { "additionalProperties": false, "properties": { "enabled": { @@ -2950,31 +3139,11 @@ }, "type": "object" }, - "RuleSettings146": { - "additionalProperties": false, - "properties": { - "enabled": { - "default": false, - "type": "boolean" - }, - "exclude": { - "items": { - "type": "string" - }, - "type": "array" - }, - "level": { - "$ref": "#/$defs/Level", - "default": "Warning" - } - }, - "type": "object" - }, "RuleSettings147": { "additionalProperties": false, "properties": { "enabled": { - "default": false, + "default": true, "type": "boolean" }, "exclude": { @@ -3014,7 +3183,7 @@ "additionalProperties": false, "properties": { "enabled": { - "default": true, + "default": false, "type": "boolean" }, "exclude": { @@ -3026,13 +3195,6 @@ "level": { "$ref": "#/$defs/Level", "default": "Warning" - }, - "min-digits": { - "default": 5, - "description": "Minimum number of digits before suggesting separators.", - "format": "uint", - "minimum": 0, - "type": "integer" } }, "type": "object" @@ -3106,7 +3268,11 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Help" + "default": "Note" + }, + "style": { + "$ref": "#/$defs/StringStyleOption", + "default": "interpolation" } }, "type": "object" @@ -3115,7 +3281,7 @@ "additionalProperties": false, "properties": { "enabled": { - "default": false, + "default": true, "type": "boolean" }, "exclude": { @@ -3135,7 +3301,7 @@ "additionalProperties": false, "properties": { "enabled": { - "default": false, + "default": true, "type": "boolean" }, "exclude": { @@ -3146,7 +3312,14 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Help" + "default": "Warning" + }, + "min-digits": { + "default": 5, + "description": "Minimum number of digits before suggesting separators.", + "format": "uint", + "minimum": 0, + "type": "integer" } }, "type": "object" @@ -3166,7 +3339,7 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Warning" + "default": "Help" } }, "type": "object" @@ -3175,7 +3348,7 @@ "additionalProperties": false, "properties": { "enabled": { - "default": true, + "default": false, "type": "boolean" }, "exclude": { @@ -3186,7 +3359,7 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Warning" + "default": "Help" } }, "type": "object" @@ -3195,7 +3368,7 @@ "additionalProperties": false, "properties": { "enabled": { - "default": true, + "default": false, "type": "boolean" }, "exclude": { @@ -3215,7 +3388,7 @@ "additionalProperties": false, "properties": { "enabled": { - "default": true, + "default": false, "type": "boolean" }, "exclude": { @@ -3226,7 +3399,7 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Error" + "default": "Help" } }, "type": "object" @@ -3235,7 +3408,7 @@ "additionalProperties": false, "properties": { "enabled": { - "default": true, + "default": false, "type": "boolean" }, "exclude": { @@ -3246,12 +3419,59 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Error" + "default": "Warning" } }, "type": "object" }, "RuleSettings159": { + "additionalProperties": false, + "properties": { + "enabled": { + "default": false, + "type": "boolean" + }, + "exclude": { + "items": { + "type": "string" + }, + "type": "array" + }, + "level": { + "$ref": "#/$defs/Level", + "default": "Help" + } + }, + "type": "object" + }, + "RuleSettings16": { + "additionalProperties": false, + "properties": { + "enabled": { + "default": false, + "type": "boolean" + }, + "exclude": { + "items": { + "type": "string" + }, + "type": "array" + }, + "level": { + "$ref": "#/$defs/Level", + "default": "Warning" + }, + "types": { + "default": [], + "items": { + "$ref": "#/$defs/DisallowedTypeEntry" + }, + "type": "array" + } + }, + "type": "object" + }, + "RuleSettings160": { "additionalProperties": false, "properties": { "enabled": { @@ -3271,7 +3491,7 @@ }, "type": "object" }, - "RuleSettings16": { + "RuleSettings161": { "additionalProperties": false, "properties": { "enabled": { @@ -3286,12 +3506,72 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Help" + "default": "Warning" } }, "type": "object" }, - "RuleSettings160": { + "RuleSettings162": { + "additionalProperties": false, + "properties": { + "enabled": { + "default": true, + "type": "boolean" + }, + "exclude": { + "items": { + "type": "string" + }, + "type": "array" + }, + "level": { + "$ref": "#/$defs/Level", + "default": "Error" + } + }, + "type": "object" + }, + "RuleSettings163": { + "additionalProperties": false, + "properties": { + "enabled": { + "default": true, + "type": "boolean" + }, + "exclude": { + "items": { + "type": "string" + }, + "type": "array" + }, + "level": { + "$ref": "#/$defs/Level", + "default": "Error" + } + }, + "type": "object" + }, + "RuleSettings164": { + "additionalProperties": false, + "properties": { + "enabled": { + "default": true, + "type": "boolean" + }, + "exclude": { + "items": { + "type": "string" + }, + "type": "array" + }, + "level": { + "$ref": "#/$defs/Level", + "default": "Warning" + } + }, + "type": "object" + }, + "RuleSettings165": { "additionalProperties": false, "properties": { "classes": { @@ -3351,7 +3631,47 @@ }, "type": "object" }, + "RuleSettings166": { + "additionalProperties": false, + "properties": { + "enabled": { + "default": false, + "type": "boolean" + }, + "exclude": { + "items": { + "type": "string" + }, + "type": "array" + }, + "level": { + "$ref": "#/$defs/Level", + "default": "Warning" + } + }, + "type": "object" + }, "RuleSettings17": { + "additionalProperties": false, + "properties": { + "enabled": { + "default": true, + "type": "boolean" + }, + "exclude": { + "items": { + "type": "string" + }, + "type": "array" + }, + "level": { + "$ref": "#/$defs/Level", + "default": "Help" + } + }, + "type": "object" + }, + "RuleSettings18": { "additionalProperties": false, "properties": { "enabled": { @@ -3387,7 +3707,7 @@ }, "type": "object" }, - "RuleSettings18": { + "RuleSettings19": { "additionalProperties": false, "properties": { "constructor-threshold": { @@ -3424,26 +3744,6 @@ }, "type": "object" }, - "RuleSettings19": { - "additionalProperties": false, - "properties": { - "enabled": { - "default": true, - "type": "boolean" - }, - "exclude": { - "items": { - "type": "string" - }, - "type": "array" - }, - "level": { - "$ref": "#/$defs/Level", - "default": "Error" - } - }, - "type": "object" - }, "RuleSettings2": { "additionalProperties": false, "properties": { @@ -3465,6 +3765,26 @@ "type": "object" }, "RuleSettings20": { + "additionalProperties": false, + "properties": { + "enabled": { + "default": true, + "type": "boolean" + }, + "exclude": { + "items": { + "type": "string" + }, + "type": "array" + }, + "level": { + "$ref": "#/$defs/Level", + "default": "Error" + } + }, + "type": "object" + }, + "RuleSettings21": { "additionalProperties": false, "properties": { "difficulty-threshold": { @@ -3499,7 +3819,7 @@ }, "type": "object" }, - "RuleSettings21": { + "RuleSettings22": { "additionalProperties": false, "properties": { "enabled": { @@ -3524,7 +3844,7 @@ }, "type": "object" }, - "RuleSettings22": { + "RuleSettings23": { "additionalProperties": false, "properties": { "check-first-argument": { @@ -3555,7 +3875,7 @@ }, "type": "object" }, - "RuleSettings23": { + "RuleSettings24": { "additionalProperties": false, "properties": { "enabled": { @@ -3575,7 +3895,7 @@ }, "type": "object" }, - "RuleSettings24": { + "RuleSettings25": { "additionalProperties": false, "properties": { "enabled": { @@ -3595,7 +3915,7 @@ }, "type": "object" }, - "RuleSettings25": { + "RuleSettings26": { "additionalProperties": false, "properties": { "camel": { @@ -3630,26 +3950,6 @@ }, "type": "object" }, - "RuleSettings26": { - "additionalProperties": false, - "properties": { - "enabled": { - "default": true, - "type": "boolean" - }, - "exclude": { - "items": { - "type": "string" - }, - "type": "array" - }, - "level": { - "$ref": "#/$defs/Level", - "default": "Note" - } - }, - "type": "object" - }, "RuleSettings27": { "additionalProperties": false, "properties": { @@ -3665,7 +3965,7 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Error" + "default": "Note" } }, "type": "object" @@ -3705,7 +4005,7 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Warning" + "default": "Error" } }, "type": "object" @@ -3805,7 +4105,7 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Error" + "default": "Warning" } }, "type": "object" @@ -3865,7 +4165,7 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Warning" + "default": "Error" } }, "type": "object" @@ -3873,10 +4173,6 @@ "RuleSettings37": { "additionalProperties": false, "properties": { - "check-functions": { - "default": false, - "type": "boolean" - }, "enabled": { "default": true, "type": "boolean" @@ -3897,6 +4193,10 @@ "RuleSettings38": { "additionalProperties": false, "properties": { + "check-functions": { + "default": false, + "type": "boolean" + }, "enabled": { "default": true, "type": "boolean" @@ -3969,7 +4269,7 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Note" + "default": "Warning" } }, "type": "object" @@ -3989,7 +4289,7 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Help" + "default": "Note" } }, "type": "object" @@ -4189,7 +4489,7 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Warning" + "default": "Help" } }, "type": "object" @@ -4209,7 +4509,7 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Help" + "default": "Warning" } }, "type": "object" @@ -4309,7 +4609,7 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Warning" + "default": "Help" } }, "type": "object" @@ -4329,7 +4629,7 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Help" + "default": "Warning" } }, "type": "object" @@ -4349,7 +4649,7 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Warning" + "default": "Help" } }, "type": "object" @@ -4369,7 +4669,7 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Help" + "default": "Warning" } }, "type": "object" @@ -4413,7 +4713,7 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Note" + "default": "Help" } }, "type": "object" @@ -4433,7 +4733,7 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Help" + "default": "Note" } }, "type": "object" @@ -4453,7 +4753,7 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Error" + "default": "Help" } }, "type": "object" @@ -4473,7 +4773,7 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Warning" + "default": "Error" } }, "type": "object" @@ -4573,7 +4873,7 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Note" + "default": "Warning" } }, "type": "object" @@ -4593,7 +4893,7 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Error" + "default": "Note" } }, "type": "object" @@ -4702,7 +5002,7 @@ "additionalProperties": false, "properties": { "enabled": { - "default": false, + "default": true, "type": "boolean" }, "exclude": { @@ -4713,7 +5013,7 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Note" + "default": "Error" } }, "type": "object" @@ -4733,12 +5033,32 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Warning" + "default": "Note" } }, "type": "object" }, "RuleSettings76": { + "additionalProperties": false, + "properties": { + "enabled": { + "default": false, + "type": "boolean" + }, + "exclude": { + "items": { + "type": "string" + }, + "type": "array" + }, + "level": { + "$ref": "#/$defs/Level", + "default": "Warning" + } + }, + "type": "object" + }, + "RuleSettings77": { "additionalProperties": false, "properties": { "allow-array-checks": { @@ -4762,26 +5082,6 @@ }, "type": "object" }, - "RuleSettings77": { - "additionalProperties": false, - "properties": { - "enabled": { - "default": true, - "type": "boolean" - }, - "exclude": { - "items": { - "type": "string" - }, - "type": "array" - }, - "level": { - "$ref": "#/$defs/Level", - "default": "Note" - } - }, - "type": "object" - }, "RuleSettings78": { "additionalProperties": false, "properties": { @@ -4798,10 +5098,6 @@ "level": { "$ref": "#/$defs/Level", "default": "Note" - }, - "preserve-single-line-comments": { - "default": false, - "type": "boolean" } }, "type": "object" @@ -4821,7 +5117,11 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Warning" + "default": "Note" + }, + "preserve-single-line-comments": { + "default": false, + "type": "boolean" } }, "type": "object" @@ -4865,7 +5165,7 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Help" + "default": "Warning" } }, "type": "object" @@ -4891,6 +5191,26 @@ "type": "object" }, "RuleSettings82": { + "additionalProperties": false, + "properties": { + "enabled": { + "default": true, + "type": "boolean" + }, + "exclude": { + "items": { + "type": "string" + }, + "type": "array" + }, + "level": { + "$ref": "#/$defs/Level", + "default": "Help" + } + }, + "type": "object" + }, + "RuleSettings83": { "additionalProperties": false, "properties": { "enabled": { @@ -4920,31 +5240,11 @@ }, "type": "object" }, - "RuleSettings83": { - "additionalProperties": false, - "properties": { - "enabled": { - "default": false, - "type": "boolean" - }, - "exclude": { - "items": { - "type": "string" - }, - "type": "array" - }, - "level": { - "$ref": "#/$defs/Level", - "default": "Warning" - } - }, - "type": "object" - }, "RuleSettings84": { "additionalProperties": false, "properties": { "enabled": { - "default": true, + "default": false, "type": "boolean" }, "exclude": { @@ -4964,7 +5264,7 @@ "additionalProperties": false, "properties": { "enabled": { - "default": false, + "default": true, "type": "boolean" }, "exclude": { @@ -4975,7 +5275,7 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Help" + "default": "Warning" } }, "type": "object" @@ -5024,7 +5324,7 @@ "additionalProperties": false, "properties": { "enabled": { - "default": true, + "default": false, "type": "boolean" }, "exclude": { @@ -5035,7 +5335,7 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Note" + "default": "Help" } }, "type": "object" @@ -5055,7 +5355,7 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Help" + "default": "Note" } }, "type": "object" @@ -5095,7 +5395,7 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Warning" + "default": "Help" } }, "type": "object" @@ -5195,11 +5495,7 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Help" - }, - "psr": { - "default": false, - "type": "boolean" + "default": "Warning" } }, "type": "object" @@ -5219,12 +5515,36 @@ }, "level": { "$ref": "#/$defs/Level", - "default": "Note" + "default": "Help" + }, + "psr": { + "default": false, + "type": "boolean" } }, "type": "object" }, "RuleSettings97": { + "additionalProperties": false, + "properties": { + "enabled": { + "default": true, + "type": "boolean" + }, + "exclude": { + "items": { + "type": "string" + }, + "type": "array" + }, + "level": { + "$ref": "#/$defs/Level", + "default": "Note" + } + }, + "type": "object" + }, + "RuleSettings98": { "additionalProperties": false, "properties": { "check-functions": { @@ -5248,7 +5568,7 @@ }, "type": "object" }, - "RuleSettings98": { + "RuleSettings99": { "additionalProperties": false, "properties": { "camel": { @@ -5276,26 +5596,6 @@ }, "type": "object" }, - "RuleSettings99": { - "additionalProperties": false, - "properties": { - "enabled": { - "default": true, - "type": "boolean" - }, - "exclude": { - "items": { - "type": "string" - }, - "type": "array" - }, - "level": { - "$ref": "#/$defs/Level", - "default": "Warning" - } - }, - "type": "object" - }, "RulesSettings": { "additionalProperties": false, "properties": { @@ -5366,7 +5666,7 @@ } }, "constant-condition": { - "$ref": "#/$defs/RuleSettings129", + "$ref": "#/$defs/RuleSettings130", "default": { "enabled": true, "level": "Help" @@ -5389,26 +5689,26 @@ } }, "deprecated-cast": { - "$ref": "#/$defs/RuleSettings33", - "default": { - "enabled": true, - "level": "Error" - } - }, - "deprecated-shell-execute-string": { "$ref": "#/$defs/RuleSettings34", "default": { "enabled": true, "level": "Error" } }, - "deprecated-switch-semicolon": { + "deprecated-shell-execute-string": { "$ref": "#/$defs/RuleSettings35", "default": { "enabled": true, "level": "Error" } }, + "deprecated-switch-semicolon": { + "$ref": "#/$defs/RuleSettings36", + "default": { + "enabled": true, + "level": "Error" + } + }, "disallowed-functions": { "$ref": "#/$defs/RuleSettings15", "default": { @@ -5418,15 +5718,23 @@ "level": "Warning" } }, - "enum-name": { + "disallowed-type-instantiation": { "$ref": "#/$defs/RuleSettings16", + "default": { + "enabled": false, + "level": "Warning", + "types": [] + } + }, + "enum-name": { + "$ref": "#/$defs/RuleSettings17", "default": { "enabled": true, "level": "Help" } }, "excessive-nesting": { - "$ref": "#/$defs/RuleSettings17", + "$ref": "#/$defs/RuleSettings18", "default": { "enabled": true, "function-like-threshold": null, @@ -5435,7 +5743,7 @@ } }, "excessive-parameter-list": { - "$ref": "#/$defs/RuleSettings18", + "$ref": "#/$defs/RuleSettings19", "default": { "constructor-threshold": null, "enabled": true, @@ -5444,21 +5752,21 @@ } }, "explicit-nullable-param": { - "$ref": "#/$defs/RuleSettings99", - "default": { - "enabled": true, - "level": "Warning" - } - }, - "explicit-octal": { "$ref": "#/$defs/RuleSettings100", "default": { "enabled": true, "level": "Warning" } }, + "explicit-octal": { + "$ref": "#/$defs/RuleSettings101", + "default": { + "enabled": true, + "level": "Warning" + } + }, "file-name": { - "$ref": "#/$defs/RuleSettings97", + "$ref": "#/$defs/RuleSettings98", "default": { "check-functions": false, "enabled": true, @@ -5466,14 +5774,14 @@ } }, "final-controller": { - "$ref": "#/$defs/RuleSettings19", + "$ref": "#/$defs/RuleSettings20", "default": { "enabled": true, "level": "Error" } }, "function-name": { - "$ref": "#/$defs/RuleSettings98", + "$ref": "#/$defs/RuleSettings99", "default": { "camel": false, "either": false, @@ -5482,7 +5790,7 @@ } }, "halstead": { - "$ref": "#/$defs/RuleSettings20", + "$ref": "#/$defs/RuleSettings21", "default": { "difficulty-threshold": 12, "effort-threshold": 5000, @@ -5492,42 +5800,42 @@ } }, "identity-comparison": { - "$ref": "#/$defs/RuleSettings90", - "default": { - "enabled": true, - "level": "Warning" - } - }, - "ineffective-format-ignore-next": { "$ref": "#/$defs/RuleSettings91", "default": { "enabled": true, "level": "Warning" } }, - "ineffective-format-ignore-region": { + "ineffective-format-ignore-next": { "$ref": "#/$defs/RuleSettings92", "default": { "enabled": true, "level": "Warning" } }, - "inline-variable-return": { + "ineffective-format-ignore-region": { "$ref": "#/$defs/RuleSettings93", "default": { "enabled": true, "level": "Warning" } }, - "instanceof-stringable": { + "inline-variable-return": { "$ref": "#/$defs/RuleSettings94", "default": { "enabled": true, "level": "Warning" } }, - "interface-name": { + "instanceof-stringable": { "$ref": "#/$defs/RuleSettings95", + "default": { + "enabled": true, + "level": "Warning" + } + }, + "interface-name": { + "$ref": "#/$defs/RuleSettings96", "default": { "enabled": true, "level": "Help", @@ -5535,14 +5843,14 @@ } }, "invalid-open-tag": { - "$ref": "#/$defs/RuleSettings96", + "$ref": "#/$defs/RuleSettings97", "default": { "enabled": true, "level": "Note" } }, "kan-defect": { - "$ref": "#/$defs/RuleSettings21", + "$ref": "#/$defs/RuleSettings22", "default": { "enabled": true, "level": "Error", @@ -5550,7 +5858,7 @@ } }, "literal-named-argument": { - "$ref": "#/$defs/RuleSettings22", + "$ref": "#/$defs/RuleSettings23", "default": { "check-first-argument": false, "enabled": true, @@ -5559,28 +5867,28 @@ } }, "loop-does-not-iterate": { - "$ref": "#/$defs/RuleSettings23", + "$ref": "#/$defs/RuleSettings24", "default": { "enabled": true, "level": "Warning" } }, "lowercase-keyword": { - "$ref": "#/$defs/RuleSettings24", + "$ref": "#/$defs/RuleSettings25", "default": { "enabled": true, "level": "Help" } }, "lowercase-type-hint": { - "$ref": "#/$defs/RuleSettings89", + "$ref": "#/$defs/RuleSettings90", "default": { "enabled": true, "level": "Help" } }, "method-name": { - "$ref": "#/$defs/RuleSettings25", + "$ref": "#/$defs/RuleSettings26", "default": { "camel": true, "either": false, @@ -5590,14 +5898,14 @@ } }, "middleware-in-routes": { - "$ref": "#/$defs/RuleSettings143", + "$ref": "#/$defs/RuleSettings146", "default": { "enabled": true, "level": "Warning" } }, "missing-docs": { - "$ref": "#/$defs/RuleSettings160", + "$ref": "#/$defs/RuleSettings165", "default": { "classes": false, "constants": true, @@ -5614,42 +5922,42 @@ } }, "no-alias-function": { - "$ref": "#/$defs/RuleSettings88", + "$ref": "#/$defs/RuleSettings89", "default": { "enabled": true, "level": "Note" } }, "no-alternative-syntax": { - "$ref": "#/$defs/RuleSettings152", + "$ref": "#/$defs/RuleSettings156", "default": { "enabled": false, "level": "Warning" } }, "no-array-accumulation-in-loop": { - "$ref": "#/$defs/RuleSettings130", + "$ref": "#/$defs/RuleSettings131", "default": { "enabled": false, "level": "Warning" } }, "no-assign-in-argument": { - "$ref": "#/$defs/RuleSettings83", + "$ref": "#/$defs/RuleSettings84", "default": { "enabled": false, "level": "Warning" } }, "no-assign-in-condition": { - "$ref": "#/$defs/RuleSettings84", + "$ref": "#/$defs/RuleSettings85", "default": { "enabled": true, "level": "Warning" } }, "no-boolean-flag-parameter": { - "$ref": "#/$defs/RuleSettings82", + "$ref": "#/$defs/RuleSettings83", "default": { "enabled": true, "exclude-constructors": true, @@ -5658,56 +5966,56 @@ } }, "no-closing-tag": { - "$ref": "#/$defs/RuleSettings81", + "$ref": "#/$defs/RuleSettings82", "default": { "enabled": true, "level": "Help" } }, "no-db-schema-change": { - "$ref": "#/$defs/RuleSettings157", + "$ref": "#/$defs/RuleSettings162", "default": { "enabled": true, "level": "Error" } }, "no-debug-symbols": { - "$ref": "#/$defs/RuleSettings26", + "$ref": "#/$defs/RuleSettings27", "default": { "enabled": true, "level": "Note" } }, "no-direct-db-query": { - "$ref": "#/$defs/RuleSettings156", + "$ref": "#/$defs/RuleSettings161", "default": { "enabled": true, "level": "Warning" } }, "no-else-clause": { - "$ref": "#/$defs/RuleSettings80", + "$ref": "#/$defs/RuleSettings81", "default": { "enabled": true, "level": "Help" } }, "no-empty": { - "$ref": "#/$defs/RuleSettings73", + "$ref": "#/$defs/RuleSettings74", "default": { "enabled": true, "level": "Error" } }, "no-empty-catch-clause": { - "$ref": "#/$defs/RuleSettings79", + "$ref": "#/$defs/RuleSettings80", "default": { "enabled": true, "level": "Warning" } }, "no-empty-comment": { - "$ref": "#/$defs/RuleSettings78", + "$ref": "#/$defs/RuleSettings79", "default": { "enabled": true, "level": "Note", @@ -5715,112 +6023,112 @@ } }, "no-empty-loop": { - "$ref": "#/$defs/RuleSettings77", + "$ref": "#/$defs/RuleSettings78", "default": { "enabled": true, "level": "Note" } }, "no-error-control-operator": { - "$ref": "#/$defs/RuleSettings72", + "$ref": "#/$defs/RuleSettings73", "default": { "enabled": true, "level": "Error" } }, "no-eval": { - "$ref": "#/$defs/RuleSettings71", + "$ref": "#/$defs/RuleSettings72", "default": { "enabled": true, "level": "Error" } }, "no-ffi": { - "$ref": "#/$defs/RuleSettings70", + "$ref": "#/$defs/RuleSettings71", "default": { "enabled": true, "level": "Error" } }, "no-fully-qualified-global-class-like": { - "$ref": "#/$defs/RuleSettings85", - "default": { - "enabled": false, - "level": "Help" - } - }, - "no-fully-qualified-global-constant": { "$ref": "#/$defs/RuleSettings86", "default": { "enabled": false, "level": "Help" } }, - "no-fully-qualified-global-function": { + "no-fully-qualified-global-constant": { "$ref": "#/$defs/RuleSettings87", "default": { "enabled": false, "level": "Help" } }, + "no-fully-qualified-global-function": { + "$ref": "#/$defs/RuleSettings88", + "default": { + "enabled": false, + "level": "Help" + } + }, "no-global": { - "$ref": "#/$defs/RuleSettings69", + "$ref": "#/$defs/RuleSettings70", "default": { "enabled": true, "level": "Error" } }, "no-goto": { - "$ref": "#/$defs/RuleSettings68", + "$ref": "#/$defs/RuleSettings69", "default": { "enabled": true, "level": "Note" } }, "no-hash-comment": { - "$ref": "#/$defs/RuleSettings66", + "$ref": "#/$defs/RuleSettings67", "default": { "enabled": true, "level": "Warning" } }, "no-hash-emoji": { - "$ref": "#/$defs/RuleSettings65", + "$ref": "#/$defs/RuleSettings66", "default": { "enabled": true, "level": "Warning" } }, "no-ini-set": { - "$ref": "#/$defs/RuleSettings131", + "$ref": "#/$defs/RuleSettings132", "default": { "enabled": true, "level": "Warning" } }, "no-inline": { - "$ref": "#/$defs/RuleSettings133", + "$ref": "#/$defs/RuleSettings134", "default": { "enabled": false, "level": "Error" } }, "no-insecure-comparison": { - "$ref": "#/$defs/RuleSettings134", + "$ref": "#/$defs/RuleSettings136", "default": { "enabled": true, "level": "Error" } }, "no-is-null": { - "$ref": "#/$defs/RuleSettings74", + "$ref": "#/$defs/RuleSettings75", "default": { "enabled": false, "level": "Note" } }, "no-isset": { - "$ref": "#/$defs/RuleSettings76", + "$ref": "#/$defs/RuleSettings77", "default": { "allow-array-checks": false, "enabled": true, @@ -5828,315 +6136,361 @@ } }, "no-iterator-to-array-in-foreach": { - "$ref": "#/$defs/RuleSettings75", + "$ref": "#/$defs/RuleSettings76", + "default": { + "enabled": false, + "level": "Warning" + } + }, + "no-literal-namespace-string": { + "$ref": "#/$defs/RuleSettings166", "default": { "enabled": false, "level": "Warning" } }, "no-literal-password": { - "$ref": "#/$defs/RuleSettings135", + "$ref": "#/$defs/RuleSettings137", "default": { "enabled": true, "level": "Error" } }, "no-multi-assignments": { - "$ref": "#/$defs/RuleSettings63", - "default": { - "enabled": true, - "level": "Warning" - } - }, - "no-nested-ternary": { "$ref": "#/$defs/RuleSettings64", "default": { "enabled": true, "level": "Warning" } }, + "no-nested-ternary": { + "$ref": "#/$defs/RuleSettings65", + "default": { + "enabled": true, + "level": "Warning" + } + }, "no-noop": { - "$ref": "#/$defs/RuleSettings61", + "$ref": "#/$defs/RuleSettings62", "default": { "enabled": true, "level": "Help" } }, + "no-null-property-init": { + "$ref": "#/$defs/RuleSettings159", + "default": { + "enabled": false, + "level": "Help" + } + }, "no-only": { - "$ref": "#/$defs/RuleSettings62", + "$ref": "#/$defs/RuleSettings63", "default": { "enabled": true, "level": "Error" } }, "no-parameter-shadowing": { - "$ref": "#/$defs/RuleSettings132", + "$ref": "#/$defs/RuleSettings133", "default": { "enabled": false, "level": "Warning" } }, "no-php-tag-terminator": { - "$ref": "#/$defs/RuleSettings60", + "$ref": "#/$defs/RuleSettings61", "default": { "enabled": true, "level": "Note" } }, "no-protected-in-final": { - "$ref": "#/$defs/RuleSettings59", + "$ref": "#/$defs/RuleSettings60", "default": { "enabled": true, "level": "Help" } }, "no-redundant-binary-string-prefix": { - "$ref": "#/$defs/RuleSettings43", - "default": { - "enabled": true, - "level": "Help" - } - }, - "no-redundant-block": { - "$ref": "#/$defs/RuleSettings55", - "default": { - "enabled": true, - "level": "Help" - } - }, - "no-redundant-continue": { - "$ref": "#/$defs/RuleSettings54", - "default": { - "enabled": true, - "level": "Help" - } - }, - "no-redundant-file": { - "$ref": "#/$defs/RuleSettings53", - "default": { - "enabled": true, - "level": "Help" - } - }, - "no-redundant-final": { - "$ref": "#/$defs/RuleSettings51", - "default": { - "enabled": true, - "level": "Help" - } - }, - "no-redundant-isset": { - "$ref": "#/$defs/RuleSettings46", - "default": { - "enabled": true, - "level": "Help" - } - }, - "no-redundant-label": { - "$ref": "#/$defs/RuleSettings49", - "default": { - "enabled": true, - "level": "Help" - } - }, - "no-redundant-literal-return": { - "$ref": "#/$defs/RuleSettings50", - "default": { - "enabled": true, - "level": "Warning" - } - }, - "no-redundant-math": { - "$ref": "#/$defs/RuleSettings48", - "default": { - "enabled": true, - "level": "Help" - } - }, - "no-redundant-method-override": { - "$ref": "#/$defs/RuleSettings45", - "default": { - "enabled": true, - "level": "Help" - } - }, - "no-redundant-nullsafe": { - "$ref": "#/$defs/RuleSettings47", - "default": { - "enabled": true, - "level": "Help" - } - }, - "no-redundant-parentheses": { "$ref": "#/$defs/RuleSettings44", "default": { "enabled": true, "level": "Help" } }, - "no-redundant-readonly": { + "no-redundant-block": { + "$ref": "#/$defs/RuleSettings56", + "default": { + "enabled": true, + "level": "Help" + } + }, + "no-redundant-continue": { + "$ref": "#/$defs/RuleSettings55", + "default": { + "enabled": true, + "level": "Help" + } + }, + "no-redundant-file": { + "$ref": "#/$defs/RuleSettings54", + "default": { + "enabled": true, + "level": "Help" + } + }, + "no-redundant-final": { "$ref": "#/$defs/RuleSettings52", "default": { "enabled": true, "level": "Help" } }, + "no-redundant-isset": { + "$ref": "#/$defs/RuleSettings47", + "default": { + "enabled": true, + "level": "Help" + } + }, + "no-redundant-label": { + "$ref": "#/$defs/RuleSettings50", + "default": { + "enabled": true, + "level": "Help" + } + }, + "no-redundant-literal-return": { + "$ref": "#/$defs/RuleSettings51", + "default": { + "enabled": true, + "level": "Warning" + } + }, + "no-redundant-math": { + "$ref": "#/$defs/RuleSettings49", + "default": { + "enabled": true, + "level": "Help" + } + }, + "no-redundant-method-override": { + "$ref": "#/$defs/RuleSettings46", + "default": { + "enabled": true, + "level": "Help" + } + }, + "no-redundant-nullsafe": { + "$ref": "#/$defs/RuleSettings48", + "default": { + "enabled": true, + "level": "Help" + } + }, + "no-redundant-parentheses": { + "$ref": "#/$defs/RuleSettings45", + "default": { + "enabled": true, + "level": "Help" + } + }, + "no-redundant-readonly": { + "$ref": "#/$defs/RuleSettings53", + "default": { + "enabled": true, + "level": "Help" + } + }, "no-redundant-string-concat": { - "$ref": "#/$defs/RuleSettings42", + "$ref": "#/$defs/RuleSettings43", "default": { "enabled": true, "level": "Help" } }, "no-redundant-use": { - "$ref": "#/$defs/RuleSettings56", + "$ref": "#/$defs/RuleSettings57", "default": { "enabled": true, "level": "Warning" } }, "no-redundant-write-visibility": { - "$ref": "#/$defs/RuleSettings41", + "$ref": "#/$defs/RuleSettings42", "default": { "enabled": true, "level": "Help" } }, "no-redundant-yield-from": { - "$ref": "#/$defs/RuleSettings57", + "$ref": "#/$defs/RuleSettings58", "default": { "enabled": true, "level": "Help" } }, "no-request-all": { - "$ref": "#/$defs/RuleSettings142", + "$ref": "#/$defs/RuleSettings144", "default": { "enabled": true, "level": "Warning" } }, "no-request-variable": { - "$ref": "#/$defs/RuleSettings27", - "default": { - "enabled": true, - "level": "Error" - } - }, - "no-roles-as-capabilities": { - "$ref": "#/$defs/RuleSettings159", - "default": { - "enabled": true, - "level": "Warning" - } - }, - "no-self-assignment": { - "$ref": "#/$defs/RuleSettings58", - "default": { - "enabled": true, - "level": "Warning" - } - }, - "no-shell-execute-string": { "$ref": "#/$defs/RuleSettings28", "default": { "enabled": true, "level": "Error" } }, + "no-roles-as-capabilities": { + "$ref": "#/$defs/RuleSettings164", + "default": { + "enabled": true, + "level": "Warning" + } + }, + "no-self-assignment": { + "$ref": "#/$defs/RuleSettings59", + "default": { + "enabled": true, + "level": "Warning" + } + }, + "no-service-state-mutation": { + "$ref": "#/$defs/RuleSettings145", + "default": { + "allowed-methods": [ + "__construct", + "reset" + ], + "enabled": false, + "exclude-namespaces": [ + "App\\DTO\\", + "App\\Entity\\", + "App\\ValueObject\\" + ], + "include-namespaces": [ + "App\\" + ], + "level": "Warning", + "reset-interfaces": [ + "Symfony\\Contracts\\Service\\ResetInterface" + ] + } + }, + "no-shell-execute-string": { + "$ref": "#/$defs/RuleSettings29", + "default": { + "enabled": true, + "level": "Error" + } + }, "no-short-bool-cast": { - "$ref": "#/$defs/RuleSettings151", + "$ref": "#/$defs/RuleSettings155", "default": { "enabled": false, "level": "Help" } }, "no-short-opening-tag": { - "$ref": "#/$defs/RuleSettings29", - "default": { - "enabled": true, - "level": "Warning" - } - }, - "no-shorthand-ternary": { "$ref": "#/$defs/RuleSettings30", "default": { "enabled": true, "level": "Warning" } }, - "no-sprintf-concat": { + "no-shorthand-ternary": { "$ref": "#/$defs/RuleSettings31", "default": { "enabled": true, "level": "Warning" } }, - "no-trailing-space": { - "$ref": "#/$defs/RuleSettings40", + "no-side-effects-with-declarations": { + "$ref": "#/$defs/RuleSettings135", "default": { - "enabled": true, - "level": "Note" - } - }, - "no-underscore-class": { - "$ref": "#/$defs/RuleSettings39", - "default": { - "enabled": true, + "allow-class-alias": true, + "allow-class-exists": true, + "allow-conditional-declarations": true, + "enabled": false, "level": "Warning" } }, - "no-unescaped-output": { - "$ref": "#/$defs/RuleSettings158", - "default": { - "enabled": true, - "level": "Error" - } - }, - "no-unsafe-finally": { - "$ref": "#/$defs/RuleSettings139", - "default": { - "enabled": true, - "level": "Error" - } - }, - "no-variable-variable": { - "$ref": "#/$defs/RuleSettings67", - "default": { - "enabled": true, - "level": "Warning" - } - }, - "no-void-reference-return": { - "$ref": "#/$defs/RuleSettings38", - "default": { - "enabled": true, - "level": "Warning" - } - }, - "optional-param-order": { + "no-sprintf-concat": { "$ref": "#/$defs/RuleSettings32", "default": { "enabled": true, "level": "Warning" } }, + "no-trailing-space": { + "$ref": "#/$defs/RuleSettings41", + "default": { + "enabled": true, + "level": "Note" + } + }, + "no-underscore-class": { + "$ref": "#/$defs/RuleSettings40", + "default": { + "enabled": true, + "level": "Warning" + } + }, + "no-unescaped-output": { + "$ref": "#/$defs/RuleSettings163", + "default": { + "enabled": true, + "level": "Error" + } + }, + "no-unsafe-finally": { + "$ref": "#/$defs/RuleSettings141", + "default": { + "enabled": true, + "level": "Error" + } + }, + "no-variable-variable": { + "$ref": "#/$defs/RuleSettings68", + "default": { + "enabled": true, + "level": "Warning" + } + }, + "no-void-reference-return": { + "$ref": "#/$defs/RuleSettings39", + "default": { + "enabled": true, + "level": "Warning" + } + }, + "optional-param-order": { + "$ref": "#/$defs/RuleSettings33", + "default": { + "enabled": true, + "level": "Warning" + } + }, "prefer-anonymous-migration": { - "$ref": "#/$defs/RuleSettings36", + "$ref": "#/$defs/RuleSettings37", "default": { "enabled": true, "level": "Warning" } }, "prefer-arrow-function": { - "$ref": "#/$defs/RuleSettings101", + "$ref": "#/$defs/RuleSettings102", "default": { "enabled": true, "level": "Help" } }, "prefer-early-continue": { - "$ref": "#/$defs/RuleSettings102", + "$ref": "#/$defs/RuleSettings103", "default": { "enabled": true, "level": "Help", @@ -6144,7 +6498,7 @@ } }, "prefer-first-class-callable": { - "$ref": "#/$defs/RuleSettings37", + "$ref": "#/$defs/RuleSettings38", "default": { "check-functions": false, "enabled": true, @@ -6152,49 +6506,49 @@ } }, "prefer-interface": { - "$ref": "#/$defs/RuleSettings103", + "$ref": "#/$defs/RuleSettings104", "default": { "enabled": true, "level": "Note" } }, "prefer-pre-increment": { - "$ref": "#/$defs/RuleSettings153", + "$ref": "#/$defs/RuleSettings157", "default": { "enabled": false, "level": "Help" } }, "prefer-static-closure": { - "$ref": "#/$defs/RuleSettings104", + "$ref": "#/$defs/RuleSettings105", "default": { "enabled": true, "level": "Help" } }, "prefer-test-attribute": { - "$ref": "#/$defs/RuleSettings105", + "$ref": "#/$defs/RuleSettings106", "default": { "enabled": false, "level": "Warning" } }, "prefer-view-array": { - "$ref": "#/$defs/RuleSettings106", + "$ref": "#/$defs/RuleSettings107", "default": { "enabled": true, "level": "Help" } }, "prefer-while-loop": { - "$ref": "#/$defs/RuleSettings107", + "$ref": "#/$defs/RuleSettings108", "default": { "enabled": true, "level": "Note" } }, "property-name": { - "$ref": "#/$defs/RuleSettings138", + "$ref": "#/$defs/RuleSettings140", "default": { "camel": true, "either": false, @@ -6203,70 +6557,70 @@ } }, "psl-array-functions": { - "$ref": "#/$defs/RuleSettings108", - "default": { - "enabled": true, - "level": "Warning" - } - }, - "psl-data-structures": { "$ref": "#/$defs/RuleSettings109", "default": { "enabled": true, "level": "Warning" } }, - "psl-datetime": { + "psl-data-structures": { "$ref": "#/$defs/RuleSettings110", "default": { "enabled": true, "level": "Warning" } }, - "psl-math-functions": { + "psl-datetime": { "$ref": "#/$defs/RuleSettings111", "default": { "enabled": true, "level": "Warning" } }, - "psl-output": { + "psl-math-functions": { "$ref": "#/$defs/RuleSettings112", + "default": { + "enabled": true, + "level": "Warning" + } + }, + "psl-output": { + "$ref": "#/$defs/RuleSettings113", "default": { "enabled": true, "level": "Error" } }, "psl-randomness-functions": { - "$ref": "#/$defs/RuleSettings113", - "default": { - "enabled": true, - "level": "Warning" - } - }, - "psl-regex-functions": { "$ref": "#/$defs/RuleSettings114", "default": { "enabled": true, "level": "Warning" } }, - "psl-sleep-functions": { + "psl-regex-functions": { "$ref": "#/$defs/RuleSettings115", "default": { "enabled": true, "level": "Warning" } }, - "psl-string-functions": { + "psl-sleep-functions": { "$ref": "#/$defs/RuleSettings116", "default": { "enabled": true, "level": "Warning" } }, + "psl-string-functions": { + "$ref": "#/$defs/RuleSettings117", + "default": { + "enabled": true, + "level": "Warning" + } + }, "readable-literal": { - "$ref": "#/$defs/RuleSettings149", + "$ref": "#/$defs/RuleSettings153", "default": { "enabled": true, "level": "Warning", @@ -6274,63 +6628,63 @@ } }, "require-namespace": { - "$ref": "#/$defs/RuleSettings146", + "$ref": "#/$defs/RuleSettings149", "default": { "enabled": false, "level": "Warning" } }, "require-preg-quote-delimiter": { - "$ref": "#/$defs/RuleSettings145", - "default": { - "enabled": true, - "level": "Warning" - } - }, - "sensitive-parameter": { - "$ref": "#/$defs/RuleSettings137", - "default": { - "enabled": true, - "level": "Error" - } - }, - "single-class-per-file": { "$ref": "#/$defs/RuleSettings148", "default": { "enabled": true, "level": "Warning" } }, + "sensitive-parameter": { + "$ref": "#/$defs/RuleSettings139", + "default": { + "enabled": true, + "level": "Error" + } + }, + "single-class-per-file": { + "$ref": "#/$defs/RuleSettings152", + "default": { + "enabled": true, + "level": "Warning" + } + }, "sorted-integer-keys": { - "$ref": "#/$defs/RuleSettings147", + "$ref": "#/$defs/RuleSettings150", "default": { "enabled": false, "level": "Help" } }, "str-contains": { - "$ref": "#/$defs/RuleSettings117", - "default": { - "enabled": true, - "level": "Warning" - } - }, - "str-starts-with": { "$ref": "#/$defs/RuleSettings118", "default": { "enabled": true, "level": "Warning" } }, + "str-starts-with": { + "$ref": "#/$defs/RuleSettings119", + "default": { + "enabled": true, + "level": "Warning" + } + }, "strict-assertions": { - "$ref": "#/$defs/RuleSettings140", + "$ref": "#/$defs/RuleSettings142", "default": { "enabled": true, "level": "Warning" } }, "strict-behavior": { - "$ref": "#/$defs/RuleSettings119", + "$ref": "#/$defs/RuleSettings120", "default": { "allow-loose-behavior": false, "enabled": true, @@ -6338,36 +6692,44 @@ } }, "strict-types": { - "$ref": "#/$defs/RuleSettings120", + "$ref": "#/$defs/RuleSettings121", "default": { "allow-disabling": false, "enabled": true, "level": "Warning" } }, + "string-style": { + "$ref": "#/$defs/RuleSettings151", + "default": { + "enabled": false, + "level": "Note", + "style": "interpolation" + } + }, "switch-continue-to-break": { - "$ref": "#/$defs/RuleSettings154", + "$ref": "#/$defs/RuleSettings158", "default": { "enabled": false, "level": "Warning" } }, "tagged-fixme": { - "$ref": "#/$defs/RuleSettings121", - "default": { - "enabled": true, - "level": "Warning" - } - }, - "tagged-todo": { "$ref": "#/$defs/RuleSettings122", "default": { "enabled": true, "level": "Warning" } }, + "tagged-todo": { + "$ref": "#/$defs/RuleSettings123", + "default": { + "enabled": true, + "level": "Warning" + } + }, "tainted-data-to-sink": { - "$ref": "#/$defs/RuleSettings136", + "$ref": "#/$defs/RuleSettings138", "default": { "enabled": true, "known-sink-functions": [ @@ -6377,7 +6739,7 @@ } }, "too-many-enum-cases": { - "$ref": "#/$defs/RuleSettings123", + "$ref": "#/$defs/RuleSettings124", "default": { "enabled": true, "level": "Error", @@ -6385,7 +6747,7 @@ } }, "too-many-methods": { - "$ref": "#/$defs/RuleSettings124", + "$ref": "#/$defs/RuleSettings125", "default": { "count-hooks": false, "count-setters-and-getters": false, @@ -6395,7 +6757,7 @@ } }, "too-many-properties": { - "$ref": "#/$defs/RuleSettings125", + "$ref": "#/$defs/RuleSettings126", "default": { "enabled": true, "level": "Error", @@ -6403,7 +6765,7 @@ } }, "trait-name": { - "$ref": "#/$defs/RuleSettings126", + "$ref": "#/$defs/RuleSettings127", "default": { "enabled": true, "level": "Help", @@ -6411,7 +6773,7 @@ } }, "use-compound-assignment": { - "$ref": "#/$defs/RuleSettings144", + "$ref": "#/$defs/RuleSettings147", "default": { "enabled": true, "level": "Help" @@ -6432,7 +6794,7 @@ } }, "use-specific-assertions": { - "$ref": "#/$defs/RuleSettings141", + "$ref": "#/$defs/RuleSettings143", "default": { "enabled": true, "level": "Warning" @@ -6446,21 +6808,21 @@ } }, "use-wp-functions": { - "$ref": "#/$defs/RuleSettings155", + "$ref": "#/$defs/RuleSettings160", "default": { "enabled": true, "level": "Warning" } }, "valid-docblock": { - "$ref": "#/$defs/RuleSettings127", + "$ref": "#/$defs/RuleSettings128", "default": { "enabled": true, "level": "Note" } }, "variable-name": { - "$ref": "#/$defs/RuleSettings128", + "$ref": "#/$defs/RuleSettings129", "default": { "camel": false, "check-parameters": true, @@ -6470,7 +6832,7 @@ } }, "yoda-conditions": { - "$ref": "#/$defs/RuleSettings150", + "$ref": "#/$defs/RuleSettings154", "default": { "enabled": false, "level": "Help" @@ -6528,15 +6890,20 @@ "type": "array" }, "workspace": { + "default": "/home/gcch/Répertoires/git.gcch.fr/haiku-atelier-2024", "description": "The workspace directory from which to start scanning.\n\nDefaults to the current working directory.", "type": "string" } }, - "required": [ - "workspace" - ], "type": "object" }, + "StringStyleOption": { + "enum": [ + "concatenation", + "interpolation" + ], + "type": "string" + }, "StructuralInheritanceConstraint": { "anyOf": [ { @@ -6738,6 +7105,7 @@ "$ref": "#/$defs/AnalyzerConfiguration", "default": { "allow-possibly-undefined-array-keys": true, + "allow-side-effects-in-conditions": true, "analyze-dead-code": false, "baseline": null, "baseline-variant": "loose", @@ -6754,6 +7122,7 @@ "disable-default-plugins": false, "enforce-class-finality": false, "excludes": [], + "find-overly-wide-return-types": false, "find-unused-definitions": true, "find-unused-expressions": true, "find-unused-parameters": false, @@ -6762,11 +7131,12 @@ "minimum-fail-level": "Error", "no-boolean-literal-comparison": false, "performance": { - "array-combination-threshold": 128, + "array-combination-threshold": 32, "consensus-limit-threshold": 256, "disjunction-complexity-threshold": 4096, "formula-size-threshold": 512, "integer-combination-threshold": 128, + "loop-assignment-depth-threshold": 1, "negation-complexity-threshold": 4096, "saturation-complexity-threshold": 8192, "string-combination-threshold": 128 @@ -6895,6 +7265,11 @@ "functions": [], "level": "Warning" }, + "disallowed-type-instantiation": { + "enabled": false, + "level": "Warning", + "types": [] + }, "enum-name": { "enabled": true, "level": "Help" @@ -7146,6 +7521,10 @@ "enabled": false, "level": "Warning" }, + "no-literal-namespace-string": { + "enabled": false, + "level": "Warning" + }, "no-literal-password": { "enabled": true, "level": "Error" @@ -7162,6 +7541,10 @@ "enabled": true, "level": "Help" }, + "no-null-property-init": { + "enabled": false, + "level": "Help" + }, "no-only": { "enabled": true, "level": "Error" @@ -7262,6 +7645,25 @@ "enabled": true, "level": "Warning" }, + "no-service-state-mutation": { + "allowed-methods": [ + "__construct", + "reset" + ], + "enabled": false, + "exclude-namespaces": [ + "App\\DTO\\", + "App\\Entity\\", + "App\\ValueObject\\" + ], + "include-namespaces": [ + "App\\" + ], + "level": "Warning", + "reset-interfaces": [ + "Symfony\\Contracts\\Service\\ResetInterface" + ] + }, "no-shell-execute-string": { "enabled": true, "level": "Error" @@ -7278,6 +7680,13 @@ "enabled": true, "level": "Warning" }, + "no-side-effects-with-declarations": { + "allow-class-alias": true, + "allow-class-exists": true, + "allow-conditional-declarations": true, + "enabled": false, + "level": "Warning" + }, "no-sprintf-concat": { "enabled": true, "level": "Warning" @@ -7441,6 +7850,11 @@ "enabled": true, "level": "Warning" }, + "string-style": { + "enabled": false, + "level": "Note", + "style": "interpolation" + }, "switch-continue-to-break": { "enabled": false, "level": "Warning" @@ -7525,6 +7939,11 @@ }, "description": "Linter service configuration.\n\nControls linting behavior, including enabled/disabled rules, rule-specific\nsettings, and reporting preferences. Defaults to an empty configuration\nif not specified in the config file." }, + "no-version-check": { + "default": false, + "description": "Whether to silence the project version drift warning.\n\nAffects only the minor / patch drift warning emitted when the installed\nmago binary does not match the `version` pinned in `mago.toml`. A major\ndrift is always fatal and is *not* affected by this flag; the whole\npoint of a major pin is to stop runs across incompatible config schemas.\n\nCan be enabled via `MAGO_NO_VERSION_CHECK` environment variable or\n`--no-version-check` CLI flag.", + "type": "boolean" + }, "parser": { "$ref": "#/$defs/ParserConfiguration", "default": { @@ -7569,6 +7988,14 @@ "format": "uint", "minimum": 0, "type": "integer" + }, + "version": { + "default": null, + "description": "The mago version this project is pinned to.\n\nAccepts three pin levels:\n\n- `\"1\"`: major pin; any `1.x.y` satisfies it. `mago init` emits this\n by default. Minor/patch drift within major 1 is a warning; a bump to\n `2.x` is a hard error.\n- `\"1.19\"`: minor pin; any `1.19.y` satisfies it.\n- `\"1.19.3\"`: exact pin; any drift is a warning, and this is the only\n form that `mago self-update --to-project-version` can target without\n ambiguity.\n\nEmpty / missing is currently a no-op; a future mago release is likely\nto start warning when the pin is absent, to prepare projects for 2.0.\n\n# Compatibility invariant (**do not break**)\n\nThis field's location (top-level) and type (string) are a load-bearing\ncontract for cross-major config compatibility: a future mago 2.x must\nbe able to read a mago 1.x `mago.toml` via a permissive top-level TOML\npass, find this field, and refuse to run with\n\"this config is pinned to mago 1\" *before* it ever hits its own strict\nschema. That means:\n\n- never move this field into a `[metadata]` section,\n- never rename it,\n- never change it from a string,\n- never change the pin grammar from `major[.minor[.patch]]`.", + "type": [ + "null", + "string" + ] } }, "title": "Configuration", diff --git a/mago.toml b/mago.toml index bdcdd94f..453893a5 100644 --- a/mago.toml +++ b/mago.toml @@ -37,27 +37,29 @@ threads = 0 [analyzer] allow-possibly-undefined-array-keys = false + allow-side-effects-in-conditions = true analyze-dead-code = true check-arrow-function-missing-type-hints = true check-closure-missing-type-hints = true + check-experimental = true check-missing-override = true check-missing-type-hints = true + check-name-casing = true check-property-initialization = true check-throws = true check-use-statements = true enforce-class-finality = true + find-overly-wide-return-types = true find-unused-definitions = true find-unused-expressions = true find-unused-parameters = true + memoize-properties = true no-boolean-literal-comparison = false perform-heuristic-checks = true plugins = ["psl"] require-api-or-internal = true strict-list-index-checks = true trust-existence-checks = false - check-experimental = true - check-name-casing = true - memoize-properties = true [analyzer.performance] array-combination-threshold = 256 From 2d7ee363986b333257052ec7bd5961445d39edf6 Mon Sep 17 00:00:00 2001 From: gcch Date: Tue, 14 Apr 2026 11:30:27 +0200 Subject: [PATCH 5/6] fix: retourne un tableau pour les Options d'un Attribut --- .../themes/haiku-atelier-2024/src/inc/Data/Attribute.php | 6 +++++- .../haiku-atelier-2024/src/inc/Data/AttributeOption.php | 3 +++ .../haiku-atelier-2024/src/inc/Data/ProductVariation.php | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/web/app/themes/haiku-atelier-2024/src/inc/Data/Attribute.php b/web/app/themes/haiku-atelier-2024/src/inc/Data/Attribute.php index 3e9e57a9..27ca18be 100644 --- a/web/app/themes/haiku-atelier-2024/src/inc/Data/Attribute.php +++ b/web/app/themes/haiku-atelier-2024/src/inc/Data/Attribute.php @@ -20,6 +20,9 @@ final readonly class Attribute { public array $options, ) {} + /** + * Créé une nouvelle instance de `Attribut` depuis un `WC_Product_Attribute`. + */ public static function new(WC_Product_Attribute $attribute): self { $name = wc_attribute_label($attribute->get_name()); $slug = $attribute->get_name(); @@ -27,7 +30,8 @@ final readonly class Attribute { $terms = $attribute->get_terms() ?? []; /** @var list */ $options = Arr::map($terms, AttributeOption::new(...)) - |> (static fn($options) => Arr::sort($options, static fn($attribute) => $attribute->id)); + |> (static fn($options) => Arr::sort($options, static fn($attribute) => $attribute->id)) + |> array_values(...); return new self(name: $name, slug: $slug, options: $options); } diff --git a/web/app/themes/haiku-atelier-2024/src/inc/Data/AttributeOption.php b/web/app/themes/haiku-atelier-2024/src/inc/Data/AttributeOption.php index 4359b920..a2d77967 100644 --- a/web/app/themes/haiku-atelier-2024/src/inc/Data/AttributeOption.php +++ b/web/app/themes/haiku-atelier-2024/src/inc/Data/AttributeOption.php @@ -13,6 +13,9 @@ final readonly class AttributeOption { public string $slug, ) {} + /** + * Créé une nouvelle instance de `AttributeOption` depuis un `WP_Term`. + */ public static function new(WP_Term $term): self { $id = $term->term_taxonomy_id; $name = $term->name; diff --git a/web/app/themes/haiku-atelier-2024/src/inc/Data/ProductVariation.php b/web/app/themes/haiku-atelier-2024/src/inc/Data/ProductVariation.php index 11104db0..6609537e 100644 --- a/web/app/themes/haiku-atelier-2024/src/inc/Data/ProductVariation.php +++ b/web/app/themes/haiku-atelier-2024/src/inc/Data/ProductVariation.php @@ -19,7 +19,7 @@ final readonly class ProductVariation { ) {} /** - * Créé une nouvelle instance de `ProductVariation` à partir d'un `WC_Product`. + * Créé une nouvelle instance de `ProductVariation` depuis un `WC_Product`. */ public static function new(WC_Product $product): self { $id = $product->get_id(); From 4fe1056eab7eb7a337b3c297b891cd45c6369762 Mon Sep 17 00:00:00 2001 From: gcch Date: Tue, 14 Apr 2026 11:30:27 +0200 Subject: [PATCH 6/6] ref: refactorise les scripts de la page Produit --- .../src/scripts-effect/api-service.ts | 52 ++++ .../src/scripts-effect/lib/api.ts | 91 +++++++ .../src/scripts-effect/lib/fetch.ts | 88 ++++++ .../src/scripts-effect/schemas/api.ts | 12 +- .../src/scripts-effect/schemas/product.ts | 73 ++++- .../src/scripts/page-produit/errors.ts | 18 ++ .../src/scripts/page-produit/runtime.ts | 4 + .../src/scripts/page-produit/service-dom.ts | 253 +++++++++++------- .../scripts/page-produit/service-elements.ts | 9 +- .../src/scripts/page-produit/types.d.ts | 1 + .../src/scripts/scripts-page-produit.ts | 17 +- 11 files changed, 497 insertions(+), 121 deletions(-) create mode 100644 web/app/themes/haiku-atelier-2024/src/scripts-effect/api-service.ts create mode 100644 web/app/themes/haiku-atelier-2024/src/scripts-effect/lib/api.ts create mode 100644 web/app/themes/haiku-atelier-2024/src/scripts-effect/lib/fetch.ts create mode 100644 web/app/themes/haiku-atelier-2024/src/scripts/page-produit/errors.ts diff --git a/web/app/themes/haiku-atelier-2024/src/scripts-effect/api-service.ts b/web/app/themes/haiku-atelier-2024/src/scripts-effect/api-service.ts new file mode 100644 index 00000000..1306d1cc --- /dev/null +++ b/web/app/themes/haiku-atelier-2024/src/scripts-effect/api-service.ts @@ -0,0 +1,52 @@ +import { Context, Effect, Layer, Schema } from "effect"; +import { ENTETE_WC_NONCE, ROUTE_API_AJOUTE_ARTICLE_PANIER } from "../scripts/constantes/api.ts"; +import { CartProduct } from "./schemas/api.ts"; + +/** Délai par défaut pour la réalisation d'une Requête. */ +const REQUEST_TIMEOUT = 5_000; + +/** Représente un soucis lors de l'exécution d'une Requête auprès de l'API WooCommerce. */ +class APIError extends Schema.TaggedErrorClass()("APIError", { + cause: Schema.Defect, +}) {} + +class WooCommerceAPI extends Context.Service< + WooCommerceAPI, + { + AddProductToCart: (nonce: string, requestBody: CartProduct) => Effect.Effect; + } +>()("haikuatelier.fr/WooCommerceAPI") { + static readonly layer = Layer.effect( + WooCommerceAPI, + // oxlint-disable-next-line require-yield + Effect.gen(function*() { + const AddProductToCart = Effect.fn("AddProductToCart")(function*(nonce: string, product: CartProduct) { + const response = yield* Effect.tryPromise({ + catch: error => new APIError({ cause: error }), + try: async () => + fetch(ROUTE_API_AJOUTE_ARTICLE_PANIER, { + // Convertis en chaîne de caractères (équivalent à JSON.stringify). + body: Schema.encodeSync(Schema.fromJsonString(CartProduct))(product), + credentials: "same-origin", + headers: { + Accept: "application/json", + "Content-Type": "application/json", + [ENTETE_WC_NONCE]: nonce, + }, + method: "POST", + mode: "same-origin", + signal: AbortSignal.timeout(REQUEST_TIMEOUT), + }), + }); + + return response; + }); + + return WooCommerceAPI.of({ + AddProductToCart, + }); + }), + ); +} + +export { APIError, WooCommerceAPI }; diff --git a/web/app/themes/haiku-atelier-2024/src/scripts-effect/lib/api.ts b/web/app/themes/haiku-atelier-2024/src/scripts-effect/lib/api.ts new file mode 100644 index 00000000..6aa6622a --- /dev/null +++ b/web/app/themes/haiku-atelier-2024/src/scripts-effect/lib/api.ts @@ -0,0 +1,91 @@ +import { Console, Context, Effect, Layer, pipe, Schedule, Schema, SchemaIssue } from "effect"; +import { + FetchHttpClient, + HttpClient, + HttpClientError, + HttpClientRequest, + HttpClientResponse, +} from "effect/unstable/http"; +import type { CartProduct } from "../schemas/api.ts"; + +class BodyParsingError extends Schema.TaggedErrorClass()("BodyParsingError", { + cause: Schema.String, +}) {} +class FetchError extends Schema.TaggedErrorClass()("FetchError", { + cause: Schema.Defect, +}) {} + +class ApiRequestError extends Schema.TaggedErrorClass()("ApiRequestError", { + reason: Schema.Union([BodyParsingError, FetchError]), +}) {} + +/** Client `fetch` contenant les options et en-têtes de Requêtes pré-renseignées. */ +const ApiFetchClient = FetchHttpClient.layer.pipe( + Layer.provide( + Layer.succeed( + FetchHttpClient.RequestInit, + { + credentials: "same-origin", + headers: { + Accept: "application/json", + "Content-Type": "application/json", + }, + mode: "same-origin", + }, + ), + ), +); + +class ApiClient extends Context.Service Effect.Effect; +}>()("haikuatelier.fr/ApiClient") { + static readonly layer = Layer.effect( + ApiClient, + Effect.gen(function*() { + // Créé un client HTTP où chaque Requête est imprimée dans la console. + const httpClient: HttpClient.HttpClient.With = pipe( + yield* HttpClient.HttpClient, + HttpClient.tapRequest(Console.debug), + // Définis une politique d'essai. + HttpClient.retryTransient({ + retryOn: "errors-only", + schedule: Schedule.exponential("1 seconds"), + times: 3, + }), + ); + + const AddProductToCart = Effect.fn("AppClient.AddProductToCart")( + function*(nonce: string, productToAdd: CartProduct): Effect.fn.Return { + const request = pipe( + HttpClientRequest.post(`/wp-json/wc/store/cart/add-item`), + HttpClientRequest.setHeader("Nonce", nonce), + // Le corps de la Requête a été validée en amont. + HttpClientRequest.bodyJsonUnsafe(productToAdd), + ); + + const response = yield* pipe( + httpClient.execute(request), + // TODO: Remplacer Schema.Unknown par un Schéma de l'objet retourné par le backend. + Effect.flatMap(HttpClientResponse.schemaBodyJson(Schema.Unknown)), + Effect.mapError(error => { + if (error._tag === "SchemaError") { + return new ApiRequestError({ + reason: new BodyParsingError({ cause: SchemaIssue.makeFormatterDefault()(error.issue) }), + }); + } else { + return new ApiRequestError({ reason: new FetchError({ cause: error.reason }) }); + } + }), + Effect.tap(Console.debug), + ); + + return response; + }, + ); + + return ApiClient.of({ AddProductToCart }); + }), + ).pipe(Layer.provide(ApiFetchClient)); +} + +export { ApiClient, ApiRequestError }; diff --git a/web/app/themes/haiku-atelier-2024/src/scripts-effect/lib/fetch.ts b/web/app/themes/haiku-atelier-2024/src/scripts-effect/lib/fetch.ts new file mode 100644 index 00000000..f97ac7e5 --- /dev/null +++ b/web/app/themes/haiku-atelier-2024/src/scripts-effect/lib/fetch.ts @@ -0,0 +1,88 @@ +import { Context, Effect, flow, Layer, pipe, Schedule, Schema } from "effect"; +import { FetchHttpClient, HttpClient, HttpClientRequest, HttpClientResponse } from "effect/unstable/http"; +import { HttpClientError } from "effect/unstable/http/HttpClientError"; + +class Todo extends Schema.Class("Todo")({ + userId: Schema.Number, + id: Schema.Number, + title: Schema.String, + completed: Schema.Boolean, +}) {} + +class FetchClientError extends Schema.TaggedErrorClass()("FetchClientError", { + cause: Schema.Defect, +}) {} + +class FetchClientExample extends Context.Service, FetchClientError>; + createTodo(todo: Omit): Effect.Effect; + getTodo(id: number): Effect.Effect; +}>()("FetchClientExample") { + static readonly layer = Layer.effect( + FetchClientExample, + Effect.gen(function*() { + // Access the HttpClient service, and apply some common middleware to all requests. + const client: HttpClient.HttpClient.With = pipe( + yield* HttpClient.HttpClient, + // Add a base URL to all requests with this client, and set the Accept header to expect JSON Response. + HttpClient.mapRequest(flow( + HttpClientRequest.prependUrl("https://jsonplaceholder.typicode.com"), + HttpClientRequest.acceptJson, + )), + // Fail if the Response status is not 2xx. + HttpClient.filterStatusOk, + // Retry transient errors with an exponential backoff. + HttpClient.retryTransient({ schedule: Schedule.exponential(100), times: 3 }), + ); + + const allTodos = client.get("/todos").pipe( + Effect.flatMap(HttpClientResponse.schemaBodyJson(Schema.Array(Todo))), + Effect.mapError(cause => new FetchClientError({ cause })), + Effect.withSpan("FetchClientExample.allTodos"), + ); + + // Use the HttpClient to fetch a Todo item by ID, and decode response using the Schema. + const getTodo = Effect.fn("FetchClientExample.getTodo")(function*(id: number) { + // Annotate the current span with the ID of the Todo being fetched so that it shows up in telemetry. + yield* Effect.annotateCurrentSpan({ id }); + + const todo = yield* pipe( + client.get(`/todos/${id}`, { + // You can pass additional options to individual Requests. + urlParams: { format: "json" }, + }), + Effect.flatMap(HttpClientResponse.schemaBodyJson(Todo)), + Effect.mapError(cause => new FetchClientError({ cause })), + ); + + return todo; + }); + + // You can use the HttpClientRequest module to build up complex Requests. + const createTodo = Effect.fn("createTodo")(function*(todo: Omit) { + yield* Effect.annotateCurrentSpan({ title: todo.title }); + + const createdTodo: Todo = yield* HttpClientRequest.post("/todos").pipe( + HttpClientRequest.setUrlParams({ format: "json" }), + HttpClientRequest.bodyJsonUnsafe(todo), + client.execute, + Effect.flatMap(HttpClientResponse.schemaBodyJson(Todo)), + Effect.mapError(cause => new FetchClientError({ cause })), + ); + + return createdTodo; + }); + + return FetchClientExample.of({ + allTodos, + getTodo, + createTodo, + }); + }), + ).pipe( + // Provides the fetch-based HttpClient implementation. + Layer.provide(FetchHttpClient.layer), + ); +} + +export { FetchClientError, FetchClientExample }; diff --git a/web/app/themes/haiku-atelier-2024/src/scripts-effect/schemas/api.ts b/web/app/themes/haiku-atelier-2024/src/scripts-effect/schemas/api.ts index 97c8b1ff..e3480331 100644 --- a/web/app/themes/haiku-atelier-2024/src/scripts-effect/schemas/api.ts +++ b/web/app/themes/haiku-atelier-2024/src/scripts-effect/schemas/api.ts @@ -1,10 +1,10 @@ import { Schema } from "effect"; -import { ProductAttribute } from "./product.ts"; +import { ProductId, ProductQuantity, ProductVariationAttribute } from "./product.ts"; -class AddProductToCart extends Schema.Class("AddProductToCart")({ - id: Schema.Int, - quantity: Schema.Int.check(Schema.isGreaterThan(0)), - variation: Schema.Array(ProductAttribute), +class CartProduct extends Schema.Class("CartProduct")({ + id: ProductId, + quantity: ProductQuantity, + variation: Schema.Array(ProductVariationAttribute), }) {} -export { AddProductToCart }; +export { CartProduct }; diff --git a/web/app/themes/haiku-atelier-2024/src/scripts-effect/schemas/product.ts b/web/app/themes/haiku-atelier-2024/src/scripts-effect/schemas/product.ts index 1c8055a4..80cb0405 100644 --- a/web/app/themes/haiku-atelier-2024/src/scripts-effect/schemas/product.ts +++ b/web/app/themes/haiku-atelier-2024/src/scripts-effect/schemas/product.ts @@ -1,7 +1,49 @@ // oxlint-disable no-magic-numbers -- Pas besoin ici. -import { Schema } from "effect"; +import { Effect, Option, pipe, Schema, SchemaIssue, SchemaTransformation } from "effect"; +import type { SchemaError } from "effect/Schema"; + +/** Représente l'identifiant numérique unique d'un Produit. */ +const ProductId = Schema.Int.pipe(Schema.brand("ProductId")).check(Schema.isGreaterThan(0)); + +/** Représente l'identifiant numérique unique d'un Attribut. */ +const AttributeId = Schema.Int.pipe(Schema.brand("AttributeId")).check(Schema.isGreaterThan(0)); + +/** Réprésente une quantité (nombre d'unités) de Produit. */ +const ProductQuantity = Schema.Int.pipe(Schema.brand("ProductQuantity")).check(Schema.isGreaterThanOrEqualTo(0)); +/** Schéma transformant une chaîne de caractères en `ProductId` avec validation. */ +const ProductQuantityFromString = Schema.String.pipe( + Schema.decodeTo( + ProductQuantity, + SchemaTransformation.transformOrFail({ + decode: (value: string) => + pipe( + globalThis.Number(value), + (number: number) => ProductQuantity.makeEffect(number), + Effect.mapError((error: SchemaError) => new SchemaIssue.InvalidValue(Option.some(value), { cause: error })), + ), + encode: (value: number) => Effect.succeed(String(value)), + }), + ), +); + +class AttributeValue extends Schema.Class("AttributeValue")({ + /** L'identifiant numérique de la Valeur de l'Attribut. */ + id: AttributeId, + /** Le nom (texte affiché) de la Valeur de l'Attribut. */ + name: Schema.String, + /** L'identifiant alphanumérique _(slug)_ de la Valeur de l'Attribut. */ + slug: Schema.String, +}) {} class ProductAttribute extends Schema.Class("ProductAttribute")({ + /** Le nom de l'Attribut. */ + name: Schema.String, + options: Schema.Array(AttributeValue), + /** L'identifiant _(slug)_ de l'Attribut. */ + slug: Schema.String, +}) {} + +class ProductVariationAttribute extends Schema.Class("ProductVariationAttribute")({ /** L'identifiant _(slug)_ de l'Attribut. */ attribute: Schema.String, /** La valeur de l'attribut. */ @@ -10,11 +52,32 @@ class ProductAttribute extends Schema.Class("ProductAttribute" class ProductVariation extends Schema.Class("ProductVariation")({ /** Les Attributs présents pour cette Variation. */ - attributes: Schema.Array(ProductAttribute), + attributes: Schema.Array(ProductVariationAttribute), /** L'identifiant numérique unique de la Variation. */ - id: Schema.Int.check(Schema.isGreaterThan(0)), + id: ProductId, /** Le prix de la Variation. */ - price: Schema.NonEmptyString, + price: ProductQuantityFromString, }) {} -export { ProductAttribute, ProductVariation }; +class Product extends Schema.Class("Product")({ + /** Les Attributs applicables au Produit (en cas de Produit simple). */ + attributes: Schema.Union([Schema.Record(Schema.String, ProductAttribute), Schema.Array(ProductAttribute)]), + /** L'identifiant numérique unique du Produit. */ + id: ProductId, + /** Le prix du Produit. */ + price: ProductQuantityFromString, + /** Les Variations existantes du Produit (en cas de Produit variable). */ + variations: Schema.Array(ProductVariation), +}) {} + +export { + AttributeId, + AttributeValue, + Product, + ProductAttribute, + ProductId, + ProductQuantity, + ProductQuantityFromString, + ProductVariation, + ProductVariationAttribute, +}; diff --git a/web/app/themes/haiku-atelier-2024/src/scripts/page-produit/errors.ts b/web/app/themes/haiku-atelier-2024/src/scripts/page-produit/errors.ts new file mode 100644 index 00000000..ce6e4f35 --- /dev/null +++ b/web/app/themes/haiku-atelier-2024/src/scripts/page-produit/errors.ts @@ -0,0 +1,18 @@ +import { Schema, SchemaIssue } from "effect"; +import { NoSuchElementError } from "effect/Cause"; +import { SchemaError } from "effect/Schema"; + +class IncoherentDOMError extends Schema.TaggedErrorClass()("IncoherentDOMError", { + cause: Schema.String, +}) { + static readonly fromSchemaError = (error: SchemaError): IncoherentDOMError => + new IncoherentDOMError({ + cause: SchemaIssue.makeFormatterDefault()(error.issue), + }); + static readonly fromNoSuchElementError = (error: NoSuchElementError): IncoherentDOMError => + new IncoherentDOMError({ + cause: `Impossible de trouver l'Element suivant dans le DOM : ${error.message}.`, + }); +} + +export { IncoherentDOMError }; diff --git a/web/app/themes/haiku-atelier-2024/src/scripts/page-produit/runtime.ts b/web/app/themes/haiku-atelier-2024/src/scripts/page-produit/runtime.ts index 72941df3..66d37f80 100644 --- a/web/app/themes/haiku-atelier-2024/src/scripts/page-produit/runtime.ts +++ b/web/app/themes/haiku-atelier-2024/src/scripts/page-produit/runtime.ts @@ -1,11 +1,15 @@ import { Console, Layer, ManagedRuntime, pipe } from "effect"; +import { WooCommerceAPI } from "../../scripts-effect/api-service.ts"; +import { ApiClient } from "../../scripts-effect/lib/api.ts"; import ProductPageDOM from "./service-dom.ts"; import ProductPageElements from "./service-elements.ts"; const ProductPageRuntime = ManagedRuntime.make( pipe( ProductPageDOM.layer, + Layer.provide(ApiClient.layer), Layer.provide(ProductPageElements.layer), + Layer.provide(WooCommerceAPI.layer), Layer.tapError(error => Console.error("ProductPageRuntime", "Impossible de créer le Layer :", error)), ), ); diff --git a/web/app/themes/haiku-atelier-2024/src/scripts/page-produit/service-dom.ts b/web/app/themes/haiku-atelier-2024/src/scripts/page-produit/service-dom.ts index 672b94d0..60b53a73 100644 --- a/web/app/themes/haiku-atelier-2024/src/scripts/page-produit/service-dom.ts +++ b/web/app/themes/haiku-atelier-2024/src/scripts/page-produit/service-dom.ts @@ -14,17 +14,36 @@ import { Stream, } from "effect"; import type { NoSuchElementError } from "effect/Cause"; -import { AddProductToCart } from "../../scripts-effect/schemas/api.ts"; -import { ProductAttribute, ProductVariation } from "../../scripts-effect/schemas/product.ts"; +import type { SchemaError } from "effect/Schema"; +import { ApiClient, ApiRequestError } from "../../scripts-effect/lib/api.ts"; +import { CartProduct } from "../../scripts-effect/schemas/api.ts"; +import { Product, ProductVariation, ProductVariationAttribute } from "../../scripts-effect/schemas/product.ts"; import { ATTRIBUT_ARIA_CONTROLS, ATTRIBUT_ARIA_EXPANDED, + ATTRIBUT_CHARGEMENT, ATTRIBUT_DESACTIVE, ATTRIBUT_HIDDEN, } from "../constantes/dom.ts"; +import { lanceAnimationCycleLoading } from "../lib/animations.ts"; +import { IncoherentDOMError } from "./errors.ts"; import ProductPageElements from "./service-elements.ts"; import type { DetailEnsemble } from "./types.d.ts"; +const PageStatesSchema = Schema.Struct({ + nonce: Schema.NonEmptyString, + product: Product, +}); + +class InvalidPageStateError extends Schema.TaggedErrorClass()("InvalidPageStateError", { + cause: Schema.String, +}) { + static readonly fromSchemaError = (schemaError: SchemaError): InvalidPageStateError => + new InvalidPageStateError({ + cause: SchemaIssue.makeFormatterDefault()(schemaError.issue), + }); +} + class ProductPageDOM extends Context.Service< ProductPageDOM, { @@ -48,7 +67,7 @@ class ProductPageDOM extends Context.Service< * Replie toutes les sections de la description du Produit. */ initAddToCartButtonClicks: () => unknown; - ProductVariations: ReadonlyArray; + PageStates: typeof PageStatesSchema.Type; CurrentVariation: Ref.Ref>; } >()("haikuatelier.fr/Produit/ProductPageDOM") { @@ -60,11 +79,23 @@ class ProductPageDOM extends Context.Service< Details, DetailsButtons, ProductPrice, - ProductRawJson, VariationChoiceForm, VariationSelectors, + PageStatesRawJson, } = yield* ProductPageElements; - const onFormChangeHandler = Effect.fn("onFormChangeHandler")(function*(evt: Event): Effect.fn.Return { + const API = yield* ApiClient; + + const PageStates = yield* pipe( + PageStatesRawJson.textContent, + (textContent: string) => + Schema.decodeUnknownEffect(Schema.fromJsonString(PageStatesSchema))(textContent, { errors: "all" }), + Effect.mapError(InvalidPageStateError.fromSchemaError), + Effect.tapError(Console.error), + ); + + const CurrentProduct = yield* Ref.make(Option.none()); + + const onFormChangeHandler = Effect.fn("onFormChangeHandler")(function*(evt: Event) { // La cible ne peut qu'être un Formulaire. const target: HTMLFormElement = evt.target as HTMLFormElement; const isClickAllowed = target.checkValidity() === false; @@ -75,56 +106,57 @@ class ProductPageDOM extends Context.Service< return yield* Effect.void; }); - const toggleAllDetails: () => Effect.Effect = () => + const toggleAllDetails: (shouldOpen: boolean) => Effect.Effect = (shouldOpen: boolean) => Effect.sync((): void => { + console.debug("toggleAllDetails"); pipe( // Récupère les Sections sous forme d'Ensembles. [...HashMap.values(Details)], FxArray.forEach((detail: DetailEnsemble) => { - detail.button.toggleAttribute(ATTRIBUT_ARIA_EXPANDED, false); - detail.content.toggleAttribute(ATTRIBUT_HIDDEN, true); + detail.button.toggleAttribute(ATTRIBUT_ARIA_EXPANDED, shouldOpen); + detail.content.toggleAttribute(ATTRIBUT_HIDDEN, !shouldOpen); }), ); }); - const onDetailButtonClickHandler = Effect.fn("onDetailButtonClickHandler")(function*( - evt: Event, - ): Effect.fn.Return { - // Empêche la pollution de l'historique de navigation - evt.preventDefault(); + const onDetailButtonClickHandler = Effect.fn("onDetailButtonClickHandler")( + function*(evt: Event) { + // Empêche la pollution de l'historique de navigation + evt.preventDefault(); - // La cible est connue. - const target = evt.target as HTMLButtonElement; + // La cible est connue. + const target = evt.target as HTMLButtonElement; - // Récupère le contenu correspondant au Bouton. - const linkedSection = yield* pipe( - Option.fromNullishOr(target.getAttribute(ATTRIBUT_ARIA_CONTROLS)), - Option.flatMap((contentId: string) => HashMap.get(Details, contentId)), - ); + // Récupère le contenu correspondant au Bouton. + const linkedSection = yield* pipe( + Option.fromNullishOr(target.getAttribute(ATTRIBUT_ARIA_CONTROLS)), + Option.flatMap((contentId: string) => HashMap.get(Details, contentId)), + Effect.fromOption, + Effect.mapError( + () => new IncoherentDOMError({ cause: "Un bouton de section ne correspond à aucun contenu." }), + ), + ); - // Sauvegarde l'état d'ouverture de la Section avant de toutes les fermer. - const wasCurrentSection: boolean = target.getAttribute(ATTRIBUT_ARIA_EXPANDED) === "true"; + // Sauvegarde l'état d'ouverture de la Section avant de toutes les fermer. + const wasCurrentSection: boolean = target.getAttribute(ATTRIBUT_ARIA_EXPANDED) === "true"; - // Replie toutes les Sections. - yield* toggleAllDetails(); + // Replie toutes les Sections. + yield* toggleAllDetails(false); + + // Ne fais rien de plus si l'onglet sélectionné était le courant. + if (wasCurrentSection === true) { + return yield* Effect.void; + } + + // Ouvre le nouvel onglet sélectionné. + target.toggleAttribute(ATTRIBUT_ARIA_EXPANDED, true); + linkedSection.content.toggleAttribute(ATTRIBUT_HIDDEN, false); - // Ne fais rien de plus si l'onglet sélectionné était le courant - if (wasCurrentSection === true) { return yield* Effect.void; - } - - // Ouvre le nouvel onglet sélectionné - target.toggleAttribute(ATTRIBUT_ARIA_EXPANDED, true); - linkedSection.content.toggleAttribute(ATTRIBUT_HIDDEN, false); - - return yield* Effect.void; - }); - - const ProductVariations: ReadonlyArray = yield* pipe( - JSON.parse(ProductRawJson.textContent)?.variations, - json => Schema.decodeUnknownEffect(Schema.Array(ProductVariation))(json, { onExcessProperty: "ignore" }), - Effect.mapError(error => SchemaIssue.makeFormatterStandardSchemaV1()(error.issue)), - Effect.tapCause(Console.error), + }, + Effect.tapError(Console.error), + // Ouvre toutes les Sections en cas d'erreur. + Effect.catch(() => toggleAllDetails(true)), ); const getChosenProductAttributesFromDOM = Effect.fn("getChosenProductAttributesFromDOM")(function*() { @@ -133,60 +165,99 @@ class ProductPageDOM extends Context.Service< attribute: select.id, value: select.value, })), - variations => Schema.decodeEffect(Schema.Array(ProductAttribute))(variations), - Effect.mapError(error => SchemaIssue.makeFormatterDefault()(error.issue)), - Effect.tapCause(Console.error), + variations => + Schema.decodeEffect(Schema.Array(ProductVariationAttribute))(variations, { + errors: "all", + onExcessProperty: "error", + }), + Effect.mapError(IncoherentDOMError.fromSchemaError), + Effect.tapError(Console.error), ); }); - const CurrentVariation = yield* Ref.make(Option.none()); - - const onVariationChangeHandler = Effect.fn("onVariationChangeHandler")(function*(): Effect.fn.Return< - void, - NoSuchElementError | string - > { - yield* Console.debug("onVariationChangeHandler"); + const onVariationChangeHandler = Effect.fn("onVariationChangeHandler")(function*() { + yield* Console.log("onVariationChangeHandler"); // Ne fais rien si le Formulaire n'est pas valide. if (VariationChoiceForm.checkValidity() === false) { yield* Console.debug("onVariationChangeHandler", "Le formulaire est invalide."); return yield* Effect.void; } - const equivalence = Schema.toEquivalence(Schema.Array(ProductAttribute)); + const equivalence = Schema.toEquivalence(Schema.Array(ProductVariationAttribute)); const chosenProductAttributes = yield* getChosenProductAttributesFromDOM(); - const chosenVariation: ProductVariation = yield* FxArray.findFirst( - ProductVariations, - (variation: ProductVariation) => equivalence(variation.attributes, chosenProductAttributes), + yield* Console.debug("onVariationChangeHandler", "chosenProductAttributes", chosenProductAttributes); + const chosenVariation = yield* pipe( + FxArray.findFirst( + PageStates.product.variations, + variation => equivalence(variation.attributes, chosenProductAttributes), + ), + Effect.fromOption, + Effect.mapError(error => new Error("Impossible de trouver la variation demandée.", { cause: error })), ); + yield* Console.debug("onVariationChangeHandler", "chosenVariation", chosenVariation); // Met à jour la valeur de la Variation choisie dans le Service. - yield* Ref.set(Option.some(chosenVariation))(CurrentVariation); + yield* Ref.set(Option.some(chosenVariation))(CurrentProduct); - const newPrice = chosenVariation.price; + const newPrice = String(chosenVariation.price); ProductPrice.textContent = `${newPrice}€`; return yield* Effect.void; - }, Effect.tapCause(Console.error)); + }, Effect.tapError(Console.error)); - const onAddToCartButtonHandler = Effect.fn("onAddToCartButtonHandler")(function*() { - const chosenVariation = yield* Ref.getUnsafe(CurrentVariation); - const productDetails = yield* Schema.decodeEffect(AddProductToCart)( - { - id: chosenVariation.id, - quantity: 1, - variation: chosenVariation.attributes, - }, - { errors: "all" }, - ); - - console.debug(productDetails); + const recoverFromBackendFailure = Effect.fn("recoverFromBackendFailure")(function*(error: ApiRequestError) { + yield* Console.error(error.reason); + AddToCartButton.textContent = "Error while adding the Product to the Cart..."; + return yield* Effect.void; }); + /** + * Déclenche une ajout du Produit demandé au Panier auprès du Backend. + */ + const addToCartButtonClickHandler = Effect.fn("addToCartButtonClickHandler")( + function*() { + yield* Console.log("addToCartButtonClickHandler"); + + // Créé le corps de la requête + const requestBody: CartProduct = yield* pipe( + Ref.get(CurrentProduct), + Effect.flatMap(Effect.fromOption), + // Pour un Produit simple, le Ref sera vide. + Effect.orElseSucceed(() => + ProductVariation.make({ + attributes: [], + id: PageStates.product.id, + price: PageStates.product.price, + }) + ), + Effect.map(({ id, attributes }) => + // Les données ont été validées en amont. + Schema.decodeSync(CartProduct)({ id: id, quantity: 1, variation: attributes }) + ), + Effect.tap(body => Console.debug("addToCartButtonClickHandler", "requestBody", body)), + ); + + // Désactive les interactions le temps de la requête. + AddToCartButton.toggleAttribute(ATTRIBUT_DESACTIVE, true); + AddToCartButton.toggleAttribute(ATTRIBUT_CHARGEMENT, true); + lanceAnimationCycleLoading(AddToCartButton, 500); + + // Exécute la Requête auprès du backend. + yield* API.AddProductToCart(PageStates.nonce, requestBody); + + AddToCartButton.toggleAttribute(ATTRIBUT_DESACTIVE, false); + AddToCartButton.toggleAttribute(ATTRIBUT_CHARGEMENT, false); + AddToCartButton.textContent = "Add to cart"; + }, + Effect.tapError(Console.error), + Effect.catchTag("ApiRequestError", recoverFromBackendFailure), + ); + const initAddToCartButtonInitialState = Effect.fn("initAddToCartButtonInitialState")(function*() { /** Est-ce que le Produit affiché est en stock ? */ const isProductInStock = AddToCartButton.hasAttribute("data-in-stock") === true; - // S'il n'y a pas de stock, ne rien faire. + // S'('y a pas de stock, ne rien faire. if (isProductInStock === false) { return yield* Effect.void; } @@ -199,32 +270,32 @@ class ProductPageDOM extends Context.Service< return yield* Effect.void; }); - const initAddToCartButtonUpdates = Effect.fn("initAddToCartInteractionUpdates")(function*() { - return yield* pipe( - Stream.fromEventListener(VariationChoiceForm, "change"), - Stream.tap(onFormChangeHandler), - Stream.runDrain, - ); - }); - - const initAddToCartButtonClicks = Effect.fn("initAddToCartButtonClicks")(function*() { - return yield* pipe( - Stream.fromEventListener(AddToCartButton, "click"), - Stream.tap(onAddToCartButtonHandler), - Stream.runDrain, - ); - }); - - const initPriceUpdatesOnVariationChange = Effect.fn("initPriceUpdatesOnVariationChange")( - function*(): Effect.fn.Return { + const initAddToCartButtonUpdates = Effect.fn("initAddToCartInteractionUpdates")( + function*(): Effect.fn.Return { return yield* pipe( Stream.fromEventListener(VariationChoiceForm, "change"), - Stream.tap(onVariationChangeHandler), + Stream.tap(onFormChangeHandler), Stream.runDrain, ); }, ); + const initAddToCartButtonClicks = Effect.fn("initAddToCartButtonClicks")(function*() { + return yield* pipe( + Stream.fromEventListener(AddToCartButton, "click"), + Stream.tap(addToCartButtonClickHandler), + Stream.runDrain, + ); + }); + + const initPriceUpdatesOnVariationChange = Effect.fn("initPriceUpdatesOnVariationChange")(function*() { + return yield* pipe( + Stream.fromEventListener(VariationChoiceForm, "change"), + Stream.tap(onVariationChangeHandler), + Stream.runDrain, + ); + }); + const initDetailInteractions = Effect.fn("initDetailInteractions")(function*() { return yield* pipe( // Créé un Stream par Bouton de Section. @@ -239,13 +310,13 @@ class ProductPageDOM extends Context.Service< }); return ProductPageDOM.of({ - CurrentVariation, - ProductVariations, + CurrentVariation: CurrentProduct, initAddToCartButtonClicks, initAddToCartButtonInitialState, initAddToCartButtonUpdates, initDetailInteractions, initPriceUpdatesOnVariationChange, + PageStates, }); }), ); diff --git a/web/app/themes/haiku-atelier-2024/src/scripts/page-produit/service-elements.ts b/web/app/themes/haiku-atelier-2024/src/scripts/page-produit/service-elements.ts index bb673c5f..4bacd823 100644 --- a/web/app/themes/haiku-atelier-2024/src/scripts/page-produit/service-elements.ts +++ b/web/app/themes/haiku-atelier-2024/src/scripts/page-produit/service-elements.ts @@ -9,6 +9,7 @@ import { DOM_CONTENUS_ACCORDEON, DOM_PRIX_PRODUIT, } from "../constantes/dom.ts"; +import { IncoherentDOMError } from "./errors.ts"; import type { DetailEnsemble } from "./types.d.ts"; class ProductPageElements extends Context.Service< @@ -18,8 +19,8 @@ class ProductPageElements extends Context.Service< Details: HashMap.HashMap; DetailsButtons: NonEmptyReadonlyArray; DetailsContents: NonEmptyReadonlyArray; + PageStatesRawJson: HTMLScriptElement; ProductPrice: HTMLParagraphElement; - ProductRawJson: HTMLScriptElement; VariationChoiceForm: HTMLFormElement; VariationSelectors: ReadonlyArray; } @@ -30,8 +31,8 @@ class ProductPageElements extends Context.Service< const AddToCartButton = yield* getFirstSelectorFromDocument(DOM_BOUTON_AJOUT_PANIER); const DetailsButtons = yield* getAllSelectorFromDocument(DOM_BOUTONS_ACCORDEON); const DetailsContents = yield* getAllSelectorFromDocument(DOM_CONTENUS_ACCORDEON); + const PageStatesRawJson = yield* getFirstSelectorFromDocument("#page-states"); const ProductPrice = yield* getFirstSelectorFromDocument(DOM_PRIX_PRODUIT); - const ProductRawJson = yield* getFirstSelectorFromDocument("#product-json"); const VariationChoiceForm = yield* getFirstSelectorFromDocument("#variation-choice"); const VariationSelectors = yield* pipe( getAllSelectorFromDocument(".selecteur-produit select"), @@ -58,12 +59,12 @@ class ProductPageElements extends Context.Service< Details, DetailsButtons, DetailsContents, + PageStatesRawJson, ProductPrice, - ProductRawJson, VariationChoiceForm, VariationSelectors, }); - }), + }).pipe(Effect.mapError(IncoherentDOMError.fromNoSuchElementError)), ); } diff --git a/web/app/themes/haiku-atelier-2024/src/scripts/page-produit/types.d.ts b/web/app/themes/haiku-atelier-2024/src/scripts/page-produit/types.d.ts index f1940311..e2d10ebd 100644 --- a/web/app/themes/haiku-atelier-2024/src/scripts/page-produit/types.d.ts +++ b/web/app/themes/haiku-atelier-2024/src/scripts/page-produit/types.d.ts @@ -3,4 +3,5 @@ type DetailEnsemble = { button: HTMLButtonElement; content: HTMLDivElement; }; + export { DetailEnsemble }; diff --git a/web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-produit.ts b/web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-produit.ts index 28116d1a..574086ef 100755 --- a/web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-produit.ts +++ b/web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-produit.ts @@ -4,30 +4,17 @@ import { Console, Effect } from "effect"; import ProductPageRuntime from "./page-produit/runtime.ts"; import ProductPageDOM from "./page-produit/service-dom.ts"; -/** États utiles pour les scripts de la page. */ -type EtatsPage = { - /** L'ID en base de données du Produit. */ - idProduit: number; - /** Un nonce pour l'authentification de requêtes API vers le backend WooCommerce. */ - nonce: string; -}; - -// @ts-expect-error -- États injectés par le modèle PHP -const ETATS_PAGE: EtatsPage = _etats; - document.addEventListener("DOMContentLoaded", (): void => { - console.debug("oups"); - Effect.gen(function* () { + Effect.gen(function*() { const DOM = yield* ProductPageDOM; - console.debug("oups"); const effects = Effect.all( [ DOM.initAddToCartButtonInitialState(), DOM.initAddToCartButtonUpdates(), + DOM.initAddToCartButtonClicks(), DOM.initDetailInteractions(), DOM.initPriceUpdatesOnVariationChange(), - DOM.initAddToCartButtonClicks(), ], { concurrency: "unbounded",