diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 0f9ec778..555c89aa 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -4,7 +4,7 @@ name: CodeQL Security Scanning on: push: branches-ignore: - - 'hotfix/**' + - "hotfix/**" pull_request: workflow_dispatch: @@ -21,14 +21,14 @@ jobs: strategy: fail-fast: false matrix: - language: ['javascript', 'actions'] + language: ["javascript", "actions"] steps: - name: Checkout repository - uses: actions/checkout@v6.0.2 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: Initialize CodeQL - uses: github/codeql-action/init@v4 + uses: github/codeql-action/init@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4.36.2 with: languages: ${{ matrix.language }} queries: +security-and-quality @@ -36,10 +36,10 @@ jobs: - name: Autobuild if: matrix.language == 'javascript' - uses: github/codeql-action/autobuild@v4 + uses: github/codeql-action/autobuild@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4.36.2 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v4 + uses: github/codeql-action/analyze@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4.36.2 with: category: "/language:${{ matrix.language }}" diff --git a/.github/workflows/cron.yml b/.github/workflows/cron.yml index c4e2efba..56174ca1 100644 --- a/.github/workflows/cron.yml +++ b/.github/workflows/cron.yml @@ -2,7 +2,7 @@ name: Cron on: schedule: - - cron: '*/30 * * * *' + - cron: "*/30 * * * *" workflow_dispatch: permissions: @@ -20,19 +20,19 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v6.0.2 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: Setup Python - uses: actions/setup-python@v6.2.0 + uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 with: - python-version: '3.13' - cache: 'pip' + python-version: "3.13" + cache: "pip" - name: Install Python dependencies run: python3 -m pip install -r requirements.txt - name: Execute keep-alive query - uses: './.github/actions/keep-alive' + uses: "./.github/actions/keep-alive" with: service: turso url: ${{ secrets.ASTRO_DB_REMOTE_URL }} @@ -45,19 +45,19 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v6.0.2 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: Setup Python - uses: actions/setup-python@v6.2.0 + uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 with: - python-version: '3.13' - cache: 'pip' + python-version: "3.13" + cache: "pip" - name: Install Python dependencies run: python3 -m pip install -r requirements.txt - name: Execute keep-alive query - uses: './.github/actions/keep-alive' + uses: "./.github/actions/keep-alive" with: service: turso url: ${{ secrets.ASTRO_DB_REMOTE_URL }} @@ -70,19 +70,19 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v6.0.2 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: Setup Python - uses: actions/setup-python@v6.2.0 + uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 with: - python-version: '3.13' - cache: 'pip' + python-version: "3.13" + cache: "pip" - name: Install Python dependencies run: python3 -m pip install -r requirements.txt - name: Execute keep-alive read - uses: './.github/actions/keep-alive' + uses: "./.github/actions/keep-alive" with: service: upstash url: ${{ vars.PUBLIC_UPSTASH_SEARCH_REST_URL }} diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml index b5cf1f57..736f0767 100644 --- a/.github/workflows/dependency-review.yml +++ b/.github/workflows/dependency-review.yml @@ -16,10 +16,10 @@ jobs: if: ${{ !startsWith(github.head_ref || github.ref_name, 'hotfix/') }} steps: - name: Checkout repository - uses: actions/checkout@v6.0.2 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: Dependency Review - uses: actions/dependency-review-action@v5.0.0 + uses: actions/dependency-review-action@a1d282b36b6f3519aa1f3fc636f609c47dddb294 # v5.0.0 with: fail-on-severity: critical comment-summary-in-pr: always diff --git a/.github/workflows/deployment-preview.yml b/.github/workflows/deployment-preview.yml index f783883e..cd1c4337 100644 --- a/.github/workflows/deployment-preview.yml +++ b/.github/workflows/deployment-preview.yml @@ -50,12 +50,12 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v6.0.2 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} - name: Setup Node - uses: actions/setup-node@v6.4.0 + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: node-version-file: .nvmrc cache: npm diff --git a/.github/workflows/deployment-production.yml b/.github/workflows/deployment-production.yml index 9345478b..775b2079 100644 --- a/.github/workflows/deployment-production.yml +++ b/.github/workflows/deployment-production.yml @@ -43,10 +43,10 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v6.0.2 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: Setup Node - uses: actions/setup-node@v6.4.0 + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: node-version-file: .nvmrc cache: npm diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index adbf4814..3e933009 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -36,10 +36,10 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v6.0.2 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: Setup Python - uses: actions/setup-python@v6.2.0 + uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 with: python-version: "3.13" cache: "pip" @@ -48,7 +48,7 @@ jobs: run: python3 -m pip install -r requirements.txt - name: Setup Node.js - uses: actions/setup-node@v6.4.0 + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: node-version: "24.x" cache: "npm" diff --git a/.github/workflows/migrations-preview.yml b/.github/workflows/migrations-preview.yml index 4fc45f1b..815e01f1 100644 --- a/.github/workflows/migrations-preview.yml +++ b/.github/workflows/migrations-preview.yml @@ -24,7 +24,7 @@ jobs: steps: - name: Checkout repository (trusted base) - uses: actions/checkout@v6.0.2 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: ref: main @@ -98,7 +98,7 @@ jobs: - name: Setup Node.js if: steps.gate.outputs.should_migrate == 'true' - uses: actions/setup-node@v6.4.0 + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: node-version: "24.x" cache: "npm" diff --git a/.github/workflows/migrations-production.yml b/.github/workflows/migrations-production.yml index 92359909..73648bf6 100644 --- a/.github/workflows/migrations-production.yml +++ b/.github/workflows/migrations-production.yml @@ -24,7 +24,7 @@ jobs: steps: - name: Checkout repository (trusted base) - uses: actions/checkout@v6.0.2 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: ref: main @@ -77,7 +77,7 @@ jobs: - name: Setup Node.js if: steps.gate.outputs.should_migrate == 'true' - uses: actions/setup-node@v6.4.0 + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: node-version: "24.x" cache: "npm" diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml index 620b7159..b8be4161 100644 --- a/.github/workflows/playwright.yml +++ b/.github/workflows/playwright.yml @@ -45,10 +45,10 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v6.0.2 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: Setup Node.js - uses: actions/setup-node@v6.4.0 + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: node-version: "24.x" cache: "npm" diff --git a/.github/workflows/search.yml b/.github/workflows/search.yml index 241bccd7..37076c69 100644 --- a/.github/workflows/search.yml +++ b/.github/workflows/search.yml @@ -26,12 +26,12 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v6.0.2 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: Setup Python - uses: actions/setup-python@v6.2.0 + uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 with: - python-version: '3.13' + python-version: "3.13" - name: Install Python dependencies run: python3 -m pip install -r requirements.txt diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index cfd881f3..e3eab349 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -46,10 +46,10 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v6.0.2 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: Setup Node.js - uses: actions/setup-node@v6.4.0 + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: node-version: "24.x" cache: "npm" @@ -68,8 +68,7 @@ jobs: - name: Report Coverage if: steps.vitest.outcome == 'success' && hashFiles('coverage/coverage-summary.json') != '' - # v2.9.0 - uses: davelosert/vitest-coverage-report-action@02f3c2e641286b7fa308cd3e430783103ce6103b + uses: davelosert/vitest-coverage-report-action@02f3c2e641286b7fa308cd3e430783103ce6103b # v2.12.0 with: json-summary-path: "./coverage/coverage-summary.json" json-final-path: "./coverage/coverage-final.json" @@ -91,5 +90,6 @@ jobs: steps: - name: Skip testing for hotfix branch - run: echo "hotfix/* branch detected; skipping lint, unit, and e2e workflows but + run: + echo "hotfix/* branch detected; skipping lint, unit, and e2e workflows but allowing deployments." diff --git a/package-lock.json b/package-lock.json index a24727a9..e12ce8b8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,8 +16,8 @@ "@astrojs/check": "0.9.9", "@astrojs/compiler-rs": "^0.2.1", "@astrojs/db": "0.21.2", - "@astrojs/mdx": "^6.0.1", - "@astrojs/preact": "^5.1.4", + "@astrojs/mdx": "^6.0.2", + "@astrojs/preact": "^5.1.5", "@astrojs/rss": "4.0.18", "@astrojs/sitemap": "3.7.3", "@astrojs/vercel": "^10.0.8", @@ -26,8 +26,8 @@ "@eslint/js": "10.0.1", "@github/relative-time-element": "5.0.0", "@glidejs/glide": "3.7.1", - "@googlemaps/extended-component-library": "0.6.14", - "@happy-dom/global-registrator": "20.9.0", + "@googlemaps/extended-component-library": "0.6.15", + "@happy-dom/global-registrator": "20.10.2", "@hubspot/api-client": "13.5.0", "@lighthousejs/types": "0.0.3", "@nanostores/lit": "0.2.3", @@ -35,9 +35,9 @@ "@playwright/browser-chromium": "1.60.0", "@playwright/test": "1.60.0", "@semantic-ui/astro-lit": "5.3.0", - "@sentry/astro": "10.55.0", - "@sentry/browser": "10.55.0", - "@shikijs/transformers": "4.1.0", + "@sentry/astro": "10.56.0", + "@sentry/browser": "10.56.0", + "@shikijs/transformers": "4.2.0", "@tailwindcss/forms": "0.5.11", "@tailwindcss/typography": "0.5.19", "@tailwindcss/vite": "4.3.0", @@ -56,11 +56,11 @@ "@types/js-cookie": "3.0.6", "@types/jsdom": "28.0.3", "@types/mjml": "5.0.0", - "@types/node": "25.9.1", + "@types/node": "25.9.2", "@types/nodemailer": "8.0.0", "@types/nunjucks": "3.2.6", "@types/pubsub-js": "1.8.6", - "@types/react": "19.2.16", + "@types/react": "19.2.17", "@types/sanitize-html": "2.16.1", "@types/to-ico": "1.1.3", "@typescript-eslint/eslint-plugin": "8.60.1", @@ -79,9 +79,9 @@ "@vitest/coverage-v8": "4.1.8", "@webcomponents/template-shadowroot": "0.2.1", "alex": "11.0.1", - "astro": "^6.4.2", + "astro": "^6.4.4", "astro-vtbot": "2.1.12", - "baseline-browser-mapping": "2.10.33", + "baseline-browser-mapping": "2.10.34", "canvas-confetti": "1.9.4", "canvaskit-wasm": "^0.41.1", "confusing-browser-globals": "1.0.11", @@ -98,13 +98,13 @@ "eslint": "10.4.1", "eslint-plugin-astro": "1.7.0", "eslint-plugin-import-lite": "0.6.0", - "eslint-plugin-jsdoc": "63.0.1", + "eslint-plugin-jsdoc": "63.0.2", "eslint-plugin-security": "4.0.0", "eslint-plugin-yml": "3.4.0", "focus-trap": "8.2.1", "globals": "17.6.0", "gsap": "3.15.0", - "happy-dom": "20.9.0", + "happy-dom": "20.10.2", "hast-util-heading-rank": "3.0.0", "hast-util-is-element": "3.0.0", "html-element-attributes": "3.5.0", @@ -112,10 +112,10 @@ "husky": "9.1.7", "install": "0.13.0", "is-whitespace-character": "2.0.1", - "isomorphic-git": "1.38.3", + "isomorphic-git": "1.38.4", "js-cookie": "3.0.8", "jsdom": "29.1.1", - "libphonenumber-js": "1.13.4", + "libphonenumber-js": "1.13.6", "lighthouse": "13.3.0", "lit": "3.3.3", "markdownlint-cli2": "0.22.1", @@ -167,9 +167,9 @@ "sanitize-html": "2.17.4", "schema-dts": "2.0.0", "sharp": "0.34.5", - "shiki": "4.1.0", + "shiki": "4.2.0", "space-separated-tokens": "2.0.2", - "stylelint": "17.12.0", + "stylelint": "17.13.0", "stylelint-config-standard": "40.0.0", "stylelint-declaration-block-no-ignored-properties": "3.0.0", "stylelint-order": "8.1.1", @@ -187,7 +187,7 @@ "unist-util-is": "6.0.1", "unist-util-visit": "5.1.0", "uuid": "14.0.0", - "vercel": "54.7.1", + "vercel": "54.9.1", "vite": "7.3.5", "vite-plugin-pwa": "1.3.0", "vitest": "4.1.8", @@ -201,7 +201,7 @@ "npm": ">=10.0.0" }, "optionalDependencies": { - "@rollup/rollup-linux-x64-gnu": "4.61.0" + "@rollup/rollup-linux-x64-gnu": "4.61.1" } }, "node_modules/@adobe/mdast-util-gridtables": { @@ -634,9 +634,9 @@ } }, "node_modules/@astrojs/mdx": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-6.0.1.tgz", - "integrity": "sha512-J5K8F7A1LMH+cj+dcxm+uAeIznkfwxMcRpG7DD6ABNDOt8da98ph6ie4TD+4FV/ojVOJK0PQGWY4hmxQORLv0w==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-6.0.2.tgz", + "integrity": "sha512-DF1/C4lSICTspyABQ1FhCLICMOCA7jiqY23RHbdqlr27HkltGVPhJbnLwQE2YItWL7sD8O1ApjgBOUccsKkMOA==", "license": "MIT", "dependencies": { "@astrojs/internal-helpers": "0.10.0", @@ -658,7 +658,7 @@ "node": ">=22.12.0" }, "peerDependencies": { - "@astrojs/markdown-satteri": "0.2.1", + "@astrojs/markdown-satteri": "0.2.2", "astro": "^6.4.0" }, "peerDependenciesMeta": { @@ -668,15 +668,15 @@ } }, "node_modules/@astrojs/preact": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/@astrojs/preact/-/preact-5.1.4.tgz", - "integrity": "sha512-KqP1oNWYUc4ljf8zlWWuZ8RGpTfqS7vX/cNheyJegqZ+KV0uMZy8NIoGi0L1++slhHN4ci/IRiVjoDq6oUJtZg==", + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@astrojs/preact/-/preact-5.1.5.tgz", + "integrity": "sha512-it2XeiqNru7cAl8b3WZc/ZGrUC5njxSjs2JzpG/gaPyMAIALEMmb9nw3+2yZZw4dub6ofAQr4x4xTO0NAEyEsA==", "license": "MIT", "dependencies": { "@astrojs/internal-helpers": "0.10.0", "@preact/preset-vite": "^2.10.5", "@preact/signals": "^2.8.2", - "devalue": "^5.6.4", + "devalue": "^5.8.1", "preact-render-to-string": "^6.6.6", "vite": "^7.3.2" }, @@ -3418,9 +3418,9 @@ "license": "MIT" }, "node_modules/@googlemaps/extended-component-library": { - "version": "0.6.14", - "resolved": "https://registry.npmjs.org/@googlemaps/extended-component-library/-/extended-component-library-0.6.14.tgz", - "integrity": "sha512-oq8WkYIEOpi1K5+wxM1SOeko/PgX9pHx7RJTsC00Vxf6vN/UqfmXMM04F0TXB3a9kINYzMHspAD4L2Lq8P+kMQ==", + "version": "0.6.15", + "resolved": "https://registry.npmjs.org/@googlemaps/extended-component-library/-/extended-component-library-0.6.15.tgz", + "integrity": "sha512-tdeqfbHU6Lfvibk947DgXczPRGU49UGoJKTzyAjys9UBjZ0WschmbdGAHVbLIPxZpCYaRs7bFZjS7+JzaeQ61A==", "license": "Apache-2.0", "dependencies": { "@lit/context": "^1.0.0", @@ -3430,13 +3430,13 @@ } }, "node_modules/@happy-dom/global-registrator": { - "version": "20.9.0", - "resolved": "https://registry.npmjs.org/@happy-dom/global-registrator/-/global-registrator-20.9.0.tgz", - "integrity": "sha512-lBW6/m5BIFl3pMuWPNN0lIOYw9LMCmPfix53ExS3FBi4E+NELEljQ3xH6aAV9IYiQRfn9YIIgzzMrD0vIcD7tw==", + "version": "20.10.2", + "resolved": "https://registry.npmjs.org/@happy-dom/global-registrator/-/global-registrator-20.10.2.tgz", + "integrity": "sha512-/DC0hluanNJDVPUu69cidD46sGwzt8MJATiGx7WgCScn+ZH48fJQ0fvTfMPXY82/ASXWxnNo8P4BdHyU/dI/EA==", "license": "MIT", "dependencies": { "@types/node": ">=20.0.0", - "happy-dom": "^20.9.0" + "happy-dom": "^20.10.2" }, "engines": { "node": ">=20.0.0" @@ -4605,6 +4605,240 @@ "nanostores": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^1.0.0" } }, + "node_modules/@napi-rs/keyring": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring/-/keyring-1.2.0.tgz", + "integrity": "sha512-d0d4Oyxm+v980PEq1ZH2PmS6cvpMIRc17eYpiU47KgW+lzxklMu6+HOEOPmxrpnF/XQZ0+Q78I2mgMhbIIo/dg==", + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "optionalDependencies": { + "@napi-rs/keyring-darwin-arm64": "1.2.0", + "@napi-rs/keyring-darwin-x64": "1.2.0", + "@napi-rs/keyring-freebsd-x64": "1.2.0", + "@napi-rs/keyring-linux-arm-gnueabihf": "1.2.0", + "@napi-rs/keyring-linux-arm64-gnu": "1.2.0", + "@napi-rs/keyring-linux-arm64-musl": "1.2.0", + "@napi-rs/keyring-linux-riscv64-gnu": "1.2.0", + "@napi-rs/keyring-linux-x64-gnu": "1.2.0", + "@napi-rs/keyring-linux-x64-musl": "1.2.0", + "@napi-rs/keyring-win32-arm64-msvc": "1.2.0", + "@napi-rs/keyring-win32-ia32-msvc": "1.2.0", + "@napi-rs/keyring-win32-x64-msvc": "1.2.0" + } + }, + "node_modules/@napi-rs/keyring-darwin-arm64": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-darwin-arm64/-/keyring-darwin-arm64-1.2.0.tgz", + "integrity": "sha512-CA83rDeyONDADO25JLZsh3eHY8yTEtm/RS6ecPsY+1v+dSawzT9GywBMu2r6uOp1IEhQs/xAfxgybGAFr17lSA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-darwin-x64": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-darwin-x64/-/keyring-darwin-x64-1.2.0.tgz", + "integrity": "sha512-dBHjtKRCj4ByfnfqIKIJLo3wueQNJhLRyuxtX/rR4K/XtcS7VLlRD01XXizjpre54vpmObj63w+ZpHG+mGM8uA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-freebsd-x64": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-freebsd-x64/-/keyring-freebsd-x64-1.2.0.tgz", + "integrity": "sha512-DPZFr11pNJSnaoh0dzSUNF+T6ORhy3CkzUT3uGixbA71cAOPJ24iG8e8QrLOkuC/StWrAku3gBnth2XMWOcR3Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-linux-arm-gnueabihf": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-arm-gnueabihf/-/keyring-linux-arm-gnueabihf-1.2.0.tgz", + "integrity": "sha512-8xv6DyEMlvRdqJzp4F39RLUmmTQsLcGYYv/3eIfZNZN1O5257tHxTrFYqAsny659rJJK2EKeSa7PhrSibQqRWQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-linux-arm64-gnu": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-arm64-gnu/-/keyring-linux-arm64-gnu-1.2.0.tgz", + "integrity": "sha512-Pu2V6Py+PBt7inryEecirl+t+ti8bhZphjP+W68iVaXHUxLdWmkgL9KI1VkbRHbx5k8K5Tew9OP218YfmVguIA==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-linux-arm64-musl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-arm64-musl/-/keyring-linux-arm64-musl-1.2.0.tgz", + "integrity": "sha512-8TDymrpC4P1a9iDEaegT7RnrkmrJN5eNZh3Im3UEV5PPYGtrb82CRxsuFohthCWQW81O483u1bu+25+XA4nKUw==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-linux-riscv64-gnu": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-riscv64-gnu/-/keyring-linux-riscv64-gnu-1.2.0.tgz", + "integrity": "sha512-awsB5XI1MYL7fwfjMDGmKOWvNgJEO7mM7iVEMS0fO39f0kVJnOSjlu7RHcXAF0LOx+0VfF3oxbWqJmZbvRCRHw==", + "cpu": [ + "riscv64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-linux-x64-gnu": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-x64-gnu/-/keyring-linux-x64-gnu-1.2.0.tgz", + "integrity": "sha512-8E+7z4tbxSJXxIBqA+vfB1CGajpCDRyTyqXkBig5NtASrv4YXcntSo96Iah2QDR5zD3dSTsmbqJudcj9rKKuHQ==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-linux-x64-musl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-x64-musl/-/keyring-linux-x64-musl-1.2.0.tgz", + "integrity": "sha512-8RZ8yVEnmWr/3BxKgBSzmgntI7lNEsY7xouNfOsQkuVAiCNmxzJwETspzK3PQ2FHtDxgz5vHQDEBVGMyM4hUHA==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-win32-arm64-msvc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-win32-arm64-msvc/-/keyring-win32-arm64-msvc-1.2.0.tgz", + "integrity": "sha512-AoqaDZpQ6KPE19VBLpxyORcp+yWmHI9Xs9Oo0PJ4mfHma4nFSLVdhAubJCxdlNptHe5va7ghGCHj3L9Akiv4cQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-win32-ia32-msvc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-win32-ia32-msvc/-/keyring-win32-ia32-msvc-1.2.0.tgz", + "integrity": "sha512-EYL+EEI6bCsYi3LfwcQdnX3P/R76ENKNn+3PmpGheBsUFLuh0gQuP7aMVHM4rTw6UVe+L3vCLZSptq/oeacz0A==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-win32-x64-msvc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-win32-x64-msvc/-/keyring-win32-x64-msvc-1.2.0.tgz", + "integrity": "sha512-xFlx/TsmqmCwNU9v+AVnEJgoEAlBYgzFF5Ihz1rMpPAt4qQWWkMd4sCyM1gMJ1A/GnRqRegDiQpwaxGUHFtFbA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, "node_modules/@napi-rs/wasm-runtime": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz", @@ -8617,9 +8851,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.61.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.61.0.tgz", - "integrity": "sha512-0uMOcf3eZ5K+K4cYHkdxShFMPlPXCOdfDFEFn9dNYAEEd2cVvmOfH7zFgRVoDgmtQ1m9k5q7qfrHzyMAubKYUA==", + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.61.1.tgz", + "integrity": "sha512-bVWIOIk6pV01p4CdUbPP7CJ/434z+OooYjDuFcR+44N35YvKUC66G8MGnvcWx5mWKW3g61J+t74l3Kj15Kwn2Q==", "cpu": [ "x64" ], @@ -8759,64 +8993,76 @@ } }, "node_modules/@sentry-internal/browser-utils": { - "version": "10.55.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-10.55.0.tgz", - "integrity": "sha512-zUvyBr13EK0evKsSTzwSimRzZ3P9kugS32dLCj3ea5gNN+/DFtU/GsMTdcIQDhusEDraIlH17AGgqJH5gUAv5w==", + "version": "10.56.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-10.56.0.tgz", + "integrity": "sha512-I8tZWAFg8SZpD8BFUpglEtSTzhZjacmcThB5/Mlq/iFiiT8mBPG4ZWDWssSfmIBKvZywJZJ83uDA0+uiJU73Tw==", "license": "MIT", "dependencies": { - "@sentry/core": "10.55.0" + "@sentry/core": "10.56.0" }, "engines": { "node": ">=18" } }, "node_modules/@sentry-internal/feedback": { - "version": "10.55.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-10.55.0.tgz", - "integrity": "sha512-32X9WW1xs5DjCRlp89QJ/PLw4kbTIX6MsBDXN2RBN1nWBjm/2WcwXqO/v/WoIS4W2kTWXcZnQwalLSI22Fp33A==", + "version": "10.56.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-10.56.0.tgz", + "integrity": "sha512-fkRR9JroESTIlErkht3OrH4DXKd/DbPozr2KLdX7boMo31hPu4cL9fuqzwOrwyDPRq9B4j+qEgIWB8JrTbgvmg==", "license": "MIT", "dependencies": { - "@sentry/core": "10.55.0" + "@sentry/core": "10.56.0" }, "engines": { "node": ">=18" } }, "node_modules/@sentry-internal/replay": { - "version": "10.55.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-10.55.0.tgz", - "integrity": "sha512-OkQpANGwYU5UKfwLk6Y+NpESRC8nrLBjawRDLwF6cJ8HpNScOuNNJDEJEGwXHVkJPH0pcIixsH8y0Qfcltq6Xw==", + "version": "10.56.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-10.56.0.tgz", + "integrity": "sha512-DjF09hpy3TF7Km/kOZc73YJmBqcbPCxuZ5rtRs+KtVHu3Vq48xeW83qKUcFEZv20ur9UD99OAJ/gaEt//1Qbwg==", "license": "MIT", "dependencies": { - "@sentry-internal/browser-utils": "10.55.0", - "@sentry/core": "10.55.0" + "@sentry-internal/browser-utils": "10.56.0", + "@sentry/core": "10.56.0" }, "engines": { "node": ">=18" } }, "node_modules/@sentry-internal/replay-canvas": { - "version": "10.55.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-10.55.0.tgz", - "integrity": "sha512-lu/y7k9cK7FZ/qJpL0fBX4WqK6IFa/+bTPhedEaC5UpzjUNP7BfXt0H+R7q9CHWmp20Ffh/wGfO3j7O+Tv2MAA==", + "version": "10.56.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-10.56.0.tgz", + "integrity": "sha512-SDg2K0CAZT/TnhrixQGwXoi6ZsWUB+DQy3UUk0bSQm6c/5k5zFBpGOiughQN+DYsDilKREfPKmUEEnqvUjm1HQ==", "license": "MIT", "dependencies": { - "@sentry-internal/replay": "10.55.0", - "@sentry/core": "10.55.0" + "@sentry-internal/replay": "10.56.0", + "@sentry/core": "10.56.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@sentry-internal/server-utils": { + "version": "10.56.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/server-utils/-/server-utils-10.56.0.tgz", + "integrity": "sha512-6kuZI/vAjyVKMm1cTzc2pdUmVR4Px4etMG6wnCPyFnwEaGbUKQnTynUBFpTuo/q6Js6QBQvhLNoAnO4YsOfW4w==", + "license": "MIT", + "dependencies": { + "@sentry/core": "10.56.0" }, "engines": { "node": ">=18" } }, "node_modules/@sentry/astro": { - "version": "10.55.0", - "resolved": "https://registry.npmjs.org/@sentry/astro/-/astro-10.55.0.tgz", - "integrity": "sha512-4SRPtzy5XbLrk1vhB2kX6BlDvGrBri+C7CbHzRvtyI0W2O3R8onQvgfBfDtWZ8jQVWjfS/FqpWnXmOwTtxDdyw==", + "version": "10.56.0", + "resolved": "https://registry.npmjs.org/@sentry/astro/-/astro-10.56.0.tgz", + "integrity": "sha512-vU+IwfK7rXCJKuzTH0ANlwy/I9Dhz33lGVvveTrDjlVc8ngqu7Nm1LdeYoTUSnNlTv+VtQMQcg4s1DyhMEICPA==", "license": "MIT", "dependencies": { - "@sentry/browser": "10.55.0", - "@sentry/core": "10.55.0", - "@sentry/node": "10.55.0", + "@sentry/browser": "10.56.0", + "@sentry/core": "10.56.0", + "@sentry/node": "10.56.0", "@sentry/vite-plugin": "^5.3.0" }, "engines": { @@ -8836,16 +9082,16 @@ } }, "node_modules/@sentry/browser": { - "version": "10.55.0", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-10.55.0.tgz", - "integrity": "sha512-5n1kxmW1m4j16ZDV9kt+Zo5uafFnKTy7s5YyEcGnC45KnOiO1Gy+QFd3woXns1K5GNxpjF7oOOc6tXgZLuXnQQ==", + "version": "10.56.0", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-10.56.0.tgz", + "integrity": "sha512-80X3NmsGB6tLmfzXYdjzWWdVAdL5CRukGKLcRWIcNhgGjtskOmnzaGb93egEZGI5bUTbtONJ0oyscQ3Z9yoAtQ==", "license": "MIT", "dependencies": { - "@sentry-internal/browser-utils": "10.55.0", - "@sentry-internal/feedback": "10.55.0", - "@sentry-internal/replay": "10.55.0", - "@sentry-internal/replay-canvas": "10.55.0", - "@sentry/core": "10.55.0" + "@sentry-internal/browser-utils": "10.56.0", + "@sentry-internal/feedback": "10.56.0", + "@sentry-internal/replay": "10.56.0", + "@sentry-internal/replay-canvas": "10.56.0", + "@sentry/core": "10.56.0" }, "engines": { "node": ">=18" @@ -9047,18 +9293,18 @@ } }, "node_modules/@sentry/core": { - "version": "10.55.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-10.55.0.tgz", - "integrity": "sha512-XUyoNtDSYCvgJnoNzlh+YeAXfIPhCRIXbhWqqM3GQ3AFtZICi85lkyfsrwXEl9wzlPGYnU+Eg8F4tOfScx+FcQ==", + "version": "10.56.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-10.56.0.tgz", + "integrity": "sha512-L+u1dIz5SANrmST5jhIwETtt4apILgKrylv12X4hKJU0PvZl+NorjeV/ty3MwzpKQPg6b6q6qMOSLc1rLpy3iQ==", "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/@sentry/node": { - "version": "10.55.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-10.55.0.tgz", - "integrity": "sha512-+fB/ByoHVWPLGgoafYciiMatTNyX1FHj1bsqZBN+Pw3McbuEU1nwCPLt9zuyZZiWlQtXKsyuACS4ZhXnID5l8A==", + "version": "10.56.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-10.56.0.tgz", + "integrity": "sha512-qvgtXHkcR4CH3fh0VEVyw4Ysc6MMiAnm727NdTTm0yU5e53erCeo2521+yfJkqmRTGiOSgwA7B5Bs+ot9j0vFQ==", "license": "MIT", "dependencies": { "@opentelemetry/api": "^1.9.1", @@ -9066,9 +9312,10 @@ "@opentelemetry/instrumentation": "^0.214.0", "@opentelemetry/sdk-trace-base": "^2.6.1", "@opentelemetry/semantic-conventions": "^1.40.0", - "@sentry/core": "10.55.0", - "@sentry/node-core": "10.55.0", - "@sentry/opentelemetry": "10.55.0", + "@sentry-internal/server-utils": "10.56.0", + "@sentry/core": "10.56.0", + "@sentry/node-core": "10.56.0", + "@sentry/opentelemetry": "10.56.0", "import-in-the-middle": "^3.0.0" }, "engines": { @@ -9076,13 +9323,13 @@ } }, "node_modules/@sentry/node-core": { - "version": "10.55.0", - "resolved": "https://registry.npmjs.org/@sentry/node-core/-/node-core-10.55.0.tgz", - "integrity": "sha512-M8XMMIk9Y0PGZoEt37Oe5dQCdqDdJlBcwLXidpz/s5k4QtJvCO/BbtcivcuKI2htw5FwxJkSrHUzRvT36tlDpg==", + "version": "10.56.0", + "resolved": "https://registry.npmjs.org/@sentry/node-core/-/node-core-10.56.0.tgz", + "integrity": "sha512-61lD2Wjtv5Lw2F3lJarcD0ORjR4GlVxrEd6w6Of/uF3DH73dD6K3n/3wXEeCIRfV/kgiCFIrCIq76nz0LVgE5g==", "license": "MIT", "dependencies": { - "@sentry/core": "10.55.0", - "@sentry/opentelemetry": "10.55.0", + "@sentry/core": "10.56.0", + "@sentry/opentelemetry": "10.56.0", "import-in-the-middle": "^3.0.0" }, "engines": { @@ -9118,12 +9365,12 @@ } }, "node_modules/@sentry/opentelemetry": { - "version": "10.55.0", - "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-10.55.0.tgz", - "integrity": "sha512-0+YrNmVNrttki4rWP4DW+UTt5MziepwDLNBde39tgc3cGCcy5fLSdDfhb4JfTaE5TXt4kd5XrkgvS/sDgm3RZg==", + "version": "10.56.0", + "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-10.56.0.tgz", + "integrity": "sha512-PtMudApHMHvttjos3b7JZ2gJ+nstHAOYE3vKPYB5o0WQO95ldiaYnpLKMCRIGZWF3Dk7ynrqqnBpn8LZLt+Mrg==", "license": "MIT", "dependencies": { - "@sentry/core": "10.55.0" + "@sentry/core": "10.56.0" }, "engines": { "node": ">=18" @@ -9170,13 +9417,13 @@ } }, "node_modules/@shikijs/core": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-4.1.0.tgz", - "integrity": "sha512-jLJtSJeuFffqX6/inRE1zqU5aFv2hrszvYgq3OjbAgFRZiWv7abKMDdQzYxuSDfmUPQozZvI/kuy6VMTvnvqTQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-4.2.0.tgz", + "integrity": "sha512-Hc87Ab1Ld/vEbZRCbwx344I5v+4RU8CVToUTRkqXL1+TjbuOp9U5Xa0M23V4GEWHxVn+yO5otb+HkQVm3ptWQQ==", "license": "MIT", "dependencies": { - "@shikijs/primitive": "4.1.0", - "@shikijs/types": "4.1.0", + "@shikijs/primitive": "4.2.0", + "@shikijs/types": "4.2.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" @@ -9186,12 +9433,12 @@ } }, "node_modules/@shikijs/engine-javascript": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-4.1.0.tgz", - "integrity": "sha512-YquhawCUgaBfhsS72e2Y/dI59gCBNPHu3fEO/tvLaXrTssxZrY5ddjtNLTwndrMgPo8b3IscE+xoICDzpTmlFQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-4.2.0.tgz", + "integrity": "sha512-fjETeq1k5ffyXqRgS6+3hpvqseLalp1kjNfRbXpUgWR8FpZ1CmQfiNHovc5lncYjt/Vg5JK/WJEmLahjwMa0og==", "license": "MIT", "dependencies": { - "@shikijs/types": "4.1.0", + "@shikijs/types": "4.2.0", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.6" }, @@ -9200,12 +9447,12 @@ } }, "node_modules/@shikijs/engine-oniguruma": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-4.1.0.tgz", - "integrity": "sha512-axLpjVs45YBvvINa+dJF+NPW+KtFkNXsFr4SDw2BMj9GdeMnGxVB9PQb2xXlJYovslt/nz6giedAyOANkfc7hg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-4.2.0.tgz", + "integrity": "sha512-hTorK1dffPkpbMUk6Z+828PgRo7d07HbnizoP0hNPFjhxMHctj0Px/qoHeGMYafc6ju+u9iMldN4JbVzNQM++g==", "license": "MIT", "dependencies": { - "@shikijs/types": "4.1.0", + "@shikijs/types": "4.2.0", "@shikijs/vscode-textmate": "^10.0.2" }, "engines": { @@ -9213,24 +9460,24 @@ } }, "node_modules/@shikijs/langs": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-4.1.0.tgz", - "integrity": "sha512-nwOMruEkbgdZfQ/b8CgpNBVOpvG1k0N5tbmgiFeqsan401+x3ILqlzZJowSla4Agmq4hG2Uf2wh5jLTEhR8VSg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-4.2.0.tgz", + "integrity": "sha512-bwrVRlJ0wUhZxAbVdvBbv2TTC9yLsh4C/IO5Ofz0T8MQntgDvyVnkbjw9vi50r1kx7RCIJdnJnjZAwmAsXFLZQ==", "license": "MIT", "dependencies": { - "@shikijs/types": "4.1.0" + "@shikijs/types": "4.2.0" }, "engines": { "node": ">=20" } }, "node_modules/@shikijs/primitive": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@shikijs/primitive/-/primitive-4.1.0.tgz", - "integrity": "sha512-zx2/2Uwj2q9X3KSyYREEhXO23xBw5WUhP4orK2lE4r+t9JGITmEe0JH+wPmJhqHpOT2bRRs6lAL945+LDvOAGw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@shikijs/primitive/-/primitive-4.2.0.tgz", + "integrity": "sha512-NOq+DtUkVBJtZMVXL5A0vI0Xk8nvDYaXetFHSJFlOqjDZIVhIPRYFdGkSoElDqNuegikcc3A76SNUa8dTqtAYA==", "license": "MIT", "dependencies": { - "@shikijs/types": "4.1.0", + "@shikijs/types": "4.2.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" }, @@ -9239,34 +9486,34 @@ } }, "node_modules/@shikijs/themes": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-4.1.0.tgz", - "integrity": "sha512-emCcTnUM7yO2wltYbaxm+yLvcCI4+h8XBKc4KmJ7EZUXoSGjcCHifkI//R4OFit9ewpg7H2/9tjOuXrT2v/Knw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-4.2.0.tgz", + "integrity": "sha512-RX8IHYeLv8Cu2W6ruc3RxUqWn0IYCqSrMBzi/uRGAmfyDNOnNO5BF/Px7o97n4XTpmFTo5GbRaazuOWj+2ak2w==", "license": "MIT", "dependencies": { - "@shikijs/types": "4.1.0" + "@shikijs/types": "4.2.0" }, "engines": { "node": ">=20" } }, "node_modules/@shikijs/transformers": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-4.1.0.tgz", - "integrity": "sha512-YbuOcAA3kwqKDU9YSt00dtFLrY5lBXjKU3dWaMATyEyPSqBm9Jqblk/uVICxz7lcjwAHzYaEvIiMWX3mTpogkA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-4.2.0.tgz", + "integrity": "sha512-pKrYVNUr1oPjJvs76gkPPirDySx3GKG9O88P2Y3AQ+7AjSFws9Y+Ry/Q/6Yg6QpyigzjdQ6H5JAMNAvLXZ63dw==", "license": "MIT", "dependencies": { - "@shikijs/core": "4.1.0", - "@shikijs/types": "4.1.0" + "@shikijs/core": "4.2.0", + "@shikijs/types": "4.2.0" }, "engines": { "node": ">=20" } }, "node_modules/@shikijs/types": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-4.1.0.tgz", - "integrity": "sha512-3EQWX54fMpniOrDblzAhiwiJwpiTMW6+B9DWyUd9ska483tbayFYuw47UxwuPknI31bKnySfVQ/QW+jFL4rFdA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-4.2.0.tgz", + "integrity": "sha512-VT/MKtlpOhEPZloSH3Pb9WCZEBDoQVMa9jedp5UAwmJOar1DVc9DRODAxmYPW9M93IK4ryuqRejFfmlvlVDemw==", "license": "MIT", "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", @@ -10394,9 +10641,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "25.9.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.9.1.tgz", - "integrity": "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg==", + "version": "25.9.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.9.2.tgz", + "integrity": "sha512-G05zqtJhcDLb8uslf5EjCxXg9G1KQxiV8OS0R26IC//Eoyitzqe8z37I7cqvnZlrlSfgocQRfSn/AHBZJJFyGw==", "license": "MIT", "dependencies": { "undici-types": ">=7.24.0 <7.24.7" @@ -10466,9 +10713,9 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "19.2.16", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.16.tgz", - "integrity": "sha512-esJiCAnl0kfpNdE69f3So4WJUXy95dLZydX0KwK46riIHDzHM7O9Vtf9xCHW0PXIqvgqNrswl522kA/5yx+F4w==", + "version": "19.2.17", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.17.tgz", + "integrity": "sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==", "license": "MIT", "dependencies": { "csstype": "^3.2.2" @@ -11074,12 +11321,12 @@ } }, "node_modules/@vercel/backends": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/@vercel/backends/-/backends-0.8.4.tgz", - "integrity": "sha512-R7SOhU5/xcBe1hRS2VPDm27R7DF50bMFTijM5eNTWAH4Rsyv3y1kKDfCEYfeNmtaOX07o8lQfuq1Vbg+1lha0g==", + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/@vercel/backends/-/backends-0.8.7.tgz", + "integrity": "sha512-D9jYRiBK9gf5/ZILW1aCLlI337JawAG8U+oB9dEUQaue/NzeV8yRrro44ZuJkTuk6b4DJIn0NEtc7/0YMjQavA==", "license": "Apache-2.0", "dependencies": { - "@vercel/build-utils": "13.26.5", + "@vercel/build-utils": "13.27.1", "@vercel/nft": "1.10.0", "execa": "3.2.0", "fs-extra": "11.1.0", @@ -11170,9 +11417,9 @@ } }, "node_modules/@vercel/build-utils": { - "version": "13.26.5", - "resolved": "https://registry.npmjs.org/@vercel/build-utils/-/build-utils-13.26.5.tgz", - "integrity": "sha512-nzXzE43OALBGzchr8f5o579sQojs6+Oq+Ffp61FbQEly0eK+CWRrDXH3MiTZlPWLi2sn789tZ2EIBqrdD7e0dQ==", + "version": "13.27.1", + "resolved": "https://registry.npmjs.org/@vercel/build-utils/-/build-utils-13.27.1.tgz", + "integrity": "sha512-BD9H2U8I/IPGS1c1stSIkdPxBRu6bkCQFqtRjcT2dcdnBawyHXvzTsnnBQhgB3fJVQtgJT47gVZe1oHDmv0Ktg==", "license": "Apache-2.0", "dependencies": { "@vercel/python-analysis": "0.11.1", @@ -11193,21 +11440,95 @@ "license": "MIT" }, "node_modules/@vercel/cervel": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/@vercel/cervel/-/cervel-0.1.12.tgz", - "integrity": "sha512-xiaHTonUS+IWTIBuT9KYq9anNJknB0cWysT0dcvRcHJePGfHTu7LCriNaDwUQZCoTjuT4Fs60xfIw7Qwth7Zqg==", + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/@vercel/cervel/-/cervel-0.1.15.tgz", + "integrity": "sha512-hMpGob9IkmtFqAN8k7eRt9JIRhkOOv/zwE8HujKaR4cPHz2xei2sXY/cL4U/c8Z19TIDI/+a131GYkJgCdoFXg==", "license": "Apache-2.0", "dependencies": { - "@vercel/backends": "0.8.4" + "@vercel/backends": "0.8.7" }, "bin": { "cervel": "bin/cervel.mjs" } }, + "node_modules/@vercel/cli-auth": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@vercel/cli-auth/-/cli-auth-0.3.0.tgz", + "integrity": "sha512-9nsdxUpV/L+9CBVGeRw/Qby2azhi2lk01jp0aTH+Hxx2U61+mAmbi5qChHnrbEmQdx2Ih7dp4LxO3nj1Q7f/5Q==", + "dependencies": { + "@napi-rs/keyring": "1.2.0", + "@vercel/cli-config": "0.2.0", + "async-listen": "3.0.0", + "open": "8.4.0", + "zod": "4.1.11" + } + }, + "node_modules/@vercel/cli-auth/node_modules/async-listen": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/async-listen/-/async-listen-3.0.0.tgz", + "integrity": "sha512-V+SsTpDqkrWTimiotsyl33ePSjA5/KrithwupuvJ6ztsqPvGv6ge4OredFhPffVXiLN/QUWvE0XcqJaYgt6fOg==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/@vercel/cli-auth/node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vercel/cli-auth/node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@vercel/cli-auth/node_modules/open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vercel/cli-auth/node_modules/zod": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.11.tgz", + "integrity": "sha512-WPsqwxITS2tzx1bzhIKsEs19ABD5vmCVa4xBo2tq/SrV4RNZtfws1EnCWQXM6yh8bD08a1idvkB5MZSBiZsjwg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "node_modules/@vercel/cli-config": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@vercel/cli-config/-/cli-config-0.1.2.tgz", - "integrity": "sha512-XQOcuCM+8tKjh3sfgGRKRuNh78u2D8uGpDJIFcCtFi2tUqbGvqmJo790XX7+Bwakk08y0FCrs2JlEjvvwRhpAg==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@vercel/cli-config/-/cli-config-0.2.0.tgz", + "integrity": "sha512-fJRRRB7734BDuXZ89yBEaA2ncYhH7bWX30mk04W80J6VAfQc+4iB8lyzAdaGpFV3/vNlkt9VZt+/uoQoWX6UsQ==", "license": "Apache-2.0", "dependencies": { "xdg-app-paths": "5", @@ -11233,30 +11554,30 @@ } }, "node_modules/@vercel/elysia": { - "version": "0.1.85", - "resolved": "https://registry.npmjs.org/@vercel/elysia/-/elysia-0.1.85.tgz", - "integrity": "sha512-/k235Du8Si7gIZhO1DycuwipSgrly5/yAnE+cywUrR/HPkftZo3pTdL8isM0qpQ3pRv3Eq0ohlBdRVd+FMfP4g==", + "version": "0.1.88", + "resolved": "https://registry.npmjs.org/@vercel/elysia/-/elysia-0.1.88.tgz", + "integrity": "sha512-q2V5B/AhGjdQ7xrX5YQtl1XbWwmHYy6lnKx1YWweGye05KnFqBSmViZmDTYYPBKqBumNYm7whiZJ4L82AdB7ZA==", "license": "Apache-2.0", "dependencies": { - "@vercel/node": "5.8.9", + "@vercel/node": "5.8.12", "@vercel/static-config": "3.4.0" } }, "node_modules/@vercel/error-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@vercel/error-utils/-/error-utils-2.1.0.tgz", - "integrity": "sha512-DiJcXBOB9N6QM4d7hYPM9Ck/AUjzBl58XNQPxS74o7CuvIanjzrGgygP/70VsyEASeIJMazk1LrhwcNTR/eZGQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@vercel/error-utils/-/error-utils-2.2.0.tgz", + "integrity": "sha512-WFWiRxfPzoYWYifaj4thSKvAaZZwUOqD4k5GINRIgZgCiS2E3iAJbWbIsIZmkQdTecWFHcWGA6q48CjisgpOBA==", "license": "Apache-2.0" }, "node_modules/@vercel/express": { - "version": "0.1.95", - "resolved": "https://registry.npmjs.org/@vercel/express/-/express-0.1.95.tgz", - "integrity": "sha512-9qH25SZiP+2+RtZ9C5TC6gkEQ6/Vgs+PAkNxOpvOdq6Q2O/Gt3loXaCGUjl7PFhqMAjZ4i4dopDbunI1r6Ulig==", + "version": "0.1.98", + "resolved": "https://registry.npmjs.org/@vercel/express/-/express-0.1.98.tgz", + "integrity": "sha512-2sKBo5TflbeRo5epmLDTldIqfegVJBelG6XB/jAlI1IqRcZ/WWPyKaDfAAqKDm0ChqK3110mA1jfl4MFRo84Fg==", "license": "Apache-2.0", "dependencies": { - "@vercel/cervel": "0.1.12", + "@vercel/cervel": "0.1.15", "@vercel/nft": "1.10.0", - "@vercel/node": "5.8.9", + "@vercel/node": "5.8.12", "@vercel/static-config": "3.4.0", "fs-extra": "11.1.0", "path-to-regexp": "8.3.0", @@ -11316,12 +11637,12 @@ } }, "node_modules/@vercel/fastify": { - "version": "0.1.88", - "resolved": "https://registry.npmjs.org/@vercel/fastify/-/fastify-0.1.88.tgz", - "integrity": "sha512-ayEQt6q4c7LnmtCkUqzQzgKbl3peymP0eZLG+racUjj7w0JK5xdRdgoR9ijrA+8Tog9wAyxhpnNKIX3zQ2EuRg==", + "version": "0.1.91", + "resolved": "https://registry.npmjs.org/@vercel/fastify/-/fastify-0.1.91.tgz", + "integrity": "sha512-tuM9h4ZyPGj5ScPFW3GkbPw6/sDIvTK14nxCBWdFAxKKBWvHaxTdY333ONdDJ1oDOyqQQJNd/6M8TX3Pm9QQOw==", "license": "Apache-2.0", "dependencies": { - "@vercel/node": "5.8.9", + "@vercel/node": "5.8.12", "@vercel/static-config": "3.4.0" } }, @@ -11541,13 +11862,13 @@ } }, "node_modules/@vercel/gatsby-plugin-vercel-builder": { - "version": "2.2.11", - "resolved": "https://registry.npmjs.org/@vercel/gatsby-plugin-vercel-builder/-/gatsby-plugin-vercel-builder-2.2.11.tgz", - "integrity": "sha512-7zbNOCzePJPlCdTti4A902ZjGD5N1SRzaFuosDCK16ktUWPbMYjIMwlEod3uqITrITmfmWuNXKohvGQ8euhySg==", + "version": "2.2.14", + "resolved": "https://registry.npmjs.org/@vercel/gatsby-plugin-vercel-builder/-/gatsby-plugin-vercel-builder-2.2.14.tgz", + "integrity": "sha512-+5Av2uklxG9w+Hz7AZtXOEt7FkaHu9DFbSG+YRDF/KpfNCTctjwih2K1i9MNugBPuZkgTopUqkg3ap1UAiTA8Q==", "license": "Apache-2.0", "dependencies": { "@sinclair/typebox": "0.25.24", - "@vercel/build-utils": "13.26.5", + "@vercel/build-utils": "13.27.1", "esbuild": "0.27.0", "etag": "1.8.1", "fs-extra": "11.1.0" @@ -12017,23 +12338,23 @@ "license": "Apache-2.0" }, "node_modules/@vercel/h3": { - "version": "0.1.94", - "resolved": "https://registry.npmjs.org/@vercel/h3/-/h3-0.1.94.tgz", - "integrity": "sha512-xpUW6n3S17iFe82SQP0DCqL2LhB1QbxhbyxM1gc4kmynruUyCqvpgGZ1f78zEMaK2dUeiWCcUhxByjhrwVr2SQ==", + "version": "0.1.97", + "resolved": "https://registry.npmjs.org/@vercel/h3/-/h3-0.1.97.tgz", + "integrity": "sha512-fx9g6kmGBfz7q4MfQSZiOybvUXame6wwVQjTpI/xTaA5pmx9a+6XlaEb/XZ7x5gLgT/AM6t9EcqTBsbPgFilpQ==", "license": "Apache-2.0", "dependencies": { - "@vercel/node": "5.8.9", + "@vercel/node": "5.8.12", "@vercel/static-config": "3.4.0" } }, "node_modules/@vercel/hono": { - "version": "0.2.88", - "resolved": "https://registry.npmjs.org/@vercel/hono/-/hono-0.2.88.tgz", - "integrity": "sha512-rhO9vFBo38fFeBeC2WgkEIfJ8m8fFZ53BXTvwKlpaBqpTwI2xrgzqiDAKcobDOy2AwEc8q6Ibi2LTQ+2O1JM0A==", + "version": "0.2.91", + "resolved": "https://registry.npmjs.org/@vercel/hono/-/hono-0.2.91.tgz", + "integrity": "sha512-COMozKZiRzjg0o/RWwecy0YdzgN6Wcl1DPqEtFBOJxXMww9Pz5ZNTgMMaOiAJZoaWsV/pEahrmR8ERXMmap6xA==", "license": "Apache-2.0", "dependencies": { "@vercel/nft": "1.10.0", - "@vercel/node": "5.8.9", + "@vercel/node": "5.8.12", "@vercel/static-config": "3.4.0", "fs-extra": "11.1.0", "path-to-regexp": "8.3.0", @@ -12103,22 +12424,22 @@ } }, "node_modules/@vercel/koa": { - "version": "0.1.68", - "resolved": "https://registry.npmjs.org/@vercel/koa/-/koa-0.1.68.tgz", - "integrity": "sha512-fuCo0aEvh53SwPV/gmV6Ccl2owZDbc9sV9T+edffwF/phbIZV+yd6cMXJtl+2AFLKB4eu2xl7/yX5hy6la9XMQ==", + "version": "0.1.71", + "resolved": "https://registry.npmjs.org/@vercel/koa/-/koa-0.1.71.tgz", + "integrity": "sha512-WAwu002xf7fj5Cu4fZl4WHt14DiyfLFI5Y2yp7hBgJMVGobfkckmgshnfUAqlx4LDD2vl51DClNVbljcTFPc2Q==", "license": "Apache-2.0", "dependencies": { - "@vercel/node": "5.8.9", + "@vercel/node": "5.8.12", "@vercel/static-config": "3.4.0" } }, "node_modules/@vercel/nestjs": { - "version": "0.2.89", - "resolved": "https://registry.npmjs.org/@vercel/nestjs/-/nestjs-0.2.89.tgz", - "integrity": "sha512-dcu5OdquB7OEPtOfs/zfcZPQ9HC8czsqkWkUFwk4edsynw5GPWNSQ8DHbhfoGo5h/l+sX+5X4K2yc66xmzlK6w==", + "version": "0.2.92", + "resolved": "https://registry.npmjs.org/@vercel/nestjs/-/nestjs-0.2.92.tgz", + "integrity": "sha512-1jRXR7QBDl7OEBdnOLrriatyimeEB+dE0RM+EdB8/aRIbVfWGrMUa8Gf4P1hSFuAXCtkvSx7xExByXF4dHr67Q==", "license": "Apache-2.0", "dependencies": { - "@vercel/node": "5.8.9", + "@vercel/node": "5.8.12", "@vercel/static-config": "3.4.0" } }, @@ -12196,17 +12517,17 @@ "license": "MIT" }, "node_modules/@vercel/node": { - "version": "5.8.9", - "resolved": "https://registry.npmjs.org/@vercel/node/-/node-5.8.9.tgz", - "integrity": "sha512-2CHt5hbhM6OquuPqG/PXktWJKaEO7F2wSRBgCs2zNcVREHU0mYYfOnxEoSiMDRApsV0QQm+KSXI0UPGSmj7BzA==", + "version": "5.8.12", + "resolved": "https://registry.npmjs.org/@vercel/node/-/node-5.8.12.tgz", + "integrity": "sha512-XK2ML9YVdAlZ3BmGTW4jQL0D55ZHeRWKS+CLPSWReDyOBKaC4tTnTL2tp3z76bAs0pfgbT55nplMiX2mneSbLA==", "license": "Apache-2.0", "dependencies": { "@edge-runtime/node-utils": "2.3.0", "@edge-runtime/primitives": "4.1.0", "@edge-runtime/vm": "3.2.0", "@types/node": "20.11.0", - "@vercel/build-utils": "13.26.5", - "@vercel/error-utils": "2.1.0", + "@vercel/build-utils": "13.27.1", + "@vercel/error-utils": "2.2.0", "@vercel/nft": "1.10.0", "@vercel/static-config": "3.4.0", "async-listen": "3.0.0", @@ -12963,12 +13284,12 @@ "license": "MIT" }, "node_modules/@vercel/remix-builder": { - "version": "5.8.5", - "resolved": "https://registry.npmjs.org/@vercel/remix-builder/-/remix-builder-5.8.5.tgz", - "integrity": "sha512-IJuOIW1BPn3DIWzaplz13zXS0kHsdRs0MrJs9HmwX65Ilt1y1PhO/n0McNu5gwEID9jRJAS1f+Y7hCZVykbBRg==", + "version": "5.8.6", + "resolved": "https://registry.npmjs.org/@vercel/remix-builder/-/remix-builder-5.8.6.tgz", + "integrity": "sha512-Py+ht/4hyzaJQR5oJt9MFyUwhZGvZZTk8aK5rw9TgLcTT4e63RxdQVXs7bDaYRJgEDBBo2/uZ6HIb5sQt9j4Ow==", "license": "Apache-2.0", "dependencies": { - "@vercel/error-utils": "2.1.0", + "@vercel/error-utils": "2.2.0", "@vercel/nft": "1.10.0", "@vercel/static-config": "3.4.0", "path-to-regexp": "6.1.0", @@ -13147,13 +13468,13 @@ } }, "node_modules/@vercel/static-build": { - "version": "2.9.34", - "resolved": "https://registry.npmjs.org/@vercel/static-build/-/static-build-2.9.34.tgz", - "integrity": "sha512-jiIGk7rvj4bBeAsK4psmLnqfNK+e7V3g8e6iyPbYtC/UWS0V+n3W+zm29UHrxgYav4RlBQzAGK4eCwsOfNFd5g==", + "version": "2.9.37", + "resolved": "https://registry.npmjs.org/@vercel/static-build/-/static-build-2.9.37.tgz", + "integrity": "sha512-46SspDEKYyfWkhE9wmXDiIBJyF+GgWa/af/VmhaYALsteJBBdviGdDr3qGu51j15ldHuJ/aI2gShhD0Cp7ddEA==", "license": "Apache-2.0", "dependencies": { "@vercel/gatsby-plugin-vercel-analytics": "1.0.11", - "@vercel/gatsby-plugin-vercel-builder": "2.2.11", + "@vercel/gatsby-plugin-vercel-builder": "2.2.14", "@vercel/static-config": "3.4.0", "ts-morph": "12.0.0" } @@ -15181,9 +15502,9 @@ } }, "node_modules/astro": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/astro/-/astro-6.4.2.tgz", - "integrity": "sha512-8H89CH2dKL5SCU99OCqdU9BGjmPkSJqaPurywj5XMo7eMFGUFD3vsNhdEKnEh4mK4LgGje3/QDTTSIIGst0G0Q==", + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/astro/-/astro-6.4.4.tgz", + "integrity": "sha512-hVe8tq3lqt/Dr0UyB//yUmQSlHMTU8scTiF/vQddQVahLE4TTaSdH5H0nb7OvRcwo0UmlAO8DWYar4jNaS7H+A==", "license": "MIT", "dependencies": { "@astrojs/compiler": "^4.0.0", @@ -15200,7 +15521,7 @@ "clsx": "^2.1.1", "common-ancestor-path": "^2.0.0", "cookie": "^1.1.1", - "devalue": "^5.6.3", + "devalue": "^5.8.1", "diff": "^8.0.3", "dset": "^3.1.4", "es-module-lexer": "^2.0.0", @@ -15762,9 +16083,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.10.33", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.33.tgz", - "integrity": "sha512-bA6+tcSLpz2tIEdDXZPpPTIuxBcC4+w6SieaYyfigIa4h8GlFxbA17v22Vx3JUtuZQj9SgOsnbK+aTBzyDyEuw==", + "version": "2.10.34", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.34.tgz", + "integrity": "sha512-IMDedajPifLnHNY0X9n8hKxRTQ6/eTHwr5bDo04WnuqxyKw6LYtQywCuuqPZwhl3aBXMvQpJov42GLCwRRdQzw==", "license": "Apache-2.0", "bin": { "baseline-browser-mapping": "dist/cli.cjs" @@ -15809,20 +16130,6 @@ "node": "*" } }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/bindings": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", @@ -16074,6 +16381,18 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "license": "MIT" }, + "node_modules/buffer-image-size": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/buffer-image-size/-/buffer-image-size-0.6.4.tgz", + "integrity": "sha512-nEh+kZOPY1w+gcCMobZ6ETUp9WfibndnosbpwB1iJk/8Gt5ZF2bhS6+B6bPYz424KtwsR6Rflc3tCz1/ghX2dQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + }, + "engines": { + "node": ">=4.0" + } + }, "node_modules/bytes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", @@ -16491,44 +16810,6 @@ "node": ">=18" } }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "extraneous": true, - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "extraneous": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/chownr": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", @@ -17799,16 +18080,6 @@ "node": ">=0.10" } }, - "node_modules/data-uri-to-buffer": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-8.0.0.tgz", - "integrity": "sha512-6UHfyCux51b8PTGDgveqtz1tvphBku5DrMKKJbFAZAJOI2zsjDpDoYE1+QGj7FOMS4BdTFNJsJiR3zEB0xH0yQ==", - "extraneous": true, - "license": "MIT", - "engines": { - "node": ">= 20" - } - }, "node_modules/data-urls": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-7.0.0.tgz", @@ -18122,24 +18393,6 @@ "integrity": "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==", "license": "MIT" }, - "node_modules/degenerator": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-7.0.1.tgz", - "integrity": "sha512-ABErK0IefDSyHjlPH7WUEenIAX2rPPnrDcDM+TS3z3+zu9TfyKKi07BQM+8rmxpdE2y1v5fjjdoAS/x4D2U60w==", - "extraneous": true, - "license": "MIT", - "dependencies": { - "ast-types": "^0.13.4", - "escodegen": "^2.1.0", - "esprima": "^4.0.1" - }, - "engines": { - "node": ">= 20" - }, - "peerDependencies": { - "quickjs-wasi": "^2.2.0" - } - }, "node_modules/delaunator": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.1.0.tgz", @@ -19305,9 +19558,9 @@ } }, "node_modules/eslint-plugin-jsdoc": { - "version": "63.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-63.0.1.tgz", - "integrity": "sha512-2uQ2ShksMXRUI4K96/CyNs5sYmXQHaSoRjn1cxL2RcRHF+9d+njIkT03cZS7/g/eI/fPJTRfjm/MgIlOezD+KQ==", + "version": "63.0.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-63.0.2.tgz", + "integrity": "sha512-0TchoK1uS4VxHSo3P4CyWQ31Lm+6zsT+xkHMC5KbFKwgOf8YrXPf1Bl8EP7kpgw1wfe/Ui5jz5mSX7ou8WAVuw==", "license": "BSD-3-Clause", "dependencies": { "@es-joy/jsdoccomment": "~0.87.0", @@ -19321,7 +19574,7 @@ "html-entities": "^2.6.0", "object-deep-merge": "^2.0.1", "parse-imports-exports": "^0.2.4", - "semver": "^7.8.1", + "semver": "^7.8.2", "spdx-expression-parse": "^4.0.0", "to-valid-identifier": "^1.0.0" }, @@ -19333,9 +19586,9 @@ } }, "node_modules/eslint-plugin-jsdoc/node_modules/semver": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.1.tgz", - "integrity": "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==", + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.2.tgz", + "integrity": "sha512-c8jsqUZm3omBOI66G90z1Dyw5z622G8oLG+omfsHBJf3CWQTlOcwOjvOG6wtiNfW6anKm/eA39LMwMtMez2TiQ==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -20544,21 +20797,6 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, - "node_modules/get-uri": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-8.0.0.tgz", - "integrity": "sha512-CqtZlMKvfJeY0Zxv8wazDwXmSKmnMnsmNy8j8+wudi8EyG/pMUB1NqHc+Tv1QaNtpYsK9nOYjb7r7Ufu32RPSw==", - "extraneous": true, - "license": "MIT", - "dependencies": { - "basic-ftp": "^5.2.0", - "data-uri-to-buffer": "8.0.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 20" - } - }, "node_modules/getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", @@ -20848,17 +21086,18 @@ "license": "MIT" }, "node_modules/happy-dom": { - "version": "20.9.0", - "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-20.9.0.tgz", - "integrity": "sha512-GZZ9mKe8r646NUAf/zemnGbjYh4Bt8/MqASJY+pSm5ZDtc3YQox+4gsLI7yi1hba6o+eCsGxpHn5+iEVn31/FQ==", + "version": "20.10.2", + "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-20.10.2.tgz", + "integrity": "sha512-5p9Sxis3eowDJKqx90QCsgbNA02XXqJ59NOHvD4V6cxp+rP4d/xOyVx7uY3hS8hiUbY1VeiFH8lbJ81AyuDVLQ==", "license": "MIT", "dependencies": { "@types/node": ">=20.0.0", "@types/whatwg-mimetype": "^3.0.2", "@types/ws": "^8.18.1", + "buffer-image-size": "^0.6.4", "entities": "^7.0.1", "whatwg-mimetype": "^3.0.0", - "ws": "^8.18.3" + "ws": "^8.21.0" }, "engines": { "node": ">=20.0.0" @@ -21856,32 +22095,6 @@ "node": ">=6.0.0" } }, - "node_modules/http-proxy-agent": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-9.0.0.tgz", - "integrity": "sha512-FcF8VhXYLQcxWCnt/cCpT2apKsRDUGeVEeMqGu4HSTu29U8Yw0TLOjdYIlDsYk3IkUh+taX4IDWpPcCqKDhCjA==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "agent-base": "9.0.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 20" - } - }, - "node_modules/http-proxy-agent/node_modules/agent-base": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-9.0.0.tgz", - "integrity": "sha512-TQf59BsZnytt8GdJKLPfUZ54g/iaUL2OWDSFCCvMOhsHduDQxO8xC4PNeyIkVcA5KwL2phPSv0douC0fgWzmnA==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 20" - } - }, "node_modules/http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -22313,19 +22526,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "extraneous": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/is-boolean-object": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", @@ -22973,9 +23173,9 @@ "license": "ISC" }, "node_modules/isomorphic-git": { - "version": "1.38.3", - "resolved": "https://registry.npmjs.org/isomorphic-git/-/isomorphic-git-1.38.3.tgz", - "integrity": "sha512-rOpt0yIW9HD1o6mA4w2f4XP5Lj42QnccbFbhzkby6L+t9c2klQxf9seqyrw5x8JcWWnbuPuN7v7YJ7yvHj9OPA==", + "version": "1.38.4", + "resolved": "https://registry.npmjs.org/isomorphic-git/-/isomorphic-git-1.38.4.tgz", + "integrity": "sha512-Ud5vs6Ac+ET+iOZWZB1j2RruVeGQSQc7U7QUhPq6iGqzifaqOVHCgRpG/8c0LwIP39R+Mr+lzR4escmCuhjONQ==", "license": "MIT", "dependencies": { "async-lock": "^1.4.1", @@ -23694,9 +23894,9 @@ } }, "node_modules/libphonenumber-js": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.13.4.tgz", - "integrity": "sha512-/lhWr7vq8foWN9Apksnd9v8/cfwzW6g6qKOCo25XBGkNaVCHucXO57hLy4CWHGvytvLz6Nt3J5Gs8p3jlCGFXA==", + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.13.6.tgz", + "integrity": "sha512-NdB6O6QvlGMCoG003m0YIKG2+Xw7DjmCZhmc1RH+K6HncADUbRf8TZeLegxBBN1VFyPHcNpPTKpIhYLXzJVy1Q==", "license": "MIT" }, "node_modules/libsql": { @@ -30468,67 +30668,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pac-proxy-agent": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-9.0.1.tgz", - "integrity": "sha512-3ZOSpLboOlpW4yp8Cuv21KlTULRqyJ5Uuad3wXpSKFrxdNgcHEyoa22GRaZ2UlgCVuR6z+5BiavtYVvbajL/Yw==", - "extraneous": true, - "license": "MIT", - "dependencies": { - "agent-base": "9.0.0", - "debug": "^4.3.4", - "get-uri": "8.0.0", - "http-proxy-agent": "9.0.0", - "https-proxy-agent": "9.0.0", - "pac-resolver": "9.0.1", - "quickjs-wasi": "^2.2.0", - "socks-proxy-agent": "10.0.0" - }, - "engines": { - "node": ">= 20" - } - }, - "node_modules/pac-proxy-agent/node_modules/agent-base": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-9.0.0.tgz", - "integrity": "sha512-TQf59BsZnytt8GdJKLPfUZ54g/iaUL2OWDSFCCvMOhsHduDQxO8xC4PNeyIkVcA5KwL2phPSv0douC0fgWzmnA==", - "extraneous": true, - "license": "MIT", - "engines": { - "node": ">= 20" - } - }, - "node_modules/pac-proxy-agent/node_modules/https-proxy-agent": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-9.0.0.tgz", - "integrity": "sha512-/MVmHp58WkOypgFhCLk4fzpPcFQvTJ/e6LBI7irpIO2HfxUbpmYoHF+KzipzJpxxzJu7aJNWQ0xojJ/dzV2G5g==", - "extraneous": true, - "license": "MIT", - "dependencies": { - "agent-base": "9.0.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 20" - } - }, - "node_modules/pac-resolver": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-9.0.1.tgz", - "integrity": "sha512-lJbS008tmkj08VhoM8Hzuv/VE5tK9MS0OIQ/7+s0lIF+BYhiQWFYzkSpML7lXs9iBu2jfmzBTLzhe9n6BX+dYw==", - "extraneous": true, - "license": "MIT", - "dependencies": { - "degenerator": "7.0.1", - "netmask": "^2.0.2" - }, - "engines": { - "node": ">= 20" - }, - "peerDependencies": { - "quickjs-wasi": "^2.2.0" - } - }, "node_modules/package-json": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz", @@ -32197,70 +32336,6 @@ "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", "license": "ISC" }, - "node_modules/proxy-agent": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-8.0.1.tgz", - "integrity": "sha512-kccqGBqHZXR8onQhY/ganJjoO8QIKKRiFBhPOzbTZK16attzSZ/0XSmp9H7jrRxPKHjhGyx1q32lMPrJ3uLFgA==", - "extraneous": true, - "license": "MIT", - "dependencies": { - "agent-base": "9.0.0", - "debug": "^4.3.4", - "http-proxy-agent": "9.0.0", - "https-proxy-agent": "9.0.0", - "lru-cache": "^7.14.1", - "pac-proxy-agent": "9.0.1", - "proxy-from-env": "^2.0.0", - "socks-proxy-agent": "10.0.0" - }, - "engines": { - "node": ">= 20" - } - }, - "node_modules/proxy-agent/node_modules/agent-base": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-9.0.0.tgz", - "integrity": "sha512-TQf59BsZnytt8GdJKLPfUZ54g/iaUL2OWDSFCCvMOhsHduDQxO8xC4PNeyIkVcA5KwL2phPSv0douC0fgWzmnA==", - "extraneous": true, - "license": "MIT", - "engines": { - "node": ">= 20" - } - }, - "node_modules/proxy-agent/node_modules/https-proxy-agent": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-9.0.0.tgz", - "integrity": "sha512-/MVmHp58WkOypgFhCLk4fzpPcFQvTJ/e6LBI7irpIO2HfxUbpmYoHF+KzipzJpxxzJu7aJNWQ0xojJ/dzV2G5g==", - "extraneous": true, - "license": "MIT", - "dependencies": { - "agent-base": "9.0.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 20" - } - }, - "node_modules/proxy-agent/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "extraneous": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/proxy-agent/node_modules/proxy-from-env": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", - "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", - "extraneous": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -32691,13 +32766,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/quickjs-wasi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/quickjs-wasi/-/quickjs-wasi-2.2.0.tgz", - "integrity": "sha512-zQxXmQMrEoD3S+jQdYsloq4qAuaxKFHZj6hHqOYGwB2iQZH+q9e/lf5zQPXCKOk0WJuAjzRFbO4KwHIp2D05Iw==", - "extraneous": true, - "license": "MIT" - }, "node_modules/quotation": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/quotation/-/quotation-2.0.3.tgz", @@ -32995,32 +33063,6 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "extraneous": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/readdirp/node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "extraneous": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/recma-build-jsx": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz", @@ -35738,6 +35780,22 @@ "fsevents": "~2.3.2" } }, + "node_modules/rollup/node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.61.0.tgz", + "integrity": "sha512-0uMOcf3eZ5K+K4cYHkdxShFMPlPXCOdfDFEFn9dNYAEEd2cVvmOfH7zFgRVoDgmtQ1m9k5q7qfrHzyMAubKYUA==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/roughjs": { "version": "4.6.6", "resolved": "https://registry.npmjs.org/roughjs/-/roughjs-4.6.6.tgz", @@ -36178,17 +36236,17 @@ } }, "node_modules/shiki": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-4.1.0.tgz", - "integrity": "sha512-l/ABZPUR5v70jI10EzqfMS/I96vjSGv2y0ihUV+WYFzv0EfvW4s54m0Lg8wCrrL+2IkwBzFTuxkZjPf8b2NX9Q==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-4.2.0.tgz", + "integrity": "sha512-hjNax6o/ylDy9lefQEaSDtzaT3iVNtZ3WmpQnbuQNoG4xvnSKf2kSKbihZVO4JRG1TTMejs7CmNRYlWgAL66pQ==", "license": "MIT", "dependencies": { - "@shikijs/core": "4.1.0", - "@shikijs/engine-javascript": "4.1.0", - "@shikijs/engine-oniguruma": "4.1.0", - "@shikijs/langs": "4.1.0", - "@shikijs/themes": "4.1.0", - "@shikijs/types": "4.1.0", + "@shikijs/core": "4.2.0", + "@shikijs/engine-javascript": "4.2.0", + "@shikijs/engine-oniguruma": "4.2.0", + "@shikijs/langs": "4.2.0", + "@shikijs/themes": "4.2.0", + "@shikijs/types": "4.2.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" }, @@ -36503,33 +36561,6 @@ "npm": ">= 3.0.0" } }, - "node_modules/socks-proxy-agent": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-10.0.0.tgz", - "integrity": "sha512-pyp2YR3mNxAMu0mGLtzs4g7O3uT4/9sQOLAKcViAkaS9fJWkud7nmaf6ZREFqQEi24IPkBcjfHjXhPTUWjo3uA==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "agent-base": "9.0.0", - "debug": "^4.3.4", - "socks": "^2.8.3" - }, - "engines": { - "node": ">= 20" - } - }, - "node_modules/socks-proxy-agent/node_modules/agent-base": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-9.0.0.tgz", - "integrity": "sha512-TQf59BsZnytt8GdJKLPfUZ54g/iaUL2OWDSFCCvMOhsHduDQxO8xC4PNeyIkVcA5KwL2phPSv0douC0fgWzmnA==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 20" - } - }, "node_modules/source-map": { "version": "0.7.6", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", @@ -37309,9 +37340,9 @@ } }, "node_modules/stylelint": { - "version": "17.12.0", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-17.12.0.tgz", - "integrity": "sha512-KIlzWXMHUvgfPUR0R7TK3H80yCIi0uoivUwf+6Az4yrHJD1Q3c1qIkh/H5Z0i/K3QXgtq/UMEkWyBUSUwnpnOg==", + "version": "17.13.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-17.13.0.tgz", + "integrity": "sha512-G1WYzMerp7ihOaIe9VJCHLt12MoAD2QLf1AFerYP37+BCRBUK5UCpq8e/mN+zCIaJPKQcaxhE4WlPmqdiOx/gw==", "funding": [ { "type": "opencollective", @@ -37324,9 +37355,9 @@ ], "license": "MIT", "dependencies": { - "@csstools/css-calc": "^3.2.0", + "@csstools/css-calc": "^3.2.1", "@csstools/css-parser-algorithms": "^4.0.0", - "@csstools/css-syntax-patches-for-csstree": "^1.1.3", + "@csstools/css-syntax-patches-for-csstree": "^1.1.4", "@csstools/css-tokenizer": "^4.0.0", "@csstools/media-query-list-parser": "^5.0.0", "@csstools/selector-resolve-nested": "^4.0.0", @@ -37350,7 +37381,7 @@ "micromatch": "^4.0.8", "normalize-path": "^3.0.0", "picocolors": "^1.1.1", - "postcss": "^8.5.14", + "postcss": "^8.5.15", "postcss-safe-parser": "^7.0.1", "postcss-selector-parser": "^7.1.1", "postcss-value-parser": "^4.2.0", @@ -39753,35 +39784,36 @@ } }, "node_modules/vercel": { - "version": "54.7.1", - "resolved": "https://registry.npmjs.org/vercel/-/vercel-54.7.1.tgz", - "integrity": "sha512-WyD/peEPbqkwjwQWU0iw7HqrYvFzIQSkUGLNv2uldPCDQ+cRGqa1/SVvQSWzSfZ4nc51UZxPunUclby9KqWVdw==", + "version": "54.9.1", + "resolved": "https://registry.npmjs.org/vercel/-/vercel-54.9.1.tgz", + "integrity": "sha512-UZacWxc897JpDaSdmz+J35rUDW2PYSQQH/SdVxwsF6AMo72Ej0EolhaFdR6/xQLJMnquAhKoQYSlSzzhDrZR6Q==", "license": "Apache-2.0", "dependencies": { - "@vercel/backends": "0.8.4", + "@vercel/backends": "0.8.7", "@vercel/blob": "2.4.0", - "@vercel/build-utils": "13.26.5", - "@vercel/cli-config": "0.1.2", + "@vercel/build-utils": "13.27.1", + "@vercel/cli-auth": "0.3.0", + "@vercel/cli-config": "0.2.0", "@vercel/detect-agent": "1.2.3", - "@vercel/elysia": "0.1.85", - "@vercel/express": "0.1.95", - "@vercel/fastify": "0.1.88", + "@vercel/elysia": "0.1.88", + "@vercel/express": "0.1.98", + "@vercel/fastify": "0.1.91", "@vercel/fun": "1.3.0", "@vercel/go": "3.8.0", - "@vercel/h3": "0.1.94", - "@vercel/hono": "0.2.88", + "@vercel/h3": "0.1.97", + "@vercel/hono": "0.2.91", "@vercel/hydrogen": "1.3.8", - "@vercel/koa": "0.1.68", - "@vercel/nestjs": "0.2.89", + "@vercel/koa": "0.1.71", + "@vercel/nestjs": "0.2.92", "@vercel/next": "4.17.5", - "@vercel/node": "5.8.9", + "@vercel/node": "5.8.12", "@vercel/prepare-flags-definitions": "0.2.1", "@vercel/python": "6.44.0", "@vercel/redwood": "2.4.15", - "@vercel/remix-builder": "5.8.5", + "@vercel/remix-builder": "5.8.6", "@vercel/ruby": "2.4.0", "@vercel/rust": "1.3.0", - "@vercel/static-build": "2.9.34", + "@vercel/static-build": "2.9.37", "chokidar": "4.0.0", "esbuild": "0.27.0", "form-data": "^4.0.0", diff --git a/package.json b/package.json index fca0c776..665795fb 100644 --- a/package.json +++ b/package.json @@ -77,8 +77,8 @@ "@astrojs/check": "0.9.9", "@astrojs/compiler-rs": "^0.2.1", "@astrojs/db": "0.21.2", - "@astrojs/mdx": "^6.0.1", - "@astrojs/preact": "^5.1.4", + "@astrojs/mdx": "^6.0.2", + "@astrojs/preact": "^5.1.5", "@astrojs/rss": "4.0.18", "@astrojs/sitemap": "3.7.3", "@astrojs/vercel": "^10.0.8", @@ -87,8 +87,8 @@ "@eslint/js": "10.0.1", "@github/relative-time-element": "5.0.0", "@glidejs/glide": "3.7.1", - "@googlemaps/extended-component-library": "0.6.14", - "@happy-dom/global-registrator": "20.9.0", + "@googlemaps/extended-component-library": "0.6.15", + "@happy-dom/global-registrator": "20.10.2", "@hubspot/api-client": "13.5.0", "@lighthousejs/types": "0.0.3", "@nanostores/lit": "0.2.3", @@ -96,9 +96,9 @@ "@playwright/browser-chromium": "1.60.0", "@playwright/test": "1.60.0", "@semantic-ui/astro-lit": "5.3.0", - "@sentry/astro": "10.55.0", - "@sentry/browser": "10.55.0", - "@shikijs/transformers": "4.1.0", + "@sentry/astro": "10.56.0", + "@sentry/browser": "10.56.0", + "@shikijs/transformers": "4.2.0", "@tailwindcss/forms": "0.5.11", "@tailwindcss/typography": "0.5.19", "@tailwindcss/vite": "4.3.0", @@ -117,11 +117,11 @@ "@types/js-cookie": "3.0.6", "@types/jsdom": "28.0.3", "@types/mjml": "5.0.0", - "@types/node": "25.9.1", + "@types/node": "25.9.2", "@types/nodemailer": "8.0.0", "@types/nunjucks": "3.2.6", "@types/pubsub-js": "1.8.6", - "@types/react": "19.2.16", + "@types/react": "19.2.17", "@types/sanitize-html": "2.16.1", "@types/to-ico": "1.1.3", "@typescript-eslint/eslint-plugin": "8.60.1", @@ -140,9 +140,9 @@ "@vitest/coverage-v8": "4.1.8", "@webcomponents/template-shadowroot": "0.2.1", "alex": "11.0.1", - "astro": "^6.4.2", + "astro": "^6.4.4", "astro-vtbot": "2.1.12", - "baseline-browser-mapping": "2.10.33", + "baseline-browser-mapping": "2.10.34", "canvas-confetti": "1.9.4", "canvaskit-wasm": "^0.41.1", "confusing-browser-globals": "1.0.11", @@ -159,13 +159,13 @@ "eslint": "10.4.1", "eslint-plugin-astro": "1.7.0", "eslint-plugin-import-lite": "0.6.0", - "eslint-plugin-jsdoc": "63.0.1", + "eslint-plugin-jsdoc": "63.0.2", "eslint-plugin-security": "4.0.0", "eslint-plugin-yml": "3.4.0", "focus-trap": "8.2.1", "globals": "17.6.0", "gsap": "3.15.0", - "happy-dom": "20.9.0", + "happy-dom": "20.10.2", "hast-util-heading-rank": "3.0.0", "hast-util-is-element": "3.0.0", "html-element-attributes": "3.5.0", @@ -173,10 +173,10 @@ "husky": "9.1.7", "install": "0.13.0", "is-whitespace-character": "2.0.1", - "isomorphic-git": "1.38.3", + "isomorphic-git": "1.38.4", "js-cookie": "3.0.8", "jsdom": "29.1.1", - "libphonenumber-js": "1.13.4", + "libphonenumber-js": "1.13.6", "lighthouse": "13.3.0", "lit": "3.3.3", "markdownlint-cli2": "0.22.1", @@ -228,9 +228,9 @@ "sanitize-html": "2.17.4", "schema-dts": "2.0.0", "sharp": "0.34.5", - "shiki": "4.1.0", + "shiki": "4.2.0", "space-separated-tokens": "2.0.2", - "stylelint": "17.12.0", + "stylelint": "17.13.0", "stylelint-config-standard": "40.0.0", "stylelint-declaration-block-no-ignored-properties": "3.0.0", "stylelint-order": "8.1.1", @@ -248,7 +248,7 @@ "unist-util-is": "6.0.1", "unist-util-visit": "5.1.0", "uuid": "14.0.0", - "vercel": "54.7.1", + "vercel": "54.9.1", "vite": "7.3.5", "vite-plugin-pwa": "1.3.0", "vitest": "4.1.8", @@ -258,7 +258,7 @@ "zod": "4.4.3" }, "optionalDependencies": { - "@rollup/rollup-linux-x64-gnu": "4.61.0" + "@rollup/rollup-linux-x64-gnu": "4.61.1" }, "overrides": { "vite": "7.3.5" diff --git a/requirements.txt b/requirements.txt index 2accba7b..3f15f6d5 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,5 +8,5 @@ pytest-xdist==3.8.0 pytest==9.0.3 python-dotenv==1.2.2 PyYAML==6.0.3 -requests==2.34.1 +requests==2.34.2 upstash-search==0.1.1 \ No newline at end of file diff --git a/src/components/Carousel/@types/index.ts b/src/components/Carousel/@types/index.ts index e8e2cc31..fa6f76a0 100644 --- a/src/components/Carousel/@types/index.ts +++ b/src/components/Carousel/@types/index.ts @@ -8,6 +8,7 @@ export type CarouselNavigationMode = 'wrap' | 'bounded' export const collectionMap = { 'case-studies': 'caseStudies', articles: 'articles', + 'deep-dive': 'deepDives', } as const export type CollectionMap = typeof collectionMap diff --git a/src/components/Content/Layout/index.astro b/src/components/Content/Layout/index.astro index e7e95c58..bb547093 100644 --- a/src/components/Content/Layout/index.astro +++ b/src/components/Content/Layout/index.astro @@ -21,6 +21,8 @@ export type Props = { article: CollectionEntry<'articles'> | CollectionEntry<'deepDives'> /** Canonical URL path when it differs from the rendered page path */ canonicalPath?: string + /** Explicit robots meta content when the page needs non-default indexing behavior */ + robotsContent?: string /** Canonical URL path, e.g. '/articles/my-slug' */ path: string /** Estimated reading time label */ @@ -29,7 +31,8 @@ export type Props = { section: string } -const { author, article, canonicalPath, path, readingTime, section } = Astro.props +const { author, article, canonicalPath, path, readingTime, robotsContent, section } = Astro.props +const relatedContentType = path.startsWith('/deep-dive/') || canonicalPath ? 'deep-dive' : 'articles' --- (typeof t === 'string' ? t : t.id)) ?? []} + tags={ + article.data.tags?.map((tagRef: string | { id: string }) => + typeof tagRef === 'string' ? tagRef : tagRef.id + ) ?? [] + } {...readingTime && { readingTime }} > {/** SLOT: breadcrumb-row */} @@ -105,7 +113,7 @@ const { author, article, canonicalPath, path, readingTime, section } = Astro.pro variant="suggested" currentSlug={article.id} limit={5} - type="articles" + type={relatedContentType} showReadMore={false} /> diff --git a/src/components/Head/Meta.astro b/src/components/Head/Meta.astro index 25505ab0..6daa179a 100644 --- a/src/components/Head/Meta.astro +++ b/src/components/Head/Meta.astro @@ -21,6 +21,8 @@ export interface Props { modifiedDate?: Date /** Whether search engines should ignore the page, default: false */ noindex?: boolean + /** Explicit robots meta content when the page needs non-default indexing behavior */ + robotsContent?: string /** Meta page title displayed in the browser tab and window title bar */ pageTitle: string /** URL path component e.g. 'articles/my-article' */ @@ -43,6 +45,7 @@ const { pageTitle, path, publishDate, + robotsContent, section, tags, } = Astro.props @@ -63,6 +66,7 @@ applyRenderSentryContext({ path, pageTitle, noindex, + robotsContent, contentType, pageDescriptionLength: (pageDescription || companyContactData.description).length, canonicalUrl, @@ -75,7 +79,7 @@ applyRenderSentryContext({ - + { 'https://example.com/deep-dive/example-article' ) }) + + test('renders explicit robots content when provided', async () => { + const Meta = (await import('@components/Head/Meta.astro')).default + + const response = await container.renderToResponse(Meta, { + props: { + pageTitle: 'Example Article', + pageDescription: 'Example description', + path: '/articles/example-article', + robotsContent: 'noindex, follow', + }, + request: new Request('https://example.com/articles/example-article'), + partial: false, + }) + + const renderedHtml = await response.text() + const document = new JSDOM(renderedHtml).window.document + + expect(document.querySelector('meta[name="robots"]')?.getAttribute('content')).toBe( + 'noindex, follow' + ) + }) }) \ No newline at end of file diff --git a/src/components/Head/index.astro b/src/components/Head/index.astro index 5f7fcf73..1161f048 100644 --- a/src/components/Head/index.astro +++ b/src/components/Head/index.astro @@ -15,6 +15,8 @@ export interface Props { modifiedDate?: Date /** Whether search engines should ignore the page, default: false */ noindex?: boolean + /** Explicit robots meta content when the page needs non-default indexing behavior */ + robotsContent?: string /** Meta page title displayed in the browser tab and window title bar */ pageTitle: string /** URL path component e.g. 'articles/my-article' */ @@ -37,6 +39,7 @@ const { pageTitle, path, publishDate, + robotsContent, section, tags, } = Astro.props @@ -54,6 +57,7 @@ const { {...canonicalPath && { canonicalPath }} {...pageDescription && { pageDescription }} {...noindex && { noindex }} + {...robotsContent && { robotsContent }} {...contentType && { contentType }} {...publishDate && { publishDate }} {...modifiedDate && { modifiedDate }} diff --git a/src/components/Pwa/PrefetchOfflinePage/client/__tests__/index.spec.ts b/src/components/Pwa/PrefetchOfflinePage/client/__tests__/index.spec.ts new file mode 100644 index 00000000..cbdcc0f4 --- /dev/null +++ b/src/components/Pwa/PrefetchOfflinePage/client/__tests__/index.spec.ts @@ -0,0 +1,72 @@ +// @vitest-environment jsdom + +import { beforeEach, describe, expect, test, vi } from 'vitest' +import { + appendOfflinePagePrefetchLink, + queueOfflinePagePrefetch, +} from '@components/Pwa/PrefetchOfflinePage/client' + +describe('appendOfflinePagePrefetchLink', () => { + beforeEach(() => { + document.head.innerHTML = '' + }) + + test('adds a prefetch link for the offline page', () => { + appendOfflinePagePrefetchLink(document) + + const link = document.head.querySelector('link[rel="prefetch"][href="/offline"]') + + expect(link).toBeInstanceOf(HTMLLinkElement) + }) + + test('does not add a duplicate prefetch link', () => { + appendOfflinePagePrefetchLink(document) + appendOfflinePagePrefetchLink(document) + + const links = document.head.querySelectorAll('link[rel="prefetch"][href="/offline"]') + + expect(links).toHaveLength(1) + }) +}) + +describe('queueOfflinePagePrefetch', () => { + beforeEach(() => { + document.head.innerHTML = '' + }) + + test('uses requestIdleCallback when available', () => { + let idleCallback: (() => void) | undefined + const setTimeoutMock = vi.fn() + const win = { + requestIdleCallback: vi.fn((callback: () => void) => { + idleCallback = callback + return 1 + }), + setTimeout: setTimeoutMock, + } as unknown as Window + + queueOfflinePagePrefetch({ win, doc: document }) + + expect(document.head.querySelector('link[rel="prefetch"][href="/offline"]')).toBeNull() + expect(setTimeoutMock).not.toHaveBeenCalled() + + idleCallback?.() + + expect(document.head.querySelector('link[rel="prefetch"][href="/offline"]')).toBeTruthy() + }) + + test('falls back to setTimeout when requestIdleCallback is unavailable', () => { + const setTimeoutMock = vi.fn((callback: () => void) => { + callback() + return 1 + }) + const win = { + setTimeout: setTimeoutMock, + } as unknown as Window + + queueOfflinePagePrefetch({ win, doc: document }) + + expect(setTimeoutMock).toHaveBeenCalledWith(expect.any(Function), 500) + expect(document.head.querySelector('link[rel="prefetch"][href="/offline"]')).toBeTruthy() + }) +}) \ No newline at end of file diff --git a/src/components/Pwa/PrefetchOfflinePage/client/index.ts b/src/components/Pwa/PrefetchOfflinePage/client/index.ts new file mode 100644 index 00000000..532238da --- /dev/null +++ b/src/components/Pwa/PrefetchOfflinePage/client/index.ts @@ -0,0 +1,41 @@ +import { queryOfflinePagePrefetchLink } from './selectors' + +const OFFLINE_PAGE_HREF = '/offline' + +/** + * Appends a single prefetch hint for the offline page. + */ +export const appendOfflinePagePrefetchLink = (doc?: Document): void => { + if (!doc?.head || queryOfflinePagePrefetchLink(doc.head)) { + return + } + + const link = doc.createElement('link') + link.rel = 'prefetch' + link.href = OFFLINE_PAGE_HREF + doc.head.append(link) +} + +/** + * Queues the offline page prefetch hint for browser idle time. + */ +export const queueOfflinePagePrefetch = (options?: { + win?: Window + doc?: Document +}): void => { + const win = options?.win ?? (typeof window === 'undefined' ? undefined : window) + const doc = options?.doc ?? (typeof document === 'undefined' ? undefined : document) + + if (!win || !doc) { + return + } + + const appendPrefetchLink = () => appendOfflinePagePrefetchLink(doc) + + if (typeof win.requestIdleCallback === 'function') { + win.requestIdleCallback(() => appendPrefetchLink()) + return + } + + win.setTimeout(() => appendPrefetchLink(), 500) +} \ No newline at end of file diff --git a/src/components/Pwa/PrefetchOfflinePage/client/selectors.ts b/src/components/Pwa/PrefetchOfflinePage/client/selectors.ts new file mode 100644 index 00000000..e610786c --- /dev/null +++ b/src/components/Pwa/PrefetchOfflinePage/client/selectors.ts @@ -0,0 +1,14 @@ +const OFFLINE_PREFETCH_SELECTOR = 'link[rel="prefetch"][href="/offline"]' + +const isHtmlLinkElement = (value: Element | null): value is HTMLLinkElement => { + return value instanceof HTMLLinkElement +} + +/** + * Returns the existing offline-page prefetch link from the given head element. + */ +export const queryOfflinePagePrefetchLink = (head: HTMLHeadElement): HTMLLinkElement | null => { + const link = head.querySelector(OFFLINE_PREFETCH_SELECTOR) + + return isHtmlLinkElement(link) ? link : null +} \ No newline at end of file diff --git a/src/components/Pwa/PrefetchOfflinePage/index.astro b/src/components/Pwa/PrefetchOfflinePage/index.astro index 08ee0801..50c889b6 100644 --- a/src/components/Pwa/PrefetchOfflinePage/index.astro +++ b/src/components/Pwa/PrefetchOfflinePage/index.astro @@ -5,75 +5,7 @@ --- diff --git a/src/layouts/BaseLayout.astro b/src/layouts/BaseLayout.astro index fb44b094..2fb651ee 100644 --- a/src/layouts/BaseLayout.astro +++ b/src/layouts/BaseLayout.astro @@ -37,6 +37,8 @@ export interface Props { modifiedDate?: Date /** Whether search engines should ignore the page, default: false */ noindex?: boolean + /** Explicit robots meta content when the page needs non-default indexing behavior */ + robotsContent?: string /** * Meta page title displayed in the browser tab and window title bar, * and used in social cards and Markdown layout for the element @@ -65,6 +67,7 @@ const { hideBreadcrumbsOnMobile = false, modifiedDate, noindex, + robotsContent, pageTitle, path, publishDate, @@ -125,6 +128,7 @@ applyRenderSentryContext({ path={path} pageDescription={pageDescription} {...noindex && { noindex }} + {...robotsContent && { robotsContent }} {...contentType && { contentType }} {...publishDate && { publishDate }} {...modifiedDate && { modifiedDate }} diff --git a/src/layouts/MarkdownLayout.astro b/src/layouts/MarkdownLayout.astro index bd0c0397..4af22e15 100644 --- a/src/layouts/MarkdownLayout.astro +++ b/src/layouts/MarkdownLayout.astro @@ -91,6 +91,8 @@ export interface Props { contentType?: 'article' | 'website' /** Meta description */ description: string + /** Explicit robots meta content when the page needs non-default indexing behavior */ + robotsContent?: string /** Page title shown in <title> and H1 */ pageTitle: string /** URL path component e.g. 'articles/my-article' */ @@ -128,6 +130,7 @@ const { path, publishDate, readingTime, + robotsContent, showProgressBar = false, showToc, subtitle, @@ -150,6 +153,7 @@ const link = `https://www.webstackbuilders.com${path}` pageDescription={description} {...canonicalPath && { canonicalPath }} path={path} + {...robotsContent && { robotsContent }} contentType={contentType} hideBreadcrumbsOnMobile={hideBreadcrumbsOnMobile} showProgressBar={showProgressBar} diff --git a/src/pages/articles/[...slug].astro b/src/pages/articles/[...slug].astro index 0a458c7d..0571cb94 100644 --- a/src/pages/articles/[...slug].astro +++ b/src/pages/articles/[...slug].astro @@ -37,6 +37,7 @@ const author = await getEntry(article.data.author) const articleBody = article.body ?? '' const readingTime = article.data.readingTime ?? getReadingTimeLabel(articleBody) +const robotsContent = canonicalPath ? 'noindex, follow' : undefined --- <ContentLayout @@ -44,6 +45,7 @@ const readingTime = article.data.readingTime ?? getReadingTimeLabel(articleBody) article={article} {...canonicalPath && { canonicalPath }} path={`/articles/${article.id}`} + {...robotsContent && { robotsContent }} section="Articles" {...readingTime && { readingTime }} /> diff --git a/src/pages/articles/index.astro b/src/pages/articles/index.astro index 90257605..a500e85f 100644 --- a/src/pages/articles/index.astro +++ b/src/pages/articles/index.astro @@ -7,20 +7,20 @@ import PageLayout from '@layouts/PageLayout.astro' import Carousel from '@components/Carousel/index.astro' import Icon from '@components/Icon/index.astro' -const allArticles = await getCollection('articles', ({ data }) => isDev() || data.isDraft !== true) +const allDeepDives = await getCollection('deepDives', ({ data }) => isDev() || data.isDraft !== true) const allTags = await getCollection('tags') const featuredTags = allTags.filter(tag => tag.data.featured === true) -const getArticlesForTag = (tagEntry: CollectionEntry<'tags'>) => { - return allArticles.filter(article => { - return article.data.tags.some(tagRef => tagRef.id === tagEntry.id) +const getDeepDivesForTag = (tagEntry: CollectionEntry<'tags'>) => { + return allDeepDives.filter(article => { + return (article.data.tags as Array<{ id: string }>).some(tagRef => tagRef.id === tagEntry.id) }) } -const tagsWithContent = featuredTags.filter(tag => getArticlesForTag(tag).length > 0) +const tagsWithContent = featuredTags.filter(tag => getDeepDivesForTag(tag).length > 0) -const tagsWithNoContent = allTags.filter(tag => getArticlesForTag(tag).length === 0) +const tagsWithNoContent = allTags.filter(tag => getDeepDivesForTag(tag).length === 0) for (const tag of tagsWithNoContent) { console.warn( @@ -29,7 +29,7 @@ for (const tag of tagsWithNoContent) { } const pageTitle = 'Technical Index' -const pageDescription = 'Browse documentation and guides structured by specific topics' +const pageDescription = 'Browse technical deep dives structured by specific topics' const path = '/articles' --- @@ -46,8 +46,8 @@ const path = '/articles' .sort((a, b) => a.data.displayName.localeCompare(b.data.displayName, 'en')) .map(tag => { const displayName = tag.data.displayName - const articlesForTag = getArticlesForTag(tag) - const latestDate = articlesForTag + const deepDivesForTag = getDeepDivesForTag(tag) + const latestDate = deepDivesForTag .map(a => a.data.publishDate) .sort((a, b) => b.getTime() - a.getTime())[0] const latestFormatted = latestDate @@ -76,7 +76,7 @@ const path = '/articles' {displayName} </h2> <span class="shrink-0 rounded-full bg-page-inverse px-2 py-0.5 sm:ml-1 text-xs font-medium text-page-base whitespace-nowrap transition-colors group-hover:bg-page-active group-hover:text-page-base"> - {articlesForTag.length} articles + {deepDivesForTag.length} deep dives </span> </div> </div> @@ -96,9 +96,9 @@ const path = '/articles' <Carousel variant="suggested" - limit={articlesForTag.length} - type="articles" - items={articlesForTag} + limit={deepDivesForTag.length} + type="deep-dive" + items={deepDivesForTag} showEmblaDots={false} showReadMore={false} /> diff --git a/src/pages/index.astro b/src/pages/index.astro index be472f6f..b58f2ce2 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -125,7 +125,7 @@ const sectionClasses = 'container mx-auto px-4 sm:px-6 lg:px-8 py-4 md:py-8 lg:p titleHref="/articles" variant="suggested" limit={7} - type="articles" + type="deep-dive" showReadMore={true} /> </section> diff --git a/src/pages/rss.xml.ts b/src/pages/rss.xml.ts index df327111..e5c56946 100644 --- a/src/pages/rss.xml.ts +++ b/src/pages/rss.xml.ts @@ -13,7 +13,7 @@ const toCategory = (tag: unknown) => { export async function GET() { const now = new Date() const articles = await getCollection( - 'articles', + 'deepDives', ({ data }) => !data.isDraft && data.publishDate <= now ) const sortedArticles = articles.sort( @@ -34,7 +34,7 @@ export async function GET() { title: article.data.title, pubDate: article.data.publishDate, description: article.data.description, - link: `/articles/${article.id}`, + link: `/deep-dive/${article.id}`, categories: (article.data.tags ?? []) .map(toCategory) .filter((category): category is string => Boolean(category)),