diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 63c35802..157cdc3c 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -1,16 +1,42 @@ module.exports = { - root: true, - env: { browser: true, es2020: true }, extends: [ 'eslint:recommended', 'plugin:@typescript-eslint/recommended', 'plugin:react-hooks/recommended', 'plugin:@tanstack/eslint-plugin-query/recommended', + 'prettier' ], - ignorePatterns: ['dist', '.eslintrc.cjs'], parser: '@typescript-eslint/parser', - plugins: ['react-refresh'], + plugins: ['react-refresh', '@typescript-eslint'], + root: true, + env: { browser: true, es2020: true }, + ignorePatterns: ['dist', '.eslintrc.cjs'], rules: { + // 1. 'react-refresh/only-export-components': Ensure React components are exported properly + // Warn because it's important but not necessarily an error 'react-refresh/only-export-components': ['warn', { allowConstantExport: true }], + + // 2. '@typescript-eslint/ban-ts-comment': Avoid using @ts-ignore comments + // Warn to discourage usage, but doesn't necessarily break the build + '@typescript-eslint/ban-ts-comment': 'warn', + + // 3. '@typescript-eslint/no-var-requires': Discourage using require() in favor of ES6 imports + // Warn to discourage usage, but doesn't necessarily break the build + '@typescript-eslint/no-var-requires': 'warn', + + // 4. '@typescript-eslint/no-explicit-any': Avoid using explicit 'any' types + // Warn to encourage type safety, could be upgraded to 'error' for stricter enforcement + '@typescript-eslint/no-explicit-any': 'warn', + + // 5. '@tanstack/query/exhaustive-deps': Ensure exhaustive dependency arrays in React hooks + // Warn to highlight potential issues, but doesn't necessarily break the build + '@tanstack/query/exhaustive-deps': 'warn', + + // 6. '@typescript-eslint/no-unused-vars': Avoid unused variables, enforcing cleaner code + // Error to ensure unused variables are caught during linting + '@typescript-eslint/no-unused-vars': [ + 'error', + { argsIgnorePattern: '^_', varsIgnorePattern: '^_ignored', ignoreRestSiblings: true }, + ], }, -}; +}; \ No newline at end of file diff --git a/.github/workflows/check-formatting.yml b/.github/workflows/check-formatting.yml new file mode 100644 index 00000000..d4c8c816 --- /dev/null +++ b/.github/workflows/check-formatting.yml @@ -0,0 +1,35 @@ +name: Check Formatting + +on: + pull_request: + types: [opened, synchronize, reopened] + branches: + - develop + - main + +concurrency: + # group runs by -- + group: ${{ github.workflow }}-${{ github.job }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + formatting: + name: Check formatting + timeout-minutes: 2 + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v2 + with: + version: 8 + - name: Setup Node.js environment + uses: actions/setup-node@v3 + with: + node-version-file: '.nvmrc' + cache: 'pnpm' + + - name: Install dependencies + run: pnpm install + + - name: Review formatting + run: pnpm format \ No newline at end of file diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 00000000..cab3377c --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,36 @@ +name: Linting + +on: + pull_request: + types: [opened, synchronize, reopened] + branches: + - develop + - main + +concurrency: + # group runs by -- + group: ${{ github.workflow }}-${{ github.job }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + linting: + name: Check linting + timeout-minutes: 2 + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v2 + with: + version: 8 + - name: Setup Node.js environment + uses: actions/setup-node@v3 + with: + node-version-file: '.nvmrc' + cache: 'pnpm' + + - name: Install dependencies + run: pnpm install + + - name: Review linting + run: pnpm lint diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 00000000..85aee5a5 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +v20 \ No newline at end of file diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index 57737524..00000000 --- a/.prettierrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "printWidth": 100, - "trailingComma": "es5", - "tabWidth": 2, - "semi": true, - "singleQuote": true -} diff --git a/.prettierrc.cjs b/.prettierrc.cjs new file mode 100644 index 00000000..c920e99b --- /dev/null +++ b/.prettierrc.cjs @@ -0,0 +1,6 @@ +module.exports = { + tabWidth: 2, + singleQuote: true, + quoteProps: 'consistent', + printWidth: 100, +}; \ No newline at end of file diff --git a/package.json b/package.json index 1755631f..d62f8c3b 100644 --- a/package.json +++ b/package.json @@ -6,14 +6,19 @@ "scripts": { "core:dev": "pnpm -r --filter core dev", "core:build": "pnpm -r --filter core build", - "core:lint": "pnpm -r --filter core lint", - "core:format": "pnpm -r --filter core format", "core:preview": "pnpm -r --filter core preview", "berlin:dev": "pnpm -r --filter berlin dev", "berlin:build": "pnpm -r --filter berlin build", - "berlin:lint": "pnpm -r --filter berlin lint", - "berlin:format": "pnpm -r --filter berlin format", - "berlin:preview": "pnpm -r --filter berlin preview" + "berlin:preview": "pnpm -r --filter berlin preview", + "format": "prettier --check \"packages/**/*.{ts,md}\"", + "format:fix": "prettier --write \"packages/**/*.{ts,md}\"", + "lint": "eslint ." + }, + "keywords": [], + "author": "", + "license": "ISC", + "engines": { + "node": "^20" }, "dependencies": { "@hookform/resolvers": "^3.3.4", @@ -36,13 +41,14 @@ "@tanstack/eslint-plugin-query": "^5.18.0", "@types/react": "^18.2.37", "@types/react-dom": "^18.2.15", - "@typescript-eslint/eslint-plugin": "^6.10.0", - "@typescript-eslint/parser": "^6.10.0", + "@typescript-eslint/eslint-plugin": "^6.19.0", + "@typescript-eslint/parser": "^6.19.0", "@vitejs/plugin-react": "^4.2.0", - "eslint": "^8.53.0", + "eslint": "^8.56.0", + "eslint-config-prettier": "^9.1.0", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.4", - "prettier": "3.1.0", + "prettier": "^3.1.1", "typescript": "^5.2.2", "vite": "^5.0.0", "vite-plugin-node-polyfills": "^0.17.0" diff --git a/packages/api/src/fetchEventCycles.ts b/packages/api/src/fetchEventCycles.ts index a4cf560c..d92d7fc5 100644 --- a/packages/api/src/fetchEventCycles.ts +++ b/packages/api/src/fetchEventCycles.ts @@ -9,7 +9,7 @@ async function fetchEventCycles(eventId: string): Promise { try { const response = await fetch( @@ -11,7 +11,7 @@ async function fetchForumQuestionStatistics( headers: { 'Content-Type': 'application/json', }, - } + }, ); if (!response.ok) { throw new Error(`HTTP Error! Status: ${response.status}`); diff --git a/packages/api/src/fetchRegistration.ts b/packages/api/src/fetchRegistration.ts index 0cec88d0..7da28037 100644 --- a/packages/api/src/fetchRegistration.ts +++ b/packages/api/src/fetchRegistration.ts @@ -9,7 +9,7 @@ async function fetchRegistration(eventId: string): Promise { try { const response = await fetch( @@ -11,7 +11,7 @@ async function fetchRegistrationFields( headers: { 'Content-Type': 'application/json', }, - } + }, ); if (!response.ok) { diff --git a/packages/api/src/fetchUserAttributes.ts b/packages/api/src/fetchUserAttributes.ts index 3de0a8b6..fe384264 100644 --- a/packages/api/src/fetchUserAttributes.ts +++ b/packages/api/src/fetchUserAttributes.ts @@ -9,7 +9,7 @@ async function fetchUserAttributes(userId: string): Promise { try { const response = await fetch( @@ -12,7 +12,7 @@ async function fetchUserVotes( headers: { 'Content-Type': 'application/json', }, - } + }, ); if (!response.ok) { throw new Error(`HTTP Error! Status: ${response.status}`); diff --git a/packages/api/src/postRegistrationData.ts b/packages/api/src/postRegistrationData.ts index f2ad9cbd..542a1ff0 100644 --- a/packages/api/src/postRegistrationData.ts +++ b/packages/api/src/postRegistrationData.ts @@ -20,7 +20,7 @@ async function postRegistrationData({ 'Content-Type': 'application/json', }, body: JSON.stringify(body), - } + }, ); if (!response.ok) { diff --git a/packages/berlin/src/store/index.ts b/packages/berlin/src/store/index.ts index 89f3bdba..81f81857 100644 --- a/packages/berlin/src/store/index.ts +++ b/packages/berlin/src/store/index.ts @@ -26,7 +26,7 @@ export const useAppStore = create()( toggleTheme: () => set((state) => ({ theme: state.theme === 'light' ? 'dark' : 'light' })), reset: () => set(() => ({ userStatus: 'INCOMPLETE' })), }), - { name: 'lexicon-store' } - ) - ) + { name: 'lexicon-store' }, + ), + ), ); diff --git a/packages/berlin/src/utils/formatGroups.ts b/packages/berlin/src/utils/formatGroups.ts index 3a038303..84740c96 100644 --- a/packages/berlin/src/utils/formatGroups.ts +++ b/packages/berlin/src/utils/formatGroups.ts @@ -6,14 +6,16 @@ import { GetGroupsResponse } from '../types/GroupType'; * @returns An array of formatted group objects with "Other" and "None" placed at the beginning. */ export const formatGroups = (groups: GetGroupsResponse[] | null | undefined) => { - return groups + return ( + groups ?.sort((a, b) => a.name.localeCompare(b.name)) - ?.reduce((acc: { name: string; id: string; }[], group) => { + ?.reduce((acc: { name: string; id: string }[], group) => { if (group.name === 'Other' || group.name === 'None') { acc.unshift({ name: group.name, id: group.id }); } else { acc.push({ name: group.name, id: group.id }); } return acc; - }, []) || []; - }; \ No newline at end of file + }, []) || [] + ); +}; diff --git a/packages/core/src/store.ts b/packages/core/src/store.ts index 15c96702..3dd8c43c 100644 --- a/packages/core/src/store.ts +++ b/packages/core/src/store.ts @@ -22,7 +22,7 @@ export const useAppStore = create()( set(() => ({ onboardingStatus: status })), reset: () => set(() => ({ userStatus: 'INCOMPLETE' })), }), - { name: 'lexicon-store' } - ) - ) + { name: 'lexicon-store' }, + ), + ), ); diff --git a/packages/core/src/utils/formatGroups.ts b/packages/core/src/utils/formatGroups.ts index 3a038303..84740c96 100644 --- a/packages/core/src/utils/formatGroups.ts +++ b/packages/core/src/utils/formatGroups.ts @@ -6,14 +6,16 @@ import { GetGroupsResponse } from '../types/GroupType'; * @returns An array of formatted group objects with "Other" and "None" placed at the beginning. */ export const formatGroups = (groups: GetGroupsResponse[] | null | undefined) => { - return groups + return ( + groups ?.sort((a, b) => a.name.localeCompare(b.name)) - ?.reduce((acc: { name: string; id: string; }[], group) => { + ?.reduce((acc: { name: string; id: string }[], group) => { if (group.name === 'Other' || group.name === 'None') { acc.unshift({ name: group.name, id: group.id }); } else { acc.push({ name: group.name, id: group.id }); } return acc; - }, []) || []; - }; \ No newline at end of file + }, []) || [] + ); +}; diff --git a/packages/core/src/utils/handleSignatureRequest.ts b/packages/core/src/utils/handleSignatureRequest.ts index f58ae2d8..41ce2f19 100644 --- a/packages/core/src/utils/handleSignatureRequest.ts +++ b/packages/core/src/utils/handleSignatureRequest.ts @@ -30,7 +30,7 @@ const handleSignatureRequest = (nonce: string | null) => { args, { genericProveScreen: true, - } + }, ); openZupassPopup(POPUP_URL, constructProofUrl); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8fd9d5cf..39ba1794 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -56,7 +56,7 @@ importers: devDependencies: '@tanstack/eslint-plugin-query': specifier: ^5.18.0 - version: 5.18.1(eslint@8.55.0)(typescript@5.3.3) + version: 5.18.1(eslint@8.56.0)(typescript@5.3.3) '@types/react': specifier: ^18.2.37 version: 18.2.42 @@ -64,26 +64,29 @@ importers: specifier: ^18.2.15 version: 18.2.17 '@typescript-eslint/eslint-plugin': - specifier: ^6.10.0 - version: 6.13.2(@typescript-eslint/parser@6.13.2)(eslint@8.55.0)(typescript@5.3.3) + specifier: ^6.19.0 + version: 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/parser': - specifier: ^6.10.0 - version: 6.13.2(eslint@8.55.0)(typescript@5.3.3) + specifier: ^6.19.0 + version: 6.21.0(eslint@8.56.0)(typescript@5.3.3) '@vitejs/plugin-react': specifier: ^4.2.0 version: 4.2.1(vite@5.0.6) eslint: - specifier: ^8.53.0 - version: 8.55.0 + specifier: ^8.56.0 + version: 8.56.0 + eslint-config-prettier: + specifier: ^9.1.0 + version: 9.1.0(eslint@8.56.0) eslint-plugin-react-hooks: specifier: ^4.6.0 - version: 4.6.0(eslint@8.55.0) + version: 4.6.0(eslint@8.56.0) eslint-plugin-react-refresh: specifier: ^0.4.4 - version: 0.4.5(eslint@8.55.0) + version: 0.4.5(eslint@8.56.0) prettier: - specifier: 3.1.0 - version: 3.1.0 + specifier: ^3.1.1 + version: 3.2.5 typescript: specifier: ^5.2.2 version: 5.3.3 @@ -553,13 +556,13 @@ packages: dev: true optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.55.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.55.0 + eslint: 8.56.0 eslint-visitor-keys: 3.4.3 dev: true @@ -585,8 +588,8 @@ packages: - supports-color dev: true - /@eslint/js@8.55.0: - resolution: {integrity: sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==} + /@eslint/js@8.56.0: + resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -1426,13 +1429,13 @@ packages: '@zk-kit/incremental-merkle-tree': 0.4.3 dev: false - /@tanstack/eslint-plugin-query@5.18.1(eslint@8.55.0)(typescript@5.3.3): + /@tanstack/eslint-plugin-query@5.18.1(eslint@8.56.0)(typescript@5.3.3): resolution: {integrity: sha512-pLHqd2RYSbGxhFXdjVxo5Gmi1aJfcXDpZQsjLHEkGEXFb65WzX6LMCz7n2rW3wBElDerRLFZNVLC61Pg/TlYsA==} peerDependencies: eslint: ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.55.0)(typescript@5.3.3) - eslint: 8.55.0 + '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) + eslint: 8.56.0 transitivePeerDependencies: - supports-color - typescript @@ -1530,8 +1533,8 @@ packages: resolution: {integrity: sha512-36ZrGJ8fgtBr6nwNnuJ9jXIj+bn/pF6UoqmrQT7+Y99+tFFeHHsoR54+194dHdyhPjgbeoNz3Qru0oRt0l6ASQ==} dev: false - /@typescript-eslint/eslint-plugin@6.13.2(@typescript-eslint/parser@6.13.2)(eslint@8.55.0)(typescript@5.3.3): - resolution: {integrity: sha512-3+9OGAWHhk4O1LlcwLBONbdXsAhLjyCFogJY/cWy2lxdVJ2JrcTF2pTGMaLl2AE7U1l31n8Py4a8bx5DLf/0dQ==} + /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -1542,13 +1545,13 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.13.2(eslint@8.55.0)(typescript@5.3.3) - '@typescript-eslint/scope-manager': 6.13.2 - '@typescript-eslint/type-utils': 6.13.2(eslint@8.55.0)(typescript@5.3.3) - '@typescript-eslint/utils': 6.13.2(eslint@8.55.0)(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.13.2 + '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/type-utils': 6.21.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/utils': 6.21.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.4(supports-color@5.5.0) - eslint: 8.55.0 + eslint: 8.56.0 graphemer: 1.4.0 ignore: 5.3.0 natural-compare: 1.4.0 @@ -1559,8 +1562,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@6.13.2(eslint@8.55.0)(typescript@5.3.3): - resolution: {integrity: sha512-MUkcC+7Wt/QOGeVlM8aGGJZy1XV5YKjTpq9jK6r6/iLsGXhBVaGP5N0UYvFsu9BFlSpwY9kMretzdBH01rkRXg==} + /@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -1569,12 +1572,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.13.2 - '@typescript-eslint/types': 6.13.2 - '@typescript-eslint/typescript-estree': 6.13.2(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.13.2 + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.4(supports-color@5.5.0) - eslint: 8.55.0 + eslint: 8.56.0 typescript: 5.3.3 transitivePeerDependencies: - supports-color @@ -1588,16 +1591,16 @@ packages: '@typescript-eslint/visitor-keys': 5.62.0 dev: true - /@typescript-eslint/scope-manager@6.13.2: - resolution: {integrity: sha512-CXQA0xo7z6x13FeDYCgBkjWzNqzBn8RXaE3QVQVIUm74fWJLkJkaHmHdKStrxQllGh6Q4eUGyNpMe0b1hMkXFA==} + /@typescript-eslint/scope-manager@6.21.0: + resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.13.2 - '@typescript-eslint/visitor-keys': 6.13.2 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 dev: true - /@typescript-eslint/type-utils@6.13.2(eslint@8.55.0)(typescript@5.3.3): - resolution: {integrity: sha512-Qr6ssS1GFongzH2qfnWKkAQmMUyZSyOr0W54nZNU1MDfo+U4Mv3XveeLZzadc/yq8iYhQZHYT+eoXJqnACM1tw==} + /@typescript-eslint/type-utils@6.21.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -1606,10 +1609,10 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.13.2(typescript@5.3.3) - '@typescript-eslint/utils': 6.13.2(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.3.3) + '@typescript-eslint/utils': 6.21.0(eslint@8.56.0)(typescript@5.3.3) debug: 4.3.4(supports-color@5.5.0) - eslint: 8.55.0 + eslint: 8.56.0 ts-api-utils: 1.0.3(typescript@5.3.3) typescript: 5.3.3 transitivePeerDependencies: @@ -1621,8 +1624,8 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/types@6.13.2: - resolution: {integrity: sha512-7sxbQ+EMRubQc3wTfTsycgYpSujyVbI1xw+3UMRUcrhSy+pN09y/lWzeKDbvhoqcRbHdc+APLs/PWYi/cisLPg==} + /@typescript-eslint/types@6.21.0: + resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} engines: {node: ^16.0.0 || >=18.0.0} dev: true @@ -1647,8 +1650,8 @@ packages: - supports-color dev: true - /@typescript-eslint/typescript-estree@6.13.2(typescript@5.3.3): - resolution: {integrity: sha512-SuD8YLQv6WHnOEtKv8D6HZUzOub855cfPnPMKvdM/Bh1plv1f7Q/0iFUDLKKlxHcEstQnaUU4QZskgQq74t+3w==} + /@typescript-eslint/typescript-estree@6.21.0(typescript@5.3.3): + resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -1656,11 +1659,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.13.2 - '@typescript-eslint/visitor-keys': 6.13.2 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.4(supports-color@5.5.0) globby: 11.1.0 is-glob: 4.0.3 + minimatch: 9.0.3 semver: 7.5.4 ts-api-utils: 1.0.3(typescript@5.3.3) typescript: 5.3.3 @@ -1668,19 +1672,19 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.55.0)(typescript@5.3.3): + /@typescript-eslint/utils@5.62.0(eslint@8.56.0)(typescript@5.3.3): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.6 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3) - eslint: 8.55.0 + eslint: 8.56.0 eslint-scope: 5.1.1 semver: 7.5.4 transitivePeerDependencies: @@ -1688,19 +1692,19 @@ packages: - typescript dev: true - /@typescript-eslint/utils@6.13.2(eslint@8.55.0)(typescript@5.3.3): - resolution: {integrity: sha512-b9Ptq4eAZUym4idijCRzl61oPCwwREcfDI8xGk751Vhzig5fFZR9CyzDz4Sp/nxSLBYxUPyh4QdIDqWykFhNmQ==} + /@typescript-eslint/utils@6.21.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.6 - '@typescript-eslint/scope-manager': 6.13.2 - '@typescript-eslint/types': 6.13.2 - '@typescript-eslint/typescript-estree': 6.13.2(typescript@5.3.3) - eslint: 8.55.0 + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.3.3) + eslint: 8.56.0 semver: 7.5.4 transitivePeerDependencies: - supports-color @@ -1715,11 +1719,11 @@ packages: eslint-visitor-keys: 3.4.3 dev: true - /@typescript-eslint/visitor-keys@6.13.2: - resolution: {integrity: sha512-OGznFs0eAQXJsp+xSd6k/O1UbFi/K/L7WjqeRoFE7vadjAF9y0uppXhYNQNEqygjou782maGClOoZwPqF0Drlw==} + /@typescript-eslint/visitor-keys@6.21.0: + resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.13.2 + '@typescript-eslint/types': 6.21.0 eslint-visitor-keys: 3.4.3 dev: true @@ -1918,6 +1922,12 @@ packages: concat-map: 0.0.1 dev: true + /brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + dev: true + /braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} @@ -2342,21 +2352,30 @@ packages: engines: {node: '>=10'} dev: true - /eslint-plugin-react-hooks@4.6.0(eslint@8.55.0): + /eslint-config-prettier@9.1.0(eslint@8.56.0): + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + dependencies: + eslint: 8.56.0 + dev: true + + /eslint-plugin-react-hooks@4.6.0(eslint@8.56.0): resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} engines: {node: '>=10'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 dependencies: - eslint: 8.55.0 + eslint: 8.56.0 dev: true - /eslint-plugin-react-refresh@0.4.5(eslint@8.55.0): + /eslint-plugin-react-refresh@0.4.5(eslint@8.56.0): resolution: {integrity: sha512-D53FYKJa+fDmZMtriODxvhwrO+IOqrxoEo21gMA0sjHdU6dPVH4OhyFip9ypl8HOF5RV5KdTo+rBQLvnY2cO8w==} peerDependencies: eslint: '>=7' dependencies: - eslint: 8.55.0 + eslint: 8.56.0 dev: true /eslint-scope@5.1.1: @@ -2380,15 +2399,15 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.55.0: - resolution: {integrity: sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==} + /eslint@8.56.0: + resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@eslint-community/regexpp': 4.10.0 '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.55.0 + '@eslint/js': 8.56.0 '@humanwhocodes/config-array': 0.11.13 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 @@ -3049,6 +3068,13 @@ packages: brace-expansion: 1.1.11 dev: true + /minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} @@ -3278,8 +3304,8 @@ packages: engines: {node: '>= 0.8.0'} dev: true - /prettier@3.1.0: - resolution: {integrity: sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==} + /prettier@3.2.5: + resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} engines: {node: '>=14'} hasBin: true dev: true