diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a05e80b6..99688f5f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -241,20 +241,27 @@ jobs: fetch-depth: 0 - name: Validate commit messages + env: + BASE_REF: ${{ github.base_ref }} run: | set -euo pipefail + # Only inspects commits introduced by this PR (base branch..HEAD), + # and delegates to the same validator the commit-msg hook runs so + # CI and the hook can't drift apart on scope charset or exemptions. failed=0 - while IFS= read -r msg; do - first_line="$(echo "${msg}" | head -n1)" - if ! echo "${first_line}" | grep -qP '^(\p{So}|\p{Emoji_Presentation})+\s+\w+(\(\w[\w-]*\))?!?:\s.+$'; then - echo "::warning::Non-conventional commit: ${first_line}" + tmp="$(mktemp)" + trap 'rm -f "${tmp}"' EXIT + while IFS= read -r subject; do + printf '%s\n' "${subject}" > "${tmp}" + if ! bash scripts/validate-commit-msg.sh "${tmp}" >/dev/null 2>&1; then + echo "::warning::Non-conventional commit: ${subject}" failed=1 fi - done < <(git log --format=%s origin/main..HEAD) + done < <(git log --format=%s "origin/${BASE_REF}..HEAD") if [ "${failed}" -eq 1 ]; then - echo "::warning::Some commits don't follow emoji conventional format. Expected: (scope): description" + echo "::warning::Some commits don't follow Conventional Commits format. Expected: (scope): description — no emoji. See scripts/validate-commit-msg.sh for allowed types." fi goreleaser-check: diff --git a/.github/workflows/release-cut.yml b/.github/workflows/release-cut.yml index 80d06038..457ed4d6 100644 --- a/.github/workflows/release-cut.yml +++ b/.github/workflows/release-cut.yml @@ -98,13 +98,21 @@ jobs: else # Determine bump level from conventional commits since last tag. # feat = minor bump, fix/anything else = patch bump. - # A "!" suffix on the commit subject = major bump (body/footer not read). + # A "!" before ":" in the commit subject = major bump (body/footer + # not read). Only subjects matching the full header grammar count: + # optional legacy emoji prefix (non-ASCII run + whitespace, so + # pre-migration gitmoji history still computes), then a known + # type, optional scope, optional "!", then ":". Anything else — + # "urgent!: x", "feature: x" — is ignored, not misclassified. + header_prefix='^([^ -~]+[[:space:]]+)?' + header_types='(feat|fix|docs|style|refactor|perf|test|build|ci|chore|revert)' + header_scope='(\([A-Za-z0-9._/-]+\))?' bump="patch" while IFS= read -r subject; do - if echo "${subject}" | grep -qP '^[^:]+!:'; then + if echo "${subject}" | grep -qE "${header_prefix}${header_types}${header_scope}!:[[:space:]]"; then bump="major" break - elif echo "${subject}" | grep -qP '^✨\s+feat'; then + elif echo "${subject}" | grep -qE "${header_prefix}feat${header_scope}!?:[[:space:]]"; then if [ "${bump}" != "major" ]; then bump="minor" fi @@ -142,8 +150,12 @@ jobs: echo "::error::CHANGELOG has no entry for ${RELEASE_TAG}. Add release notes before cutting a tag." exit 1 fi - # Verify the entry is non-empty (has at least one non-heading line after it) - awk "/## \[${RELEASE_TAG}\]|## \[${RELEASE_TAG#v}\]/{found=1; next} found && /^## /{exit} found && /\S/{ok=1; exit} END{exit ok ? 0 : 1}" CHANGELOG.md || { + # Verify the entry is non-empty (has at least one non-heading line after it). + # Use [^[:space:]] rather than \S: mawk (the default awk on the ubuntu + # runners) has no Perl character classes and reads \S as a literal "S", + # so the check silently passed only for entries that happened to contain + # a capital S and failed for ones that did not. + awk "/## \[${RELEASE_TAG}\]|## \[${RELEASE_TAG#v}\]/{found=1; next} found && /^## /{exit} found && /[^[:space:]]/{ok=1; exit} END{exit ok ? 0 : 1}" CHANGELOG.md || { echo "::error::CHANGELOG entry for ${RELEASE_TAG} appears empty. Add content before cutting a tag." exit 1 } diff --git a/.goreleaser.yml b/.goreleaser.yml index b60b2659..6873cf13 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -120,6 +120,13 @@ changelog: sort: asc filters: exclude: + # Plain Conventional Commits (current convention). + - "^docs" + - "^test" + - "^style" + - "^chore\\(config\\)" + # Legacy emoji-conventional history (pre-migration) — kept so old + # tags still exclude the same commit categories. - "^📝" - "^🧪" - "^🔧" diff --git a/AGENTS.md b/AGENTS.md index a10a8e0d..77b4dddf 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -54,7 +54,7 @@ go test -run='^$' -fuzz='^FuzzMCPHandler$' -fuzztime=5s ./internal/mcp/ ## Conventions -- **Commits:** emoji conventional commits — ` (scope): ` (see CONTRIBUTING.md). Enforced by lefthook via `scripts/validate-commit-msg.sh`. +- **Commits:** plain Conventional Commits, no emoji — `(scope): ` (see CONTRIBUTING.md). Enforced by lefthook via `scripts/validate-commit-msg.sh`. - **Branches:** `main` is production; one active dev branch is the next release; feature branches merge into the dev branch promptly and are deleted after merge. - **Tests:** table-driven with `httptest`; anything touching goroutines runs under `-race` in CI — write tests accordingly (no unsynchronized `httptest.ResponseRecorder` access from a handler goroutine; wrap with a mutex-guarded recorder). - **Errors:** wrap with `fmt.Errorf("context: %w", err)`; structured logging via `log/slog` only. diff --git a/CHANGELOG.md b/CHANGELOG.md index 78882b69..625b5efd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,31 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [v0.9.3] - 2026-08-11 + +### Changed + +- **Commit convention migrated from gitmoji to plain Conventional Commits.** + The commit-msg validator, the git hook, and the CI commit-check workflow + all moved to the new convention. `release-cut`'s bump-math grammar was + hardened to parse the full commit header, so subjects like `urgent!:` no + longer falsely trigger a major version bump. CI's commit check now + delegates to the same shared validator script the hook uses, instead of + duplicating the logic. +- **Renovate dependency updates applied.** `biome`, `turbo`, `@types/react`, + `@types/node`, `postcss`, `typescript`, and `@types/react-dom` were bumped + to their current pinned versions, and a stale `wolfi-base` digest + reference in `Dockerfile.release` — missed when `Dockerfile` got the same + bump — was corrected. + +### Fixed + +- **Lockfile regenerated to restore cross-platform optional dependencies.** + The lockfile only carried resolved entries for the `darwin-arm64` + platform, so `npm ci` on Linux CI builders never installed + `lightningcss`'s native binaries, breaking website deploys. A full + regeneration restores the complete platform matrix. + ## [v0.9.2] - 2026-08-04 ### Changed diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index aa2836d5..08f9f55d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -71,26 +71,31 @@ go test -run=^$ -fuzz=^FuzzEnvelope$ -fuzztime=5s ./internal/protocol ## Commit convention -We use **Gitmoji + Conventional Commits**: +We use **Conventional Commits** — no emoji: ```text - (): +(): ``` -| Emoji | Type | Use | -|-------|------|-----| -| ✨ | `feat` | New feature | -| 🐛 | `fix` | Bug fix | -| 📝 | `docs` | Documentation | -| 🎨 | `style` | Formatting only | -| 🔄 | `refactor` | Refactor (no feature/fix) | -| 🧪 | `test` | Tests | -| 📦 | `deps` | Dependencies | -| 🔧 | `config` | Configuration / tooling | -| 🚀 | `deploy` | Deployment / release | -| 🗑️ | `remove` | Removing code/files | - -Multi-change commits: lead emoji+type on first line, bulleted sub-changes in body. Reference Linear issues in footer as `Fixes: LIN-XXX`. +Scope is optional. A `!` before the colon marks a breaking change (`feat(api)!: drop v1 tokens`). A `BREAKING CHANGE:` footer is valid Conventional Commit syntax, but release versioning currently reads only the subject-line `!` for major bumps. + +| Type | Use | +|------|-----| +| `feat` | New feature | +| `fix` | Bug fix | +| `docs` | Documentation | +| `style` | Formatting only | +| `refactor` | Refactor (no feature/fix) | +| `perf` | Performance improvement | +| `test` | Tests | +| `build` | Build system / dependencies (e.g. `build(deps): bump gorilla/websocket`) | +| `ci` | CI / deployment config (e.g. `ci(deploy): add release-cut concurrency guard`) | +| `chore` | Everything else / tooling / config (e.g. `chore(config): tune lefthook timeouts`) | +| `revert` | Reverting a previous commit | + +Example: `feat(auth): add Ed25519 enrollment` + +Multi-change commits: lead type on first line, bulleted sub-changes in body. Reference Linear issues in footer as `Fixes: LIN-XXX`. ## Pull request guidelines diff --git a/Dockerfile.release b/Dockerfile.release index ae9465fc..019526d8 100644 --- a/Dockerfile.release +++ b/Dockerfile.release @@ -16,7 +16,7 @@ # Wolfi rootfs — amd64 and arm64 share one recipe; buildx pulls the per-arch # wolfi-base via --platform, so the arm64 build of this stage installs arm64 # packages even though the stage is named "-amd64". -FROM cgr.dev/chainguard/wolfi-base:latest@sha256:d2ad9a742d38e1ab550fbb20911056339632a5ca2f01777a32422a4c944fcb99 AS rootfs-amd64 +FROM cgr.dev/chainguard/wolfi-base:latest@sha256:003627df3c1e1bba0c4116afcddb314aca9594ee2328c7e876a8081a6c988b2e AS rootfs-amd64 RUN apk add --no-cache --initdb --root /out \ --repository https://packages.wolfi.dev/os \ --keys-dir /etc/apk/keys \ diff --git a/RELEASING.md b/RELEASING.md index ab15a183..958bff0a 100644 --- a/RELEASING.md +++ b/RELEASING.md @@ -54,7 +54,7 @@ Go to **Actions → 🏷️ Release: Cut** → **Run workflow** on `main`. The workflow: - Polls until `ci.yml` has a successful run on HEAD -- Computes the next semver from emoji-conventional-commit history (`✨ feat` = minor, anything else = patch, `!` in the commit subject = major; a `BREAKING CHANGE` footer alone does not trigger a major bump today) +- Computes the next semver from Conventional Commit history (`feat` = minor, anything else = patch, `!` in the commit subject = major; a `BREAKING CHANGE` footer alone does not trigger a major bump today). Tolerates a legacy leading emoji from pre-migration history, so old commits still compute correctly. - Validates the CHANGELOG entry is non-empty for the computed tag - Creates and pushes an annotated tag using the repo bot identity diff --git a/biome.json b/biome.json index cea64678..090cdd51 100644 --- a/biome.json +++ b/biome.json @@ -1,5 +1,5 @@ { - "$schema": "https://biomejs.dev/schemas/2.4.16/schema.json", + "$schema": "https://biomejs.dev/schemas/2.5.7/schema.json", "vcs": { "enabled": true, "clientKind": "git", "useIgnoreFile": true }, "files": { "includes": ["website/src/**/*.{ts,tsx,mjs}", "docs/src/**/*.{ts,tsx}"] @@ -7,7 +7,7 @@ "formatter": { "enabled": true, "indentStyle": "space", "indentWidth": 2, "lineWidth": 100 }, "linter": { "enabled": true, - "rules": { "recommended": true } + "rules": { "preset": "recommended" } }, "assist": { "actions": { "source": { "organizeImports": "on" } } }, "overrides": [ diff --git a/docs/package.json b/docs/package.json index 7bb05389..381c05db 100644 --- a/docs/package.json +++ b/docs/package.json @@ -23,12 +23,12 @@ "devDependencies": { "@tailwindcss/postcss": "4.3.3", "@types/mdx": "2.0.14", - "@types/node": "^26.1.2", - "@types/react": "^19.2.17", + "@types/node": "26.1.2", + "@types/react": "19.2.18", "@types/react-dom": "19.2.4", - "postcss": "^8.5.24", + "postcss": "8.5.25", "tailwindcss": "4.3.3", - "typescript": "^7.0.2" + "typescript": "7.0.2" }, "overrides": { "next": { diff --git a/lefthook.yml b/lefthook.yml index 2fb05aaf..d84b2c92 100644 --- a/lefthook.yml +++ b/lefthook.yml @@ -21,7 +21,7 @@ commit-msg: commands: convention: run: scripts/validate-commit-msg.sh {1} - fail_text: "Commit message does not follow emoji conventional commit format" + fail_text: "Commit message does not follow Conventional Commits format" pre-commit: piped: true diff --git a/package-lock.json b/package-lock.json index 3116f4bf..71c77c2e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,8 +10,8 @@ "docs" ], "devDependencies": { - "@biomejs/biome": "^2.4.16", - "turbo": "^2.9.17" + "@biomejs/biome": "2.5.7", + "turbo": "2.10.8" }, "engines": { "node": "^22.22.2 || ^24.15.0 || >=26.0.0" @@ -34,12 +34,12 @@ "devDependencies": { "@tailwindcss/postcss": "4.3.3", "@types/mdx": "2.0.14", - "@types/node": "^26.1.2", - "@types/react": "^19.2.17", + "@types/node": "26.1.2", + "@types/react": "19.2.18", "@types/react-dom": "19.2.4", - "postcss": "^8.5.24", + "postcss": "8.5.25", "tailwindcss": "4.3.3", - "typescript": "^7.0.2" + "typescript": "7.0.2" } }, "node_modules/@alloc/quick-lru": { @@ -240,9 +240,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.1.tgz", - "integrity": "sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz", + "integrity": "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==", "cpu": [ "ppc64" ], @@ -256,9 +256,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.1.tgz", - "integrity": "sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz", + "integrity": "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==", "cpu": [ "arm" ], @@ -272,9 +272,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.1.tgz", - "integrity": "sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz", + "integrity": "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==", "cpu": [ "arm64" ], @@ -288,9 +288,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.1.tgz", - "integrity": "sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz", + "integrity": "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==", "cpu": [ "x64" ], @@ -304,9 +304,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.1.tgz", - "integrity": "sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz", + "integrity": "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==", "cpu": [ "arm64" ], @@ -320,9 +320,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.1.tgz", - "integrity": "sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz", + "integrity": "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==", "cpu": [ "x64" ], @@ -336,9 +336,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.1.tgz", - "integrity": "sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz", + "integrity": "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==", "cpu": [ "arm64" ], @@ -352,9 +352,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.1.tgz", - "integrity": "sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz", + "integrity": "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==", "cpu": [ "x64" ], @@ -368,9 +368,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.1.tgz", - "integrity": "sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz", + "integrity": "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==", "cpu": [ "arm" ], @@ -384,9 +384,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.1.tgz", - "integrity": "sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz", + "integrity": "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==", "cpu": [ "arm64" ], @@ -400,9 +400,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.1.tgz", - "integrity": "sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz", + "integrity": "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==", "cpu": [ "ia32" ], @@ -416,9 +416,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.1.tgz", - "integrity": "sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz", + "integrity": "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==", "cpu": [ "loong64" ], @@ -432,9 +432,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.1.tgz", - "integrity": "sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz", + "integrity": "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==", "cpu": [ "mips64el" ], @@ -448,9 +448,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.1.tgz", - "integrity": "sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz", + "integrity": "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==", "cpu": [ "ppc64" ], @@ -464,9 +464,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.1.tgz", - "integrity": "sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz", + "integrity": "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==", "cpu": [ "riscv64" ], @@ -480,9 +480,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.1.tgz", - "integrity": "sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz", + "integrity": "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==", "cpu": [ "s390x" ], @@ -496,9 +496,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.1.tgz", - "integrity": "sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz", + "integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==", "cpu": [ "x64" ], @@ -512,9 +512,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.1.tgz", - "integrity": "sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz", + "integrity": "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==", "cpu": [ "arm64" ], @@ -528,9 +528,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.1.tgz", - "integrity": "sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz", + "integrity": "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==", "cpu": [ "x64" ], @@ -544,9 +544,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.1.tgz", - "integrity": "sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz", + "integrity": "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==", "cpu": [ "arm64" ], @@ -560,9 +560,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.1.tgz", - "integrity": "sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz", + "integrity": "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==", "cpu": [ "x64" ], @@ -576,9 +576,9 @@ } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.1.tgz", - "integrity": "sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz", + "integrity": "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==", "cpu": [ "arm64" ], @@ -592,9 +592,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.1.tgz", - "integrity": "sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz", + "integrity": "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==", "cpu": [ "x64" ], @@ -608,9 +608,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.1.tgz", - "integrity": "sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz", + "integrity": "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==", "cpu": [ "arm64" ], @@ -624,9 +624,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.1.tgz", - "integrity": "sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz", + "integrity": "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==", "cpu": [ "ia32" ], @@ -640,9 +640,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.1.tgz", - "integrity": "sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz", + "integrity": "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==", "cpu": [ "x64" ], @@ -2240,13 +2240,13 @@ "license": "MIT" }, "node_modules/@shikijs/core": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-4.4.1.tgz", - "integrity": "sha512-VeR2CY6Nn9/WbisoYLOQZ7HZOnwTrpBuOw4wExjqLnBCi62BNWynBUO6K2uPIASPFJwAv7cX1fUu+LrPlSstcw==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-4.4.3.tgz", + "integrity": "sha512-QCR4q2ZO/ILJEuwiBMel4wdcTDb1JGwfjKTxPDF6x8ixOaluPrVqIn06C99AcRPhmYlBR56d/Fb+GN58GzExpg==", "license": "MIT", "dependencies": { - "@shikijs/primitive": "4.4.1", - "@shikijs/types": "4.4.1", + "@shikijs/primitive": "4.4.3", + "@shikijs/types": "4.4.3", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.5", "hast-util-to-html": "^9.0.5" @@ -2256,12 +2256,12 @@ } }, "node_modules/@shikijs/engine-javascript": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-4.4.1.tgz", - "integrity": "sha512-6U4lJBh8LTvIkEVqRHv/rr3ruwtO6IweFQt1ME1ntHJMGHS+6N86vfYGO1o8c/DtOCTia2lfhdQBtBrps1sDfQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-4.4.3.tgz", + "integrity": "sha512-FbOjFJp9VLdo1Wevs10BBtVxiTWwNLqZh5Gkhjgda/ioL15YOgeSl9n+6XMa3qRlPQzfhFNe641SrynFHYG0nQ==", "license": "MIT", "dependencies": { - "@shikijs/types": "4.4.1", + "@shikijs/types": "4.4.3", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.6" }, @@ -2270,12 +2270,12 @@ } }, "node_modules/@shikijs/engine-oniguruma": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-4.4.1.tgz", - "integrity": "sha512-p23RugMKss0r5DAtRJW1yAXUDl60JvhQYV20yuxei//26JyDSJefV3umyWzzwep2weblMnJGDYahuti6XkcMgA==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-4.4.3.tgz", + "integrity": "sha512-EcOQkxdxGQrc1Row/cC2c96/v1dbZqGnEVu1qTuT/MJmp6+cXCvQussowVmCv5Tqr3KuY3c7IbM6HTW3LJ1k9w==", "license": "MIT", "dependencies": { - "@shikijs/types": "4.4.1", + "@shikijs/types": "4.4.3", "@shikijs/vscode-textmate": "^10.0.2" }, "engines": { @@ -2283,24 +2283,24 @@ } }, "node_modules/@shikijs/langs": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-4.4.1.tgz", - "integrity": "sha512-xb2kCMloBCIraIy2fS5MW0t/BxVY3q2nDyQKBoeSeq6KNrQbShHetCFlw2n35fGIJ6t3+hXDLQogP5ir9O9bvA==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-4.4.3.tgz", + "integrity": "sha512-ePic0yfAJGOF83D5wBHK/00EjK65oahBYxFk5epgq33WRv7X9UuxLEV8PtR0szC0z8dl7INIpIodB99JRFlR+A==", "license": "MIT", "dependencies": { - "@shikijs/types": "4.4.1" + "@shikijs/types": "4.4.3" }, "engines": { "node": ">=20" } }, "node_modules/@shikijs/primitive": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@shikijs/primitive/-/primitive-4.4.1.tgz", - "integrity": "sha512-ko2OfDoG89YuQ7xL5LtcQiWKb7NIv1Ephb7g48TVU198OzAMLC8lXVEwaJGHK4sUMYrfAGJDqYmNLOLiW/Kz8w==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@shikijs/primitive/-/primitive-4.4.3.tgz", + "integrity": "sha512-m0wBeLDQDeIxRdUmrCPdQqfuUamDwRL5isCfYbguKD6NiaKpVbsv+3J81DyIKgNW5h4WAIIr8T4EkgQrBBxvaQ==", "license": "MIT", "dependencies": { - "@shikijs/types": "4.4.1", + "@shikijs/types": "4.4.3", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.5" }, @@ -2309,21 +2309,21 @@ } }, "node_modules/@shikijs/themes": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-4.4.1.tgz", - "integrity": "sha512-wudOaoFro+/Zl9gQv2W1Ur5XlVduqvTuYLI483Xi0wgc1A+cy1hfB2r6ac6ufBgF+ID7KJEW7L41MHrzQ4wH+w==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-4.4.3.tgz", + "integrity": "sha512-w8UHjeUnIR965KMWJHUPXOc2mNJUnK3vpVLYLvw5IYU2mnTTJ89E24OrJDBNiJDQ0qzb0tc4l7mrIXx5cFeIyw==", "license": "MIT", "dependencies": { - "@shikijs/types": "4.4.1" + "@shikijs/types": "4.4.3" }, "engines": { "node": ">=20" } }, "node_modules/@shikijs/types": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-4.4.1.tgz", - "integrity": "sha512-GOwCLQDHM5EjGUWNPrhzJbr6JP8V/Dx/CDVkWvbZ1Avw5JFnNUckrgbLmE07qtg4WlW7Q7QFndhjIkeU9XMPvw==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-4.4.3.tgz", + "integrity": "sha512-UEJxmRR++MAGR6hugn0vgVS2W/6lWAts84FFSrnlH9sP0LNol7E5+NQ792pH8liWUhyMyjhTgSUH3k7iD7tc5g==", "license": "MIT", "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", @@ -2577,6 +2577,66 @@ "node": ">=14.0.0" } }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/core": { + "version": "1.11.1", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/runtime": { + "version": "1.11.1", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/wasi-threads": { + "version": "1.2.2", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.4", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@tybys/wasm-util": { + "version": "0.10.2", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/tslib": { + "version": "2.8.1", + "inBundle": true, + "license": "0BSD", + "optional": true + }, "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.3.tgz", @@ -3187,9 +3247,9 @@ } }, "node_modules/@yuku-analyzer/binding-android-arm64": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/@yuku-analyzer/binding-android-arm64/-/binding-android-arm64-0.8.3.tgz", - "integrity": "sha512-t1H+d/ubotHLJPQ2gTPZ9C+XD5ZYsxasmxi8wBsUm9WONr0DEFtlxwIgvGZS1Kvlc+sZH9xErCtnKS+odKCabA==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@yuku-analyzer/binding-android-arm64/-/binding-android-arm64-0.8.4.tgz", + "integrity": "sha512-c1OkNBGG2Du/rWjYBC65tBw6loWb6mifqKtyQL2wKYJMP15SbCXzQuRVFiwyebga9TTxnVaHYY4KWiO4kzLikg==", "cpu": [ "arm64" ], @@ -3200,9 +3260,9 @@ ] }, "node_modules/@yuku-analyzer/binding-darwin-arm64": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/@yuku-analyzer/binding-darwin-arm64/-/binding-darwin-arm64-0.8.3.tgz", - "integrity": "sha512-2SULWSl6ZJb9mSmlJTw+tzHtYu4PUV50TQDnB3x3VpxHNextIj4Cc2MPO+KYxnETpKliD9ufaxjViU0EPbaRKw==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@yuku-analyzer/binding-darwin-arm64/-/binding-darwin-arm64-0.8.4.tgz", + "integrity": "sha512-BYkCX99TyNer598awpnAuFIkT2HjqaEstwticfOIzcNdNG5FKJVGwhzbQEFhEJOFMmyB6MRNQXo/bNV4QMdlLw==", "cpu": [ "arm64" ], @@ -3213,9 +3273,9 @@ ] }, "node_modules/@yuku-analyzer/binding-darwin-x64": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/@yuku-analyzer/binding-darwin-x64/-/binding-darwin-x64-0.8.3.tgz", - "integrity": "sha512-CUnZOy4xKlEZyZddO14sodw7dxlJjm+ELTRRvIStf+Q3UVIwqH8gfvrQc1oFFWdYAQxMNVG+xtzAkcC1wL0IAA==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@yuku-analyzer/binding-darwin-x64/-/binding-darwin-x64-0.8.4.tgz", + "integrity": "sha512-/KiWh6WHN+awHS8uqY27OyGUUG1a/q/NqBxuM5rExV9zFnLjI7jyxDlroL1C7wXRQmkohhoZa3ezEj+yzUNQOw==", "cpu": [ "x64" ], @@ -3226,9 +3286,9 @@ ] }, "node_modules/@yuku-analyzer/binding-freebsd-x64": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/@yuku-analyzer/binding-freebsd-x64/-/binding-freebsd-x64-0.8.3.tgz", - "integrity": "sha512-hmzVEB0hl1NwDw0WhTam9BL5MB+WQ23CCWeB0PN5o7+8x/k69v816VipV+67eFkagjWEFkF32c586qYUT0H5wQ==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@yuku-analyzer/binding-freebsd-x64/-/binding-freebsd-x64-0.8.4.tgz", + "integrity": "sha512-1paQ3spS1lb5DvFik+iyj1tk8eOsG6jm4YGaFslXlJEi5fG7voSL8tKpKAYBPBylj0RUDo3hjlsxSX/5fEXKeQ==", "cpu": [ "x64" ], @@ -3239,9 +3299,9 @@ ] }, "node_modules/@yuku-analyzer/binding-linux-arm-gnu": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/@yuku-analyzer/binding-linux-arm-gnu/-/binding-linux-arm-gnu-0.8.3.tgz", - "integrity": "sha512-N7o78i1TGloyw9hNbFzD5qts4DQFz+pMBywPyPZ0P4asTjCIZFxQlJwQyvFIqI/ddPT6WSMbwyIdwnA4HNQP4w==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@yuku-analyzer/binding-linux-arm-gnu/-/binding-linux-arm-gnu-0.8.4.tgz", + "integrity": "sha512-jXyR1QzTcYBPLAOKNpmBW7xi5p2LzIDm1KrduM14WrlR0/R1iCSV/QRSLvLv/tKRVNSmGq81FtfPDuYBXrx41w==", "cpu": [ "arm" ], @@ -3255,9 +3315,9 @@ ] }, "node_modules/@yuku-analyzer/binding-linux-arm-musl": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/@yuku-analyzer/binding-linux-arm-musl/-/binding-linux-arm-musl-0.8.3.tgz", - "integrity": "sha512-G/7tB72G7nkNHHd6kW0wUjfCCJHNAXHjWb5zFusLhR5JR/qG1mtPCHZKh8kcYuXVtdx10EQUBvDvwYR8qcg8Fw==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@yuku-analyzer/binding-linux-arm-musl/-/binding-linux-arm-musl-0.8.4.tgz", + "integrity": "sha512-U/1nKHIVDv/R6KL35evOXQZNe/+pmviFPBs1+Cnv+JFow1/7MQ9NMAgsZWAyvDS015ieajFVbIwMtd+Nz3ff0w==", "cpu": [ "arm" ], @@ -3271,9 +3331,9 @@ ] }, "node_modules/@yuku-analyzer/binding-linux-arm64-gnu": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/@yuku-analyzer/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.8.3.tgz", - "integrity": "sha512-RzZs4PTRMZkOKlxRz3TgQcwYURqsNDJQsCZiGDsMr6oujUenAA55g83G8R4qrp4AP8XzupuctiN2Mj94ix5C9w==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@yuku-analyzer/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.8.4.tgz", + "integrity": "sha512-yzI/UMWlgVT25taCYB4EjmDZE0iXMo1WAEsUKauA7O+wjA3bUK/zuBQDplr8/C40CPHlV+kFcUylYxJcDtLuCA==", "cpu": [ "arm64" ], @@ -3287,9 +3347,9 @@ ] }, "node_modules/@yuku-analyzer/binding-linux-arm64-musl": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/@yuku-analyzer/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.8.3.tgz", - "integrity": "sha512-bhVhTXNkSmIY4XW7UBHjv/FcFzIKFlWAdYl7JgznwoN9f30Gm75hakEImFVNI1Cyapo1IgDzBttBEkcgtr3hjQ==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@yuku-analyzer/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.8.4.tgz", + "integrity": "sha512-7Xhuo5YvKtqHhC5gZ9saiEU3snkqAPkvSzYRksrIK8KVoC677HSvj8aqNBlja43bM0G5kzfj4YY3va67dFnXvw==", "cpu": [ "arm64" ], @@ -3303,9 +3363,9 @@ ] }, "node_modules/@yuku-analyzer/binding-linux-x64-gnu": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/@yuku-analyzer/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.8.3.tgz", - "integrity": "sha512-GchPBviJ2WobjhNwEUb7csnCTa900jwUy98OIhvJ0fktlMXSw4a49jztUobIaThvR1prfa280XcIwwUpFrTJtQ==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@yuku-analyzer/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.8.4.tgz", + "integrity": "sha512-c6dJ7b0xUNvNeAd/2i1QTxPhjDdewEAd+g/w06PNT2PIWfcb6ZIEub9WD/Q07X7MXkkEgK68lROhVUO/MR6LYA==", "cpu": [ "x64" ], @@ -3319,9 +3379,9 @@ ] }, "node_modules/@yuku-analyzer/binding-linux-x64-musl": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/@yuku-analyzer/binding-linux-x64-musl/-/binding-linux-x64-musl-0.8.3.tgz", - "integrity": "sha512-FmKdZ8eJjP405zsjkfCq78L5+zLYMfh2jit5xVUkc5FHFkekILTP3/l4A5WbAg3vSlsHuU8IK8qTMP/I/DdjnQ==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@yuku-analyzer/binding-linux-x64-musl/-/binding-linux-x64-musl-0.8.4.tgz", + "integrity": "sha512-fjY6T70EZ43a0hvPYt0qqJUh+WZ7GN/I7yfYovpN7jWQjGw1SnUgB83h37VexpazB4mFXyjBQ18nWVTPHaPtAg==", "cpu": [ "x64" ], @@ -3335,9 +3395,9 @@ ] }, "node_modules/@yuku-analyzer/binding-win32-arm64": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/@yuku-analyzer/binding-win32-arm64/-/binding-win32-arm64-0.8.3.tgz", - "integrity": "sha512-QkpBczJfr462MvOY7kWXfv0NkLmjiUNaPwwty2lwZv2Xk1NKuYPiAjcdyqC59nsoftp1xf8qjDKUtF5ykuhoRQ==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@yuku-analyzer/binding-win32-arm64/-/binding-win32-arm64-0.8.4.tgz", + "integrity": "sha512-+Vblt5JBeJvf7ij6P+QpTCt8QjjvU+1/kqlAYL1XgrTnWEhOySnCtiIo8e7nWsyGcnKGXlzixezWfQycG7OHjg==", "cpu": [ "arm64" ], @@ -3348,9 +3408,9 @@ ] }, "node_modules/@yuku-analyzer/binding-win32-x64": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/@yuku-analyzer/binding-win32-x64/-/binding-win32-x64-0.8.3.tgz", - "integrity": "sha512-bgdgP+I/+lYIaG6xWv0L8VpwSVZ+FUsqTju+xFGhU2mkhgmU1e5PYle7Vl8ZsS7R4Udf28j66L1lXeLEyWvwhg==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@yuku-analyzer/binding-win32-x64/-/binding-win32-x64-0.8.4.tgz", + "integrity": "sha512-Gza3TZaU7TUExLiHFsodPMwu9rRXK1fGrYO5gqp72w2qZitqSgmP72549MMszk22ayfNrzc7shsIsXrwaxdPuw==", "cpu": [ "x64" ], @@ -3361,9 +3421,9 @@ ] }, "node_modules/@yuku-toolchain/types": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/@yuku-toolchain/types/-/types-0.8.3.tgz", - "integrity": "sha512-9LN3HYs3A9qSPVFunsxlbfwBcUgexti3TmhOzIxB/UH8zFuaHQJXTRDcN17DW6cp1GsyZtiZA7f18uIra36Jag==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@yuku-toolchain/types/-/types-0.8.4.tgz", + "integrity": "sha512-p7JE8flrj7ijZ/qLjHi4UwKqMarMD6zumbKXhrjp2I2iLJOuTYiQyci2U36VlXcUlNyzsY7E/mLnKCHotbzJVw==", "license": "MIT" }, "node_modules/acorn": { @@ -3419,9 +3479,9 @@ } }, "node_modules/baseline-browser-mapping": { - "version": "2.11.12", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.12.tgz", - "integrity": "sha512-r7WnVImvVCeFpf2DOXfy41aPWzeNg3H/A2X4dKmy1QL0MSyyk/e7z8ihJ3N6Nn2PsdhkVlqnEfnUE4a05P2aTA==", + "version": "2.11.13", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.13.tgz", + "integrity": "sha512-k9HNuUVMlqVjQ9UHzfPjIqiDbWw7WqT1AoT7GL8VwvF3r0ZfArtgiSPAlmupyNquNgOJHTuH4CKYf8ttMTWBTQ==", "license": "Apache-2.0", "bin": { "baseline-browser-mapping": "dist/cli.cjs" @@ -3431,9 +3491,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001806", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001806.tgz", - "integrity": "sha512-72Cuvd95zbSYPKq6Fhg8eDJRlzgWDf7/mtoZv6Qe/DYNCEBdNxoA3+rZAU2ZhGCpZlns3EssFavaZomckT5Uuw==", + "version": "1.0.30001809", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001809.tgz", + "integrity": "sha512-xxWVywk6a6Arlk+hymeycyn/VgqEfLDxupvhH/xiY5SJ/18kmi9o6MiO320DCUzypORHLtvh0I4i04tUhCNHNQ==", "funding": [ { "type": "opencollective", @@ -3713,9 +3773,9 @@ } }, "node_modules/esbuild": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.1.tgz", - "integrity": "sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz", + "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==", "hasInstallScript": true, "license": "MIT", "bin": { @@ -3725,32 +3785,32 @@ "node": ">=18" }, "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" + "@esbuild/aix-ppc64": "0.28.2", + "@esbuild/android-arm": "0.28.2", + "@esbuild/android-arm64": "0.28.2", + "@esbuild/android-x64": "0.28.2", + "@esbuild/darwin-arm64": "0.28.2", + "@esbuild/darwin-x64": "0.28.2", + "@esbuild/freebsd-arm64": "0.28.2", + "@esbuild/freebsd-x64": "0.28.2", + "@esbuild/linux-arm": "0.28.2", + "@esbuild/linux-arm64": "0.28.2", + "@esbuild/linux-ia32": "0.28.2", + "@esbuild/linux-loong64": "0.28.2", + "@esbuild/linux-mips64el": "0.28.2", + "@esbuild/linux-ppc64": "0.28.2", + "@esbuild/linux-riscv64": "0.28.2", + "@esbuild/linux-s390x": "0.28.2", + "@esbuild/linux-x64": "0.28.2", + "@esbuild/netbsd-arm64": "0.28.2", + "@esbuild/netbsd-x64": "0.28.2", + "@esbuild/openbsd-arm64": "0.28.2", + "@esbuild/openbsd-x64": "0.28.2", + "@esbuild/openharmony-arm64": "0.28.2", + "@esbuild/sunos-x64": "0.28.2", + "@esbuild/win32-arm64": "0.28.2", + "@esbuild/win32-ia32": "0.28.2", + "@esbuild/win32-x64": "0.28.2" } }, "node_modules/escape-string-regexp": { @@ -3919,9 +3979,9 @@ } }, "node_modules/fumadocs-core": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/fumadocs-core/-/fumadocs-core-16.14.0.tgz", - "integrity": "sha512-CQBsVm2XoxytoK5iTxd2Q3L76XBXY9yrWdThH9iJxZPcZ4aHED7YJCYuHPHZDIWg80fy1UAgVc6ogfE+24jTDA==", + "version": "16.14.3", + "resolved": "https://registry.npmjs.org/fumadocs-core/-/fumadocs-core-16.14.3.tgz", + "integrity": "sha512-xoGy6YelmU8GD4RKUiSuraFnRW91DqBM328Gs/YasltLrnMDWgEaYMKAcrGLVrikpqJkFx+etHo8BcClOMNt+A==", "license": "MIT", "dependencies": { "estree-util-value-to-estree": "^3.5.0", @@ -3935,7 +3995,7 @@ "remark-gfm": "^4.0.1", "remark-rehype": "^11.1.2", "scroll-into-view-if-needed": "^3.1.0", - "shiki": "^4.3.1", + "shiki": "^4.4.1", "tinyglobby": "^0.2.17", "unified": "^11.0.5", "unist-util-visit": "^5.1.0", @@ -4021,9 +4081,9 @@ } }, "node_modules/fumadocs-mdx": { - "version": "15.2.2", - "resolved": "https://registry.npmjs.org/fumadocs-mdx/-/fumadocs-mdx-15.2.2.tgz", - "integrity": "sha512-cWtGFSDSWOTykuxym3uzfuIkK9oWyNcAeIWgjqfS1QbkrY9nAh9fmoPCFwMcw7alk5oX5l8sxvRsUG+ZTuShNQ==", + "version": "15.2.3", + "resolved": "https://registry.npmjs.org/fumadocs-mdx/-/fumadocs-mdx-15.2.3.tgz", + "integrity": "sha512-zulK4WKXZcnbiipdvWtKcBClZn8/RekIjZu+/MmuMX3lpiXki485ABhJiJqFQmtD8W59WBN+V/4ydr4TvSoLkQ==", "license": "MIT", "dependencies": { "@mdx-js/mdx": "^3.1.1", @@ -4036,14 +4096,14 @@ "mdast-util-mdx": "^3.0.0", "picocolors": "^1.1.1", "picomatch": "^4.0.5", - "tinyexec": "^1.2.4", + "tinyexec": "^1.3.0", "tinyglobby": "^0.2.17", "unified": "^11.0.5", "unist-util-remove-position": "^5.0.0", "unist-util-visit": "^5.1.0", "vfile": "^6.0.3", "yaml": "^2.9.0", - "yuku-analyzer": "^0.8.1", + "yuku-analyzer": "^0.8.3", "zod": "^4.4.3" }, "bin": { @@ -4105,9 +4165,9 @@ } }, "node_modules/fumadocs-ui": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/fumadocs-ui/-/fumadocs-ui-16.14.0.tgz", - "integrity": "sha512-MijJ96VzC1EPOGJutf+t6ptuGRl2y4h33iwECmM79TvEHvf8Uxtnb1vFMQz0labHvuN/lSR1bV2SENH7t28W4w==", + "version": "16.14.3", + "resolved": "https://registry.npmjs.org/fumadocs-ui/-/fumadocs-ui-16.14.3.tgz", + "integrity": "sha512-ASL9BgFxSe6VrbQ60nxVfpnKBPboeADp330JQvyEAqR1U8uw0T1+Vko8ySXRAWbivdZfYK5fZbCh78EOAMTEqw==", "license": "MIT", "dependencies": { "@fuma-translate/react": "^1.0.2", @@ -4124,19 +4184,19 @@ "@radix-ui/react-tabs": "^1.1.21", "class-variance-authority": "^0.7.1", "cnfast": "^0.1.0", - "lucide-react": "^1.27.0", + "lucide-react": "^1.28.0", "motion": "^12.43.0", "next-themes": "^0.4.6", "react-remove-scroll": "^2.7.2", "rehype-raw": "^7.0.0", "scroll-into-view-if-needed": "^3.1.0", - "shiki": "^4.3.1", + "shiki": "^4.4.1", "unist-util-visit": "^5.1.0" }, "peerDependencies": { "@types/mdx": "*", "@types/react": "*", - "fumadocs-core": "16.14.0", + "fumadocs-core": "16.14.3", "next": "16.x.x", "react": "^19.2.0", "react-dom": "^19.2.0", @@ -4716,9 +4776,9 @@ } }, "node_modules/lucide-react": { - "version": "1.28.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.28.0.tgz", - "integrity": "sha512-fARAFJULsGuDDydjp6+6blekG/sBIM29TerzLjc9bQUKAcEfrSc4ZQKb25KRz4OMKd87cZTb5dgq0w/T6KufVg==", + "version": "1.31.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.31.0.tgz", + "integrity": "sha512-G8u2eEtoHUnUa9f8lbvqDhCiORMnYLdUEo06EEG9MQvHQrInKcX3Pa2TH39MM5qyzRcWETxB0+aOwAPI1g1kEg==", "license": "ISC", "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" @@ -5807,9 +5867,9 @@ "license": "MIT" }, "node_modules/nanoid": { - "version": "3.3.17", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.17.tgz", - "integrity": "sha512-xQLf0A3HOMlgHq0n247/LRuAOYmB7dXJ/DvAxGvsSBij45XtBSmQycu+F8ODbHwns/XyFZagyL1+J0Offw1E0g==", + "version": "3.3.18", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", + "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", "funding": [ { "type": "github", @@ -5972,9 +6032,9 @@ } }, "node_modules/postcss": { - "version": "8.5.25", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.25.tgz", - "integrity": "sha512-DTPx3RWSSnWyzLxQnlH0rJP+EW5ekl16ZU4/psbIhA0e53kJfdgaN5vKM+xP7yJtXVu+nfdVFmlgFDEKAe4Pyw==", + "version": "8.5.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz", + "integrity": "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==", "funding": [ { "type": "opencollective", @@ -5991,7 +6051,7 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.16", + "nanoid": "^3.3.17", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -6100,9 +6160,9 @@ } }, "node_modules/readdirp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", - "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.1.1.tgz", + "integrity": "sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==", "license": "MIT", "engines": { "node": ">= 20.19.0" @@ -6408,17 +6468,17 @@ } }, "node_modules/shiki": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-4.4.1.tgz", - "integrity": "sha512-rFP+iYKzjLEIqiMiKANhARqiAbk4deDhWnBtnUO/K0D0dPxMGDH4N0FVfBY/VeI+lPrV4wNGCHQZp7EOr7NNBw==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-4.4.3.tgz", + "integrity": "sha512-Mb/GvXPHBAXdgGIcnfU5L3ldpn1XcxrGkPHwqgRx17/I2XRfqlFKk2vGkHWINn1kdXvzJZeuO3is6I9KLPFm0g==", "license": "MIT", "dependencies": { - "@shikijs/core": "4.4.1", - "@shikijs/engine-javascript": "4.4.1", - "@shikijs/engine-oniguruma": "4.4.1", - "@shikijs/langs": "4.4.1", - "@shikijs/themes": "4.4.1", - "@shikijs/types": "4.4.1", + "@shikijs/core": "4.4.3", + "@shikijs/engine-javascript": "4.4.3", + "@shikijs/engine-oniguruma": "4.4.3", + "@shikijs/langs": "4.4.3", + "@shikijs/themes": "4.4.3", + "@shikijs/types": "4.4.3", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.5" }, @@ -6878,36 +6938,36 @@ } }, "node_modules/yuku-analyzer": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/yuku-analyzer/-/yuku-analyzer-0.8.3.tgz", - "integrity": "sha512-u/kRdlS/Hcqo78pevGoKCcjM4ymcquFlw2qxZgZy6TPkyoExJLww8pnbR8Yck8wO7f9fQ4ymjCdFlhJ1VTzzBw==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/yuku-analyzer/-/yuku-analyzer-0.8.4.tgz", + "integrity": "sha512-793VvcTjw38e2kjWEx+4R9M1A6CUIS+cRQqi6eHKAnn9rt2mufMEf5/0ZPhVamByEaKQrUsHaDkSuXRm7HKGiw==", "license": "MIT", "dependencies": { - "@yuku-toolchain/types": "^0.8.3", - "yuku-ast": "^0.8.3" + "@yuku-toolchain/types": "^0.8.4", + "yuku-ast": "^0.8.4" }, "optionalDependencies": { - "@yuku-analyzer/binding-android-arm64": "0.8.3", - "@yuku-analyzer/binding-darwin-arm64": "0.8.3", - "@yuku-analyzer/binding-darwin-x64": "0.8.3", - "@yuku-analyzer/binding-freebsd-x64": "0.8.3", - "@yuku-analyzer/binding-linux-arm-gnu": "0.8.3", - "@yuku-analyzer/binding-linux-arm-musl": "0.8.3", - "@yuku-analyzer/binding-linux-arm64-gnu": "0.8.3", - "@yuku-analyzer/binding-linux-arm64-musl": "0.8.3", - "@yuku-analyzer/binding-linux-x64-gnu": "0.8.3", - "@yuku-analyzer/binding-linux-x64-musl": "0.8.3", - "@yuku-analyzer/binding-win32-arm64": "0.8.3", - "@yuku-analyzer/binding-win32-x64": "0.8.3" + "@yuku-analyzer/binding-android-arm64": "0.8.4", + "@yuku-analyzer/binding-darwin-arm64": "0.8.4", + "@yuku-analyzer/binding-darwin-x64": "0.8.4", + "@yuku-analyzer/binding-freebsd-x64": "0.8.4", + "@yuku-analyzer/binding-linux-arm-gnu": "0.8.4", + "@yuku-analyzer/binding-linux-arm-musl": "0.8.4", + "@yuku-analyzer/binding-linux-arm64-gnu": "0.8.4", + "@yuku-analyzer/binding-linux-arm64-musl": "0.8.4", + "@yuku-analyzer/binding-linux-x64-gnu": "0.8.4", + "@yuku-analyzer/binding-linux-x64-musl": "0.8.4", + "@yuku-analyzer/binding-win32-arm64": "0.8.4", + "@yuku-analyzer/binding-win32-x64": "0.8.4" } }, "node_modules/yuku-ast": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/yuku-ast/-/yuku-ast-0.8.3.tgz", - "integrity": "sha512-8x34yU5uhHUnJXzy2Qvjvec/vE9BzS0/2khVT1MsLmSLO/P8Q1Wp8IxHv+IhD+HMYETk6kherOSvP4JPWw2joQ==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/yuku-ast/-/yuku-ast-0.8.4.tgz", + "integrity": "sha512-s7EWfWIQkaGmsGnyr/BU0jli9YTN5TvrKIsSmALyRD9elumDQInuhv0BrVObENKVCxr9W3Ikmnx5u02KvfuUmw==", "license": "MIT", "dependencies": { - "@yuku-toolchain/types": "^0.8.3" + "@yuku-toolchain/types": "^0.8.4" } }, "node_modules/zbsearch": { @@ -6956,10 +7016,10 @@ "tailwindcss": "^4.3.3" }, "devDependencies": { - "@types/node": "^26.1.2", - "@types/react": "^19.2.17", - "@types/react-dom": "^19.2.4", - "typescript": "^7.0.2" + "@types/node": "26.1.2", + "@types/react": "19.2.18", + "@types/react-dom": "19.2.4", + "typescript": "7.0.2" } } } diff --git a/package.json b/package.json index 6a57516d..3a3ce18e 100644 --- a/package.json +++ b/package.json @@ -13,8 +13,8 @@ "format": "biome format --write ." }, "devDependencies": { - "@biomejs/biome": "^2.4.16", - "turbo": "^2.9.17" + "@biomejs/biome": "2.5.7", + "turbo": "2.10.8" }, "overrides": { "postcss": "^8.5.25", diff --git a/scripts/validate-commit-msg.sh b/scripts/validate-commit-msg.sh index 454af767..d95c33a2 100755 --- a/scripts/validate-commit-msg.sh +++ b/scripts/validate-commit-msg.sh @@ -1,7 +1,8 @@ #!/usr/bin/env bash -# Validates the emoji conventional commit format used in this repo: -# (scope): +# Validates the Conventional Commits format used in this repo: +# (scope): # Scope is optional; "!" before ":" marks a breaking change. +# No emoji — a leading emoji is rejected, not just unrecognized. # Portable to bash 3.2 (macOS system bash) — no associative arrays. set -euo pipefail @@ -15,24 +16,40 @@ Merge\ * | Revert\ * | fixup!* | squash!*) ;; esac -pairs=( - "🐛 fix" - "✨ feat" - "🔄 refactor" - "🔧 config" - "📝 docs" - "🧪 test" - "📦 deps" - "🎨 style" - "🚀 deploy" - "🗑️ remove" +types=( + feat + fix + docs + style + refactor + perf + test + build + ci + chore + revert ) -for pair in "${pairs[@]}"; do - emoji="${pair%% *}" - ctype="${pair##* }" +# Reject a leading emoji explicitly, with a clearer message than a generic +# format mismatch — this is the most common leftover habit post-migration. +# Portable non-ASCII check (no grep -P/PCRE — BSD grep on macOS lacks it): +# emoji are multi-byte UTF-8, so their leading byte falls outside 0-127. +# bash's "'c" ordinal trick can return a signed value for high bytes +# depending on libc, so treat both negative and >127 as non-ASCII. +first_char="${first_line:0:1}" +char_val="$(LC_ALL=C printf '%d' "'${first_char}" 2>/dev/null || echo 0)" +if [ "$char_val" -lt 0 ] || [ "$char_val" -gt 127 ]; then + echo "✗ Invalid commit message:" >&2 + echo " $first_line" >&2 + echo "" >&2 + echo " Emoji are no longer used in commit messages. Expected: (scope): " >&2 + echo " Example: feat(auth): add Ed25519 enrollment" >&2 + exit 1 +fi + +for ctype in "${types[@]}"; do if printf '%s\n' "$first_line" | - grep -qE "^${emoji} ${ctype}(\([A-Za-z0-9._/-]+\))?!?: .+"; then + grep -qE "^${ctype}(\([A-Za-z0-9._/-]+\))?!?: .+"; then exit 0 fi done @@ -40,11 +57,12 @@ done echo "✗ Invalid commit message:" >&2 echo " $first_line" >&2 echo "" >&2 -echo " Expected: (scope): " >&2 -echo " Example: ✨ feat(auth): add Ed25519 enrollment" >&2 +echo " Expected: (scope): " >&2 +echo " Example: feat(auth): add Ed25519 enrollment" >&2 +echo ' "!" before the colon marks a breaking change: feat(api)!: drop v1 tokens' >&2 echo "" >&2 -echo " Allowed emoji/type pairs:" >&2 -for pair in "${pairs[@]}"; do - echo " $pair" >&2 +echo " Allowed types:" >&2 +for ctype in "${types[@]}"; do + echo " $ctype" >&2 done exit 1 diff --git a/website/package.json b/website/package.json index f8986b1e..befd195f 100644 --- a/website/package.json +++ b/website/package.json @@ -28,10 +28,10 @@ "tailwindcss": "^4.3.3" }, "devDependencies": { - "@types/node": "^26.1.2", - "@types/react": "^19.2.17", - "@types/react-dom": "^19.2.4", - "typescript": "^7.0.2" + "@types/node": "26.1.2", + "@types/react": "19.2.18", + "@types/react-dom": "19.2.4", + "typescript": "7.0.2" }, "overrides": { "next": {