From d920a1e0581a174051c10a5e52753eb11bf5a6bc Mon Sep 17 00:00:00 2001 From: James Robb <47126579+jamesrweb@users.noreply.github.com> Date: Tue, 17 Mar 2026 10:52:44 +0100 Subject: [PATCH 1/3] feat: Improve project workflows --- .github/actions/setup/action.yml | 27 ++++ .github/workflows/CD.yml | 70 ++-------- .github/workflows/CI.yml | 208 ++++++---------------------- .github/workflows/CODEQL.yml | 15 +- .github/workflows/DependabotBot.yml | 60 ++++---- .gitignore | 1 + 6 files changed, 113 insertions(+), 268 deletions(-) create mode 100644 .github/actions/setup/action.yml diff --git a/.github/actions/setup/action.yml b/.github/actions/setup/action.yml new file mode 100644 index 0000000..594a7cd --- /dev/null +++ b/.github/actions/setup/action.yml @@ -0,0 +1,27 @@ +name: Setup +description: Install pnpm and Node.js, and install dependencies with caching + +inputs: + registry-url: + description: npm registry URL for authentication + required: false + default: "" + +runs: + using: composite + steps: + - name: Setup PNPM + uses: pnpm/action-setup@v4 + with: + run_install: false + + - name: Setup Node.js + uses: actions/setup-node@v6 + with: + node-version-file: package.json + cache: pnpm + registry-url: ${{ inputs.registry-url }} + + - name: Install dependencies + shell: bash + run: pnpm install --frozen-lockfile diff --git a/.github/workflows/CD.yml b/.github/workflows/CD.yml index f9160f4..1e517ca 100644 --- a/.github/workflows/CD.yml +++ b/.github/workflows/CD.yml @@ -7,7 +7,9 @@ on: concurrency: group: cd-${{ github.ref }} - cancel-in-progress: true + cancel-in-progress: false + +permissions: {} jobs: gh-pages: @@ -18,32 +20,8 @@ jobs: - name: Checkout repository uses: actions/checkout@v6 - - name: Setup Node.js - uses: actions/setup-node@v6 - with: - node-version: 25 - - - name: Setup PNPM - uses: pnpm/action-setup@v4 - with: - version: 10 - run_install: false - - - name: Get pnpm store directory - shell: bash - run: | - echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV - - - name: Setup pnpm cache - uses: actions/cache@v5 - with: - path: ${{ env.STORE_PATH }} - key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} - restore-keys: | - ${{ runner.os }}-pnpm-store- - - - name: Install dependencies - run: pnpm install --frozen-lockfile + - name: Setup environment + uses: ./.github/actions/setup - name: Build the demo application run: pnpm build:demo @@ -56,42 +34,22 @@ jobs: npm: runs-on: ubuntu-latest - needs: gh-pages permissions: id-token: write contents: read packages: write + environment: production steps: - name: Checkout repository uses: actions/checkout@v6 - - name: Setup Node.js - uses: actions/setup-node@v6 + - name: Setup environment + uses: ./.github/actions/setup with: - node-version: 25 registry-url: "https://registry.npmjs.org" - - name: Setup PNPM - uses: pnpm/action-setup@v4 - with: - version: 10 - run_install: false - - - name: Get pnpm store directory - shell: bash - run: | - echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV - - - name: Setup pnpm cache - uses: actions/cache@v5 - with: - path: ${{ env.STORE_PATH }} - key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} - restore-keys: | - ${{ runner.os }}-pnpm-store- - - - name: Install dependencies - run: pnpm install --frozen-lockfile + - name: Lint + run: pnpm lint - name: Build the component run: pnpm build:component @@ -100,6 +58,8 @@ jobs: run: pnpm test - name: Publish to NPM - run: pnpm publish --access "public" --provenance --ignore-scripts - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + uses: JS-DevTools/npm-publish@v4 + with: + access: "public" + provenance: true + token: ${{ secrets.NPM_TOKEN }} diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index aaadc61..d5db303 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -9,167 +9,74 @@ concurrency: group: ci-${{ github.ref }} cancel-in-progress: true -jobs: - setup: - runs-on: ubuntu-latest - outputs: - cache-key: ${{ steps.cache-key.outputs.key }} - store-path: ${{ steps.pnpm-cache.outputs.store-path }} - steps: - - name: Checkout repository - uses: actions/checkout@v6 - - - name: Setup PNPM - uses: pnpm/action-setup@v4 - with: - version: 10 - run_install: false - - - name: Get pnpm store directory - id: pnpm-cache - shell: bash - run: | - echo "store-path=$(pnpm store path --silent)" >> $GITHUB_OUTPUT - - - name: Generate cache key - id: cache-key - run: - echo "key=${{ runner.os }}-pnpm-store-${{ - hashFiles('**/pnpm-lock.yaml') }}" >> $GITHUB_OUTPUT +permissions: {} +jobs: format: - needs: setup runs-on: ubuntu-latest permissions: - contents: write + contents: read steps: - name: Checkout repository uses: actions/checkout@v6 - - name: Setup Node.js - uses: actions/setup-node@v6 - with: - node-version: 25 - - - name: Setup PNPM - uses: pnpm/action-setup@v4 - with: - version: 10 - run_install: false - - - name: Setup pnpm cache - uses: actions/cache@v5 - with: - path: ${{ needs.setup.outputs.store-path }} - key: ${{ needs.setup.outputs.cache-key }} - restore-keys: | - ${{ runner.os }}-pnpm-store- - - - name: Install dependencies - run: pnpm install --frozen-lockfile + - name: Setup environment + uses: ./.github/actions/setup - name: Check formatting run: pnpm format:check - - name: Formatting issues detected (attempting fix...) - if: ${{ failure() }} - run: pnpm format - - - name: Commit fixed formatting issues - if: ${{ failure() }} - uses: stefanzweifel/git-auto-commit-action@v7 - with: - commit_message: "๐Ÿงน style: apply automatic formatting fixes" - branch: ${{ github.head_ref }} - lint: - needs: setup runs-on: ubuntu-latest permissions: - contents: write + contents: read steps: - name: Checkout repository uses: actions/checkout@v6 - - name: Setup Node.js - uses: actions/setup-node@v6 - with: - node-version: 25 - - - name: Setup PNPM - uses: pnpm/action-setup@v4 - with: - version: 10 - run_install: false - - - name: Setup pnpm cache - uses: actions/cache@v5 - with: - path: ${{ needs.setup.outputs.store-path }} - key: ${{ needs.setup.outputs.cache-key }} - restore-keys: | - ${{ runner.os }}-pnpm-store- - - - name: Install dependencies - run: pnpm install --frozen-lockfile + - name: Setup environment + uses: ./.github/actions/setup - name: Lint run: pnpm lint - - name: Linting issues detected (attempting fix...) - if: ${{ failure() }} - run: pnpm lint:fix - - - name: Commit fixed linting issues - if: ${{ failure() }} - uses: stefanzweifel/git-auto-commit-action@v7 - with: - commit_message: "๐Ÿ› fix: apply automatic linting fixes" - branch: ${{ github.head_ref }} - test: - needs: [setup, lint, format] runs-on: ubuntu-latest + permissions: + contents: read + pull-requests: write steps: - name: Checkout repository uses: actions/checkout@v6 - - name: Setup Node.js - uses: actions/setup-node@v6 - with: - node-version: 25 - - - name: Setup PNPM - uses: pnpm/action-setup@v4 - with: - version: 10 - run_install: false - - - name: Setup pnpm cache - uses: actions/cache@v5 - with: - path: ${{ needs.setup.outputs.store-path }} - key: ${{ needs.setup.outputs.cache-key }} - restore-keys: | - ${{ runner.os }}-pnpm-store- - - - name: Install dependencies - run: pnpm install --frozen-lockfile + - name: Setup environment + uses: ./.github/actions/setup - name: Run tests run: pnpm test:coverage + - name: Find previous successful run + id: previous-run + run: | + RUN_ID=$(gh api "repos/${{ github.repository }}/actions/workflows/CI.yml/runs?status=success&per_page=1" \ + --jq '.workflow_runs[0].id // empty') + echo "run-id=$RUN_ID" >> $GITHUB_OUTPUT + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + continue-on-error: true + - name: Download previous coverage artifact + if: steps.previous-run.outputs.run-id != '' uses: actions/download-artifact@v8 continue-on-error: true with: - name: test-coverage-{{ matrix.runs-on }} + name: test-coverage path: previous-coverage/ + run-id: ${{ steps.previous-run.outputs.run-id }} github-token: ${{ secrets.GITHUB_TOKEN }} - repository: ${{ github.repository }} - name: Comment the new code coverage - uses: lucassabreu/comment-coverage-clover@main + uses: lucassabreu/comment-coverage-clover@v0.16.0 continue-on-error: true with: file: ./coverage/clover.xml @@ -177,88 +84,51 @@ jobs: github-token: ${{ secrets.GITHUB_TOKEN }} - name: Upload test coverage - if: success() uses: actions/upload-artifact@v7 with: - name: test-coverage-{{ matrix.runs-on }} + name: test-coverage path: coverage/ retention-days: 7 build: - needs: [setup, test] runs-on: ubuntu-latest + permissions: + contents: read steps: - name: Checkout repository uses: actions/checkout@v6 - - name: Setup Node.js - uses: actions/setup-node@v6 - with: - node-version: 25 - - - name: Setup PNPM - uses: pnpm/action-setup@v4 - with: - version: 10 - run_install: false - - - name: Setup pnpm cache - uses: actions/cache@v5 - with: - path: ${{ needs.setup.outputs.store-path }} - key: ${{ needs.setup.outputs.cache-key }} - restore-keys: | - ${{ runner.os }}-pnpm-store- - - - name: Install dependencies - run: pnpm install --frozen-lockfile + - name: Setup environment + uses: ./.github/actions/setup - name: Build run: pnpm build - name: Upload build artifacts uses: actions/upload-artifact@v7 - continue-on-error: true with: - name: build-artifacts-{{ matrix.runs-on }} + name: build-artifacts path: dist/ retention-days: 7 npm-dry-run: - needs: [setup, build] + needs: build runs-on: ubuntu-latest + permissions: + contents: read steps: - name: Checkout repository uses: actions/checkout@v6 - - name: Setup Node.js - uses: actions/setup-node@v6 + - name: Setup environment + uses: ./.github/actions/setup with: - node-version: 25 registry-url: "https://registry.npmjs.org" - - name: Setup PNPM - uses: pnpm/action-setup@v4 - with: - version: 10 - run_install: false - - - name: Setup pnpm cache - uses: actions/cache@v5 - with: - path: ${{ needs.setup.outputs.store-path }} - key: ${{ needs.setup.outputs.cache-key }} - restore-keys: | - ${{ runner.os }}-pnpm-store- - - - name: Install dependencies - run: pnpm install --frozen-lockfile - - name: Download build artifacts uses: actions/download-artifact@v8 - continue-on-error: true with: - name: build-artifacts-{{ matrix.runs-on }} + name: build-artifacts path: dist/ - name: NPM publish dry run diff --git a/.github/workflows/CODEQL.yml b/.github/workflows/CODEQL.yml index 791516b..cd1e759 100644 --- a/.github/workflows/CODEQL.yml +++ b/.github/workflows/CODEQL.yml @@ -7,31 +7,26 @@ on: branches: [master] workflow_dispatch: +permissions: {} + jobs: analyze: name: Analyze runs-on: ubuntu-latest - timeout-minutes: 360 + timeout-minutes: 30 permissions: actions: read contents: read security-events: write - strategy: - fail-fast: false - matrix: - language: ["javascript", "typescript"] - steps: - name: Checkout repository uses: actions/checkout@v6 - with: - fetch-depth: 0 - name: Initialize CodeQL uses: github/codeql-action/init@v4 with: - languages: ${{ matrix.language }} + languages: javascript-typescript queries: security-extended,security-and-quality - name: CodeQL Autobuild @@ -39,3 +34,5 @@ jobs: - name: CodeQL Analysis uses: github/codeql-action/analyze@v4 + with: + category: /language:javascript-typescript diff --git a/.github/workflows/DependabotBot.yml b/.github/workflows/DependabotBot.yml index a6e8256..baf8d75 100644 --- a/.github/workflows/DependabotBot.yml +++ b/.github/workflows/DependabotBot.yml @@ -8,14 +8,15 @@ concurrency: group: dependabot-${{ github.ref }} cancel-in-progress: true -permissions: - contents: write - pull-requests: write +permissions: {} jobs: dependabot-auto-format: runs-on: ubuntu-latest if: github.actor == 'dependabot[bot]' + permissions: + contents: write + pull-requests: write steps: - name: Checkout repository uses: actions/checkout@v6 @@ -23,49 +24,38 @@ jobs: ref: ${{ github.head_ref }} token: ${{ secrets.GITHUB_TOKEN }} - - name: Setup Node.js - uses: actions/setup-node@v6 - with: - node-version: 25 - - - name: Setup PNPM - uses: pnpm/action-setup@v4 - with: - version: 10 - run_install: false - - - name: Get pnpm store directory - shell: bash - run: | - echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV - - - name: Setup pnpm cache - uses: actions/cache@v5 - with: - path: ${{ env.STORE_PATH }} - key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} - restore-keys: | - ${{ runner.os }}-pnpm-store- + - name: Setup environment + uses: ./.github/actions/setup - - name: Install dependencies - run: pnpm install --frozen-lockfile + - name: Check formatting + id: format-check + run: pnpm format:check + continue-on-error: true - - name: Run format + - name: Fix formatting + if: steps.format-check.outcome == 'failure' run: pnpm format - - name: Run lint fix - run: pnpm lint:fix + - name: Check linting + id: lint-check + run: pnpm lint continue-on-error: true - - name: Commit formatting changes + - name: Fix linting + if: steps.lint-check.outcome == 'failure' + run: pnpm lint:fix + + - name: Commit fixes + if: + steps.format-check.outcome == 'failure' || steps.lint-check.outcome == + 'failure' uses: stefanzweifel/git-auto-commit-action@v7 with: commit_message: "๐Ÿงน style: apply formatting to dependabot PR" branch: ${{ github.head_ref }} - name: Enable auto-merge for Dependabot PRs - run: | - PR_URL="${{ github.event.pull_request.html_url }}" - gh pr merge --auto --merge "$PR_URL" + run: + gh pr merge --auto --merge "${{ github.event.pull_request.html_url }}" env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore index 65f7813..dbdb439 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,4 @@ pnpm-lock.yaml *.sln *.sw? tsconfig.tsbuildinfo +PR_DESCRIPTION.md From 17debb6461bd78384fefc22392fab4152f353ff9 Mon Sep 17 00:00:00 2001 From: James Robb <47126579+jamesrweb@users.noreply.github.com> Date: Tue, 17 Mar 2026 11:10:27 +0100 Subject: [PATCH 2/3] fix: Add package manager --- package.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/package.json b/package.json index 91b5a2c..754fc60 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,10 @@ "description": "A wrapper component that allows you to utilise P5 sketches within React apps.", "version": "5.0.2", "type": "module", + "packageManager": "pnpm@10.32.1", + "engines": { + "node": ">=24.14.0" + }, "homepage": "https://github.com/P5-wrapper/react", "license": "MIT", "files": [ From 2d4c3f5b9a4d1e4e3120911760b7bfc0d18afba5 Mon Sep 17 00:00:00 2001 From: James Robb <47126579+jamesrweb@users.noreply.github.com> Date: Tue, 17 Mar 2026 11:13:52 +0100 Subject: [PATCH 3/3] fix: Update tseslint eslint plugin to fix CI --- package.json | 4 +- pnpm-lock.yaml | 182 ++++++++++++++++++++++++-------------------- pnpm-workspace.yaml | 7 ++ 3 files changed, 110 insertions(+), 83 deletions(-) diff --git a/package.json b/package.json index 754fc60..599cf82 100644 --- a/package.json +++ b/package.json @@ -102,7 +102,7 @@ "@types/node": "^25.2.0", "@types/react": "^19.2.11", "@types/react-dom": "^19.2.3", - "@typescript-eslint/eslint-plugin": "^8.54.0", + "@typescript-eslint/eslint-plugin": "^8.57.1", "@vitejs/plugin-react": "^5.1.3", "@vitest/coverage-v8": "^4.0.18", "babel-plugin-react-compiler": "19.1.0-rc.3", @@ -119,7 +119,7 @@ "react-dom": "19.2.4", "rimraf": "^6.1.2", "typescript": "^5.9.3", - "typescript-eslint": "^8.54.0", + "typescript-eslint": "^8.57.1", "vite": "^7.3.1", "vite-plugin-dts": "^4.5.4", "vitest": "^4.0.18", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2f06ad1..061cd03 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -54,8 +54,8 @@ importers: specifier: ^19.2.3 version: 19.2.3(@types/react@19.2.11) '@typescript-eslint/eslint-plugin': - specifier: ^8.54.0 - version: 8.54.0(@typescript-eslint/parser@8.54.0(eslint@10.0.2(jiti@2.5.1))(typescript@5.9.3))(eslint@10.0.2(jiti@2.5.1))(typescript@5.9.3) + specifier: ^8.57.1 + version: 8.57.1(@typescript-eslint/parser@8.57.1(eslint@10.0.2(jiti@2.5.1))(typescript@5.9.3))(eslint@10.0.2(jiti@2.5.1))(typescript@5.9.3) '@vitejs/plugin-react': specifier: ^5.1.3 version: 5.1.3(vite@7.3.1(@types/node@25.2.0)(jiti@2.5.1)) @@ -105,8 +105,8 @@ importers: specifier: ^5.9.3 version: 5.9.3 typescript-eslint: - specifier: ^8.54.0 - version: 8.54.0(eslint@10.0.2(jiti@2.5.1))(typescript@5.9.3) + specifier: ^8.57.1 + version: 8.57.1(eslint@10.0.2(jiti@2.5.1))(typescript@5.9.3) vite: specifier: ^7.3.1 version: 7.3.1(@types/node@25.2.0)(jiti@2.5.1) @@ -287,6 +287,10 @@ packages: resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==} engines: {node: '>=6.9.0'} + '@babel/runtime@7.29.2': + resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==} + engines: {node: '>=6.9.0'} + '@babel/template@7.27.2': resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} @@ -687,66 +691,79 @@ packages: resolution: {integrity: sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==} cpu: [arm] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.57.1': resolution: {integrity: sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==} cpu: [arm] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.57.1': resolution: {integrity: sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==} cpu: [arm64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.57.1': resolution: {integrity: sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==} cpu: [arm64] os: [linux] + libc: [musl] '@rollup/rollup-linux-loong64-gnu@4.57.1': resolution: {integrity: sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==} cpu: [loong64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-loong64-musl@4.57.1': resolution: {integrity: sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==} cpu: [loong64] os: [linux] + libc: [musl] '@rollup/rollup-linux-ppc64-gnu@4.57.1': resolution: {integrity: sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==} cpu: [ppc64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-ppc64-musl@4.57.1': resolution: {integrity: sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==} cpu: [ppc64] os: [linux] + libc: [musl] '@rollup/rollup-linux-riscv64-gnu@4.57.1': resolution: {integrity: sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==} cpu: [riscv64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-musl@4.57.1': resolution: {integrity: sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==} cpu: [riscv64] os: [linux] + libc: [musl] '@rollup/rollup-linux-s390x-gnu@4.57.1': resolution: {integrity: sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==} cpu: [s390x] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.57.1': resolution: {integrity: sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==} cpu: [x64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-musl@4.57.1': resolution: {integrity: sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==} cpu: [x64] os: [linux] + libc: [musl] '@rollup/rollup-openbsd-x64@4.57.1': resolution: {integrity: sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==} @@ -927,63 +944,63 @@ packages: '@types/yargs@17.0.35': resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==} - '@typescript-eslint/eslint-plugin@8.54.0': - resolution: {integrity: sha512-hAAP5io/7csFStuOmR782YmTthKBJ9ND3WVL60hcOjvtGFb+HJxH4O5huAcmcZ9v9G8P+JETiZ/G1B8MALnWZQ==} + '@typescript-eslint/eslint-plugin@8.57.1': + resolution: {integrity: sha512-Gn3aqnvNl4NGc6x3/Bqk1AOn0thyTU9bqDRhiRnUWezgvr2OnhYCWCgC8zXXRVqBsIL1pSDt7T9nJUe0oM0kDQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.54.0 - eslint: ^8.57.0 || ^9.0.0 + '@typescript-eslint/parser': ^8.57.1 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.54.0': - resolution: {integrity: sha512-BtE0k6cjwjLZoZixN0t5AKP0kSzlGu7FctRXYuPAm//aaiZhmfq1JwdYpYr1brzEspYyFeF+8XF5j2VK6oalrA==} + '@typescript-eslint/parser@8.57.1': + resolution: {integrity: sha512-k4eNDan0EIMTT/dUKc/g+rsJ6wcHYhNPdY19VoX/EOtaAG8DLtKCykhrUnuHPYvinn5jhAPgD2Qw9hXBwrahsw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.54.0': - resolution: {integrity: sha512-YPf+rvJ1s7MyiWM4uTRhE4DvBXrEV+d8oC3P9Y2eT7S+HBS0clybdMIPnhiATi9vZOYDc7OQ1L/i6ga6NFYK/g==} + '@typescript-eslint/project-service@8.57.1': + resolution: {integrity: sha512-vx1F37BRO1OftsYlmG9xay1TqnjNVlqALymwWVuYTdo18XuKxtBpCj1QlzNIEHlvlB27osvXFWptYiEWsVdYsg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.54.0': - resolution: {integrity: sha512-27rYVQku26j/PbHYcVfRPonmOlVI6gihHtXFbTdB5sb6qA0wdAQAbyXFVarQ5t4HRojIz64IV90YtsjQSSGlQg==} + '@typescript-eslint/scope-manager@8.57.1': + resolution: {integrity: sha512-hs/QcpCwlwT2L5S+3fT6gp0PabyGk4Q0Rv2doJXA0435/OpnSR3VRgvrp8Xdoc3UAYSg9cyUjTeFXZEPg/3OKg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.54.0': - resolution: {integrity: sha512-dRgOyT2hPk/JwxNMZDsIXDgyl9axdJI3ogZ2XWhBPsnZUv+hPesa5iuhdYt2gzwA9t8RE5ytOJ6xB0moV0Ujvw==} + '@typescript-eslint/tsconfig-utils@8.57.1': + resolution: {integrity: sha512-0lgOZB8cl19fHO4eI46YUx2EceQqhgkPSuCGLlGi79L2jwYY1cxeYc1Nae8Aw1xjgW3PKVDLlr3YJ6Bxx8HkWg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.54.0': - resolution: {integrity: sha512-hiLguxJWHjjwL6xMBwD903ciAwd7DmK30Y9Axs/etOkftC3ZNN9K44IuRD/EB08amu+Zw6W37x9RecLkOo3pMA==} + '@typescript-eslint/type-utils@8.57.1': + resolution: {integrity: sha512-+Bwwm0ScukFdyoJsh2u6pp4S9ktegF98pYUU0hkphOOqdMB+1sNQhIz8y5E9+4pOioZijrkfNO/HUJVAFFfPKA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.54.0': - resolution: {integrity: sha512-PDUI9R1BVjqu7AUDsRBbKMtwmjWcn4J3le+5LpcFgWULN3LvHC5rkc9gCVxbrsrGmO1jfPybN5s6h4Jy+OnkAA==} + '@typescript-eslint/types@8.57.1': + resolution: {integrity: sha512-S29BOBPJSFUiblEl6RzPPjJt6w25A6XsBqRVDt53tA/tlL8q7ceQNZHTjPeONt/3S7KRI4quk+yP9jK2WjBiPQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.54.0': - resolution: {integrity: sha512-BUwcskRaPvTk6fzVWgDPdUndLjB87KYDrN5EYGetnktoeAvPtO4ONHlAZDnj5VFnUANg0Sjm7j4usBlnoVMHwA==} + '@typescript-eslint/typescript-estree@8.57.1': + resolution: {integrity: sha512-ybe2hS9G6pXpqGtPli9Gx9quNV0TWLOmh58ADlmZe9DguLq0tiAKVjirSbtM1szG6+QH6rVXyU6GTLQbWnMY+g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.54.0': - resolution: {integrity: sha512-9Cnda8GS57AQakvRyG0PTejJNlA2xhvyNtEVIMlDWOOeEyBkYWhGPnfrIAnqxLMTSTo6q8g12XVjjev5l1NvMA==} + '@typescript-eslint/utils@8.57.1': + resolution: {integrity: sha512-XUNSJ/lEVFttPMMoDVA2r2bwrl8/oPx8cURtczkSEswY5T3AeLmCy+EKWQNdL4u0MmAHOjcWrqJp2cdvgjn8dQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.54.0': - resolution: {integrity: sha512-VFlhGSl4opC0bprJiItPQ1RfUhGDIBokcPwaFH4yiBCaNPeld/9VeXbiPO1cLyorQi1G1vL+ecBk1x8o1axORA==} + '@typescript-eslint/visitor-keys@8.57.1': + resolution: {integrity: sha512-YWnmJkXbofiz9KbnbbwuA2rpGkFPLbAIetcCNO6mJ8gdhdZ/v7WDXsoGFAJuM6ikUFKTlSQnjWnVO4ux+UzS6A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@vitejs/plugin-react@5.1.3': @@ -1472,10 +1489,6 @@ packages: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint-visitor-keys@4.2.1: - resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint-visitor-keys@5.0.1: resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} @@ -2404,6 +2417,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.7.4: + resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} + engines: {node: '>=10'} + hasBin: true + set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} @@ -2586,11 +2604,11 @@ packages: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} - typescript-eslint@8.54.0: - resolution: {integrity: sha512-CKsJ+g53QpsNPqbzUsfKVgd3Lny4yKZ1pP4qN3jdMOg/sisIDLGyDMezycquXLE5JsEU0wp3dGNdzig0/fmSVQ==} + typescript-eslint@8.57.1: + resolution: {integrity: sha512-fLvZWf+cAGw3tqMCYzGIU6yR8K+Y9NT2z23RwOjlNFF2HwSB3KhdEFI5lSBv8tNmFkkBShSjsCjzx1vahZfISA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' typescript@5.8.2: @@ -3053,6 +3071,8 @@ snapshots: '@babel/runtime@7.28.6': {} + '@babel/runtime@7.29.2': {} + '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.29.0 @@ -3482,7 +3502,7 @@ snapshots: '@testing-library/dom@10.4.0': dependencies: '@babel/code-frame': 7.29.0 - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 '@types/aria-query': 5.0.4 aria-query: 5.3.0 chalk: 4.1.2 @@ -3602,14 +3622,14 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@8.54.0(@typescript-eslint/parser@8.54.0(eslint@10.0.2(jiti@2.5.1))(typescript@5.9.3))(eslint@10.0.2(jiti@2.5.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.57.1(@typescript-eslint/parser@8.57.1(eslint@10.0.2(jiti@2.5.1))(typescript@5.9.3))(eslint@10.0.2(jiti@2.5.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.54.0(eslint@10.0.2(jiti@2.5.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.54.0 - '@typescript-eslint/type-utils': 8.54.0(eslint@10.0.2(jiti@2.5.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.54.0(eslint@10.0.2(jiti@2.5.1))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.54.0 + '@typescript-eslint/parser': 8.57.1(eslint@10.0.2(jiti@2.5.1))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.57.1 + '@typescript-eslint/type-utils': 8.57.1(eslint@10.0.2(jiti@2.5.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.57.1(eslint@10.0.2(jiti@2.5.1))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.57.1 eslint: 10.0.2(jiti@2.5.1) ignore: 7.0.5 natural-compare: 1.4.0 @@ -3618,41 +3638,41 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.54.0(eslint@10.0.2(jiti@2.5.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.57.1(eslint@10.0.2(jiti@2.5.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/scope-manager': 8.54.0 - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.54.0 + '@typescript-eslint/scope-manager': 8.57.1 + '@typescript-eslint/types': 8.57.1 + '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.57.1 debug: 4.4.3 eslint: 10.0.2(jiti@2.5.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.54.0(typescript@5.9.3)': + '@typescript-eslint/project-service@8.57.1(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.54.0(typescript@5.9.3) - '@typescript-eslint/types': 8.54.0 + '@typescript-eslint/tsconfig-utils': 8.57.1(typescript@5.9.3) + '@typescript-eslint/types': 8.57.1 debug: 4.4.3 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.54.0': + '@typescript-eslint/scope-manager@8.57.1': dependencies: - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/visitor-keys': 8.54.0 + '@typescript-eslint/types': 8.57.1 + '@typescript-eslint/visitor-keys': 8.57.1 - '@typescript-eslint/tsconfig-utils@8.54.0(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.57.1(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.54.0(eslint@10.0.2(jiti@2.5.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.57.1(eslint@10.0.2(jiti@2.5.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.54.0(eslint@10.0.2(jiti@2.5.1))(typescript@5.9.3) + '@typescript-eslint/types': 8.57.1 + '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.9.3) + '@typescript-eslint/utils': 8.57.1(eslint@10.0.2(jiti@2.5.1))(typescript@5.9.3) debug: 4.4.3 eslint: 10.0.2(jiti@2.5.1) ts-api-utils: 2.4.0(typescript@5.9.3) @@ -3660,38 +3680,38 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.54.0': {} + '@typescript-eslint/types@8.57.1': {} - '@typescript-eslint/typescript-estree@8.54.0(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.57.1(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.54.0(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.54.0(typescript@5.9.3) - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/visitor-keys': 8.54.0 + '@typescript-eslint/project-service': 8.57.1(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.57.1(typescript@5.9.3) + '@typescript-eslint/types': 8.57.1 + '@typescript-eslint/visitor-keys': 8.57.1 debug: 4.4.3 - minimatch: 9.0.9 - semver: 7.7.3 + minimatch: 10.2.4 + semver: 7.7.4 tinyglobby: 0.2.15 ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.54.0(eslint@10.0.2(jiti@2.5.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.57.1(eslint@10.0.2(jiti@2.5.1))(typescript@5.9.3)': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.2(jiti@2.5.1)) - '@typescript-eslint/scope-manager': 8.54.0 - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.57.1 + '@typescript-eslint/types': 8.57.1 + '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.9.3) eslint: 10.0.2(jiti@2.5.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.54.0': + '@typescript-eslint/visitor-keys@8.57.1': dependencies: - '@typescript-eslint/types': 8.54.0 - eslint-visitor-keys: 4.2.1 + '@typescript-eslint/types': 8.57.1 + eslint-visitor-keys: 5.0.1 '@vitejs/plugin-react@5.1.3(vite@7.3.1(@types/node@25.2.0)(jiti@2.5.1))': dependencies: @@ -4334,8 +4354,6 @@ snapshots: eslint-visitor-keys@3.4.3: {} - eslint-visitor-keys@4.2.1: {} - eslint-visitor-keys@5.0.1: {} eslint@10.0.2(jiti@2.5.1): @@ -5387,6 +5405,8 @@ snapshots: semver@7.7.3: {} + semver@7.7.4: {} + set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 @@ -5613,12 +5633,12 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typescript-eslint@8.54.0(eslint@10.0.2(jiti@2.5.1))(typescript@5.9.3): + typescript-eslint@8.57.1(eslint@10.0.2(jiti@2.5.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.54.0(@typescript-eslint/parser@8.54.0(eslint@10.0.2(jiti@2.5.1))(typescript@5.9.3))(eslint@10.0.2(jiti@2.5.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.54.0(eslint@10.0.2(jiti@2.5.1))(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.54.0(eslint@10.0.2(jiti@2.5.1))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.57.1(@typescript-eslint/parser@8.57.1(eslint@10.0.2(jiti@2.5.1))(typescript@5.9.3))(eslint@10.0.2(jiti@2.5.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.57.1(eslint@10.0.2(jiti@2.5.1))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.9.3) + '@typescript-eslint/utils': 8.57.1(eslint@10.0.2(jiti@2.5.1))(typescript@5.9.3) eslint: 10.0.2(jiti@2.5.1) typescript: 5.9.3 transitivePeerDependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 11b66cb..93cba7a 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -10,4 +10,11 @@ overrides: diff@>=6.0.0 <8.0.3: ">=8.0.3" lodash@>=4.0.0 <=4.17.22: ">=4.17.23" +peerDependencyRules: + allowedVersions: + "@babel/eslint-parser>eslint": "10" + "@babel/eslint-plugin>eslint": "10" + "eslint-plugin-react>eslint": "10" + "eslint-plugin-react-hooks>eslint": "10" + strictPeerDependencies: true