diff --git a/.github/pages-preview-closed/_headers b/.github/pages-preview-closed/_headers
new file mode 100644
index 0000000..f203708
--- /dev/null
+++ b/.github/pages-preview-closed/_headers
@@ -0,0 +1,3 @@
+/*
+ Cache-Control: no-store
+ X-Robots-Tag: noindex, nofollow
diff --git a/.github/pages-preview-closed/index.html b/.github/pages-preview-closed/index.html
new file mode 100644
index 0000000..77a22e3
--- /dev/null
+++ b/.github/pages-preview-closed/index.html
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+ Preview closed
+
+
+
+ This preview is closed
+ The pull request is no longer open.
+
+
+
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index d9aa8f9..4c186d4 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -4,6 +4,11 @@ on:
pull_request:
branches:
- main
+ types:
+ - opened
+ - synchronize
+ - reopened
+ - ready_for_review
workflow_dispatch:
permissions:
@@ -44,3 +49,12 @@ jobs:
- name: Require a package changeset
if: github.event_name == 'pull_request'
run: pnpm changeset:check origin/${{ github.base_ref }}
+
+ - name: Upload the checked Histoire artifact
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
+ with:
+ name: ui-web-histoire
+ path: packages/web/.histoire/dist
+ if-no-files-found: error
+ include-hidden-files: true
+ retention-days: 7
diff --git a/.github/workflows/pages-deploy.yml b/.github/workflows/pages-deploy.yml
new file mode 100644
index 0000000..2131f12
--- /dev/null
+++ b/.github/workflows/pages-deploy.yml
@@ -0,0 +1,158 @@
+name: Histoire deployment
+
+on:
+ push:
+ branches:
+ - main
+
+permissions:
+ contents: read
+
+jobs:
+ build:
+ name: Build exact main Histoire release
+ runs-on: ubuntu-latest
+ timeout-minutes: 20
+ outputs:
+ artifact_digest: ${{ steps.artifact.outputs['artifact-digest'] }}
+ head_sha: ${{ steps.identity.outputs.head_sha }}
+ steps:
+ - name: Resolve exact current main source
+ id: identity
+ uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
+ with:
+ script: |
+ const currentMain = await github.rest.git.getRef({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ ref: 'heads/main',
+ })
+ if (currentMain.data.object.sha !== context.sha) {
+ core.setFailed('A newer main revision superseded this delivery run.')
+ return
+ }
+ core.setOutput('head_sha', context.sha)
+
+ - name: Checkout exact main source
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
+ with:
+ ref: ${{ steps.identity.outputs.head_sha }}
+ persist-credentials: false
+
+ - name: Install the pinned pnpm release
+ uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
+ with:
+ version: 11.17.0
+
+ - name: Set up Node
+ uses: actions/setup-node@249970729cb0ef3589644e2896645e5dc5ba9c38 # v6
+ with:
+ node-version: 22.22.3
+ cache: pnpm
+
+ - name: Install the frozen workspace
+ run: pnpm install --frozen-lockfile
+
+ - name: Build the focused Histoire release
+ run: pnpm story
+
+ - name: Upload the exact Histoire release artifact
+ id: artifact
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
+ with:
+ name: ui-web-histoire
+ path: packages/web/.histoire/dist
+ if-no-files-found: error
+ include-hidden-files: true
+ retention-days: 30
+
+ - name: Record Histoire release provenance
+ env:
+ ARTIFACT_DIGEST: ${{ steps.artifact.outputs['artifact-digest'] }}
+ RELEASE_HEAD_SHA: ${{ steps.identity.outputs.head_sha }}
+ run: |
+ {
+ echo '## UI Histoire release'
+ echo
+ echo "- Source SHA: \`${RELEASE_HEAD_SHA}\`"
+ echo "- Workflow run: \`${GITHUB_RUN_ID}\`"
+ echo '- Artifact: `ui-web-histoire`'
+ echo "- Artifact digest: \`${ARTIFACT_DIGEST}\`"
+ } >> "$GITHUB_STEP_SUMMARY"
+
+ deploy:
+ name: ui-web deployment
+ needs: build
+ concurrency:
+ group: ui-web-deployment-main
+ cancel-in-progress: false
+ permissions:
+ contents: read
+ deployments: write
+ runs-on: ubuntu-latest
+ timeout-minutes: 20
+ environment:
+ name: production
+ url: https://design.inkcre.dev
+ steps:
+ - name: Checkout the exact delivery controller
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
+ with:
+ ref: ${{ needs.build.outputs.head_sha }}
+ path: controller
+ persist-credentials: false
+
+ - name: Install the pinned pnpm release
+ uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
+ with:
+ version: 11.17.0
+
+ - name: Set up Node
+ uses: actions/setup-node@249970729cb0ef3589644e2896645e5dc5ba9c38 # v6
+ with:
+ node-version: 22.22.3
+ cache: pnpm
+ cache-dependency-path: controller/pnpm-lock.yaml
+
+ - name: Install the trusted delivery toolchain
+ run: pnpm --dir controller install --frozen-lockfile
+
+ - name: Download the same-run Histoire release artifact
+ uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
+ with:
+ name: ui-web-histoire
+ path: .pages-delivery/dist
+
+ - name: Reverify main before delivery
+ uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
+ env:
+ RELEASE_HEAD_SHA: ${{ needs.build.outputs.head_sha }}
+ with:
+ script: |
+ const currentMain = await github.rest.git.getRef({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ ref: 'heads/main',
+ })
+ if (currentMain.data.object.sha !== process.env.RELEASE_HEAD_SHA) {
+ core.setFailed('Main changed after the Histoire build; refusing delivery.')
+ }
+
+ - name: Deploy the exact Histoire release artifact
+ env:
+ CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
+ CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
+ RELEASE_HEAD_SHA: ${{ needs.build.outputs.head_sha }}
+ run: >-
+ pnpm --dir controller exec wrangler pages deploy
+ "$GITHUB_WORKSPACE/.pages-delivery/dist"
+ --project-name="${{ vars.CLOUDFLARE_PAGES_PROJECT }}"
+ --branch=main
+ --commit-hash="$RELEASE_HEAD_SHA"
+ --commit-dirty=false
+
+ - name: Smoke-test design.inkcre.dev
+ env:
+ INKCRE_PAGES_MODE: production
+ INKCRE_PAGES_URL: https://design.inkcre.dev
+ run: node controller/scripts/verify-pages-deployment.mjs
diff --git a/.github/workflows/pages-preview-cleanup.yml b/.github/workflows/pages-preview-cleanup.yml
new file mode 100644
index 0000000..16312c9
--- /dev/null
+++ b/.github/workflows/pages-preview-cleanup.yml
@@ -0,0 +1,69 @@
+name: Histoire preview cleanup
+
+on:
+ pull_request_target:
+ branches:
+ - main
+ types:
+ - closed
+
+permissions:
+ contents: read
+
+concurrency:
+ group: ui-web-preview-${{ github.event.pull_request.number }}
+ cancel-in-progress: true
+
+jobs:
+ cleanup:
+ name: ui-web preview cleanup
+ if: >-
+ github.event.pull_request.base.ref == 'main' &&
+ github.event.pull_request.base.repo.full_name == github.repository &&
+ github.event.pull_request.head.repo.full_name == github.repository
+ permissions:
+ contents: read
+ deployments: write
+ runs-on: ubuntu-latest
+ timeout-minutes: 15
+ environment:
+ name: preview
+ url: https://pr-${{ github.event.pull_request.number }}.design-dd4.pages.dev
+ steps:
+ - name: Checkout the trusted cleanup controller
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
+ with:
+ ref: ${{ github.workflow_sha }}
+ persist-credentials: false
+
+ - name: Install the pinned pnpm release
+ uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
+ with:
+ version: 11.17.0
+
+ - name: Set up Node
+ uses: actions/setup-node@249970729cb0ef3589644e2896645e5dc5ba9c38 # v6
+ with:
+ node-version: 22.22.3
+ cache: pnpm
+
+ - name: Install the trusted delivery toolchain
+ run: pnpm install --frozen-lockfile
+
+ - name: Replace the preview alias with a closed marker
+ env:
+ CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
+ CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
+ PREVIEW_BRANCH: pr-${{ github.event.pull_request.number }}
+ run: >-
+ pnpm exec wrangler pages deploy .github/pages-preview-closed
+ --project-name="${{ vars.CLOUDFLARE_PAGES_PROJECT }}"
+ --branch="$PREVIEW_BRANCH"
+ --commit-hash="${{ github.workflow_sha }}"
+ --commit-dirty=false
+
+ - name: Verify the closed preview marker
+ env:
+ INKCRE_PAGES_MODE: closed
+ INKCRE_PAGES_URL: https://pr-${{ github.event.pull_request.number }}.design-dd4.pages.dev
+ run: node scripts/verify-pages-deployment.mjs
diff --git a/.github/workflows/pages-preview.yml b/.github/workflows/pages-preview.yml
new file mode 100644
index 0000000..405bdb5
--- /dev/null
+++ b/.github/workflows/pages-preview.yml
@@ -0,0 +1,160 @@
+name: Histoire preview
+
+on:
+ workflow_run:
+ workflows:
+ - UI checks
+ types:
+ - completed
+
+permissions:
+ actions: read
+ contents: read
+ pull-requests: read
+
+jobs:
+ identity:
+ name: Resolve trusted preview identity
+ if: >-
+ github.event.workflow_run.conclusion == 'success' &&
+ github.event.workflow_run.event == 'pull_request' &&
+ github.event.workflow_run.head_repository.full_name == github.repository
+ runs-on: ubuntu-latest
+ outputs:
+ branch: ${{ steps.identity.outputs.branch }}
+ head_sha: ${{ steps.identity.outputs.head_sha }}
+ pull_number: ${{ steps.identity.outputs.pull_number }}
+ run_id: ${{ steps.identity.outputs.run_id }}
+ steps:
+ - name: Resolve the exact internal pull request
+ id: identity
+ uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
+ with:
+ script: |
+ const runId = context.payload.workflow_run.id
+ const { data: run } = await github.rest.actions.getWorkflowRun({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ run_id: runId,
+ })
+ if (run.name !== 'UI checks' || run.path !== '.github/workflows/ci.yml') {
+ core.setFailed('Preview artifact must come from the trusted UI checks workflow.')
+ return
+ }
+ if (run.conclusion !== 'success' || run.event !== 'pull_request') {
+ core.setFailed('Preview delivery requires a successful pull-request check run.')
+ return
+ }
+ if (run.head_repository?.full_name !== `${context.repo.owner}/${context.repo.repo}`) {
+ core.setFailed('Fork pull requests are not eligible for preview delivery.')
+ return
+ }
+
+ const pulls = await github.rest.repos.listPullRequestsAssociatedWithCommit({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ commit_sha: run.head_sha,
+ })
+ const pull = pulls.data.find((candidate) =>
+ candidate.state === 'open' &&
+ candidate.base.ref === 'main' &&
+ candidate.head.sha === run.head_sha &&
+ candidate.head.repo?.full_name === `${context.repo.owner}/${context.repo.repo}`
+ )
+ if (!pull) {
+ core.setFailed('Run is not the exact head of an eligible internal pull request.')
+ return
+ }
+
+ core.setOutput('branch', `pr-${pull.number}`)
+ core.setOutput('head_sha', run.head_sha)
+ core.setOutput('pull_number', String(pull.number))
+ core.setOutput('run_id', String(runId))
+
+ deploy:
+ name: ui-web preview
+ needs: identity
+ concurrency:
+ group: ui-web-preview-${{ needs.identity.outputs.pull_number }}
+ cancel-in-progress: true
+ permissions:
+ actions: read
+ contents: read
+ deployments: write
+ pull-requests: read
+ runs-on: ubuntu-latest
+ timeout-minutes: 20
+ environment:
+ name: preview
+ url: https://${{ needs.identity.outputs.branch }}.design-dd4.pages.dev
+ steps:
+ - name: Checkout the trusted preview controller
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
+ with:
+ ref: ${{ github.workflow_sha }}
+ path: controller
+ persist-credentials: false
+
+ - name: Install the pinned pnpm release
+ uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
+ with:
+ version: 11.17.0
+
+ - name: Set up Node
+ uses: actions/setup-node@249970729cb0ef3589644e2896645e5dc5ba9c38 # v6
+ with:
+ node-version: 22.22.3
+ cache: pnpm
+ cache-dependency-path: controller/pnpm-lock.yaml
+
+ - name: Install the trusted delivery toolchain
+ run: pnpm --dir controller install --frozen-lockfile
+
+ - name: Download the exact checked artifact
+ uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
+ with:
+ name: ui-web-histoire
+ path: .pages-preview/dist
+ run-id: ${{ needs.identity.outputs.run_id }}
+ github-token: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Reverify pull-request identity before delivery
+ uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
+ env:
+ PREVIEW_HEAD_SHA: ${{ needs.identity.outputs.head_sha }}
+ PULL_NUMBER: ${{ needs.identity.outputs.pull_number }}
+ with:
+ script: |
+ const { data: pull } = await github.rest.pulls.get({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ pull_number: Number(process.env.PULL_NUMBER),
+ })
+ if (
+ pull.state !== 'open' ||
+ pull.base.ref !== 'main' ||
+ pull.head.sha !== process.env.PREVIEW_HEAD_SHA ||
+ pull.head.repo?.full_name !== `${context.repo.owner}/${context.repo.repo}`
+ ) {
+ core.setFailed('Pull-request identity changed after artifact selection.')
+ }
+
+ - name: Deploy the checked Histoire artifact
+ env:
+ CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
+ CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
+ PREVIEW_BRANCH: ${{ needs.identity.outputs.branch }}
+ PREVIEW_HEAD_SHA: ${{ needs.identity.outputs.head_sha }}
+ run: >-
+ pnpm --dir controller exec wrangler pages deploy
+ "$GITHUB_WORKSPACE/.pages-preview/dist"
+ --project-name="${{ vars.CLOUDFLARE_PAGES_PROJECT }}"
+ --branch="$PREVIEW_BRANCH"
+ --commit-hash="$PREVIEW_HEAD_SHA"
+ --commit-dirty=false
+
+ - name: Smoke-test the stable pull-request preview
+ env:
+ INKCRE_PAGES_MODE: preview
+ INKCRE_PAGES_URL: https://${{ needs.identity.outputs.branch }}.design-dd4.pages.dev
+ run: node controller/scripts/verify-pages-deployment.mjs
diff --git a/README.md b/README.md
index 27a05fa..204f717 100644
--- a/README.md
+++ b/README.md
@@ -58,6 +58,22 @@ Generate derived files with `pnpm generate`. The public component manifest
drives the runtime registry, global component types, package version, Story
coverage, and generated Agent Skills.
+## Histoire delivery
+
+`UI checks` builds Histoire as part of the repository contract. Successful
+same-repository pull requests publish that checked output to the stable
+`pr-N.design-dd4.pages.dev` preview alias. Closing the pull request replaces
+the alias with a noindex marker; Cloudflare retains older immutable deployment
+URLs as platform history.
+
+A protected `main` push builds Histoire again as a focused release, transfers
+the exact same-run artifact to the deployment job, and publishes it to
+[design.inkcre.dev](https://design.inkcre.dev). Package publication and Histoire
+delivery are independent outputs of `main`: one may be retried without
+republishing the other. `wrangler.toml` owns the Pages project name, output
+directory, and compatibility date. Delivery jobs run through GitHub environments;
+the Cloudflare credential remains a selected organization Actions secret.
+
## Joint development with client-web
The consuming Vite/Vitest/TypeScript pipeline owns source consumption. Keep
diff --git a/package.json b/package.json
index c5d4c20..eeca1bc 100644
--- a/package.json
+++ b/package.json
@@ -41,7 +41,8 @@
"sass": "^1.94.2",
"style-dictionary": "^5.1.1",
"tsx": "^4.21.0",
- "typescript": "5.9.3"
+ "typescript": "5.9.3",
+ "wrangler": "4.119.0"
},
"devEngines": {
"runtime": {
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 9855a67..e26a71c 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -38,6 +38,9 @@ importers:
typescript:
specifier: npm:typescript-native-bridge@6.0.3-bridge.7.tsgo.7.0.2
version: typescript-native-bridge@6.0.3-bridge.7.tsgo.7.0.2
+ wrangler:
+ specifier: 4.119.0
+ version: 4.119.0
packages/web:
dependencies:
@@ -125,7 +128,7 @@ importers:
version: 4.5.4(@types/node@25.0.2)(rollup@4.53.3)(supports-color@8.1.1)(typescript-native-bridge@6.0.3-bridge.7.tsgo.7.0.2)(vite@7.2.7(@types/node@25.0.2)(jiti@2.6.1)(sass@1.94.2)(tsx@4.21.0)(yaml@2.9.0))
vitest:
specifier: ^4.0.15
- version: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@25.0.1(supports-color@8.1.1))(sass@1.94.2)(tsx@4.21.0)(yaml@2.9.0)
+ version: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@25.0.1(supports-color@10.2.2))(sass@1.94.2)(tsx@4.21.0)(yaml@2.9.0)
vscode-json-languageservice:
specifier: ^5.6.4
version: 5.6.4
@@ -267,6 +270,49 @@ packages:
'@changesets/write@0.4.0':
resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==}
+ '@cloudflare/kv-asset-handler@0.5.0':
+ resolution: {integrity: sha512-jxQYkj8dSIzc0cD6cMMNdOc1UVjqSqu8BZdor5s8cGjW2I8BjODt/kWPVdY+u9zj3ms75Q5qaZgnxUad83+eAg==}
+ engines: {node: '>=22.0.0'}
+
+ '@cloudflare/unenv-preset@2.16.1':
+ resolution: {integrity: sha512-ECxObrMfyTl5bhQf/lZCXwo5G6xX9IAUo+nDMKK4SZ8m4Jvvxp52vilxyySSWh2YTZz8+HQ07qGH/2rEom1vDw==}
+ peerDependencies:
+ unenv: 2.0.0-rc.24
+ workerd: '>1.20260305.0 <2.0.0-0'
+ peerDependenciesMeta:
+ workerd:
+ optional: true
+
+ '@cloudflare/workerd-darwin-64@1.20260801.1':
+ resolution: {integrity: sha512-wuJWbXpKvncJi1P0GKS+iYpN5tHdb7JPJJ/+6ZQe8zzovHHVMkLJPNBsgWpqeUhpM3g9qTwEKd2rglNKejuh5A==}
+ engines: {node: '>=16'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@cloudflare/workerd-darwin-arm64@1.20260801.1':
+ resolution: {integrity: sha512-kwoZiTpnhNrF3+APx84Q/oAqvJ3sU9yefGagwm/ASaH/2W19x0vghkW/r4qCoHCK0WW7EPugZ+aXjgPMRtlq1Q==}
+ engines: {node: '>=16'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@cloudflare/workerd-linux-64@1.20260801.1':
+ resolution: {integrity: sha512-r0vAxCZH+Jih9Unm1yoyiByPNWNgawcKciOHDm5Q37ZVGOkKLsT9AtLe3yLSaul76WrKqtf+JP2n0WW32VBLJg==}
+ engines: {node: '>=16'}
+ cpu: [x64]
+ os: [linux]
+
+ '@cloudflare/workerd-linux-arm64@1.20260801.1':
+ resolution: {integrity: sha512-zWgpdZtSozvIgzQNmQiDSF8yEOQJUkRAWNsDXXzAAoy+fCn8YUoSibj3mpFSbZRvbUldeBEaW6SCdC2VEMkhNQ==}
+ engines: {node: '>=16'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@cloudflare/workerd-windows-64@1.20260801.1':
+ resolution: {integrity: sha512-2oQz+Ksu4ji6e/+ZoYX+tWQEcxAii2p7l+iR8kx48W1llMalaufAsmVxTlk+3/vrM7D3/2c0iK448e0UQTcIMg==}
+ engines: {node: '>=16'}
+ cpu: [x64]
+ os: [win32]
+
'@codemirror/autocomplete@6.20.0':
resolution: {integrity: sha512-bOwvTOIJcG5FVo5gUUupiwYh8MioPLQ4UcqbcRf7UQ98X90tCa9E1kZ3Z7tqwpZxYyOvh1YTYbmZE9RTfTp5hg==}
@@ -291,6 +337,10 @@ packages:
'@codemirror/view@6.39.4':
resolution: {integrity: sha512-xMF6OfEAUVY5Waega4juo1QGACfNkNF+aJLqpd8oUJz96ms2zbfQ9Gh35/tI3y8akEV31FruKfj7hBnIU/nkqA==}
+ '@cspotcode/source-map-support@0.8.1':
+ resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
+ engines: {node: '>=12'}
+
'@csstools/color-helpers@5.1.0':
resolution: {integrity: sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==}
engines: {node: '>=18'}
@@ -319,6 +369,9 @@ packages:
resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==}
engines: {node: '>=18'}
+ '@emnapi/runtime@1.11.3':
+ resolution: {integrity: sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==}
+
'@esbuild/aix-ppc64@0.25.12':
resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==}
engines: {node: '>=18'}
@@ -331,6 +384,12 @@ packages:
cpu: [ppc64]
os: [aix]
+ '@esbuild/aix-ppc64@0.28.1':
+ resolution: {integrity: sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
+
'@esbuild/android-arm64@0.25.12':
resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==}
engines: {node: '>=18'}
@@ -343,6 +402,12 @@ packages:
cpu: [arm64]
os: [android]
+ '@esbuild/android-arm64@0.28.1':
+ resolution: {integrity: sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
+
'@esbuild/android-arm@0.25.12':
resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==}
engines: {node: '>=18'}
@@ -355,6 +420,12 @@ packages:
cpu: [arm]
os: [android]
+ '@esbuild/android-arm@0.28.1':
+ resolution: {integrity: sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
+
'@esbuild/android-x64@0.25.12':
resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==}
engines: {node: '>=18'}
@@ -367,6 +438,12 @@ packages:
cpu: [x64]
os: [android]
+ '@esbuild/android-x64@0.28.1':
+ resolution: {integrity: sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
+
'@esbuild/darwin-arm64@0.25.12':
resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==}
engines: {node: '>=18'}
@@ -379,6 +456,12 @@ packages:
cpu: [arm64]
os: [darwin]
+ '@esbuild/darwin-arm64@0.28.1':
+ resolution: {integrity: sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
+
'@esbuild/darwin-x64@0.25.12':
resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==}
engines: {node: '>=18'}
@@ -391,6 +474,12 @@ packages:
cpu: [x64]
os: [darwin]
+ '@esbuild/darwin-x64@0.28.1':
+ resolution: {integrity: sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
+
'@esbuild/freebsd-arm64@0.25.12':
resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==}
engines: {node: '>=18'}
@@ -403,6 +492,12 @@ packages:
cpu: [arm64]
os: [freebsd]
+ '@esbuild/freebsd-arm64@0.28.1':
+ resolution: {integrity: sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
+
'@esbuild/freebsd-x64@0.25.12':
resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==}
engines: {node: '>=18'}
@@ -415,6 +510,12 @@ packages:
cpu: [x64]
os: [freebsd]
+ '@esbuild/freebsd-x64@0.28.1':
+ resolution: {integrity: sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
+
'@esbuild/linux-arm64@0.25.12':
resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==}
engines: {node: '>=18'}
@@ -427,6 +528,12 @@ packages:
cpu: [arm64]
os: [linux]
+ '@esbuild/linux-arm64@0.28.1':
+ resolution: {integrity: sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
+
'@esbuild/linux-arm@0.25.12':
resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==}
engines: {node: '>=18'}
@@ -439,6 +546,12 @@ packages:
cpu: [arm]
os: [linux]
+ '@esbuild/linux-arm@0.28.1':
+ resolution: {integrity: sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
+
'@esbuild/linux-ia32@0.25.12':
resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==}
engines: {node: '>=18'}
@@ -451,6 +564,12 @@ packages:
cpu: [ia32]
os: [linux]
+ '@esbuild/linux-ia32@0.28.1':
+ resolution: {integrity: sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
+
'@esbuild/linux-loong64@0.25.12':
resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==}
engines: {node: '>=18'}
@@ -463,6 +582,12 @@ packages:
cpu: [loong64]
os: [linux]
+ '@esbuild/linux-loong64@0.28.1':
+ resolution: {integrity: sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
+
'@esbuild/linux-mips64el@0.25.12':
resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==}
engines: {node: '>=18'}
@@ -475,6 +600,12 @@ packages:
cpu: [mips64el]
os: [linux]
+ '@esbuild/linux-mips64el@0.28.1':
+ resolution: {integrity: sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
+
'@esbuild/linux-ppc64@0.25.12':
resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==}
engines: {node: '>=18'}
@@ -487,6 +618,12 @@ packages:
cpu: [ppc64]
os: [linux]
+ '@esbuild/linux-ppc64@0.28.1':
+ resolution: {integrity: sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
+
'@esbuild/linux-riscv64@0.25.12':
resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==}
engines: {node: '>=18'}
@@ -499,6 +636,12 @@ packages:
cpu: [riscv64]
os: [linux]
+ '@esbuild/linux-riscv64@0.28.1':
+ resolution: {integrity: sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
+
'@esbuild/linux-s390x@0.25.12':
resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==}
engines: {node: '>=18'}
@@ -511,6 +654,12 @@ packages:
cpu: [s390x]
os: [linux]
+ '@esbuild/linux-s390x@0.28.1':
+ resolution: {integrity: sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
+
'@esbuild/linux-x64@0.25.12':
resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==}
engines: {node: '>=18'}
@@ -523,6 +672,12 @@ packages:
cpu: [x64]
os: [linux]
+ '@esbuild/linux-x64@0.28.1':
+ resolution: {integrity: sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
+
'@esbuild/netbsd-arm64@0.25.12':
resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==}
engines: {node: '>=18'}
@@ -535,6 +690,12 @@ packages:
cpu: [arm64]
os: [netbsd]
+ '@esbuild/netbsd-arm64@0.28.1':
+ resolution: {integrity: sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [netbsd]
+
'@esbuild/netbsd-x64@0.25.12':
resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==}
engines: {node: '>=18'}
@@ -547,6 +708,12 @@ packages:
cpu: [x64]
os: [netbsd]
+ '@esbuild/netbsd-x64@0.28.1':
+ resolution: {integrity: sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
+
'@esbuild/openbsd-arm64@0.25.12':
resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==}
engines: {node: '>=18'}
@@ -559,6 +726,12 @@ packages:
cpu: [arm64]
os: [openbsd]
+ '@esbuild/openbsd-arm64@0.28.1':
+ resolution: {integrity: sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
+
'@esbuild/openbsd-x64@0.25.12':
resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==}
engines: {node: '>=18'}
@@ -571,6 +744,12 @@ packages:
cpu: [x64]
os: [openbsd]
+ '@esbuild/openbsd-x64@0.28.1':
+ resolution: {integrity: sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
+
'@esbuild/openharmony-arm64@0.25.12':
resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==}
engines: {node: '>=18'}
@@ -583,6 +762,12 @@ packages:
cpu: [arm64]
os: [openharmony]
+ '@esbuild/openharmony-arm64@0.28.1':
+ resolution: {integrity: sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openharmony]
+
'@esbuild/sunos-x64@0.25.12':
resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==}
engines: {node: '>=18'}
@@ -595,6 +780,12 @@ packages:
cpu: [x64]
os: [sunos]
+ '@esbuild/sunos-x64@0.28.1':
+ resolution: {integrity: sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
+
'@esbuild/win32-arm64@0.25.12':
resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==}
engines: {node: '>=18'}
@@ -607,6 +798,12 @@ packages:
cpu: [arm64]
os: [win32]
+ '@esbuild/win32-arm64@0.28.1':
+ resolution: {integrity: sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
+
'@esbuild/win32-ia32@0.25.12':
resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==}
engines: {node: '>=18'}
@@ -619,6 +816,12 @@ packages:
cpu: [ia32]
os: [win32]
+ '@esbuild/win32-ia32@0.28.1':
+ resolution: {integrity: sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
+
'@esbuild/win32-x64@0.25.12':
resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==}
engines: {node: '>=18'}
@@ -631,6 +834,12 @@ packages:
cpu: [x64]
os: [win32]
+ '@esbuild/win32-x64@0.28.1':
+ resolution: {integrity: sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+
'@histoire/app@1.0.0-alpha.5':
resolution: {integrity: sha512-JSuqFLlbaCCkSSUrsdikklb8QyD5KQFaJJI6QywjlXIAw96H5VuCpgKOzChRtHh0FbCxVQuTcVtM+QoUgQCQew==}
@@ -660,6 +869,168 @@ packages:
'@iconify/utils@3.1.0':
resolution: {integrity: sha512-Zlzem1ZXhI1iHeeERabLNzBHdOa4VhQbqAcOQaMKuTuyZCpwKbC2R4Dd0Zo3g9EAc+Y4fiarO8HIHRAth7+skw==}
+ '@img/colour@1.1.0':
+ resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==}
+ engines: {node: '>=18'}
+
+ '@img/sharp-darwin-arm64@0.35.2':
+ resolution: {integrity: sha512-eEieHsMksAW4IiO5NzauESRl2D2qz3J/kwUxUrSfV06A93eEaRfMpHXyUb1mAqrR7i8U9A0GRqE9pjn6u1Jjpg==}
+ engines: {node: '>=20.9.0'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@img/sharp-darwin-x64@0.35.2':
+ resolution: {integrity: sha512-BaktuGPCeHJMARpodR8jK4uKiZrPAy9WrfQW0sdI37clracq8Bp01AYS3SZgi5FS/y5twa9t4+LIuuxQjqRrWw==}
+ engines: {node: '>=20.9.0'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@img/sharp-freebsd-wasm32@0.35.2':
+ resolution: {integrity: sha512-YoAxdnd8hPUkvLHd3bWY+YA8nw3xM/RyRopYucNsWHVSan8NLVM3X2volsfoRDcXdUJPg6tXahSd7HXPK7lRnw==}
+ engines: {node: '>=20.9.0'}
+ os: [freebsd]
+
+ '@img/sharp-libvips-darwin-arm64@1.3.1':
+ resolution: {integrity: sha512-4V/M3roRMTYjiwZY9IOVQOE8OyeCxFAkYmyZDrZl51uOKjibm3oeEJ4WAmLxutAfzFbC9jqUiPs2gbnGflH+7g==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@img/sharp-libvips-darwin-x64@1.3.1':
+ resolution: {integrity: sha512-c0/DxItpJv2+dGhgycJBBgotdqruGYDvA79drdh0MD1dFpy7JzJ/PlXwi1H4rFf0eTy8tgbI91aHDnZIceY3jQ==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@img/sharp-libvips-linux-arm64@1.3.1':
+ resolution: {integrity: sha512-JznefmcK9j1JKPz8AkQDh89kjojubyfOasWBPKfzMIhPwsgDy9evpE/naJTXXXmghS1iFwR8u/kTwh/I2/+GCw==}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@img/sharp-libvips-linux-arm@1.3.1':
+ resolution: {integrity: sha512-aGGy9aWzXgHBG7HNyQPWorZthlp7+x6fDRoPAQbGO3ThcttuTyKIx3NuSHb6zb4gBNq6/yNn9f1cy9nFKS/Vmg==}
+ cpu: [arm]
+ os: [linux]
+ libc: [glibc]
+
+ '@img/sharp-libvips-linux-ppc64@1.3.1':
+ resolution: {integrity: sha512-1EkwGNCZk6iWNCMWqrvdJ+r1j0PT1zIz60CNPhYnJlK/zyeWqlsPZIe+ocBVqPF8k/Ssee/NCk+tE9Ryrko6ng==}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
+ '@img/sharp-libvips-linux-riscv64@1.3.1':
+ resolution: {integrity: sha512-Ilays+w2bXdnxzxtQdmXR62u8o8GYa3eL4+Gr+1KiE4xperMZUslRaVPJwwPkzlHEjGfXAfRVAa/7CYCtSqsBw==}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [glibc]
+
+ '@img/sharp-libvips-linux-s390x@1.3.1':
+ resolution: {integrity: sha512-VfBwVHQTbRoj4XlpA/KLZ7ltgMpz+4WSejFzQ+GnoImjo1PtEJ59QB2qR1xQEeRPYIkNrPIm2L4cICMvz4C2ew==}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
+ '@img/sharp-libvips-linux-x64@1.3.1':
+ resolution: {integrity: sha512-+c8ukgwU62DS54nCAjw7keOfHUkmr0B5QHEdcOqRnodF/MNXJbVI8Eopoj4B/0H8Asr65I+A4Amrn7a85/md6A==}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@img/sharp-libvips-linuxmusl-arm64@1.3.1':
+ resolution: {integrity: sha512-qlKb/pwbkAi1WMsJrYHk7CuDrd12s27U2QnRhFYUoJNrRCmkosMTttuRFat/DDB3IlDm5qE1TJgZ4JDnHX8Ldw==}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@img/sharp-libvips-linuxmusl-x64@1.3.1':
+ resolution: {integrity: sha512-yO21HwoUVLN8Qa+/SBjQLMYwBWAVJjeGPNe+hc0OUeMeifEtJqu5a1c4HayE1nNpDih9y3/KkoltfkDodmKAlg==}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@img/sharp-linux-arm64@0.35.2':
+ resolution: {integrity: sha512-af12Pnd0ZGu2HfP8NayB0kk6eC/lrfbQE6HlR4jD+34wdJ1Vw9TF6TMn6ZvffT+WgqVsl0hRbmNvz2u/23VmwA==}
+ engines: {node: '>=20.9.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@img/sharp-linux-arm@0.35.2':
+ resolution: {integrity: sha512-SE4kzF2mepn6z+6E7L6lsV8FzuLL6IPQdyX8ZiwROAG/G8td+hP/m7FsFPwidtrF19gvajuC9l6TxAVcsA4S7A==}
+ engines: {node: '>=20.9.0'}
+ cpu: [arm]
+ os: [linux]
+ libc: [glibc]
+
+ '@img/sharp-linux-ppc64@0.35.2':
+ resolution: {integrity: sha512-hYSBm7zcNtDCozCxQHYZJiu63b/bXsgRZuOxCIBZsStMM9Vap47iFHdbX4kCvQsblPB/k+clhELpdQJHQLSHvg==}
+ engines: {node: '>=20.9.0'}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
+ '@img/sharp-linux-riscv64@0.35.2':
+ resolution: {integrity: sha512-qQt0Kc13+Hoan/Awq/qMSQw3L+RI1NCRPgD5cUJ/1WSSmIoysLOc72jlRM3E0OHN9Yr313jgeQ2T+zW+F03QFA==}
+ engines: {node: '>=20.9.0'}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [glibc]
+
+ '@img/sharp-linux-s390x@0.35.2':
+ resolution: {integrity: sha512-E4fLLfRPzDLlEeDaTzI98OFLcv++WL5ChLLMwPoVd0CIoZQqupBSNbOisPL5am9XsbQ9T84+iiMpUvbFtkunbA==}
+ engines: {node: '>=20.9.0'}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
+ '@img/sharp-linux-x64@0.35.2':
+ resolution: {integrity: sha512-gi0zFJJRLswfCZmHtJdikXPOc5u7qamSOS3NHedLqLd4W8Q0NqjdBr6TTRIgsfFjqfTsHFgdfvJ9LwqSgcHiAA==}
+ engines: {node: '>=20.9.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@img/sharp-linuxmusl-arm64@0.35.2':
+ resolution: {integrity: sha512-siWbOW1u6HFnFLrp0waKyW7VEf7jYvcDWdrXEFa8AkdAQgEvuu5Fz8/Y70w9EeqAdwDtfU012BhEHHaDqvQNzg==}
+ engines: {node: '>=20.9.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@img/sharp-linuxmusl-x64@0.35.2':
+ resolution: {integrity: sha512-YBqMMcjDi4QGYiSn4vNOYBhmlC4z5AXqkOUUqI2e0AFA4urNv4ESgOgwNl3K+4etQhha0twXlzeF20bbULm9Yg==}
+ engines: {node: '>=20.9.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@img/sharp-wasm32@0.35.2':
+ resolution: {integrity: sha512-Mrv4JQNYVQ94xH+jzZ9r+gowleN8mv2FTgKT+PI6bx5C0G8TdNYndu161pg2i7uoBwxy2ImPMHrJOM2LZef7Bw==}
+ engines: {node: '>=20.9.0'}
+
+ '@img/sharp-webcontainers-wasm32@0.35.2':
+ resolution: {integrity: sha512-QNV27pxs9wpApEiCfvHM1RDoP1w1+2KrUWWDPEhEwg+latvOrfuhWrHWZKwdSFwU6jh3myjw/yOCRsUIuOft3g==}
+ engines: {node: '>=20.9.0'}
+ cpu: [wasm32]
+
+ '@img/sharp-win32-arm64@0.35.2':
+ resolution: {integrity: sha512-BiVRYc/t6/Vl3e1hBx0hugG4oN9Pydf4fgMSpxTQJmwGUg/YoXTWHiFeRymHfCZzifxu4F4rpk/I67D0LQ20wQ==}
+ engines: {node: '>=20.9.0'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@img/sharp-win32-ia32@0.35.2':
+ resolution: {integrity: sha512-YYEhx9PImCC7T0tI8JDMi4DB9LwLCXCU5OWNYEXAxh5Q1ShKkyC6byxzoBJ3gEFDnH2lQckWuDe70G7mB2XJog==}
+ engines: {node: ^20.9.0}
+ cpu: [ia32]
+ os: [win32]
+
+ '@img/sharp-win32-x64@0.35.2':
+ resolution: {integrity: sha512-imoOyBcoM/iiUr4J6VPpCNjPnjvP/Gks95898yB8YqoGGYmHYbOyCuNv9FMhFgtaiHFGbHW8bxKqRV6VjtXThQ==}
+ engines: {node: '>=20.9.0'}
+ cpu: [x64]
+ os: [win32]
+
'@inquirer/external-editor@1.0.3':
resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==}
engines: {node: '>=18'}
@@ -709,6 +1080,9 @@ packages:
'@jridgewell/trace-mapping@0.3.31':
resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
+ '@jridgewell/trace-mapping@0.3.9':
+ resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
+
'@jsonjoy.com/base64@1.1.2':
resolution: {integrity: sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==}
engines: {node: '>=10.0'}
@@ -1133,6 +1507,15 @@ packages:
'@polka/url@1.0.0-next.29':
resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==}
+ '@poppinss/colors@4.1.6':
+ resolution: {integrity: sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg==}
+
+ '@poppinss/dumper@0.6.5':
+ resolution: {integrity: sha512-NBdYIb90J7LfOI32dOewKI1r7wnkiH6m920puQ3qHUeZkxNkQiFnXVWoE6YtFSv6QOiPPf7ys6i+HWWecDz7sw==}
+
+ '@poppinss/exception@1.2.3':
+ resolution: {integrity: sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==}
+
'@quansync/fs@1.0.0':
resolution: {integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==}
@@ -1320,10 +1703,17 @@ packages:
'@shikijs/vscode-textmate@10.0.2':
resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==}
+ '@sindresorhus/is@7.2.0':
+ resolution: {integrity: sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==}
+ engines: {node: '>=18'}
+
'@sindresorhus/merge-streams@2.3.0':
resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==}
engines: {node: '>=18'}
+ '@speed-highlight/core@1.2.23':
+ resolution: {integrity: sha512-iRoq6i6JDJP6Mt2A5JaPvzw0pgYHH6k92ij+yXiTrB7T2y9N789aWE3EHWj/5ztlJBokcCBja3iYLVdu5wgnkg==}
+
'@standard-schema/spec@1.0.0':
resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==}
@@ -1753,6 +2143,9 @@ packages:
birpc@0.2.19:
resolution: {integrity: sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==}
+ blake3-wasm@2.1.5:
+ resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==}
+
brace-expansion@1.1.12:
resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
@@ -1873,6 +2266,10 @@ packages:
resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==}
engines: {node: ^14.18.0 || >=16.10.0}
+ cookie@1.1.1:
+ resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==}
+ engines: {node: '>=18'}
+
cpr@3.0.1:
resolution: {integrity: sha512-Xch4PXQ/KC8lJ+KfJ9JI6eG/nmppLrPPWg5Q+vh65Qr9EjuJEubxh/H/Le1TmCZ7+Xv7iJuNRqapyOFZB+wsxA==}
hasBin: true
@@ -1964,6 +2361,10 @@ packages:
engines: {node: '>=0.10'}
hasBin: true
+ detect-libc@2.1.2:
+ resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
+ engines: {node: '>=8'}
+
devlop@1.1.0:
resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
@@ -2018,6 +2419,9 @@ packages:
resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
engines: {node: '>=0.12'}
+ error-stack-parser-es@1.0.5:
+ resolution: {integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==}
+
es-define-property@1.0.1:
resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
engines: {node: '>= 0.4'}
@@ -2047,6 +2451,11 @@ packages:
engines: {node: '>=18'}
hasBin: true
+ esbuild@0.28.1:
+ resolution: {integrity: sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==}
+ engines: {node: '>=18'}
+ hasBin: true
+
escalade@3.2.0:
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
engines: {node: '>=6'}
@@ -2505,6 +2914,10 @@ packages:
resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
engines: {node: '>=0.10.0'}
+ kleur@4.1.5:
+ resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
+ engines: {node: '>=6'}
+
kolorist@1.8.0:
resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==}
@@ -2615,6 +3028,10 @@ packages:
resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
engines: {node: '>= 0.6'}
+ miniflare@5.20260801.0-alpha:
+ resolution: {integrity: sha512-AfMrnQbJg81ESsGkGhOkHBtwTqCG+mosR+3GE+qDrhF1I/ieIvgg3ICxNyBvgHBZ3iapy6cysBQHNPykkzrfgw==}
+ engines: {node: '>=22.0.0'}
+
minimatch@10.0.3:
resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==}
engines: {node: 20 || >=22}
@@ -2960,6 +3377,9 @@ packages:
resolution: {integrity: sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==}
engines: {node: 20 || >=22}
+ path-to-regexp@6.3.0:
+ resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==}
+
path-type@4.0.0:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
engines: {node: '>=8'}
@@ -3188,6 +3608,10 @@ packages:
resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
engines: {node: '>= 0.4'}
+ sharp@0.35.2:
+ resolution: {integrity: sha512-FVtFjtBCMiJS6yb5CX7Sop45WFMpeGw6oRKuJnXYgf/f1ms/D7LE/ZUSNxnW7rZ/dbslQWYkoqFHGPaDBtaK4w==}
+ engines: {node: '>=20.9.0'}
+
shebang-command@2.0.0:
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
engines: {node: '>=8'}
@@ -3321,6 +3745,10 @@ packages:
style-mod@4.1.3:
resolution: {integrity: sha512-i/n8VsZydrugj3Iuzll8+x/00GH2vnYsk1eomD8QiRrSAeW6ItbCQDtfXCeJHd0iwiNagqjQkvpvREEPtW3IoQ==}
+ supports-color@10.2.2:
+ resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==}
+ engines: {node: '>=18'}
+
supports-color@7.2.0:
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
engines: {node: '>=8'}
@@ -3431,6 +3859,13 @@ packages:
undici-types@7.16.0:
resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==}
+ undici@7.28.0:
+ resolution: {integrity: sha512-cRZYrTDwWznlnRiPjggAGxZXanty6M8RV1ff8Wm4LWXBp7/IG8v5DnOm74DtUBp9OONpK75YlPnIjQqX0dBDtA==}
+ engines: {node: '>=20.18.1'}
+
+ unenv@2.0.0-rc.24:
+ resolution: {integrity: sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==}
+
unicorn-magic@0.3.0:
resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==}
engines: {node: '>=18'}
@@ -3675,6 +4110,21 @@ packages:
engines: {node: '>=8'}
hasBin: true
+ workerd@1.20260801.1:
+ resolution: {integrity: sha512-/g9JGTyqnHtoIscpBHqKD8swE2V4StBs2i69PmLiOhH45OP95jCFICl4F1hKlgN57rqfni5LiCitttoX5OOkVA==}
+ engines: {node: '>=16'}
+ hasBin: true
+
+ wrangler@4.119.0:
+ resolution: {integrity: sha512-ookClf+zly4DTc8pBMNrwGQzZKH8IpIYTXkjDw3XS7ZvBQ5mLYH6eOvfD5BEpk3U63zTbv91WRlo1UeRSKXa0g==}
+ engines: {node: '>=22.0.0'}
+ hasBin: true
+ peerDependencies:
+ '@cloudflare/workers-types': ^5.20260801.1
+ peerDependenciesMeta:
+ '@cloudflare/workers-types':
+ optional: true
+
wrap-ansi@7.0.0:
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
engines: {node: '>=10'}
@@ -3698,6 +4148,18 @@ packages:
utf-8-validate:
optional: true
+ ws@8.21.0:
+ resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
xml-name-validator@5.0.0:
resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==}
engines: {node: '>=18'}
@@ -3725,6 +4187,12 @@ packages:
resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
engines: {node: '>=12'}
+ youch-core@0.3.3:
+ resolution: {integrity: sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==}
+
+ youch@4.1.0-beta.10:
+ resolution: {integrity: sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==}
+
zwitch@2.0.4:
resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
@@ -3966,6 +4434,29 @@ snapshots:
human-id: 4.1.3
prettier: 2.8.8
+ '@cloudflare/kv-asset-handler@0.5.0': {}
+
+ '@cloudflare/unenv-preset@2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260801.1)':
+ dependencies:
+ unenv: 2.0.0-rc.24
+ optionalDependencies:
+ workerd: 1.20260801.1
+
+ '@cloudflare/workerd-darwin-64@1.20260801.1':
+ optional: true
+
+ '@cloudflare/workerd-darwin-arm64@1.20260801.1':
+ optional: true
+
+ '@cloudflare/workerd-linux-64@1.20260801.1':
+ optional: true
+
+ '@cloudflare/workerd-linux-arm64@1.20260801.1':
+ optional: true
+
+ '@cloudflare/workerd-windows-64@1.20260801.1':
+ optional: true
+
'@codemirror/autocomplete@6.20.0':
dependencies:
'@codemirror/language': 6.11.3
@@ -4018,6 +4509,10 @@ snapshots:
style-mod: 4.1.3
w3c-keyname: 2.2.8
+ '@cspotcode/source-map-support@0.8.1':
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.9
+
'@csstools/color-helpers@5.1.0': {}
'@csstools/css-calc@2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)':
@@ -4038,162 +4533,245 @@ snapshots:
'@csstools/css-tokenizer@3.0.4': {}
+ '@emnapi/runtime@1.11.3':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
'@esbuild/aix-ppc64@0.25.12':
optional: true
'@esbuild/aix-ppc64@0.27.1':
optional: true
+ '@esbuild/aix-ppc64@0.28.1':
+ optional: true
+
'@esbuild/android-arm64@0.25.12':
optional: true
'@esbuild/android-arm64@0.27.1':
optional: true
+ '@esbuild/android-arm64@0.28.1':
+ optional: true
+
'@esbuild/android-arm@0.25.12':
optional: true
'@esbuild/android-arm@0.27.1':
optional: true
+ '@esbuild/android-arm@0.28.1':
+ optional: true
+
'@esbuild/android-x64@0.25.12':
optional: true
'@esbuild/android-x64@0.27.1':
optional: true
+ '@esbuild/android-x64@0.28.1':
+ optional: true
+
'@esbuild/darwin-arm64@0.25.12':
optional: true
'@esbuild/darwin-arm64@0.27.1':
optional: true
+ '@esbuild/darwin-arm64@0.28.1':
+ optional: true
+
'@esbuild/darwin-x64@0.25.12':
optional: true
'@esbuild/darwin-x64@0.27.1':
optional: true
+ '@esbuild/darwin-x64@0.28.1':
+ optional: true
+
'@esbuild/freebsd-arm64@0.25.12':
optional: true
'@esbuild/freebsd-arm64@0.27.1':
optional: true
+ '@esbuild/freebsd-arm64@0.28.1':
+ optional: true
+
'@esbuild/freebsd-x64@0.25.12':
optional: true
'@esbuild/freebsd-x64@0.27.1':
optional: true
+ '@esbuild/freebsd-x64@0.28.1':
+ optional: true
+
'@esbuild/linux-arm64@0.25.12':
optional: true
'@esbuild/linux-arm64@0.27.1':
optional: true
+ '@esbuild/linux-arm64@0.28.1':
+ optional: true
+
'@esbuild/linux-arm@0.25.12':
optional: true
'@esbuild/linux-arm@0.27.1':
optional: true
+ '@esbuild/linux-arm@0.28.1':
+ optional: true
+
'@esbuild/linux-ia32@0.25.12':
optional: true
'@esbuild/linux-ia32@0.27.1':
optional: true
+ '@esbuild/linux-ia32@0.28.1':
+ optional: true
+
'@esbuild/linux-loong64@0.25.12':
optional: true
'@esbuild/linux-loong64@0.27.1':
optional: true
+ '@esbuild/linux-loong64@0.28.1':
+ optional: true
+
'@esbuild/linux-mips64el@0.25.12':
optional: true
'@esbuild/linux-mips64el@0.27.1':
optional: true
+ '@esbuild/linux-mips64el@0.28.1':
+ optional: true
+
'@esbuild/linux-ppc64@0.25.12':
optional: true
'@esbuild/linux-ppc64@0.27.1':
optional: true
+ '@esbuild/linux-ppc64@0.28.1':
+ optional: true
+
'@esbuild/linux-riscv64@0.25.12':
optional: true
'@esbuild/linux-riscv64@0.27.1':
optional: true
+ '@esbuild/linux-riscv64@0.28.1':
+ optional: true
+
'@esbuild/linux-s390x@0.25.12':
optional: true
'@esbuild/linux-s390x@0.27.1':
optional: true
+ '@esbuild/linux-s390x@0.28.1':
+ optional: true
+
'@esbuild/linux-x64@0.25.12':
optional: true
'@esbuild/linux-x64@0.27.1':
optional: true
+ '@esbuild/linux-x64@0.28.1':
+ optional: true
+
'@esbuild/netbsd-arm64@0.25.12':
optional: true
'@esbuild/netbsd-arm64@0.27.1':
optional: true
+ '@esbuild/netbsd-arm64@0.28.1':
+ optional: true
+
'@esbuild/netbsd-x64@0.25.12':
optional: true
'@esbuild/netbsd-x64@0.27.1':
optional: true
+ '@esbuild/netbsd-x64@0.28.1':
+ optional: true
+
'@esbuild/openbsd-arm64@0.25.12':
optional: true
'@esbuild/openbsd-arm64@0.27.1':
optional: true
+ '@esbuild/openbsd-arm64@0.28.1':
+ optional: true
+
'@esbuild/openbsd-x64@0.25.12':
optional: true
'@esbuild/openbsd-x64@0.27.1':
optional: true
+ '@esbuild/openbsd-x64@0.28.1':
+ optional: true
+
'@esbuild/openharmony-arm64@0.25.12':
optional: true
'@esbuild/openharmony-arm64@0.27.1':
optional: true
+ '@esbuild/openharmony-arm64@0.28.1':
+ optional: true
+
'@esbuild/sunos-x64@0.25.12':
optional: true
'@esbuild/sunos-x64@0.27.1':
optional: true
+ '@esbuild/sunos-x64@0.28.1':
+ optional: true
+
'@esbuild/win32-arm64@0.25.12':
optional: true
'@esbuild/win32-arm64@0.27.1':
optional: true
+ '@esbuild/win32-arm64@0.28.1':
+ optional: true
+
'@esbuild/win32-ia32@0.25.12':
optional: true
'@esbuild/win32-ia32@0.27.1':
optional: true
+ '@esbuild/win32-ia32@0.28.1':
+ optional: true
+
'@esbuild/win32-x64@0.25.12':
optional: true
'@esbuild/win32-x64@0.27.1':
optional: true
+ '@esbuild/win32-x64@0.28.1':
+ optional: true
+
'@histoire/app@1.0.0-alpha.5(vite@7.2.7(@types/node@25.0.2)(jiti@2.6.1)(sass@1.94.2)(tsx@4.21.0)(yaml@2.9.0))':
dependencies:
'@histoire/controls': 1.0.0-alpha.5(vite@7.2.7(@types/node@25.0.2)(jiti@2.6.1)(sass@1.94.2)(tsx@4.21.0)(yaml@2.9.0))
@@ -4256,6 +4834,112 @@ snapshots:
'@iconify/types': 2.0.0
mlly: 1.8.0
+ '@img/colour@1.1.0': {}
+
+ '@img/sharp-darwin-arm64@0.35.2':
+ optionalDependencies:
+ '@img/sharp-libvips-darwin-arm64': 1.3.1
+ optional: true
+
+ '@img/sharp-darwin-x64@0.35.2':
+ optionalDependencies:
+ '@img/sharp-libvips-darwin-x64': 1.3.1
+ optional: true
+
+ '@img/sharp-freebsd-wasm32@0.35.2':
+ dependencies:
+ '@img/sharp-wasm32': 0.35.2
+ optional: true
+
+ '@img/sharp-libvips-darwin-arm64@1.3.1':
+ optional: true
+
+ '@img/sharp-libvips-darwin-x64@1.3.1':
+ optional: true
+
+ '@img/sharp-libvips-linux-arm64@1.3.1':
+ optional: true
+
+ '@img/sharp-libvips-linux-arm@1.3.1':
+ optional: true
+
+ '@img/sharp-libvips-linux-ppc64@1.3.1':
+ optional: true
+
+ '@img/sharp-libvips-linux-riscv64@1.3.1':
+ optional: true
+
+ '@img/sharp-libvips-linux-s390x@1.3.1':
+ optional: true
+
+ '@img/sharp-libvips-linux-x64@1.3.1':
+ optional: true
+
+ '@img/sharp-libvips-linuxmusl-arm64@1.3.1':
+ optional: true
+
+ '@img/sharp-libvips-linuxmusl-x64@1.3.1':
+ optional: true
+
+ '@img/sharp-linux-arm64@0.35.2':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-arm64': 1.3.1
+ optional: true
+
+ '@img/sharp-linux-arm@0.35.2':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-arm': 1.3.1
+ optional: true
+
+ '@img/sharp-linux-ppc64@0.35.2':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-ppc64': 1.3.1
+ optional: true
+
+ '@img/sharp-linux-riscv64@0.35.2':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-riscv64': 1.3.1
+ optional: true
+
+ '@img/sharp-linux-s390x@0.35.2':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-s390x': 1.3.1
+ optional: true
+
+ '@img/sharp-linux-x64@0.35.2':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-x64': 1.3.1
+ optional: true
+
+ '@img/sharp-linuxmusl-arm64@0.35.2':
+ optionalDependencies:
+ '@img/sharp-libvips-linuxmusl-arm64': 1.3.1
+ optional: true
+
+ '@img/sharp-linuxmusl-x64@0.35.2':
+ optionalDependencies:
+ '@img/sharp-libvips-linuxmusl-x64': 1.3.1
+ optional: true
+
+ '@img/sharp-wasm32@0.35.2':
+ dependencies:
+ '@emnapi/runtime': 1.11.3
+ optional: true
+
+ '@img/sharp-webcontainers-wasm32@0.35.2':
+ dependencies:
+ '@img/sharp-wasm32': 0.35.2
+ optional: true
+
+ '@img/sharp-win32-arm64@0.35.2':
+ optional: true
+
+ '@img/sharp-win32-ia32@0.35.2':
+ optional: true
+
+ '@img/sharp-win32-x64@0.35.2':
+ optional: true
+
'@inquirer/external-editor@1.0.3(@types/node@25.0.2)':
dependencies:
chardet: 2.1.1
@@ -4309,6 +4993,11 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.5
+ '@jridgewell/trace-mapping@0.3.9':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.5
+
'@jsonjoy.com/base64@1.1.2(tslib@2.8.1)':
dependencies:
tslib: 2.8.1
@@ -4609,6 +5298,18 @@ snapshots:
'@polka/url@1.0.0-next.29': {}
+ '@poppinss/colors@4.1.6':
+ dependencies:
+ kleur: 4.1.5
+
+ '@poppinss/dumper@0.6.5':
+ dependencies:
+ '@poppinss/colors': 4.1.6
+ '@sindresorhus/is': 7.2.0
+ supports-color: 10.2.2
+
+ '@poppinss/exception@1.2.3': {}
+
'@quansync/fs@1.0.0':
dependencies:
quansync: 1.0.0
@@ -4761,8 +5462,12 @@ snapshots:
'@shikijs/vscode-textmate@10.0.2': {}
+ '@sindresorhus/is@7.2.0': {}
+
'@sindresorhus/merge-streams@2.3.0': {}
+ '@speed-highlight/core@1.2.23': {}
+
'@standard-schema/spec@1.0.0': {}
'@tanstack/intent@0.3.6':
@@ -5015,7 +5720,7 @@ snapshots:
obug: 2.1.1
std-env: 3.10.0
tinyrainbow: 3.0.3
- vitest: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@25.0.1(supports-color@8.1.1))(sass@1.94.2)(tsx@4.21.0)(yaml@2.9.0)
+ vitest: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@25.0.1(supports-color@10.2.2))(sass@1.94.2)(tsx@4.21.0)(yaml@2.9.0)
transitivePeerDependencies:
- supports-color
@@ -5062,7 +5767,7 @@ snapshots:
sirv: 3.0.2
tinyglobby: 0.2.15
tinyrainbow: 3.0.3
- vitest: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@25.0.1(supports-color@8.1.1))(sass@1.94.2)(tsx@4.21.0)(yaml@2.9.0)
+ vitest: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@25.0.1(supports-color@10.2.2))(sass@1.94.2)(tsx@4.21.0)(yaml@2.9.0)
'@vitest/utils@4.0.15':
dependencies:
@@ -5290,6 +5995,8 @@ snapshots:
birpc@0.2.19: {}
+ blake3-wasm@2.1.5: {}
+
brace-expansion@1.1.12:
dependencies:
balanced-match: 1.0.2
@@ -5409,6 +6116,8 @@ snapshots:
consola@3.4.2: {}
+ cookie@1.1.1: {}
+
cpr@3.0.1:
dependencies:
graceful-fs: 4.2.11
@@ -5451,6 +6160,12 @@ snapshots:
optionalDependencies:
supports-color: 8.1.1
+ debug@4.4.3(supports-color@10.2.2):
+ dependencies:
+ ms: 2.1.3
+ optionalDependencies:
+ supports-color: 10.2.2
+
debug@4.4.3(supports-color@8.1.1):
dependencies:
ms: 2.1.3
@@ -5488,6 +6203,8 @@ snapshots:
detect-libc@1.0.3:
optional: true
+ detect-libc@2.1.2: {}
+
devlop@1.1.0:
dependencies:
dequal: 2.0.3
@@ -5534,6 +6251,8 @@ snapshots:
entities@6.0.1: {}
+ error-stack-parser-es@1.0.5: {}
+
es-define-property@1.0.1: {}
es-errors@1.3.0: {}
@@ -5609,6 +6328,35 @@ snapshots:
'@esbuild/win32-ia32': 0.27.1
'@esbuild/win32-x64': 0.27.1
+ esbuild@0.28.1:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.28.1
+ '@esbuild/android-arm': 0.28.1
+ '@esbuild/android-arm64': 0.28.1
+ '@esbuild/android-x64': 0.28.1
+ '@esbuild/darwin-arm64': 0.28.1
+ '@esbuild/darwin-x64': 0.28.1
+ '@esbuild/freebsd-arm64': 0.28.1
+ '@esbuild/freebsd-x64': 0.28.1
+ '@esbuild/linux-arm': 0.28.1
+ '@esbuild/linux-arm64': 0.28.1
+ '@esbuild/linux-ia32': 0.28.1
+ '@esbuild/linux-loong64': 0.28.1
+ '@esbuild/linux-mips64el': 0.28.1
+ '@esbuild/linux-ppc64': 0.28.1
+ '@esbuild/linux-riscv64': 0.28.1
+ '@esbuild/linux-s390x': 0.28.1
+ '@esbuild/linux-x64': 0.28.1
+ '@esbuild/netbsd-arm64': 0.28.1
+ '@esbuild/netbsd-x64': 0.28.1
+ '@esbuild/openbsd-arm64': 0.28.1
+ '@esbuild/openbsd-x64': 0.28.1
+ '@esbuild/openharmony-arm64': 0.28.1
+ '@esbuild/sunos-x64': 0.28.1
+ '@esbuild/win32-arm64': 0.28.1
+ '@esbuild/win32-ia32': 0.28.1
+ '@esbuild/win32-x64': 0.28.1
+
escalade@3.2.0: {}
escape-html@1.0.3: {}
@@ -5882,7 +6630,7 @@ snapshots:
globby: 14.1.0
gray-matter: 4.0.3
jiti: 2.6.1
- jsdom: 25.0.1(supports-color@8.1.1)
+ jsdom: 25.0.1(supports-color@10.2.2)
markdown-it: 14.1.0
markdown-it-anchor: 9.2.0(@types/markdown-it@14.1.2)(markdown-it@14.1.0)
markdown-it-attrs: 4.3.1(markdown-it@14.1.0)
@@ -5920,17 +6668,17 @@ snapshots:
html-void-elements@3.0.0: {}
- http-proxy-agent@7.0.2(supports-color@8.1.1):
+ http-proxy-agent@7.0.2(supports-color@10.2.2):
dependencies:
agent-base: 7.1.4
- debug: 4.4.3(supports-color@8.1.1)
+ debug: 4.4.3(supports-color@10.2.2)
transitivePeerDependencies:
- supports-color
- https-proxy-agent@7.0.6(supports-color@8.1.1):
+ https-proxy-agent@7.0.6(supports-color@10.2.2):
dependencies:
agent-base: 7.1.4
- debug: 4.4.3(supports-color@8.1.1)
+ debug: 4.4.3(supports-color@10.2.2)
transitivePeerDependencies:
- supports-color
@@ -6094,15 +6842,15 @@ snapshots:
dependencies:
argparse: 2.0.1
- jsdom@25.0.1(supports-color@8.1.1):
+ jsdom@25.0.1(supports-color@10.2.2):
dependencies:
cssstyle: 4.6.0
data-urls: 5.0.0
decimal.js: 10.6.0
form-data: 4.0.5
html-encoding-sniffer: 4.0.0
- http-proxy-agent: 7.0.2(supports-color@8.1.1)
- https-proxy-agent: 7.0.6(supports-color@8.1.1)
+ http-proxy-agent: 7.0.2(supports-color@10.2.2)
+ https-proxy-agent: 7.0.6(supports-color@10.2.2)
is-potential-custom-element-name: 1.0.1
nwsapi: 2.2.23
parse5: 7.3.0
@@ -6142,6 +6890,8 @@ snapshots:
kind-of@6.0.3: {}
+ kleur@4.1.5: {}
+
kolorist@1.8.0: {}
launch-editor@2.12.0:
@@ -6266,6 +7016,18 @@ snapshots:
dependencies:
mime-db: 1.52.0
+ miniflare@5.20260801.0-alpha:
+ dependencies:
+ '@cspotcode/source-map-support': 0.8.1
+ sharp: 0.35.2
+ undici: 7.28.0
+ workerd: 1.20260801.1
+ ws: 8.21.0
+ youch: 4.1.0-beta.10
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
minimatch@10.0.3:
dependencies:
'@isaacs/brace-expansion': 5.0.0
@@ -6474,6 +7236,8 @@ snapshots:
lru-cache: 11.2.2
minipass: 7.1.2
+ path-to-regexp@6.3.0: {}
+
path-type@4.0.0: {}
path-type@6.0.0: {}
@@ -6688,6 +7452,38 @@ snapshots:
gopd: 1.2.0
has-property-descriptors: 1.0.2
+ sharp@0.35.2:
+ dependencies:
+ '@img/colour': 1.1.0
+ detect-libc: 2.1.2
+ semver: 7.8.5
+ optionalDependencies:
+ '@img/sharp-darwin-arm64': 0.35.2
+ '@img/sharp-darwin-x64': 0.35.2
+ '@img/sharp-freebsd-wasm32': 0.35.2
+ '@img/sharp-libvips-darwin-arm64': 1.3.1
+ '@img/sharp-libvips-darwin-x64': 1.3.1
+ '@img/sharp-libvips-linux-arm': 1.3.1
+ '@img/sharp-libvips-linux-arm64': 1.3.1
+ '@img/sharp-libvips-linux-ppc64': 1.3.1
+ '@img/sharp-libvips-linux-riscv64': 1.3.1
+ '@img/sharp-libvips-linux-s390x': 1.3.1
+ '@img/sharp-libvips-linux-x64': 1.3.1
+ '@img/sharp-libvips-linuxmusl-arm64': 1.3.1
+ '@img/sharp-libvips-linuxmusl-x64': 1.3.1
+ '@img/sharp-linux-arm': 0.35.2
+ '@img/sharp-linux-arm64': 0.35.2
+ '@img/sharp-linux-ppc64': 0.35.2
+ '@img/sharp-linux-riscv64': 0.35.2
+ '@img/sharp-linux-s390x': 0.35.2
+ '@img/sharp-linux-x64': 0.35.2
+ '@img/sharp-linuxmusl-arm64': 0.35.2
+ '@img/sharp-linuxmusl-x64': 0.35.2
+ '@img/sharp-webcontainers-wasm32': 0.35.2
+ '@img/sharp-win32-arm64': 0.35.2
+ '@img/sharp-win32-ia32': 0.35.2
+ '@img/sharp-win32-x64': 0.35.2
+
shebang-command@2.0.0:
dependencies:
shebang-regex: 3.0.0
@@ -6830,6 +7626,8 @@ snapshots:
style-mod@4.1.3: {}
+ supports-color@10.2.2: {}
+
supports-color@7.2.0:
dependencies:
has-flag: 4.0.0
@@ -6929,6 +7727,12 @@ snapshots:
undici-types@7.16.0: {}
+ undici@7.28.0: {}
+
+ unenv@2.0.0-rc.24:
+ dependencies:
+ pathe: 2.0.3
+
unicorn-magic@0.3.0: {}
unist-util-is@6.0.1:
@@ -7081,7 +7885,7 @@ snapshots:
tsx: 4.21.0
yaml: 2.9.0
- vitest@4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@25.0.1(supports-color@8.1.1))(sass@1.94.2)(tsx@4.21.0)(yaml@2.9.0):
+ vitest@4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@25.0.1(supports-color@10.2.2))(sass@1.94.2)(tsx@4.21.0)(yaml@2.9.0):
dependencies:
'@vitest/expect': 4.0.15
'@vitest/mocker': 4.0.15(vite@7.2.7(@types/node@25.0.2)(jiti@2.6.1)(sass@1.94.2)(tsx@4.21.0)(yaml@2.9.0))
@@ -7107,7 +7911,7 @@ snapshots:
'@types/node': 25.0.2
'@vitest/ui': 4.0.15(vitest@4.0.15)
happy-dom: 20.0.11
- jsdom: 25.0.1(supports-color@8.1.1)
+ jsdom: 25.0.1(supports-color@10.2.2)
transitivePeerDependencies:
- jiti
- less
@@ -7207,6 +8011,30 @@ snapshots:
siginfo: 2.0.0
stackback: 0.0.2
+ workerd@1.20260801.1:
+ optionalDependencies:
+ '@cloudflare/workerd-darwin-64': 1.20260801.1
+ '@cloudflare/workerd-darwin-arm64': 1.20260801.1
+ '@cloudflare/workerd-linux-64': 1.20260801.1
+ '@cloudflare/workerd-linux-arm64': 1.20260801.1
+ '@cloudflare/workerd-windows-64': 1.20260801.1
+
+ wrangler@4.119.0:
+ dependencies:
+ '@cloudflare/kv-asset-handler': 0.5.0
+ '@cloudflare/unenv-preset': 2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260801.1)
+ blake3-wasm: 2.1.5
+ esbuild: 0.28.1
+ miniflare: 5.20260801.0-alpha
+ path-to-regexp: 6.3.0
+ unenv: 2.0.0-rc.24
+ workerd: 1.20260801.1
+ optionalDependencies:
+ fsevents: 2.3.3
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
wrap-ansi@7.0.0:
dependencies:
ansi-styles: 4.3.0
@@ -7223,6 +8051,8 @@ snapshots:
ws@8.18.3: {}
+ ws@8.21.0: {}
+
xml-name-validator@5.0.0: {}
xmlchars@2.2.0: {}
@@ -7245,4 +8075,17 @@ snapshots:
y18n: 5.0.8
yargs-parser: 21.1.1
+ youch-core@0.3.3:
+ dependencies:
+ '@poppinss/exception': 1.2.3
+ error-stack-parser-es: 1.0.5
+
+ youch@4.1.0-beta.10:
+ dependencies:
+ '@poppinss/colors': 4.1.6
+ '@poppinss/dumper': 0.6.5
+ '@speed-highlight/core': 1.2.23
+ cookie: 1.1.1
+ youch-core: 0.3.3
+
zwitch@2.0.4: {}
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index e8d919c..f9e2376 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -3,5 +3,6 @@ packages:
allowBuilds:
"@parcel/watcher": true
esbuild: true
+ workerd: true
overrides:
typescript: npm:typescript-native-bridge@6.0.3-bridge.7.tsgo.7.0.2
diff --git a/scripts/verify-pages-deployment.mjs b/scripts/verify-pages-deployment.mjs
new file mode 100644
index 0000000..4a5a74f
--- /dev/null
+++ b/scripts/verify-pages-deployment.mjs
@@ -0,0 +1,68 @@
+const mode = process.env.INKCRE_PAGES_MODE;
+const address = process.env.INKCRE_PAGES_URL;
+
+if (!["preview", "production", "closed"].includes(mode)) {
+ throw new Error(`Unknown Pages verification mode: ${mode}`);
+}
+if (!address) {
+ throw new Error("INKCRE_PAGES_URL is required");
+}
+
+const origin = new URL(address);
+if (origin.protocol !== "https:") {
+ throw new Error(`Pages verification requires HTTPS: ${origin.href}`);
+}
+
+async function verifyOnce() {
+ const response = await fetch(origin, {
+ redirect: "error",
+ signal: AbortSignal.timeout(10_000),
+ });
+ const body = await response.text();
+
+ if (response.status !== 200) {
+ throw new Error(`${origin.href} returned HTTP ${response.status}`);
+ }
+ if (!response.headers.get("content-type")?.startsWith("text/html")) {
+ throw new Error(`${origin.href} did not return HTML`);
+ }
+
+ const robots = response.headers.get("x-robots-tag")?.toLowerCase() ?? "";
+ if (mode === "closed") {
+ if (!body.includes("This preview is closed")) {
+ throw new Error(`${origin.href} did not return the closed-preview marker`);
+ }
+ if (!robots.includes("noindex")) {
+ throw new Error(`${origin.href} is missing its noindex header`);
+ }
+ return;
+ }
+
+ const isHistoireShell =
+ body.includes("InKCre Web UI") && body.includes('');
+ if (!isHistoireShell) {
+ throw new Error(`${origin.href} did not return the Histoire application shell`);
+ }
+ if (mode === "preview" && !robots.includes("noindex")) {
+ throw new Error(`${origin.href} preview is missing its noindex header`);
+ }
+ if (mode === "production" && robots.includes("noindex")) {
+ throw new Error(`${origin.href} production is unexpectedly marked noindex`);
+ }
+}
+
+let lastError;
+for (let attempt = 1; attempt <= 30; attempt += 1) {
+ try {
+ await verifyOnce();
+ console.log(`Verified ${mode} Pages delivery at ${origin.href}`);
+ process.exit(0);
+ } catch (error) {
+ lastError = error;
+ if (attempt < 30) {
+ await new Promise((resolve) => setTimeout(resolve, 5_000));
+ }
+ }
+}
+
+throw lastError;
diff --git a/wrangler.toml b/wrangler.toml
new file mode 100644
index 0000000..421f699
--- /dev/null
+++ b/wrangler.toml
@@ -0,0 +1,3 @@
+name = "inkcre-web-design"
+pages_build_output_dir = "packages/web/.histoire/dist"
+compatibility_date = "2025-12-17"