From 2c0b48370bc77d9275665bfbbe0da6a23dee8216 Mon Sep 17 00:00:00 2001 From: Cell <1024@lruihao.cn> Date: Tue, 21 Jul 2026 12:19:07 +0800 Subject: [PATCH] feat(gen-docs): add Hugo partials docs generation (#809) * feat(gen-docs): add documentation generation package with SassDoc and TypeDoc support Add new `@hugo-fixit/gen-docs` package that parses Hugo config (hugo.toml) and generates documentation. Includes SassDoc annotations for SCSS variables and mixins, TypeDoc config for TypeScript source docs, and a `.sassdocrc` configuration file. * docs(readme): add browsers support section * feat(gen-docs): add Hugo partials docs generation and fix config empty sections - Add partial-parser.ts: parses Hugo partial comment blocks (@param/@return/@example) - Add partials.ts renderer: generates grouped Markdown with param tables - Add `partials` subcommand with -t/-o options for template injection - Fix config-parser: empty TOML sections (library.js/library.css) now retain descriptions - Fix config-parser: correctly distinguish section-level vs key-level comments - Update README with partials subcommand documentation --- .sassdocrc | 7 + README.md | 13 +- README.zh-cn.md | 9 + assets/js/core/event-bus.ts | 3 +- assets/scss/_variables.scss | 8 + assets/scss/core/maps/_admonition.scss | 3 +- assets/scss/core/maps/_alert.scss | 5 +- assets/scss/core/maps/_chroma-lexers.scss | 2 +- assets/scss/core/maps/_colors.scss | 3 +- assets/scss/core/mixins/_compatibility.scss | 7 +- assets/scss/core/mixins/_inline-code.scss | 1 + assets/scss/core/mixins/_loading.scss | 2 +- assets/scss/core/mixins/_media.scss | 2 + assets/scss/core/mixins/_scrollbar-width.scss | 3 + assets/scss/core/mixins/_theme-switch.scss | 7 +- assets/scss/core/mixins/_z-index.scss | 2 + hugo.toml | 20 +- layouts/_partials/base/head/css.html | 2 +- .../_partials/function/camel-case-keys.html | 2 +- layouts/_partials/function/camel-case.html | 4 +- layouts/_partials/function/escapeurl.html | 7 +- layouts/_partials/function/get-cover.html | 3 +- .../_partials/function/suffix-validation.html | 13 +- layouts/_partials/plugin/icon.html | 4 +- layouts/_partials/plugin/social.html | 2 +- layouts/_partials/plugin/style.html | 2 +- package.json | 4 + packages/chroma-lexers/src/generate-scss.ts | 2 +- packages/encrypt/README.md | 2 +- packages/gen-docs/README.md | 66 + packages/gen-docs/package.json | 17 + packages/gen-docs/src/index.ts | 199 ++ .../gen-docs/src/parsers/config-parser.ts | 568 ++++++ .../gen-docs/src/parsers/partial-parser.ts | 337 ++++ packages/gen-docs/src/renderers/config.ts | 42 + packages/gen-docs/src/renderers/partials.ts | 142 ++ packages/gen-docs/tsconfig.json | 18 + pnpm-lock.yaml | 1710 ++++++++--------- pnpm-workspace.yaml | 1 + typedoc.json | 28 + 40 files changed, 2317 insertions(+), 955 deletions(-) create mode 100644 .sassdocrc create mode 100644 packages/gen-docs/README.md create mode 100644 packages/gen-docs/package.json create mode 100644 packages/gen-docs/src/index.ts create mode 100644 packages/gen-docs/src/parsers/config-parser.ts create mode 100644 packages/gen-docs/src/parsers/partial-parser.ts create mode 100644 packages/gen-docs/src/renderers/config.ts create mode 100644 packages/gen-docs/src/renderers/partials.ts create mode 100644 packages/gen-docs/tsconfig.json create mode 100644 typedoc.json diff --git a/.sassdocrc b/.sassdocrc new file mode 100644 index 00000000..2d1a18eb --- /dev/null +++ b/.sassdocrc @@ -0,0 +1,7 @@ +{ + "display": { + "access": ["public"], + "alias": false + }, + "sort": ["group"] +} diff --git a/README.md b/README.md index 0123ba9d..fd41639b 100644 --- a/README.md +++ b/README.md @@ -109,7 +109,7 @@ Click the following links to generate a new repository with template: - Globally consistent **design language** - **Pagination** supported - Easy-to-use and self-expanding **table of contents** -- **Multilanguage** supported and i18n ready +- **Multilanguage** supported and I18n ready - Beautiful **CSS animation** ### Social and Comment Systems @@ -168,7 +168,7 @@ Click the following links to generate a new repository with template: -## Multilingual and i18n +## Multilingual and I18n FixIt supports multilingual and i18n. For more information, see the [Content Management](https://fixit.lruihao.cn/docs/content-management/introduction#multilingual) documentation. You are welcome to [contribute with a new language](https://github.com/hugo-fixit/FixIt/pulls). @@ -194,6 +194,15 @@ FixIt supports multilingual and i18n. For more information, see the [Content Man +## Browsers Support + +The FixIt theme supports the last two versions of all major browsers. + +![Chrome](https://img.shields.io/badge/Chrome-last+2-blue?logo=googlechrome) +![Edge](https://img.shields.io/badge/Edge-last+2-blue?logo=microsoft-edge) +![Firefox](https://img.shields.io/badge/Firefox-last+2-orange?logo=firefox) +![Safari](https://img.shields.io/badge/Safari-last+2-blue?logo=safari) + ## Theme Components To balance **simplicity** and **extensibility**, FixIt theme provides extra [Hugo theme components](https://fixit.lruihao.cn/ecosystem/#-components) for customization. diff --git a/README.zh-cn.md b/README.zh-cn.md index 2128cd1a..65424b4b 100644 --- a/README.zh-cn.md +++ b/README.zh-cn.md @@ -194,6 +194,15 @@ FixIt 主题多语言基本配置及自动翻译等详见 [内容管理](https:/ +## 浏览器支持 + +FixIt 主题支持所有主流浏览器的最近两个版本。 + +![Chrome](https://img.shields.io/badge/Chrome-last+2-blue?logo=googlechrome) +![Edge](https://img.shields.io/badge/Edge-last+2-blue?logo=microsoft-edge) +![Firefox](https://img.shields.io/badge/Firefox-last+2-orange?logo=firefox) +![Safari](https://img.shields.io/badge/Safari-last+2-blue?logo=safari) + ## 主题组件 为了平衡 FixIt 主题的 **简洁性** 和 **可扩展性**,我们额外开发了一系列 [Hugo 主题组件](https://fixit.lruihao.cn/zh-cn/ecosystem/#-组件) 供用户选择。 diff --git a/assets/js/core/event-bus.ts b/assets/js/core/event-bus.ts index 53d16aa7..9ff0b877 100644 --- a/assets/js/core/event-bus.ts +++ b/assets/js/core/event-bus.ts @@ -15,7 +15,8 @@ export type FixItDocumentEventMap = { [K in keyof FixItEventMap]: CustomEvent } -type Handler = T extends void +/** Event handler type — infers the correct signature from the event payload. */ +export type Handler = T extends void ? (() => void) | ((event: CustomEvent) => void) : (event: CustomEvent) => void diff --git a/assets/scss/_variables.scss b/assets/scss/_variables.scss index 849abb26..e0d14f00 100644 --- a/assets/scss/_variables.scss +++ b/assets/scss/_variables.scss @@ -8,6 +8,14 @@ @forward "hugo:vars"; @forward "hugo:vars/internal"; +/// CSS variable prefix for all custom properties. +/// @type String $prefix: fi- !default; + +/// Root prefix for CSS custom properties (derived from $prefix). +/// @type String $rootPrefix: --#{$prefix} !default; + +/// Default header height. +/// @type Length $header-height: 3.5rem !default; diff --git a/assets/scss/core/maps/_admonition.scss b/assets/scss/core/maps/_admonition.scss index 03503808..3653dd55 100644 --- a/assets/scss/core/maps/_admonition.scss +++ b/assets/scss/core/maps/_admonition.scss @@ -1,4 +1,5 @@ -// Color map of admonitions +/// Color map of admonitions. +/// @type Map $admonition-color-map: ( note: ( color: #448aff, diff --git a/assets/scss/core/maps/_alert.scss b/assets/scss/core/maps/_alert.scss index 0be4ed2c..b85b74ad 100644 --- a/assets/scss/core/maps/_alert.scss +++ b/assets/scss/core/maps/_alert.scss @@ -1,4 +1,5 @@ -// Color map of basic alerts +/// Color map of GitHub-style alerts (light theme). +/// @type Map $alert-color-map: ( note: ( border-color: #0969da, @@ -22,6 +23,8 @@ $alert-color-map: ( ), ) !default; +/// Color map of GitHub-style alerts (dark theme). +/// @type Map $alert-color-map-dark: ( note: ( border-color: #316dca, diff --git a/assets/scss/core/maps/_chroma-lexers.scss b/assets/scss/core/maps/_chroma-lexers.scss index f34ad830..2a52f925 100644 --- a/assets/scss/core/maps/_chroma-lexers.scss +++ b/assets/scss/core/maps/_chroma-lexers.scss @@ -1,6 +1,6 @@ /// Map of code identifiers/languages to Chroma supported languages. /// This file is auto-generated by `pnpm gen:lexers`, do not edit manually. -/// @see https://github.com/hugo-fixit/FixIt/tree/main/packages/chroma-lexers +/// See: https://github.com/hugo-fixit/FixIt/tree/main/packages/chroma-lexers $chroma-lexers: ( "🔥": "Mojo", "1s": "OnesEnterprise", diff --git a/assets/scss/core/maps/_colors.scss b/assets/scss/core/maps/_colors.scss index a8b25a60..37d659f3 100644 --- a/assets/scss/core/maps/_colors.scss +++ b/assets/scss/core/maps/_colors.scss @@ -1,4 +1,5 @@ -// Theme colors map +/// Theme semantic color tokens. +/// @type Map $theme-colors: ( 'primary': #1677ff, 'secondary': #8b949e, diff --git a/assets/scss/core/mixins/_compatibility.scss b/assets/scss/core/mixins/_compatibility.scss index 06586b1e..87772912 100644 --- a/assets/scss/core/mixins/_compatibility.scss +++ b/assets/scss/core/mixins/_compatibility.scss @@ -1,6 +1,8 @@ @use "core/functions" as *; -// TODO Superseded by text-wrap: wrap; in modern browsers +/// Apply word-wrap and overflow-wrap for cross-browser compatibility. +/// TODO Superseded by `text-wrap: wrap;` in modern browsers. +/// @param {String} $value - Wrap value (e.g. `break-word`) @mixin overflow-wrap($value) { word-wrap: $value; overflow-wrap: $value; @@ -43,6 +45,9 @@ } } +/// Apply a focus-visible ring outline using a pseudo-element. +/// @param {Length} $size [$size: 1.3em] - Size of the focus ring +/// @param {Length} $offset [$offset: 0.2rem] - Offset from the element @mixin focus-visible-ring($size: 1.3em, $offset: 0.2rem) { &:focus-visible { outline: none; diff --git a/assets/scss/core/mixins/_inline-code.scss b/assets/scss/core/mixins/_inline-code.scss index 25521c1b..1efe2e73 100644 --- a/assets/scss/core/mixins/_inline-code.scss +++ b/assets/scss/core/mixins/_inline-code.scss @@ -2,6 +2,7 @@ @use "border-radius" as *; @use "compatibility" as *; +/// Shared inline code styles using theme CSS variables. @mixin inline-code() { padding: 0.2em 0.4em; margin: 0; diff --git a/assets/scss/core/mixins/_loading.scss b/assets/scss/core/mixins/_loading.scss index 5b492fca..fa17f54d 100644 --- a/assets/scss/core/mixins/_loading.scss +++ b/assets/scss/core/mixins/_loading.scss @@ -1,7 +1,7 @@ @use "core/functions" as *; @use "z-index" as *; -// Loading Mixin for before/after pseudo element +/// Loading pseudo-element styles for async content. @mixin loading { content: ''; position: absolute; diff --git a/assets/scss/core/mixins/_media.scss b/assets/scss/core/mixins/_media.scss index 888d68a9..fb9e0c93 100644 --- a/assets/scss/core/mixins/_media.scss +++ b/assets/scss/core/mixins/_media.scss @@ -11,6 +11,8 @@ @use "sass:map"; @use "sass:list"; +/// Responsive breakpoints map for the `media` mixin. +/// @type Map $breakpoints: ( 'xs': null, 'sm': 680px, diff --git a/assets/scss/core/mixins/_scrollbar-width.scss b/assets/scss/core/mixins/_scrollbar-width.scss index 83ee8c20..9438b0b7 100644 --- a/assets/scss/core/mixins/_scrollbar-width.scss +++ b/assets/scss/core/mixins/_scrollbar-width.scss @@ -1,5 +1,8 @@ @use "theme-vars" as *; +/// Set scrollbar width CSS custom properties. +/// @param {String} $width [$width: thin] - Scrollbar width value +/// @param {Length} $widthLegacy [$widthLegacy: 12px] - Legacy scrollbar width @mixin scrollbar-width($width: thin, $widthLegacy: 12px) { @include set-fi-vars(( scrollbar-width: $width, diff --git a/assets/scss/core/mixins/_theme-switch.scss b/assets/scss/core/mixins/_theme-switch.scss index 18d16f14..d950c45d 100644 --- a/assets/scss/core/mixins/_theme-switch.scss +++ b/assets/scss/core/mixins/_theme-switch.scss @@ -1,8 +1,11 @@ @use "variables" as *; -// Shared defaults for theme-switch icon motion. -// Keep them overridable so other entries can reuse the same mixin with different pacing. +/// Duration of the theme-switch icon animation. +/// @type Time $theme-switch-animation-duration: 0.5s !default; + +/// Easing function for the theme-switch icon animation. +/// @type String $theme-switch-animation-easing: cubic-bezier(0.22, 1, 0.36, 1) !default; /// Bind a theme mode selector to an icon glyph and its matching animation. diff --git a/assets/scss/core/mixins/_z-index.scss b/assets/scss/core/mixins/_z-index.scss index 248ea608..38c274cf 100644 --- a/assets/scss/core/mixins/_z-index.scss +++ b/assets/scss/core/mixins/_z-index.scss @@ -1,5 +1,7 @@ @use "sass:map"; +/// Z-index scale for consistent layering across the theme. +/// @type Map $z-indexes: ( "hide": -1, "auto": auto, diff --git a/hugo.toml b/hugo.toml index 7fd8754e..05f882f9 100644 --- a/hugo.toml +++ b/hugo.toml @@ -676,7 +676,7 @@ wrapper = true cdn = "https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.esm.min.mjs" # ZenUML ESM module CDN source. # You can set it to a CDN source to enable ZenUML support. -# Example: `https://cdn.jsdelivr.net/npm/@mermaid-js/mermaid-zenuml/dist/mermaid-zenuml.esm.min.mjs`. +# Example: `https://cdn.jsdelivr.net/npm/@mermaid-js/mermaid-zenuml/dist/mermaid-zenuml.esm.min.mjs` zenuml = "" # For values, See: [Available Themes](https://mermaid.js.org/config/theming.html#available-themes). themes = [ @@ -692,7 +692,7 @@ look = "handDrawn" # Specifies the font to be used in the rendered diagrams. font_family = "" # Layout loaders from ESM module CDN sources (e.g., ELK layout engine). -# Example: ["https://cdn.jsdelivr.net/npm/@mermaid-js/layout-elk/dist/mermaid-layout-elk.esm.min.mjs"]. +# Example: ["https://cdn.jsdelivr.net/npm/@mermaid-js/layout-elk/dist/mermaid-layout-elk.esm.min.mjs"] # This will enable additional layout options: ["elk", "elk.layered", "elk.stress", "elk.force", "elk.mrtree"]. layout_loaders = [] # Default layout algorithm for rendering diagrams. @@ -859,9 +859,9 @@ user_desc = "" # DOM container to be blacked out, e.g. [".aplayer"] black_dom = [] # only for iframe mode -# Example: "375px". +# Example: "375px" frame_width = "" -# Example: "600px". +# Example: "600px" frame_height = "" # Only for magic mode. user_icon = "" @@ -1163,21 +1163,21 @@ lazy_load = true [params.library] # Load some CSS from local assets. -# Example: someCSS = "css/some.css". +# Example: `someCSS = "css/some.css"` # Load some CSS from remote CDN. -# Example: someCSS = "https://cdn.example.com/some.css". +# Example: `someCSS = "https://cdn.example.com/some.css"` [params.library.css] # Load some JS from local assets. -# Example: someJS = "js/some.js". +# Example: `someJS = "js/some.js"` # Load some JS from remote CDN. -# Example: someJS = "https://cdn.example.com/some.js". +# Example: `someJS = "https://cdn.example.com/some.js"` [params.library.js] # +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # Public Git repository information only then enableGitInfo is true. [params.git_info] -# Example: "https://github.com/hugo-fixit/docs". +# Example: `"https://github.com/hugo-fixit/docs"` repo = "" branch = "main" # The content directory path relative to the root of the repository. @@ -1373,7 +1373,7 @@ enable = false animate = true icon = "fa-solid fa-heartbeat" pre = "" -# Example: "2021-12-18T16:15:22+08:00". +# Example: "2021-12-18T16:15:22+08:00" value = "" # Footer lines order. diff --git a/layouts/_partials/base/head/css.html b/layouts/_partials/base/head/css.html index 6f9e7288..0bcf4615 100644 --- a/layouts/_partials/base/head/css.html +++ b/layouts/_partials/base/head/css.html @@ -4,7 +4,7 @@ Loads the main stylesheet (every page) and conditionally loads page-specific CSS based on .Kind, .Layout, and .RelPermalink. - Called from: base/head/index.html + Called from: `base/head/index.html` */ -}} {{- $scssVars := partialCached "function/scss-vars.html" . -}} diff --git a/layouts/_partials/function/camel-case-keys.html b/layouts/_partials/function/camel-case-keys.html index b4ff7be7..f4b8c779 100644 --- a/layouts/_partials/function/camel-case-keys.html +++ b/layouts/_partials/function/camel-case-keys.html @@ -24,7 +24,7 @@ @example // Practical usage in templates - {{- $siteParams := partial "function/camel-case-keys.html" .Site.Params }} + {{- $siteParams := partial "function/camel-case-keys.html" .Site.Params -}} */ -}} {{- $input := . | default dict -}} {{- $output := dict -}} diff --git a/layouts/_partials/function/camel-case.html b/layouts/_partials/function/camel-case.html index bda38357..4aa380ea 100644 --- a/layouts/_partials/function/camel-case.html +++ b/layouts/_partials/function/camel-case.html @@ -5,7 +5,9 @@ @param {String} . - The snake_case string @return {String} The camelCase string - @example "max_shown_lines" -> "maxShownLines" + @example + // "max_shown_lines" -> "maxShownLines" + {{- partial "function/camel-case.html" "max_shown_lines" -}} */ -}} {{- $parts := split . "_" -}} {{- $result := index $parts 0 -}} diff --git a/layouts/_partials/function/escapeurl.html b/layouts/_partials/function/escapeurl.html index 52ec2711..dd66d4dc 100644 --- a/layouts/_partials/function/escapeurl.html +++ b/layouts/_partials/function/escapeurl.html @@ -1,5 +1,8 @@ -{{- /* Escape url special characters to query format, e.g: `#` -> `%23` */ -}} -{{- /* https://github.com/hugo-fixit/FixIt/issues/245 */ -}} +{{- /* + Escape URL special characters to query format, e.g: `#` -> `%23` + + See: https://github.com/hugo-fixit/FixIt/issues/245 +*/ -}} {{- $content := . -}} {{- $content = replace $content "#" "%23" -}} diff --git a/layouts/_partials/function/get-cover.html b/layouts/_partials/function/get-cover.html index 85dc5c84..b9d94a78 100644 --- a/layouts/_partials/function/get-cover.html +++ b/layouts/_partials/function/get-cover.html @@ -21,8 +21,9 @@ @example {{- $cover := dict "Page" . | partial "function/get-cover.html" -}} - {{- with $cover.URL }}{{ end -}} + {{- with $cover.URL -}}{{- end -}} + @example {{- $cover := dict "Page" . "Preview" true | partial "function/get-cover.html" -}} {{- dict "Src" $cover.URL "Resources" .Resources "Matches" $cover.Matches | partial "plugin/image.html" -}} */ -}} diff --git a/layouts/_partials/function/suffix-validation.html b/layouts/_partials/function/suffix-validation.html index ebd21096..49b9defa 100644 --- a/layouts/_partials/function/suffix-validation.html +++ b/layouts/_partials/function/suffix-validation.html @@ -1,7 +1,12 @@ -{{- /* -Example: -{{- $suffixList := slice ".jpeg" ".jpg" ".png" ".gif" ".bmp" ".tif" ".tiff" ".webp" ".avif" ".svg" -}} -{{- $suffixValid := (dict "Path" .Path "Suffixes" $suffixList | partial "function/suffix-validation.html") -}} +{{- /* + Validate if the given path has a valid suffix. + @param Path string The path to validate. + @param Suffixes []string The list of valid suffixes. + @return bool True if the path has a valid suffix, false otherwise. + + @example + {{- $suffixList := slice ".jpeg" ".jpg" ".png" ".gif" ".bmp" ".tif" ".tiff" ".webp" ".avif" ".svg" -}} + {{- $suffixValid := (dict "Path" .Path "Suffixes" $suffixList | partial "function/suffix-validation.html") -}} */ -}} {{- $url := urls.Parse .Path -}} {{- $path := path.Clean ((printf "%v%v" $url.Host $url.Path) | lower) -}} diff --git a/layouts/_partials/plugin/icon.html b/layouts/_partials/plugin/icon.html index 33739bcd..14ce5bd5 100644 --- a/layouts/_partials/plugin/icon.html +++ b/layouts/_partials/plugin/icon.html @@ -1,9 +1,9 @@ {{- /* Icon renderer for Font Awesome classes and SVG sources. - - Renders element when Class is provided. + - Renders `` element when `.Class` is provided. - Resolves local SVG resources or external SVG URL fallback. - Supports Simple Icons shorthand by icon name. - @param {String} [.Class] - Icon class name for + @param {String} [.Class] - Icon class name for `` @param {String} [.Src] - SVG source path or URL @param {String} [.Simpleicons] - Simple-icons icon name @param {String} [.Prefix] - Custom prefix for simple-icons source path diff --git a/layouts/_partials/plugin/social.html b/layouts/_partials/plugin/social.html index 21c975f0..6dd3f8c0 100644 --- a/layouts/_partials/plugin/social.html +++ b/layouts/_partials/plugin/social.html @@ -1,6 +1,6 @@ {{- /* Social profile link helper. - - Builds destination from explicit Url or from Prefix/Template/Id. + - Builds destination from explicit URL or from Prefix/Template/Id. - Delegates final rendering to plugin/link.html with rel=me. @param {String} [.Url] - Explicit target URL @param {String} [.Template] - URL template containing one %%v placeholder diff --git a/layouts/_partials/plugin/style.html b/layouts/_partials/plugin/style.html index 3ab6cfe2..8b3efc43 100644 --- a/layouts/_partials/plugin/style.html +++ b/layouts/_partials/plugin/style.html @@ -1,6 +1,6 @@ {{- /* Stylesheet tag renderer. - - Accepts direct HTML, a pre-built resource, or builds from source path. + - Accepts direct `` HTML, a pre-built resource, or builds from source path. - Supports template execution, optional toCSS, minify/fingerprint, and preload mode. @param {String} [.Source] - Stylesheet URL/path; if starts with "` — Write output to file (default: stdout) +- `-t, --template ` — Inject docs between `` and `` markers in the template file + +### `partials` + +Generates Hugo partials reference from `layouts/_partials/`. + +Options: + +- `-o, --output ` — Write output to file (default: stdout) +- `-t, --template ` — Inject docs between `` and `` markers in the template file + +## Default Output + +When run without a subcommand, generates both config and partials docs (injects into `en` docs templates). + +## Architecture + +```text +src/ + index.ts # CLI entry point (commander) + parsers/ + config-parser.ts # TOML parser for hugo.toml + partial-parser.ts # HTML comment parser for layouts/_partials/ + renderers/ + config.ts # -> config.md + partials.ts # -> partials.md +``` diff --git a/packages/gen-docs/package.json b/packages/gen-docs/package.json new file mode 100644 index 00000000..93c5228a --- /dev/null +++ b/packages/gen-docs/package.json @@ -0,0 +1,17 @@ +{ + "name": "@hugo-fixit/gen-docs", + "private": true, + "description": "Generate API reference documentation from FixIt source files", + "author": "Lruihao", + "main": "src/index.ts", + "scripts": { + "start": "tsx src/index.ts" + }, + "devDependencies": { + "@hugo-fixit/shared": "workspace:*", + "commander": "^14.0.3", + "picocolors": "^1.1.1", + "toml": "^3.0.0", + "typescript": "^6.0.3" + } +} diff --git a/packages/gen-docs/src/index.ts b/packages/gen-docs/src/index.ts new file mode 100644 index 00000000..0d35078d --- /dev/null +++ b/packages/gen-docs/src/index.ts @@ -0,0 +1,199 @@ +import fs from 'node:fs' +import path from 'node:path' +import process from 'node:process' +import { consola, fromRoot } from '@hugo-fixit/shared' +import { Command } from 'commander' +import c from 'picocolors' +import { applyTemplate, generateDocs } from './parsers/config-parser' +import { parsePartials } from './parsers/partial-parser' +import { renderConfigStandalone } from './renderers/config' +import { generatePartialsDocs } from './renderers/partials' + +function writeFile(filePath: string, content: string): void { + fs.writeFileSync(filePath, content, 'utf-8') + consola.success(`Written ${c.cyan(filePath)}`) +} + +// ─── Partials helpers ─── + +const PARTIALS_START = '' +const PARTIALS_END = '' + +function applyPartialsTemplate(body: string, templatePath: string, outputPath?: string, command?: string): void { + const template = fs.readFileSync(templatePath, 'utf-8') + const startIdx = template.indexOf(PARTIALS_START) + const endIdx = template.indexOf(PARTIALS_END) + + if (startIdx === -1 || endIdx === -1) { + throw new Error(`Markers not found in template file. Expected both "${PARTIALS_START}" and "${PARTIALS_END}".`) + } + if (startIdx > endIdx) { + throw new Error('START marker appears after END marker in template file.') + } + + const before = template.slice(0, startIdx + PARTIALS_START.length) + const after = template.slice(endIdx) + const comment = command + ? `\n\n` + : '' + const result = `${before}\n${comment}${body}\n${after}` + + const dest = outputPath || templatePath + fs.writeFileSync(dest, result, 'utf-8') +} + +function generatePartialsAction(options: { output?: string, template?: string }): void { + const groups = parsePartials() + const body = generatePartialsDocs(groups) + + if (options.template) { + const templatePath = path.resolve(process.cwd(), options.template) + if (!fs.existsSync(templatePath)) { + consola.error(`Template not found: ${templatePath}`) + process.exit(1) + } + const outputPath = options.output ? path.resolve(process.cwd(), options.output) : undefined + let cmd = `pnpm gen:docs partials -t ${options.template}` + if (options.output) + cmd += ` -o ${options.output}` + applyPartialsTemplate(body, templatePath, outputPath, cmd) + const dest = outputPath || templatePath + consola.success(`Partials docs applied: ${c.cyan(dest)}`) + return + } + + if (options.output) { + const outPath = path.resolve(process.cwd(), options.output) + fs.writeFileSync(outPath, body, 'utf-8') + consola.success(`Written ${c.cyan(outPath)}`) + return + } + + // Default: inject into en docs template + const templatePath = fromRoot('../fixit-docs/content/en/references/partials/index.md') + applyPartialsTemplate(body, templatePath, undefined, 'pnpm gen:docs') +} + +// ─── Subcommands ─── + +async function configAction( + file: string, + options: { output?: string, template?: string }, +): Promise { + let source = file + let content: string + + if (source === 'latest') { + consola.start('Resolving latest FixIt release version...') + try { + const res = await fetch('https://api.github.com/repos/hugo-fixit/FixIt/releases/latest', { + headers: { + 'User-Agent': 'gen-docs', + ...(process.env.GITHUB_TOKEN && { Authorization: `Bearer ${process.env.GITHUB_TOKEN}` }), + }, + }) + if (!res.ok) + throw new Error(`HTTP ${res.status}`) + const { tag_name: version } = await res.json() as { tag_name: string } + source = `https://raw.githubusercontent.com/hugo-fixit/FixIt/refs/tags/${version}/hugo.toml` + consola.success(`Resolved latest release: ${c.cyan(version)}`) + } + catch (error) { + consola.error(`Failed to resolve latest release: ${(error as Error).message}`) + process.exit(1) + } + } + + if (/^https?:\/\//i.test(source)) { + consola.start(`Downloading from: ${c.cyan(source)}`) + try { + const res = await fetch(source) + if (!res.ok) + throw new Error(`HTTP ${res.status}`) + content = await res.text() + consola.success('Remote file downloaded.') + } + catch (error) { + consola.error(`Failed to download: ${(error as Error).message}`) + process.exit(1) + } + } + else { + const inputPath = source === 'hugo.toml' ? fromRoot('hugo.toml') : path.resolve(process.cwd(), source) + if (!fs.existsSync(inputPath)) { + consola.error(`File not found: ${inputPath}`) + process.exit(1) + } + content = fs.readFileSync(inputPath, 'utf-8') + } + + if (options.template) { + const templatePath = path.resolve(process.cwd(), options.template) + if (!fs.existsSync(templatePath)) { + consola.error(`Template file not found: ${templatePath}`) + process.exit(1) + } + const outputPath = options.output ? path.resolve(process.cwd(), options.output) : undefined + let cmd = `gen-docs config ${file}` + if (options.template) + cmd += ` -t ${options.template}` + if (options.output) + cmd += ` -o ${options.output}` + applyTemplate(content, templatePath, outputPath, cmd) + const dest = outputPath || templatePath + consola.success(`Documentation applied to template: ${c.cyan(dest)}`) + return + } + + const body = generateDocs(content) + if (options.output) { + const outPath = path.resolve(process.cwd(), options.output) + writeFile(outPath, renderConfigStandalone(body)) + } + else { + process.stdout.write(`${body}\n`) + } +} + +function allAction(): void { + // Config API — inject into docs params page + consola.start('Parsing hugo.toml...') + const tomlContent = fs.readFileSync(fromRoot('hugo.toml'), 'utf-8') + const templatePath = fromRoot('../fixit-docs/content/en/documentation/getting-started/configuration/params/index.md') + applyTemplate(tomlContent, templatePath, undefined, 'pnpm gen:docs') + consola.success('Config docs generated!') + + // Partials API — inject into en docs partials page + consola.start('Generating Hugo partials docs...') + generatePartialsAction({}) + consola.success('Partials docs generated!') +} + +// ─── CLI ─── + +const program = new Command() + +program + .name('gen-docs') + .description('Generate API reference documentation for the FixIt Hugo theme') + +program + .command('config') + .description('Generate configuration reference from hugo.toml') + .argument('[file]', 'Input hugo.toml path, URL, or "latest"', 'hugo.toml') + .option('-o, --output ', 'Output file path (default: stdout)') + .option('-t, --template ', 'Template file with HUGO_FIXIT_PARAMS markers to inject docs into') + .action(configAction) + +program + .command('partials') + .description('Generate Hugo partials reference from layouts/_partials/') + .option('-o, --output ', 'Output file path (default: stdout)') + .option('-t, --template ', 'Template file with HUGO_FIXIT_PARTIALS markers to inject docs into') + .action(generatePartialsAction) + +// Default action (no subcommand): inject config + partials docs into docs pages +program + .action(() => allAction()) + +program.parse() diff --git a/packages/gen-docs/src/parsers/config-parser.ts b/packages/gen-docs/src/parsers/config-parser.ts new file mode 100644 index 00000000..63fddba8 --- /dev/null +++ b/packages/gen-docs/src/parsers/config-parser.ts @@ -0,0 +1,568 @@ +import fs from 'node:fs' +import { fromRoot } from '@hugo-fixit/shared' +import toml from 'toml' + +interface ParamDoc { + name: string + type: string + defaultValue: string + description: string + children: ParamDoc[] + isTable: boolean + isArray: boolean + rawValue: unknown +} + +function isSeparatorComment(text: string): boolean { + return /^[-=+]{3,}$/.test(text.trim()) + || /^[-=]{20,}\s*$/.test(text.trim()) + || /^\+{20,}\s*$/.test(text.trim()) + || /\s+#$/.test(text.trim()) +} + +function isHardSeparator(text: string): boolean { + return /^[-=]{20,}\s*$/.test(text.trim()) + || /^\+{20,}\s*$/.test(text.trim()) +} + +function extractComments(content: string): { commentMap: Map, sectionCommentMap: Map, pageLevelStartKey: string, pageLevelEndKey: string } { + const commentMap = new Map() + const sectionCommentMap = new Map() + const lines = content.split('\n') + const pendingComments: string[] = [] + const sectionStack: string[] = [] + + let inParams = false + let sectionCommentCount = 0 + let afterHardSeparator = false + let pageLevelStartKey = '' + let pageLevelEndKey = '' + + for (let i = 0; i < lines.length; i++) { + const line = lines[i] + const trimmed = line.trim() + + const sectionMatch = trimmed.match(/^\[([^\]]+)\]$/) + if (sectionMatch) { + const key = sectionMatch[1] + if (key === 'params') { + inParams = true + sectionStack.length = 0 + sectionStack.push('params') + pendingComments.length = 0 + sectionCommentCount = 0 + continue + } + if (inParams && key.startsWith('params.')) { + if (afterHardSeparator && !pageLevelEndKey && pageLevelStartKey) { + pageLevelEndKey = key.split('.')[1] + afterHardSeparator = false + } + // Collect section-level comments for empty sections. + // Walk backward from the section header and collect contiguous comment lines. + // Skip blank lines between the section header and comments. + const sectionPath = key.split('.').slice(1).join('.') + let scanIdx = i - 1 + const sectionComments: string[] = [] + // Skip blank lines immediately before the section header + let hasBlankBeforeComments = false + while (scanIdx >= 0 && lines[scanIdx].trim() === '') { + hasBlankBeforeComments = true + scanIdx-- + } + // Collect comment lines + while (scanIdx >= 0 && lines[scanIdx].trim().startsWith('#')) { + sectionComments.unshift(lines[scanIdx].trim().replace(/^#\s?/, '')) + scanIdx-- + } + if (sectionComments.length > 0) { + const prevIsSection = scanIdx >= 0 && /^\[[^\]]+\]$/.test(lines[scanIdx].trim()) + // Key rule: if there's NO blank line between the section header and the + // comments above it, the comments are section-level for this section. + // If there IS a blank line, the comments are trailing content from the + // previous section (e.g., examples) and should not be assigned here. + if (!hasBlankBeforeComments && prevIsSection) { + sectionCommentMap.set(sectionPath, sectionComments) + } + else if (!prevIsSection) { + // Comments preceded by non-section content or start-of-file + sectionCommentMap.set(sectionPath, sectionComments) + } + } + let splitIdx = pendingComments.length + let foundSplitPoint = false + for (let j = i - 1; j >= 0; j--) { + const prevLine = lines[j].trim() + if (prevLine === '') { + foundSplitPoint = true + break + } + if (prevLine.startsWith('#')) { + splitIdx-- + continue + } + foundSplitPoint = true + break + } + if (foundSplitPoint && splitIdx > 0 && sectionStack.length > 1) { + const sectionKey = sectionStack.slice(1).join('.') + commentMap.set(sectionKey, pendingComments.slice(0, splitIdx)) + } + const trailing = pendingComments.slice(splitIdx) + pendingComments.length = 0 + pendingComments.push(...trailing) + sectionCommentCount = trailing.length + const parts = key.split('.') + sectionStack.length = 0 + sectionStack.push(...parts) + continue + } + if (inParams) { + const rootKey = key.split('.')[0] + const nonParamsSections = ['menus', 'markup', 'outputs', 'taxonomies', 'related', 'frontmatter', 'imaging', 'module', 'sitemap', 'minify', 'caches', 'security'] + if (nonParamsSections.includes(rootKey)) { + inParams = false + sectionStack.length = 0 + pendingComments.length = 0 + continue + } + let splitIdx = pendingComments.length + for (let j = i - 1; j >= 0; j--) { + const prevLine = lines[j].trim() + if (prevLine === '') + break + if (prevLine.startsWith('#')) { + splitIdx-- + continue + } + break + } + if (splitIdx > 0 && sectionStack.length > 1) { + const sectionKey = sectionStack.slice(1).join('.') + commentMap.set(sectionKey, pendingComments.slice(0, splitIdx)) + } + const trailing = pendingComments.slice(splitIdx) + pendingComments.length = 0 + pendingComments.push(...trailing) + sectionStack.length = Math.min(sectionStack.length, 1) + sectionStack.push(key) + continue + } + continue + } + + if (!inParams) + continue + + if (trimmed.startsWith('#')) { + const commentText = trimmed.replace(/^#\s?/, '') + if (isSeparatorComment(commentText)) { + if (isHardSeparator(commentText)) { + pendingComments.length = 0 + afterHardSeparator = true + } + continue + } + pendingComments.push(commentText) + continue + } + + if (trimmed === '') { + continue + } + + const kvMatch = trimmed.match(/^(\w+)\s*=/) + if (kvMatch && sectionStack.length > 0) { + const keyName = kvMatch[1] + const fullPath = [...sectionStack.slice(1), keyName].join('.') + if (afterHardSeparator && !pageLevelStartKey && sectionStack.length === 1) { + pageLevelStartKey = keyName + afterHardSeparator = false + } + if (sectionStack.length > 1 && pendingComments.length > 0) { + const sectionKey = sectionStack.slice(1).join('.') + if (!commentMap.has(sectionKey) && sectionCommentCount > 0) { + commentMap.set(sectionKey, pendingComments.slice(0, sectionCommentCount)) + pendingComments.splice(0, sectionCommentCount) + } + sectionCommentCount = 0 + } + if (pendingComments.length > 0) { + commentMap.set(fullPath, [...pendingComments]) + pendingComments.length = 0 + } + } + + const arrayMatch = trimmed.match(/^\[\[(\w+(?:\.\w+)*)\]\]$/) + if (arrayMatch && inParams) { + const keyPath = arrayMatch[1] + const fullPath = [...sectionStack.slice(1), keyPath].join('.') + if (pendingComments.length > 0) { + commentMap.set(fullPath, [...pendingComments]) + pendingComments.length = 0 + } + } + } + + return { commentMap, sectionCommentMap, pageLevelStartKey, pageLevelEndKey } +} + +function detectType(value: unknown): string { + if (value === null || value === undefined) + return 'string' + if (typeof value === 'boolean') + return 'bool' + if (typeof value === 'number') + return Number.isInteger(value) ? 'int' : 'float' + if (typeof value === 'string') + return 'string' + if (Array.isArray(value)) { + if (value.length === 0) + return 'string array' + return `${detectType(value[0])} array` + } + if (typeof value === 'object') + return 'map' + return 'string' +} + +function formatDefault(value: unknown): string { + if (value === null || value === undefined) + return '' + if (typeof value === 'string') + return value === '' ? '`""`' : `\`${JSON.stringify(value)}\`` + if (typeof value === 'boolean') + return `\`${value}\`` + if (typeof value === 'number') + return `\`${value}\`` + if (Array.isArray(value)) { + if (value.length === 0) + return '`[]`' + return `\`${JSON.stringify(value)}\`` + } + return '' +} + +function formatTomlValue(value: unknown): string { + if (value === null || value === undefined) + return '""' + if (typeof value === 'string') + return JSON.stringify(value) + if (typeof value === 'boolean') + return String(value) + if (typeof value === 'number') + return String(value) + if (Array.isArray(value)) { + if (value.length === 0) + return '[]' + return JSON.stringify(value) + } + return '""' +} + +function isExampleLine(line: string): boolean { + return /^\s*(?:"[^"]*"|'[^']*'|[\w.-]+)\s*=\s*.+/.test(line) +} + +function joinComments(comments: string[]): string { + if (comments.length === 0) + return '' + const filtered = comments.filter(c => c.trim() !== '') + if (filtered.length === 0) + return '' + const sentences = filtered.map((line) => { + const trimmed = line.trim() + if (isExampleLine(trimmed)) { + return `Example: \`${trimmed}\`.` + } + let s = trimmed + if (!s.startsWith('http://') && !s.startsWith('https://')) { + s = s.charAt(0).toUpperCase() + s.slice(1) + } + if (!s.endsWith('.') && !s.endsWith('!') && !s.endsWith('?')) + s += '.' + return s + }) + return sentences.join(' ') +} + +function documentSection( + obj: Record, + commentMap: Map, + parentPath: string, + sectionCommentMap?: Map, +): ParamDoc[] { + const docs: ParamDoc[] = [] + const seenKeys = new Set() + + for (const [key, value] of Object.entries(obj)) { + const fullPath = parentPath ? `${parentPath}.${key}` : key + const comments = commentMap.get(fullPath) || [] + // Fall back to section-level comments if no key-level comments + const sectionComments = sectionCommentMap?.get(fullPath) + const effectiveComments = comments.length > 0 ? comments : (sectionComments || []) + const type = detectType(value) + const isTable = typeof value === 'object' && !Array.isArray(value) && value !== null + const isArray = Array.isArray(value) + + const doc: ParamDoc = { + name: key, + type, + defaultValue: formatDefault(value), + description: joinComments(effectiveComments), + children: [], + isTable, + isArray, + rawValue: value, + } + + if (isTable && !isArray) { + doc.children = documentSection( + value as Record, + commentMap, + fullPath, + sectionCommentMap, + ) + } + + docs.push(doc) + seenKeys.add(key) + } + + // Add placeholder entries for empty sections that have section-level comments + if (sectionCommentMap) { + for (const [sectionPath, comments] of sectionCommentMap) { + const prefix = parentPath ? `${parentPath}.` : '' + if (sectionPath.startsWith(prefix) && !sectionPath.slice(prefix.length).includes('.')) { + const key = sectionPath.slice(prefix.length) + if (key && !seenKeys.has(key)) { + docs.push({ + name: key, + type: 'map', + defaultValue: '', + description: joinComments(comments), + children: [], + isTable: true, + isArray: false, + rawValue: {}, + }) + seenKeys.add(key) + } + } + } + } + + return docs +} + +function rawDefault(doc: ParamDoc): string { + const val = doc.defaultValue.replace(/`/g, '') + return val || '""' +} + +function renderTomlBlock(doc: ParamDoc, lines: string[], sectionPath: string): void { + lines.push(`[params.${sectionPath}]`) + + for (const child of doc.children) { + if (child.isTable) { + lines.push('') + lines.push(`[params.${sectionPath}.${child.name}]`) + for (const grandchild of child.children) { + if (grandchild.isTable) { + lines.push('') + lines.push(`[params.${sectionPath}.${child.name}.${grandchild.name}]`) + for (const gg of grandchild.children) { + lines.push(`${gg.name} = ${rawDefault(gg)}`) + } + } + else { + lines.push(`${grandchild.name} = ${rawDefault(grandchild)}`) + } + } + } + else if (child.isArray && Array.isArray(child.rawValue) && child.rawValue.length > 0 && typeof child.rawValue[0] === 'object') { + for (const item of child.rawValue) { + lines.push('') + lines.push(`[[params.${sectionPath}.${child.name}]]`) + for (const [k, v] of Object.entries(item as Record)) { + lines.push(`${k} = ${formatTomlValue(v)}`) + } + } + } + else { + lines.push(`${child.name} = ${rawDefault(child)}`) + } + } +} + +function renderChildren(children: ParamDoc[], lines: string[]): void { + for (const child of children) { + let meta = `\`${child.type}\`` + const desc = child.description.replace(/\.$/, '') + if (child.defaultValue && child.type !== 'map') { + meta += desc ? ` ${desc}. Default is ${child.defaultValue}.` : ` Default is ${child.defaultValue}.` + } + else if (desc) { + meta += ` ${desc}.` + } + + lines.push(child.name) + lines.push(`: ${meta}`) + lines.push('') + + if (child.children.length > 0) { + for (const grandchild of child.children) { + let gcMeta = `\`${grandchild.type}\`` + const gcDesc = grandchild.description.replace(/\.$/, '') + if (grandchild.defaultValue && grandchild.type !== 'map') { + gcMeta += gcDesc ? ` ${gcDesc}. Default is ${grandchild.defaultValue}.` : ` Default is ${grandchild.defaultValue}.` + } + else if (gcDesc) { + gcMeta += ` ${gcDesc}.` + } + lines.push(`- ${grandchild.name}: ${gcMeta}`) + } + lines.push('') + } + } +} + +function renderParam(doc: ParamDoc): string { + const lines: string[] = [] + + let meta = `\`${doc.type}\`` + const desc = doc.description.replace(/\.$/, '') + if (doc.defaultValue && doc.type !== 'map') { + meta += desc ? ` ${desc}. Default is ${doc.defaultValue}.` : ` Default is ${doc.defaultValue}.` + } + else if (desc) { + meta += ` ${desc}.` + } + + lines.push(`### ${doc.name}`) + lines.push('') + lines.push(meta) + + if (doc.children.length > 0) { + lines.push('') + + const hasContent = (children: ParamDoc[]): boolean => + children.some(child => !child.isTable || (child.children.length > 0 && hasContent(child.children))) + const codeBlock = hasContent(doc.children) ? '```toggle' : '```toml' + + lines.push(codeBlock) + lines.push('[params]') + lines.push('') + renderTomlBlock(doc, lines, doc.name) + lines.push('```') + lines.push('') + + renderChildren(doc.children, lines) + } + + while (lines.length > 0 && lines[lines.length - 1].trim() === '') { + lines.pop() + } + return lines.map(line => line.trimEnd()).join('\n') +} + +/** + * Generate theme configuration documentation from TOML content string. + * @param content TOML content string + * @returns Markdown documentation body (no frontmatter) + */ +export function generateDocs(content: string): string { + const parsed = toml.parse(content) + + if (!parsed.params) { + throw new Error('No [params] section found in hugo.toml.') + } + + const { commentMap, sectionCommentMap, pageLevelStartKey, pageLevelEndKey } = extractComments(content) + const params = parsed.params as Record + const docs = documentSection(params, commentMap, '', sectionCommentMap) + + const siteLevel: ParamDoc[] = [] + const pageLevel: ParamDoc[] = [] + let isPageLevel = false + + for (const doc of docs) { + if (pageLevelStartKey && doc.name === pageLevelStartKey) { + isPageLevel = true + } + if (pageLevelEndKey && doc.name === pageLevelEndKey) { + isPageLevel = false + } + if (isPageLevel) { + pageLevel.push(doc) + } + else { + siteLevel.push(doc) + } + } + + const output: string[] = [] + + if (siteLevel.length > 0) { + output.push('## Site Level') + output.push('These apply to the entire site and cannot be overridden on a per-page basis.') + for (const doc of siteLevel) { + output.push(renderParam(doc)) + } + } + + if (pageLevel.length > 0) { + output.push('## Page Level') + output.push('These can be overridden on a per-page basis via front matter.') + for (const doc of pageLevel) { + output.push(renderParam(doc)) + } + } + + return output.join('\n\n').split('\n').map(line => line.trimEnd()).join('\n') +} + +/** + * Convenience: read hugo.toml from the FixIt repo root and generate docs. + */ +export function parseConfig(): string { + const content = fs.readFileSync(fromRoot('hugo.toml'), 'utf-8') + return generateDocs(content) +} + +/** + * Apply generated docs into a template file between markers. + * Replaces content between `` and ``. + * @param tomlContent TOML content string + * @param templatePath Path to the template file + * @param outputPath Optional output path (defaults to overwriting the template file) + * @param command The CLI command that was used to generate the docs + */ +export function applyTemplate(tomlContent: string, templatePath: string, outputPath?: string, command?: string): void { + const template = fs.readFileSync(templatePath, 'utf-8') + const docs = generateDocs(tomlContent) + + const startMarker = '' + const endMarker = '' + + const startIdx = template.indexOf(startMarker) + const endIdx = template.indexOf(endMarker) + + if (startIdx === -1 || endIdx === -1) { + throw new Error(`Markers not found in template file. Expected both "${startMarker}" and "${endMarker}".`) + } + + if (startIdx > endIdx) { + throw new Error('START marker appears after END marker in template file.') + } + + const before = template.slice(0, startIdx + startMarker.length) + const after = template.slice(endIdx) + const comment = command + ? `\n\n` + : '' + const result = `${before}\n${comment}${docs}\n${after}` + + const dest = outputPath || templatePath + fs.writeFileSync(dest, result, 'utf-8') +} diff --git a/packages/gen-docs/src/parsers/partial-parser.ts b/packages/gen-docs/src/parsers/partial-parser.ts new file mode 100644 index 00000000..7110b1c9 --- /dev/null +++ b/packages/gen-docs/src/parsers/partial-parser.ts @@ -0,0 +1,337 @@ +import fs from 'node:fs' +import path from 'node:path' +import { fromRoot } from '@hugo-fixit/shared' + +export interface PartialParam { + name: string + type: string + description: string + children: PartialParam[] +} + +export interface PartialDoc { + name: string + path: string + description: string + params: PartialParam[] + returns: string + examples: string[] +} + +export interface PartialGroup { + name: string + description: string + partials: PartialDoc[] +} + +const GROUP_DESCRIPTIONS: Record = { + _debug: 'Debug utilities for development.', + base: 'Core layout partials (header, footer, breadcrumb, paginator, comment, widgets, assets).', + feed: 'RSS feed generation.', + function: 'Reusable utility and helper function partials.', + gen: 'Generated or config output partials.', + home: 'Homepage-specific partials.', + init: 'Theme initialization partials (version, environment detection, compatibility, global setup).', + plugin: 'Third-party plugin integration partials.', + section: 'Section-level partials.', + single: 'Single-post page partials.', + store: 'Asset accumulation store partials.', +} + +/** + * Extract the leading Hugo comment block from file content. + */ +function extractComment(content: string): string | null { + const match = content.match(/^\{\{-?\s*\/\*[\s\S]*?\*\/\s*-?\}\}/) + if (!match) + return null + // Strip the delimiters: {{- /* at start, */ -}} at end + const inner = match[0] + .replace(/^\{\{-?\s*\/\*\s*/, '') + .replace(/\s*\*\/\s*-?\}\}$/, '') + return inner.trim() +} + +/** + * Split a comment block into sections by @tags. + * Returns an array of {key, lines} pairs, preserving order and duplicates. + */ +function splitByTags(block: string): { key: string, lines: string[] }[] { + const sections: { key: string, lines: string[] }[] = [] + const lines = block.split('\n') + let currentKey = '_desc' + let current: string[] = [] + + function flush() { + if (current.length > 0) { + sections.push({ key: currentKey, lines: [...current] }) + current = [] + } + } + + for (const line of lines) { + const trimmed = line.trim() + const tagMatch = trimmed.match(/^@(param|return|example)\b/) + if (tagMatch) { + flush() + currentKey = tagMatch[1] + current.push(line) + } + else { + current.push(line) + } + } + flush() + + return sections +} + +/** + * Parse `@param {Type} .Name - description` lines from param sections. + */ +function parseParams(paramLines: string[]): PartialParam[] { + const params: PartialParam[] = [] + let current: PartialParam | null = null + + for (const line of paramLines) { + const trimmed = line.trim() + if (!trimmed) + continue + + const paramMatch = trimmed.match(/^@param \{([^}]+)\} (\S+)(?:\s*- (.+))?$/) + if (paramMatch) { + current = { + name: paramMatch[2], + type: paramMatch[1], + description: paramMatch[3] || '', + children: [], + } + params.push(current) + continue + } + + const childMatch = trimmed.match(/^-\s+(\w+): (.*)$/) + if (childMatch && current) { + current.children.push({ + name: childMatch[1], + type: '', + description: childMatch[2].trim(), + children: [], + }) + continue + } + + if (current && !trimmed.startsWith('@')) { + current.description += (current.description ? ' ' : '') + trimmed + } + } + + return params +} + +/** + * Parse `@return {Type} description` from return sections. + */ +function parseReturn(returnLines: string[]): string { + for (const line of returnLines) { + const match = line.trim().match(/@return\s+\{([^}]+)\}\s*(.*)/) + if (match) + return `\`${match[1]}\`${match[2] ? ` - ${match[2].trim()}` : ''}` + } + return '' +} + +/** + * Parse `@example` blocks from example sections. + */ +/** + * Strip common leading whitespace from an array of lines. + */ +function dedent(lines: string[]): string[] { + const nonEmpty = lines.filter(l => l.trim() !== '') + if (nonEmpty.length === 0) + return lines + const minIndent = Math.min(...nonEmpty.map(l => l.match(/^(\s*)/)![1].length)) + return lines.map(l => l.slice(minIndent)) +} + +function parseExamples(exampleLines: string[]): string[] { + const examples: string[] = [] + const current: string[] = [] + let firstLine = true + + for (const line of exampleLines) { + const trimmed = line.trim() + if (firstLine) { + firstLine = false + const inline = trimmed.replace(/^@example\s*/, '') + if (inline) { + examples.push(inline) + continue + } + continue + } + current.push(line) + } + + if (current.length > 0) { + examples.push(dedent(current).join('\n').trim()) + } + + return examples.filter(Boolean) +} + +/** + * Extract description text from the pre-tag section. + * Preserves bullet lists (lines starting with `- `) and paragraph breaks. + */ +function parseDescription(descLines: string[]): string { + const lines = descLines + .map(l => l.trim()) + .filter(l => l !== '---' && !l.startsWith('- .')) + + const result: string[] = [] + let paragraph: string[] = [] + + function flushParagraph() { + if (paragraph.length > 0) { + let text = paragraph.join(' ') + if (text && !/^https?:\/\//i.test(text)) + text = text.charAt(0).toUpperCase() + text.slice(1) + if (text && !/[.!?:]$/.test(text)) + text += '.' + result.push(text) + paragraph = [] + } + } + + for (const line of lines) { + if (line === '') { + flushParagraph() + } + else if (line.startsWith('- ')) { + flushParagraph() + const text = line.slice(2) + const capitalized = /^https?:\/\//i.test(text) ? text : `${text.charAt(0).toUpperCase()}${text.slice(1)}` + result.push(`- ${capitalized}`) + } + else { + paragraph.push(line) + } + } + flushParagraph() + + // Join with double newlines, but consecutive list items use single newlines + let output = '' + for (let i = 0; i < result.length; i++) { + if (i > 0) { + const prevIsList = result[i - 1].startsWith('- ') + const currIsList = result[i].startsWith('- ') + output += (prevIsList && currIsList) ? '\n' : '\n\n' + } + output += result[i] + } + + return output.trim() +} + +/** + * Parse a single partial HTML file into a PartialDoc. + */ +function parsePartialFile(filePath: string, relativePath: string): PartialDoc { + const content = fs.readFileSync(filePath, 'utf-8') + const comment = extractComment(content) + + const doc: PartialDoc = { + name: relativePath, + path: relativePath, + description: '', + params: [], + returns: '', + examples: [], + } + + if (!comment) + return doc + + const sections = splitByTags(comment) + const descLines = sections.filter(s => s.key === '_desc').flatMap(s => s.lines) + const paramLines = sections.filter(s => s.key === 'param').flatMap(s => s.lines) + const returnLines = sections.filter(s => s.key === 'return').flatMap(s => s.lines) + const exampleSections = sections.filter(s => s.key === 'example') + + doc.description = parseDescription(descLines) + doc.params = parseParams(paramLines) + doc.returns = parseReturn(returnLines) + doc.examples = exampleSections.flatMap(s => parseExamples(s.lines)) + + return doc +} + +/** + * Recursively collect all .html files from a directory. + */ +function collectHtmlFiles(dir: string, baseDir: string): { filePath: string, relativePath: string }[] { + const results: { filePath: string, relativePath: string }[] = [] + const entries = fs.readdirSync(dir, { withFileTypes: true }) + + for (const entry of entries) { + const fullPath = path.join(dir, entry.name) + const relativePath = path.relative(baseDir, fullPath) + + if (entry.isDirectory()) { + results.push(...collectHtmlFiles(fullPath, baseDir)) + } + else if (entry.name.endsWith('.html')) { + results.push({ filePath: fullPath, relativePath }) + } + } + + return results +} + +/** + * Parse all Hugo partials from layouts/_partials/ and group by directory. + */ +export function parsePartials(partialsDir?: string): PartialGroup[] { + const dir = partialsDir || fromRoot('layouts/_partials') + + if (!fs.existsSync(dir)) { + throw new Error(`Partials directory not found: ${dir}`) + } + + const files = collectHtmlFiles(dir, dir) + const groupMap = new Map() + + for (const { filePath, relativePath } of files) { + const doc = parsePartialFile(filePath, relativePath) + const dirName = path.dirname(relativePath) + const group = dirName === '.' ? '(root)' : dirName + + if (!groupMap.has(group)) { + groupMap.set(group, []) + } + groupMap.get(group)!.push(doc) + } + + // Sort groups by name, with (root) last + const groups: PartialGroup[] = [] + const sortedKeys = [...groupMap.keys()].sort((a, b) => { + if (a === '(root)') + return 1 + if (b === '(root)') + return -1 + return a.localeCompare(b) + }) + + for (const key of sortedKeys) { + const partials = groupMap.get(key)!.sort((a, b) => a.name.localeCompare(b.name)) + groups.push({ + name: key, + description: GROUP_DESCRIPTIONS[key] || '', + partials, + }) + } + + return groups +} diff --git a/packages/gen-docs/src/renderers/config.ts b/packages/gen-docs/src/renderers/config.ts new file mode 100644 index 00000000..2d32411b --- /dev/null +++ b/packages/gen-docs/src/renderers/config.ts @@ -0,0 +1,42 @@ +function now(): string { + const d = new Date() + const pad = (n: number) => String(n).padStart(2, '0') + return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}T00:00:00+08:00` +} + +export function renderConfig(body: string): string { + const lines: string[] = [] + + lines.push('---') + lines.push('title: Configuration Reference') + lines.push('shortTitle: Configuration') + lines.push(`date: ${now()}`) + lines.push('description: Hugo configuration reference for the FixIt Hugo theme.') + lines.push('collections:') + lines.push(' - References') + lines.push('---') + lines.push('') + lines.push('This page is auto-generated from `hugo.toml`. Do not edit manually.') + lines.push('') + lines.push('') + lines.push('') + lines.push(body) + + return lines.join('\n') +} + +/** + * Render standalone config docs with frontmatter (for CLI -o output). + */ +export function renderConfigStandalone(body: string): string { + const lines: string[] = [] + + lines.push('---') + lines.push('title: FixIt Theme Configuration') + lines.push(`date: ${now()}`) + lines.push('---') + lines.push('') + lines.push(body) + + return lines.join('\n') +} diff --git a/packages/gen-docs/src/renderers/partials.ts b/packages/gen-docs/src/renderers/partials.ts new file mode 100644 index 00000000..da2ea67a --- /dev/null +++ b/packages/gen-docs/src/renderers/partials.ts @@ -0,0 +1,142 @@ +import type { PartialDoc, PartialGroup } from '../parsers/partial-parser' + +/** + * Escape HTML tags in text to prevent them from being rendered as actual HTML. + * Skips content inside backtick code spans. + */ +function escapeHtml(text: string): string { + return text.replace(/`[^`]*`|<[^>]+>/g, (match) => { + if (match.startsWith('`')) + return match + return match.replace(//g, '>') + }) +} + +function renderParamTable(params: PartialDoc['params']): string { + if (params.length === 0) + return '' + + const lines: string[] = [] + lines.push('**Parameters:**') + lines.push('') + lines.push('| Name | Type | Description |') + lines.push('|------|------|-------------|') + + for (const param of params) { + const name = `\`${param.name}\`` + const type = param.type ? `\`${param.type}\`` : '' + const desc = escapeHtml(param.description || '') + lines.push(`| ${name} | ${type} | ${desc} |`) + + for (const child of param.children) { + const childFullName = param.name === '.' ? `.${child.name}` : `${param.name}.${child.name}` + const childName = `\`${childFullName}\`` + const childType = child.type ? `\`${child.type}\`` : '' + const childDesc = escapeHtml(child.description || '') + lines.push(`| ${childName} | ${childType} | ${childDesc} |`) + } + } + + return lines.join('\n') +} + +function renderPartial(doc: PartialDoc): string { + const lines: string[] = [] + + lines.push(`### ${doc.name}`) + lines.push('') + + if (!doc.description && doc.params.length === 0 && !doc.returns && doc.examples.length === 0) { + lines.push('_No documentation._') + return lines.join('\n') + } + + if (doc.description) { + lines.push(escapeHtml(doc.description)) + lines.push('') + } + + const paramTable = renderParamTable(doc.params) + if (paramTable) { + lines.push(paramTable) + lines.push('') + } + + if (doc.returns) { + lines.push(`**Returns:** ${escapeHtml(doc.returns)}`) + lines.push('') + } + + if (doc.examples.length > 0) { + lines.push('**Example:**') + lines.push('') + for (const example of doc.examples) { + lines.push('```go-template') + lines.push((example)) + lines.push('```') + lines.push('') + } + } + + // Trim trailing blank lines + while (lines.length > 0 && lines[lines.length - 1].trim() === '') { + lines.pop() + } + + return lines.join('\n') +} + +function renderGroup(group: PartialGroup): string { + const lines: string[] = [] + + const count = group.partials.length + const header = group.name === '(root)' ? '(root)' : `${group.name}/` + lines.push(`## ${header}`) + lines.push('') + + if (group.description) { + lines.push(`> ${group.description}`) + lines.push('') + } + + lines.push(`> ${count} partial${count !== 1 ? 's' : ''}`) + lines.push('') + + for (const partial of group.partials) { + lines.push(renderPartial(partial)) + lines.push('') + } + + return lines.join('\n') +} + +/** + * Generate Hugo partials documentation from parsed groups. + * @param groups Parsed partial groups + * @returns Markdown documentation body (no frontmatter) + */ +export function generatePartialsDocs(groups: PartialGroup[]): string { + const lines: string[] = [] + + // Summary + const totalCount = groups.reduce((sum, g) => sum + g.partials.length, 0) + lines.push(`The FixIt theme provides **${totalCount}** Hugo partials across **${groups.length}** groups.`) + lines.push('') + + // TOC + lines.push('## Groups') + lines.push('') + for (const group of groups) { + const header = group.name === '(root)' ? '(root)' : `${group.name}/` + const count = group.partials.length + lines.push(`- [${header}](#${group.name.replace(/[()/]/g, '').toLowerCase()}) — ${count} partial${count !== 1 ? 's' : ''}`) + } + lines.push('') + + // Groups + for (const group of groups) { + lines.push(renderGroup(group)) + } + + return lines.join('\n') +} diff --git a/packages/gen-docs/tsconfig.json b/packages/gen-docs/tsconfig.json new file mode 100644 index 00000000..e8d13465 --- /dev/null +++ b/packages/gen-docs/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "target": "ESNext", + "lib": ["ESNext"], + "module": "nodenext", + "moduleResolution": "nodenext", + "resolveJsonModule": true, + "types": ["node"], + "strict": true, + "strictNullChecks": true, + "noUnusedLocals": true, + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1ecdbfbb..a1012331 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,19 +10,19 @@ importers: devDependencies: '@antfu/eslint-config': specifier: ^9.1.0 - version: 9.1.0(@typescript-eslint/rule-tester@8.56.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3))(@typescript-eslint/typescript-estree@8.62.1(typescript@6.0.3))(@typescript-eslint/utils@8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3))(@vue/compiler-sfc@3.5.20)(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + version: 9.1.0(@typescript-eslint/typescript-estree@8.64.0(typescript@6.0.3))(@typescript-eslint/utils@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3))(@vue/compiler-sfc@3.5.40)(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3) '@iconify/json': specifier: ^2.2.493 - version: 2.2.493 + version: 2.2.502 '@iconify/utils': specifier: ^3.1.3 - version: 3.1.3 + version: 3.1.4 '@types/node': specifier: ^25.9.4 - version: 25.9.4 + version: 25.9.5 '@unocss/cli': specifier: ^66.7.4 - version: 66.7.4 + version: 66.7.5 auto-changelog-plus: specifier: ^1.3.0 version: 1.3.0 @@ -31,13 +31,13 @@ importers: version: 10.0.3 eslint: specifier: ^10.6.0 - version: 10.6.0(jiti@2.7.0) + version: 10.7.0(jiti@2.7.0) jiti: specifier: ^2.7.0 version: 2.7.0 lint-staged: specifier: ^17.0.8 - version: 17.0.8 + version: 17.1.0 serve: specifier: ^14.2.6 version: 14.2.6 @@ -46,13 +46,16 @@ importers: version: 2.13.1 tsx: specifier: ^4.22.4 - version: 4.22.4 + version: 4.23.1 + typedoc: + specifier: ^0.28.20 + version: 0.28.20(typescript@6.0.3) typescript: specifier: ^6.0.3 version: 6.0.3 unocss: specifier: ^66.7.4 - version: 66.7.4(vite@8.1.0(@types/node@25.9.4)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.4)(yaml@2.9.0)) + version: 66.7.5(vite@8.1.5(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0)) apps/demo: {} @@ -73,6 +76,24 @@ importers: specifier: ^3.4.2 version: 3.4.2 + packages/gen-docs: + devDependencies: + '@hugo-fixit/shared': + specifier: workspace:* + version: link:../shared + commander: + specifier: ^14.0.3 + version: 14.0.3 + picocolors: + specifier: ^1.1.1 + version: 1.1.1 + toml: + specifier: ^3.0.0 + version: 3.0.0 + typescript: + specifier: ^6.0.3 + version: 6.0.3 + packages/integration: devDependencies: '@hugo-fixit/shared': @@ -180,12 +201,12 @@ packages: resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} engines: {node: '>=6.9.0'} - '@clack/core@1.4.2': - resolution: {integrity: sha512-0Ty/1Gfm+Kb07sXcuESjyKfwEhSy4Ns1AgeEisHb/bDY5fWme0tTeTkU14T1Gmcs17YIjB/teiDe4uaCghbYqQ==} + '@clack/core@1.4.3': + resolution: {integrity: sha512-/kr3UWNtdJfxZtPgDqUOmG2pvwlmcLGheex5yiZKdwbzZJxhV+HMNR9QNmyY5cGwTNV6LrR7Jtp+KjhUAP1qBQ==} engines: {node: '>= 20.12.0'} - '@clack/prompts@1.6.0': - resolution: {integrity: sha512-EYlRokl8szrP9Z25qT5aepMdBjzBvHF9ZEhzIiUBc9guz/T31EqRgvD0QSgZcpE93xiwrr+OkB4nz0BZyF6fSA==} + '@clack/prompts@1.7.0': + resolution: {integrity: sha512-y7/yvZ2TPAnR9+jnc00klvNNLkJiXFFrQA/hlLCcxA9a2A4zQIOimyFQ9XfwYKiGD1fb5GY8vbKIIgO8d5Tb2A==} engines: {node: '>= 20.12.0'} '@e18e/eslint-plugin@0.5.1': @@ -217,170 +238,166 @@ packages: '@emnapi/wasi-threads@1.2.2': resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} - '@es-joy/jsdoccomment@0.84.0': - resolution: {integrity: sha512-0xew1CxOam0gV5OMjh2KjFQZsKL2bByX1+q4j3E73MpYIdyUxcZb/xQct9ccUb+ve5KGUYbCUxyPnYB7RbuP+w==} - engines: {node: ^20.19.0 || ^22.13.0 || >=24} - - '@es-joy/jsdoccomment@0.87.0': - resolution: {integrity: sha512-mFXZloZMzuJZXSHUmAFu/pXTk0ZJTJBluuAkrvbzidpTN8W6F2bpRFuedSH+85kbdlRLJqc+gfN+kD3JOLJK5g==} + '@es-joy/jsdoccomment@0.88.0': + resolution: {integrity: sha512-GK/HL/claLLNo5KG705auIlZMwEtmn88ofSGuLsmVZwKBqMPJhW9DiznYNq07QEqz9BPtA3LBfYImtZmhVvRAw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@es-joy/resolve.exports@1.2.0': resolution: {integrity: sha512-Q9hjxWI5xBM+qW2enxfe8wDKdFWMfd0Z29k5ZJnuBqD/CasY5Zryj09aCA6owbGATWz+39p5uIdaHXpopOcG8g==} engines: {node: '>=10'} - '@esbuild/aix-ppc64@0.28.0': - resolution: {integrity: sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==} + '@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.28.0': - resolution: {integrity: sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==} + '@esbuild/android-arm64@0.28.1': + resolution: {integrity: sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.28.0': - resolution: {integrity: sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==} + '@esbuild/android-arm@0.28.1': + resolution: {integrity: sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.28.0': - resolution: {integrity: sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==} + '@esbuild/android-x64@0.28.1': + resolution: {integrity: sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.28.0': - resolution: {integrity: sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==} + '@esbuild/darwin-arm64@0.28.1': + resolution: {integrity: sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.28.0': - resolution: {integrity: sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==} + '@esbuild/darwin-x64@0.28.1': + resolution: {integrity: sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.28.0': - resolution: {integrity: sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==} + '@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.28.0': - resolution: {integrity: sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==} + '@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.28.0': - resolution: {integrity: sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==} + '@esbuild/linux-arm64@0.28.1': + resolution: {integrity: sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.28.0': - resolution: {integrity: sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==} + '@esbuild/linux-arm@0.28.1': + resolution: {integrity: sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.28.0': - resolution: {integrity: sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==} + '@esbuild/linux-ia32@0.28.1': + resolution: {integrity: sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.28.0': - resolution: {integrity: sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==} + '@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.28.0': - resolution: {integrity: sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==} + '@esbuild/linux-mips64el@0.28.1': + resolution: {integrity: sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.28.0': - resolution: {integrity: sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==} + '@esbuild/linux-ppc64@0.28.1': + resolution: {integrity: sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.28.0': - resolution: {integrity: sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==} + '@esbuild/linux-riscv64@0.28.1': + resolution: {integrity: sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.28.0': - resolution: {integrity: sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==} + '@esbuild/linux-s390x@0.28.1': + resolution: {integrity: sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.28.0': - resolution: {integrity: sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==} + '@esbuild/linux-x64@0.28.1': + resolution: {integrity: sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.28.0': - resolution: {integrity: sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==} + '@esbuild/netbsd-arm64@0.28.1': + resolution: {integrity: sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.28.0': - resolution: {integrity: sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==} + '@esbuild/netbsd-x64@0.28.1': + resolution: {integrity: sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.28.0': - resolution: {integrity: sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==} + '@esbuild/openbsd-arm64@0.28.1': + resolution: {integrity: sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.28.0': - resolution: {integrity: sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==} + '@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.28.0': - resolution: {integrity: sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==} + '@esbuild/openharmony-arm64@0.28.1': + resolution: {integrity: sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.28.0': - resolution: {integrity: sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==} + '@esbuild/sunos-x64@0.28.1': + resolution: {integrity: sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.28.0': - resolution: {integrity: sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==} + '@esbuild/win32-arm64@0.28.1': + resolution: {integrity: sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.28.0': - resolution: {integrity: sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==} + '@esbuild/win32-ia32@0.28.1': + resolution: {integrity: sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.28.0': - resolution: {integrity: sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==} + '@esbuild/win32-x64@0.28.1': + resolution: {integrity: sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -426,8 +443,8 @@ packages: resolution: {integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/markdown@8.0.2': - resolution: {integrity: sha512-W+/0qHp0WbvFEljUvvECNpSWrUHpBWIWwp7F3QqEwQKmaRCmfEWvk6VfUia9pTQ0th6HyBGBsPfg/kG3/aQxLA==} + '@eslint/markdown@8.0.3': + resolution: {integrity: sha512-rBTSSShrq7e4O+PWfeE4azH4/CWPNrC+VGxBXiW00o3vYVJnznsZiDayj3KC9JztIMVRZxZHn2nrDIUau/4j7A==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@eslint/object-schema@3.0.5': @@ -438,6 +455,9 @@ packages: resolution: {integrity: sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} + '@gerrit0/mini-shiki@3.23.0': + resolution: {integrity: sha512-bEMORlG0cqdjVyCEuU0cDQbORWX+kYCeo0kV1lbxF5bt4r7SID2l9bqsxJEM0zndaxpOUT7riCyIVEuqq/Ynxg==} + '@humanfs/core@0.19.2': resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} engines: {node: '>=18.18.0'} @@ -458,14 +478,14 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} - '@iconify/json@2.2.493': - resolution: {integrity: sha512-3fycKppFtbaiozIvBOMlaPnimWwq2nBVOjqzXKzTd3oTSOf8W+qfHvzbQLK92gtMfSV/m4GkLaJV/Upj6vACwA==} + '@iconify/json@2.2.502': + resolution: {integrity: sha512-f5hf1EJOHzW+oyh8JzvJ5G1RzQ8sWyexmzM9/P2IoZTxECbnZEDwYOw/ITkwoA9SPNg2bngimrh/adpy8AaO5A==} '@iconify/types@2.0.0': resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} - '@iconify/utils@3.1.3': - resolution: {integrity: sha512-LPKOXPn/zV+zis1oOfGWogaXVpqUybF3ZS6SCZIsz8vg0ivVp9+fVqyYB7xq0aiST/VhUQYGO1qo6uoYSiEJqw==} + '@iconify/utils@3.1.4': + resolution: {integrity: sha512-b1S7B1k9ohZ+iNTi2ATxbRYG9fTrJmUT0rc46bvVnNxqNRGW7dyo/vRREwyniI5IRN2RSJHDcm+s3BjWrSAjHw==} '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -623,8 +643,8 @@ packages: '@oxc-project/types@0.131.0': resolution: {integrity: sha512-PgnWDfV0h+b16XNKbXU7Daib/BFSt/J2mEzfYIBu6JB/wNdlU+kVYXCkGA1A9fWkTbOgbjh4e6NhPeQOYvFhEA==} - '@oxc-project/types@0.137.0': - resolution: {integrity: sha512-WT+Gb24i8hmvo85AIv2oEYouEXkRlKAlT9WaCa3TfLgNCN+GhrJOGZuIlMouAh38Qe4QOx26eUOVsq70qXrywA==} + '@oxc-project/types@0.139.0': + resolution: {integrity: sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==} '@pkgr/core@0.3.6': resolution: {integrity: sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA==} @@ -636,97 +656,97 @@ packages: '@quansync/fs@1.0.0': resolution: {integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==} - '@rolldown/binding-android-arm64@1.1.3': - resolution: {integrity: sha512-DT6Z3PhvioeHMvxo+xHc3KtqggrI7CCTXCmC2h/5zUlp5jVitv7XEy+9q5/7v8IolhlioawpMo8Kg0EEBy7J0g==} + '@rolldown/binding-android-arm64@1.1.5': + resolution: {integrity: sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.1.3': - resolution: {integrity: sha512-0NwgwsjM7LrsuVnXMK3koTpagBNOhloc/BNjKqZjv4V5zI5r13qx69uVhRx+o5Z0yy4Hzq+lpy7TAgUG/ocvrw==} + '@rolldown/binding-darwin-arm64@1.1.5': + resolution: {integrity: sha512-51Bnx9pNiMRKSUNtBfySkNJ9vMU9Hh3I1ozDd6gyPPYzaXCfnptUcEZxXGYFn+ul2dtcMUiqGR1Yai2K10uoTw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.1.3': - resolution: {integrity: sha512-YtiBp4disu6V560loT6PjMdiRaWmVvDNrUunAalbiFx2ggeJwxdAsgZMcoGP17uyAsTwAj5V1niksxlHnVQ1Sw==} + '@rolldown/binding-darwin-x64@1.1.5': + resolution: {integrity: sha512-Tm+gbfC0aHu1tBA/JvKQh32S0K6YgCHkiAF4/W6xX0K0RmNuc94VeK419dJoE65R5aRxmo+noZQSWrAMF6yb6g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.1.3': - resolution: {integrity: sha512-yD3EkEdXk2LypPxnf/kSZHirarsI8gcPzc62SukhR9VJTyvV+F9Q/GxWNuCojc7sXyuVC4DxRGhdDK4X8VSsbw==} + '@rolldown/binding-freebsd-x64@1.1.5': + resolution: {integrity: sha512-JMzDKCCXq93YccG5gz3hvOs1oXRKAf0XYpfOS88e+wZrC8Iugj6j68867vrYZkvpDDpKn/KoKORThmchMpF6TA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.1.3': - resolution: {integrity: sha512-c+8vieQbsD7HNAHKIA34w0GJ9FedFFuJGD+7E6vz7Q3uqAIugL5p45fhlsj4UaAsHpcmlqugBWMhA0/j7o0sIg==} + '@rolldown/binding-linux-arm-gnueabihf@1.1.5': + resolution: {integrity: sha512-uML21j2K5TfPGutKxub+M+nLjZIrWjXQ5Grx4lCe/nimTj9B4L63zHpjXLl4y0L3mcm2htEQIb06oCG/szerNw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.1.3': - resolution: {integrity: sha512-50jD0uUwLvur7Zz9LHz17kaAdTPjn5wN93hEgjvmYFRZwiR7ZJYovTd5ipyWJDAnXKvZ+wgc+/Ika6dwSF5OcA==} + '@rolldown/binding-linux-arm64-gnu@1.1.5': + resolution: {integrity: sha512-navSiuTMogvnQoZoM/v+l3ZWo50/NTwSHSzheABx/RCnmUPaKwq9qSo4Br2OYRs21+Fz8uFqITZM3H4opOB0/Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-musl@1.1.3': - resolution: {integrity: sha512-BO9+oPL8K9poZJBfYPsXNtYjPE5uM3qeehT3aFcW4LITOl+iSqhp0abzjR2nWBUNjIZeKXjAEWBZ64WjNoHd6w==} + '@rolldown/binding-linux-arm64-musl@1.1.5': + resolution: {integrity: sha512-lAryqH7IteztmCXQXk0etKj4wBQ7Gx5S6LjKhsgp9zb8I5bsuvU/2llH1hDQcjsFeqIsovMVN339/8pUDDBXxA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@rolldown/binding-linux-ppc64-gnu@1.1.3': - resolution: {integrity: sha512-f3VpLB1vQ0Eo6ecr/6cekLnvYMFF4YBFoVGkfkvPLq1bAkbAwHYQPZKoAmG6OJyTcxxoC+AvezGx/S1obNC0Mw==} + '@rolldown/binding-linux-ppc64-gnu@1.1.5': + resolution: {integrity: sha512-fsK/sNBnxzBlL4O1JNrZakVQxPspqpED5dLtNsZS9oOKmtSpdNIzxH2kkol5HYTWJN47sE20ztMJPxfZ89qGOg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.1.3': - resolution: {integrity: sha512-AmurZ26Pqx/RI9N1gzEOCklkKXl927yjfXWUUS0O7Puh8ARM/Ob8qfrD3qnWksScdw6cSrW5PSHE9DyLu7+PtA==} + '@rolldown/binding-linux-s390x-gnu@1.1.5': + resolution: {integrity: sha512-gLYb4BIadlfTOYT5gO503n8zQjXflgzpD0FcyKh0Mzx3rqCZKnHoJWV9xe1KXUJ5lx2JfcSHr/mhzS0PC/McAA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.1.3': - resolution: {integrity: sha512-JJpqs8bRGITDOdbkNKnlojzBabbOHrqjSvDr0IVsZObE1lBcPjxItUEY9eWIDbxaJ3cGrXPWGfGkIxFijg/URg==} + '@rolldown/binding-linux-x64-gnu@1.1.5': + resolution: {integrity: sha512-FjcpEKUyJygHgs1o50VYNvkt5+7Le/VEdYt0AkRpkL33MnyQfwr8l5mXwMmfmTbyMPr5vJLC+8/Gd9gXnwU1QQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-musl@1.1.3': - resolution: {integrity: sha512-rSJcdjPxzA/by/6/rYs+v+bXU7UjvnbUWz8MJb6kh6+knqB1dCrtHg0uu7C/4haqJvqdkYHQ5IGn+tCH9GLW/g==} + '@rolldown/binding-linux-x64-musl@1.1.5': + resolution: {integrity: sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@rolldown/binding-openharmony-arm64@1.1.3': - resolution: {integrity: sha512-hQ3/PYkDJICgevvyNcVrihVeqq7k1Pp3VZ9lY+dauAYUJKO+auqApvANhvR1An9BhmqYKvW2Mu1F9u4DXSMLxQ==} + '@rolldown/binding-openharmony-arm64@1.1.5': + resolution: {integrity: sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.1.3': - resolution: {integrity: sha512-Elcv/BtML9lXrV6JuKITc/grN2kYV9gjsQpW8Jfw4ioK0TOkjBjye0nnyqQNy9STNaI20lXNaQBRrD5gSgR0Yg==} + '@rolldown/binding-wasm32-wasi@1.1.5': + resolution: {integrity: sha512-VbQGPX2b4r48TAMIM2cjgluIM1HYutm4pcTEJsle7iEP7sB1dFqtPLBVbdLAZCxy1txCcPxf4QFf4v8uvltPqA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.1.3': - resolution: {integrity: sha512-2DrEfhluH9yhiaFApmsjsjwrSYbNcY1oFTzYSP1a535jDbV98zCFanA/96TBUd0iDFcxGmw9QRExwGCXz3U+/g==} + '@rolldown/binding-win32-arm64-msvc@1.1.5': + resolution: {integrity: sha512-gHv82k63z4qpV5+Q1y/12KrK0ltWBukVDI8nZcbT7Tt/ZlOIVwppazneq0F93oDxTo3IgAMEDIoQh3E2n6mVsw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.1.3': - resolution: {integrity: sha512-OL4OMk7UPXOeVGGd3qo5zJyPIljf4AFgk5QAkPPS+OoLuOOozhuaQGC18MxVTnw/06q93gShAJzlwnSCY9YtqA==} + '@rolldown/binding-win32-x64-msvc@1.1.5': + resolution: {integrity: sha512-tTZuDBPw85tEN5PQi1pnEBzDy0Z49HtScLAbD5t6hyeU92A95pRWaSMw1GZZi/RwgSgUIl0xrSlXIT/9QzvYSA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -734,6 +754,21 @@ packages: '@rolldown/pluginutils@1.0.1': resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} + '@shikijs/engine-oniguruma@3.23.0': + resolution: {integrity: sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g==} + + '@shikijs/langs@3.23.0': + resolution: {integrity: sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg==} + + '@shikijs/themes@3.23.0': + resolution: {integrity: sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA==} + + '@shikijs/types@3.23.0': + resolution: {integrity: sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==} + + '@shikijs/vscode-textmate@10.0.2': + resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + '@sindresorhus/base62@1.0.0': resolution: {integrity: sha512-TeheYy0ILzBEI/CO55CP6zJCSdSWeRtGnHy8U8dWSUH4I68iqTsy7HkMktR4xakThc9jotkPQUXT4ITdbV7cHA==} engines: {node: '>=18'} @@ -759,8 +794,8 @@ packages: '@types/fs-extra@11.0.4': resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} - '@types/hast@3.0.4': - resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + '@types/hast@3.0.5': + resolution: {integrity: sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==} '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -777,192 +812,139 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@25.9.4': - resolution: {integrity: sha512-dszCsrKb5U7ZsVZBWiHFklTloVl0mSEnWH/iZXfZUlI4rzCUnsvGmgqfuVRHL54ugE7/wRuxEIXRa2iMZ+BG6g==} - - '@types/node@26.0.1': - resolution: {integrity: sha512-fc3KiUoBt6kie0N9bIW3E47vZsuaMf0PM2AaUpLCLT0s/LvX1nxAim6Fc049cNxODPpGm6qRAuUOB86SkRuPQw==} + '@types/node@25.9.5': + resolution: {integrity: sha512-OScDchr2fwuUmWdf4kZ9h7PcJiYDVInhJizG/biAq3cAvqwYktuy/TYGGdZNMtNTFUP7rnb0NU4TUdm82kt4Rg==} '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - '@typescript-eslint/eslint-plugin@8.62.1': - resolution: {integrity: sha512-4EQM77WgVNxj7OkL/5b/D/xZsw00G577+UriYTC7JF5opcF3T2AuoeY7ueLaZgSVjSgCS6yOAJB5bRGLPSJUzA==} + '@typescript-eslint/eslint-plugin@8.64.0': + resolution: {integrity: sha512-CGvQPBxN3wZLu6Rz2kFUpZeoCm78xUic92ck39KPePkO1NPOwjCqdQnm5Q87tpWw9vcBvW8XLrDXjH9PWYtJ3Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.62.1 + '@typescript-eslint/parser': ^8.64.0 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/parser@8.56.1': - resolution: {integrity: sha512-klQbnPAAiGYFyI02+znpBRLyjL4/BrBd0nyWkdC0s/6xFLkXYQ8OoRrSkqacS1ddVxf/LDyODIKbQ5TgKAf/Fg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/parser@8.62.1': - resolution: {integrity: sha512-sPhE4iHuJDSvoAiec+Ro8JyXw8f0ql13HFR82P99nCm9GwTEKG0KYLvDe6REk8BCXuit6vJAv/Yxg5ABaNS2rA==} + '@typescript-eslint/parser@8.64.0': + resolution: {integrity: sha512-KA0OshtlcCCXmbfqyZkM5pV3/WNraJf7DkJRLpyrmwPtud57H5BDX7C3k0LPSPxpprfRL+cJDGabF10mvNCoCw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/project-service@8.56.1': - resolution: {integrity: sha512-TAdqQTzHNNvlVFfR+hu2PDJrURiwKsUvxFn1M0h95BB8ah5jejas08jUWG4dBA68jDMI988IvtfdAI53JzEHOQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/project-service@8.62.1': - resolution: {integrity: sha512-yQ3RgY5RkSBpsNS1Bx/JQEcA24FOSdfGktoyprAr5u18390UQdtVcfnEv4nIrIshNnavlVyZBKxQwT1fIAE6cg==} + '@typescript-eslint/project-service@8.64.0': + resolution: {integrity: sha512-tk4WpOJ6IEbGrVHaNmM0YRrwAD3exZlIK3iadQNAxh4YKk6jvUQ4ecq18n+v7+meh+cJ3j+D8nbk8sRKhlwLQg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/rule-tester@8.56.1': - resolution: {integrity: sha512-EWuV5Vq1EFYJEOVcILyWPO35PjnT0c6tv99PCpD12PgfZae5/Jo+F17hGjsEs2Moe+Dy1J7KIr8y037cK8+/rQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - - '@typescript-eslint/scope-manager@8.56.1': - resolution: {integrity: sha512-YAi4VDKcIZp0O4tz/haYKhmIDZFEUPOreKbfdAN3SzUDMcPhJ8QI99xQXqX+HoUVq8cs85eRKnD+rne2UAnj2w==} + '@typescript-eslint/scope-manager@8.64.0': + resolution: {integrity: sha512-CXEaFdYXjSTgKhisNkwCcJwTP8Pl+fmRrEQrri4nm3vU743bALrxzLmq7fHG/7e6a5xO0lDYeURpZmBuhHk54w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.62.1': - resolution: {integrity: sha512-r4d249KbQ1SFdpeStvob8Ih6aPPIzfqllPVOtvhve6ZcpuVcYo5/7zUWckKpHE7StASX4kTKZTLf0WQm/wPkcg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/tsconfig-utils@8.56.1': - resolution: {integrity: sha512-qOtCYzKEeyr3aR9f28mPJqBty7+DBqsdd63eO0yyDwc6vgThj2UjWfJIcsFeSucYydqcuudMOprZ+x1SpF3ZuQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/tsconfig-utils@8.62.1': - resolution: {integrity: sha512-xadytJqX9vJVQ2fdQjkcIVigwaOJNWkpjdLt6cEQ+xPnrI1fkp+/jZE/I97k9KUjqtpd25i0HeyZf3T6dutv2g==} + '@typescript-eslint/tsconfig-utils@8.64.0': + resolution: {integrity: sha512-2yo8rRNKuzbVWQp5kslhANqZ2uDAeROQHBRZNPu8JDsHmeFNj/XJJhX/FhNUWmkHHvoNsKa6+tHJiig87EzsQw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@8.62.1': - resolution: {integrity: sha512-aXM5xlqXiTxPibXB93cLAURfT3rlizf7uMXISCXy66Isr/9hISJx3yDsKl0L7lKa51b8JpFuNKby0/O0pEm9jg==} + '@typescript-eslint/type-utils@8.64.0': + resolution: {integrity: sha512-XWG4Fmmv/6SvyS9nH8jWrKs6terwJvE8cyRt1CzYYqzp9OrPhCT4cMc/f7C6RZCwG+qMmiffJS1/qJP8G1URtg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/types@8.56.1': - resolution: {integrity: sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw==} + '@typescript-eslint/types@8.64.0': + resolution: {integrity: sha512-qjhfuTfLXjA4IOzXvz0rTjT01BqEiIgPoUeMwiEjnaHKJMTNo8rH5pYW1a2L/0Dnux2fPC85AeyJoWaGa8WxTA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.62.1': - resolution: {integrity: sha512-ooCzJFaf+Hg+uG6fA3NRFGuFjlfNlDhBthbv4ZPU/0elCAFUfnyXUvf/WOpHz/jYwSmvU2GkR2LtyUfy1AxZ1Q==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/typescript-estree@8.56.1': - resolution: {integrity: sha512-qzUL1qgalIvKWAf9C1HpvBjif+Vm6rcT5wZd4VoMb9+Km3iS3Cv9DY6dMRMDtPnwRAFyAi7YXJpTIEXLvdfPxg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/typescript-estree@8.62.1': - resolution: {integrity: sha512-xMcW9oP9u7fAMXYs9A65CVmtLQe2r//oXINHfi8HV+oiqhih17sbLdhXr4540YWlgpDKQdY854OL5ZrdCiQsAA==} + '@typescript-eslint/typescript-estree@8.64.0': + resolution: {integrity: sha512-Pztpsn1aCE1oWDvDEfUk31nngvvF7vUB5SwHFEaZIFpvw7WJtqUHHL4plBZDA9HfWJJjL13BdG0YrJInTUvoVA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/utils@8.56.1': - resolution: {integrity: sha512-HPAVNIME3tABJ61siYlHzSWCGtOoeP2RTIaHXFMPqjrQKCGB9OgUVdiNgH7TJS2JNIQ5qQ4RsAUDuGaGme/KOA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/utils@8.62.1': - resolution: {integrity: sha512-sHtbPfuKNZCG+ih8SyjjucqRntSVmp8XgL5u6o9mAhiSn8ds5o/M/XdM0abweme2Tln3szOstOrZ9OXitvPh0g==} + '@typescript-eslint/utils@8.64.0': + resolution: {integrity: sha512-aJUGVB3+U0htrrCjoA8qukw8cm8fNCGAxK/tVoS70k8aeb7DETKeFozRiVFIwEeN9WJLsjaP3ph8I60tY2XZoQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/visitor-keys@8.56.1': - resolution: {integrity: sha512-KiROIzYdEV85YygXw6BI/Dx4fnBlFQu6Mq4QE4MOH9fFnhohw6wX/OAvDY2/C+ut0I3RSPKenvZJIVYqJNkhEw==} + '@typescript-eslint/visitor-keys@8.64.0': + resolution: {integrity: sha512-mrtuL8Nsn6gi2H4mo5KMTp823M+3Q19Ew/i+Zlikq20tIMm99C3Ez0dCmkWWnxut20esQvTg8aUSEhMcAOXhEw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.62.1': - resolution: {integrity: sha512-4g3BLxfdTMy8iZG0MaBkadnlRrCJ74cQiFbyEVMrkwIoqdyaXXQM22cotDvrl4x28wgIZ9rEJRoM+mmhSJpJ1g==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@unocss/cli@66.7.4': - resolution: {integrity: sha512-ujqzt7An9Y1BUL0xMFQvF219nLwz7hF2lh/E97YhzB8lI8xA/T/VB7+njXXBEADV4Jp/5qGVaAatME9tadCqBw==} + '@unocss/cli@66.7.5': + resolution: {integrity: sha512-fgWkECRn2LGVo9sEpmjk/KJ3NSKUDitaZCNrJcEYM93DG+ELriTHcL+VWBlF4rcZf9fdGlq1nKbbRHUZirFCHQ==} hasBin: true - '@unocss/config@66.7.4': - resolution: {integrity: sha512-xdIpeZv2l69GlvO2GjAMXXMnJ4LPI0J9OXIEsON6kSHJzZqL9Gbztqvt9L+3OXQsNCeduJF/Dm9JrNPSbpDqHw==} + '@unocss/config@66.7.5': + resolution: {integrity: sha512-dkPl9glhEahJ+Xoja5ZseKKnH+vZaeaKQzg8b0otcKcPPNrHQgu1nu3QgfeOjnXOGrjZIotHwUeVtt4ZA2Skgg==} - '@unocss/core@66.7.4': - resolution: {integrity: sha512-OGXh+RRsAgOrecTKRjUd4SepHR7W4v6zIf6pGtKyIIAIMnzcW/tU+afR1cDbhtb4efZMQhzaoAh3ncvkL8eEYA==} + '@unocss/core@66.7.5': + resolution: {integrity: sha512-UdJb8MiMywcau8QrWEVgUAz0kvoFHyR+sACwYCgmBh/BpKJGyR/zw/Ys3wvysbm0f+i/20VGBex/QQxYVlzdyQ==} - '@unocss/extractor-arbitrary-variants@66.7.4': - resolution: {integrity: sha512-0yawiWzVDDBRow8kuMeNFhzYJUwYrsKc1xclzNurkisal7tTG24haDmpqneol8j3TT2blrQOIuSQPrEgv6y4oQ==} + '@unocss/extractor-arbitrary-variants@66.7.5': + resolution: {integrity: sha512-5zOkbnLIJc8E749qNjLXfPHl3FdHloop12h706/ojr6idK4ix0KLm43R//uLnphixCehdHJRuHnavnM4C/kQbA==} - '@unocss/inspector@66.7.4': - resolution: {integrity: sha512-YxgG9KaXZTe9wVffhUQkV/RY+PPcXha/jAg0rcPUYQr88Z0PEenOUp/Q11ATP8mTwNd+3oUwbKMnkXvv2qsdQA==} + '@unocss/inspector@66.7.5': + resolution: {integrity: sha512-WmTJMnj8bmRxvw/wGeShmL2eEHr2/L0BdGTXSxhfzwcO8y5XZEbBmVciLcM7pqaTXQ6JY4+KnITrDUf1urjZxQ==} - '@unocss/preset-attributify@66.7.4': - resolution: {integrity: sha512-DqRGDJ4OH9h8IissdbZ+IoiIg4q9gdZwdDfnrPcNbBm1ZC4QV/SEizt9GGF6Z/bgvMscMupMU233btQyTq+h6w==} + '@unocss/preset-attributify@66.7.5': + resolution: {integrity: sha512-1Oi1Cp81pqYJwG3h4+OlP5A0FKyaa07MFBXaXc4Yr3faiTbsI8SKj2TqnZCb+NQvBsEqslEd+jKXGZ3lKzCVOQ==} - '@unocss/preset-icons@66.7.4': - resolution: {integrity: sha512-E5DZJOBv4dNsKheds5MNjELF/boMvJNGya1I6NKzC3FQJC7BBSs67+7HAWTz7KKavLS9dEBjdh3JUlXhYMSO8w==} + '@unocss/preset-icons@66.7.5': + resolution: {integrity: sha512-ZsxadWnGGtHdANTikuMnjkQaT1qwUFJHZBF4fzVsPMnUiiKGs8rzXukwM9w3Gi9ontM7nbG2FYi9clWETSlpFg==} - '@unocss/preset-mini@66.7.4': - resolution: {integrity: sha512-aITPP3k60ya3ZMubWQfwNUjh8SzA6YRsbX37WaAMYyIrP1lilgCClJi9HxYt0/Wya09NmUrVNdyYKZfYhfvprA==} + '@unocss/preset-mini@66.7.5': + resolution: {integrity: sha512-o37TSl4ecT0dKu+3/TYuTYht75h82SEwDNl476m9ve0KW4Pv1O2tT/9TWd7N5cutEpySr8/YtjMwtWBD+drxBg==} - '@unocss/preset-tagify@66.7.4': - resolution: {integrity: sha512-4AU4WJfQlk4X+AcsNO532dLcrSxPjEiFTVY7IjDrR4fnFV6bU5yXvEMpM9mToZvk1oDosDjT9Zt7MEpt2d/N1A==} + '@unocss/preset-tagify@66.7.5': + resolution: {integrity: sha512-/8YB1tXVi+WmNKPhsCdtO1xnQKEkshSnWDp6AbvVP3f6qOF7adlMYpAt3kpWCoVUBsfOQ06ZQlnfricMjObyoQ==} - '@unocss/preset-typography@66.7.4': - resolution: {integrity: sha512-FNlkAdlfUqsiHrkeKt5gr8rbTH5K6qNBv44n5fK6wWWbrl/6mB+oazvC9yFp+winJWr+M7TBrnrhC7wAeTdpAA==} + '@unocss/preset-typography@66.7.5': + resolution: {integrity: sha512-2dxC8LT9KYa29UZT4muDFl7DbIXvKktTfeSMbUGMdZKbHcuMtKSP2U52wti1PL5I9duqp4v+8G33EeVutGTUaQ==} - '@unocss/preset-uno@66.7.4': - resolution: {integrity: sha512-ov0sGR2mQ3x4OtdFHdpndy3VuK5UkXuhEAb6LwxSzUIKOqWcxSi24nugBchfInS930pI3Ka9Eje7kAsU+QAPEg==} + '@unocss/preset-uno@66.7.5': + resolution: {integrity: sha512-zaUlYgNngbt50fZA/LbtsEnmPKojPqeiXCyUUiKQMv2uJQhncR32xhLZXVQ+TJD7hlfZ+6FAqlco1NIiAcub9w==} - '@unocss/preset-web-fonts@66.7.4': - resolution: {integrity: sha512-pzpaKZzcbtEVodMf6RvcjyYhgfJ6JrOzsELgo7tzKWSrUuuAuVteTXQTVNIsgjRncJ+adeUhIVTtWg6uHjj1Yg==} + '@unocss/preset-web-fonts@66.7.5': + resolution: {integrity: sha512-OLLTK7kswdSu51qxEm6O+AehecgCfS08Ivqo+280lKzFW7V1jXr5okeJ1ty+85oHCprJqzcD9iG1khxNRLomcA==} - '@unocss/preset-wind3@66.7.4': - resolution: {integrity: sha512-wnYilrLEYyuXzWlC1WfHB8xl+Y8ah3ZHbRBEZbOlYIDAgrGdDHxPT1EOHSHVphfoobCp8+t7eNQvjB1xBG0LaQ==} + '@unocss/preset-wind3@66.7.5': + resolution: {integrity: sha512-atFe/7Qein+oMdyZs0hEo+3EjV99Av2LVxDbzpCungxIfbS3TnQt70EIuHXMPNCVWLYwrMV+/P1n9Ntb0E3mow==} - '@unocss/preset-wind4@66.7.4': - resolution: {integrity: sha512-X3Tde85s9qMlow0IWy32yo8ivtZ3jvpYIWLeOmmBSJXil7GVvA1Yi3LYSLSMoR4VT8CasbQKg99LyhtXiDhYlQ==} + '@unocss/preset-wind4@66.7.5': + resolution: {integrity: sha512-n3jIvQv8x1jXpmWfvNFBIqHNARki4mKZXfxAA31gekpXsRRTg16u1+yC1+PBBJgoEDFEnnmKnG7EZP88S8LVXA==} - '@unocss/preset-wind@66.7.4': - resolution: {integrity: sha512-OZRsTfjY0iTEu01oqknKFxCxudv+3yXkXTVdllFBrFXws7OKXmm78Wmo+jwX3PhDBaEq71WuHi8s6u76YOiNLQ==} + '@unocss/preset-wind@66.7.5': + resolution: {integrity: sha512-LVKgGr0A9Lc7F85xGXrrb71DDXMlHGA8bcj/Kht8BCsuRdBZadNbLlnv5qnSJiHYhi3/blzcgVoaeRor6L9yNA==} - '@unocss/rule-utils@66.7.4': - resolution: {integrity: sha512-S+q2gqsWpZfW+MJV6LGH42eyKDK8xGdUPse72T8euNDagl5/OZFGSJ3TlIrlNilscbUiWM8nIu0cWeRaAmEMlA==} + '@unocss/rule-utils@66.7.5': + resolution: {integrity: sha512-/AKHBRF6ZOexE3EDDv8ZEYh40P5e2Eha41IYUbE1wjigW7++ssmvimSTdufJzZvU5DGP++E3B3WEsFPprZMjAg==} - '@unocss/transformer-attributify-jsx@66.7.4': - resolution: {integrity: sha512-HvSmnxEaMdvEOBAe4JeGfQHYoemY7eyEkM9tK60KBvuvLS/tpkTu9sQy8Y2PaSVdtdl8wNJYAjBq14mBTJhJQQ==} + '@unocss/transformer-attributify-jsx@66.7.5': + resolution: {integrity: sha512-r8qDwNSt0eGSwWws3xsuIHb3PZYR2embFdYoE67hD/xlYgLjX1uPy/HUlGCSSh4uLc4vVYjurr0Oq5xF/B8YiA==} - '@unocss/transformer-compile-class@66.7.4': - resolution: {integrity: sha512-CqagFT2ybqeEIf5YDPalK+ueKewNiI3h/a0MDH+VqDEmyl4ICgSB38VtQabiMnFG4um0kVGqThHoYKDy6qGKyg==} + '@unocss/transformer-compile-class@66.7.5': + resolution: {integrity: sha512-KuECgsGF7tGe808vIvKViEjI0UCUgYgneJfK+/TWBkjC7s8dLVaUtJzzcP9/r6OfGlgyn/x1YTdRqTaCENa7Xg==} - '@unocss/transformer-directives@66.7.4': - resolution: {integrity: sha512-mMS+9NWMI7riWW9LI9+XibbAs6kJuhEezqQ+99d0s40k2w+io7vJab2i+LkDDyCmdaPL5tdqcb48PXu9mzvAeQ==} + '@unocss/transformer-directives@66.7.5': + resolution: {integrity: sha512-VMJApXXOwlDubkW+cNMmOkfxLefFupJr+yU23gGYUB2NPsuVltc8H5CDM0gfVebpeL5CUW05evxzEAk2wsju+Q==} - '@unocss/transformer-variant-group@66.7.4': - resolution: {integrity: sha512-3+fdrcpg7f8wltk7Ph4nK817HkwVfKoKOImPuD9nnb3T6RVUuwDq3N3XZK4vrwlFyEJqNLDBhzHF3rCGymreOg==} + '@unocss/transformer-variant-group@66.7.5': + resolution: {integrity: sha512-iDmP3mM8J+IxuQf5Uh33zsi528xnGxTpKRJ0c+LCrqBTTkR2tZr4aCzNmJ0g29Js2yEOsyNXRRc8BNTuvgn0AA==} - '@unocss/vite@66.7.4': - resolution: {integrity: sha512-U6P3qWuGJIQ3fqMQf9qMB2kkXGrISkcdeW1kHlBKs54QjWKJRMNTxgAAb57ytlbD2K9osEMO/k58w96lbXcTNg==} + '@unocss/vite@66.7.5': + resolution: {integrity: sha512-1z1TBCNJCR2WzjPtjzmCHr8rtzXHosMjLdsCNe6Mzsfwiw044gzzLVuiEZO9vIjkI50lvQ+gIOxOiVQG0hGAeA==} peerDependencies: vite: ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0 || ^8.0.0-0 - '@vitest/eslint-plugin@1.6.20': - resolution: {integrity: sha512-xRwWHFG0Utp6hXtbGiWk4VdKXCGdExD8kbWrrmFEiG5dk8anOJ+vbWbeOa8EbkocKQRTsx7JAWETccZiBgFp/Q==} + '@vitest/eslint-plugin@1.6.23': + resolution: {integrity: sha512-CbrXxQpIUMbeyylGlxaxTgnWYM44et4Nx58swl7+vrTyC9Ttx+hQoy8BGCregbbZ08K5qFhRHeoad1VvERUbkg==} engines: {node: '>=18'} peerDependencies: '@typescript-eslint/eslint-plugin': '*' @@ -977,20 +959,20 @@ packages: vitest: optional: true - '@vue/compiler-core@3.5.20': - resolution: {integrity: sha512-8TWXUyiqFd3GmP4JTX9hbiTFRwYHgVL/vr3cqhr4YQ258+9FADwvj7golk2sWNGHR67QgmCZ8gz80nQcMokhwg==} + '@vue/compiler-core@3.5.40': + resolution: {integrity: sha512-39E8IgOhTbVDnoJFMKc2DvYnypcZwUqgUhQkccva/0m6FUwtIKSGV7n1hpVmYcFaoRAwf9pBcwnKlCEsN63ZEQ==} - '@vue/compiler-dom@3.5.20': - resolution: {integrity: sha512-whB44M59XKjqUEYOMPYU0ijUV0G+4fdrHVKDe32abNdX/kJe1NUEMqsi4cwzXa9kyM9w5S8WqFsrfo1ogtBZGQ==} + '@vue/compiler-dom@3.5.40': + resolution: {integrity: sha512-pwkx4vqlqOspFstrcmzwkKLePVMD3PT65imRzLhanU2V1Fj4K13g6OXjanOyzw3aTAuRk84BOmY8f3rEHqPaVA==} - '@vue/compiler-sfc@3.5.20': - resolution: {integrity: sha512-SFcxapQc0/feWiSBfkGsa1v4DOrnMAQSYuvDMpEaxbpH5dKbnEM5KobSNSgU+1MbHCl+9ftm7oQWxvwDB6iBfw==} + '@vue/compiler-sfc@3.5.40': + resolution: {integrity: sha512-gIf497P4kpuALcvs5n3AEg1Vdn0pSY4XbjASIfHNYF1/MP3T2Mf2STERTubysBxCRxzJGJYtF/O7vwJrxFB3Vw==} - '@vue/compiler-ssr@3.5.20': - resolution: {integrity: sha512-RSl5XAMc5YFUXpDQi+UQDdVjH9FnEpLDHIALg5J0ITHxkEzJ8uQLlo7CIbjPYqmZtt6w0TsIPbo1izYXwDG7JA==} + '@vue/compiler-ssr@3.5.40': + resolution: {integrity: sha512-rrE5xiXG663+vHCHa3J9p2z5OcBRjXmoqenprJxAFQxg5pSshzeBiCE6pu46axapRJ2Adk0YDA2BRZVjiHXnhg==} - '@vue/shared@3.5.20': - resolution: {integrity: sha512-SoRGP596KU/ig6TfgkCMbXkr4YJ91n/QSdMuqeP5r3hVIYA3CPHUBCc7Skak0EAKV+5lL4KyIh61VA/pK1CIAA==} + '@vue/shared@3.5.40': + resolution: {integrity: sha512-WxnBtruIqOoV3rA4jeKDWzrYI5h7Cp4+pjwDi8kWGHz+IslhiN+wguLVVhtv2l8VoU02rzDCVfDjgCl1lNpZVg==} '@zeit/schemas@2.36.0': resolution: {integrity: sha512-7kjMwcChYEzMKjeex9ZFXkt1AyNov9R5HZtjBKVsmVpw7pa7ZtlCGvCBC2vnnXctaYN+aRI61HjIqeetZW5ROg==} @@ -1014,10 +996,6 @@ packages: ansi-align@3.0.1: resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} - ansi-escapes@7.3.0: - resolution: {integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==} - engines: {node: '>=18'} - ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -1048,6 +1026,9 @@ packages: arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + auto-changelog-plus@1.3.0: resolution: {integrity: sha512-mciBBNBpxVguAxCQWmgFH/nFEay0fi4kgS7q+wfF2OMCGdqzuNPo/OrkncP5xtisvjbj7HUE3d29mhAmk8y6cg==} hasBin: true @@ -1064,8 +1045,8 @@ packages: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} - baseline-browser-mapping@2.10.40: - resolution: {integrity: sha512-BSSLZ9/Cjjv7Gtj5B68ZzXcXUg8iOf3fme+FCuh8rC/Go+Kmh8cox7M3A8dolou16s64QjLPOSdngh7GxXvkSw==} + baseline-browser-mapping@2.10.43: + resolution: {integrity: sha512-AjYpR78kDWAY3Efj+cDTFH9t9SCoL7OoTp1BOb0mQV7S+6CiLwnWM3FyxhJtdPufDFKzmCSFoUncKjWgJEZTCQ==} engines: {node: '>=6.0.0'} hasBin: true @@ -1076,15 +1057,15 @@ packages: resolution: {integrity: sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg==} engines: {node: '>=14.16'} - brace-expansion@1.1.15: - resolution: {integrity: sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==} + brace-expansion@1.1.16: + resolution: {integrity: sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==} brace-expansion@5.0.7: resolution: {integrity: sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==} engines: {node: 18 || 20 || >=22} - browserslist@4.28.4: - resolution: {integrity: sha512-MTc8i/x9jBQd1iMw2CFGS+rwMa07eYjLR0CCTLDACl9xhxy+nIs3KeML/biicXtk9JrZ6dnnTatmc7ErPXIxqw==} + browserslist@4.28.6: + resolution: {integrity: sha512-FQBYNK15VMslhLHpA7+n+n1GOlF1kId2xcCg7/j95f24AOF6VDYMNH4mFxF7KuaTdv627faazpOAjFzMrfJOUw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -1108,8 +1089,8 @@ packages: resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} engines: {node: '>=14.16'} - caniuse-lite@1.0.30001799: - resolution: {integrity: sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw==} + caniuse-lite@1.0.30001806: + resolution: {integrity: sha512-72Cuvd95zbSYPKq6Fhg8eDJRlzgWDf7/mtoZv6Qe/DYNCEBdNxoA3+rZAU2ZhGCpZlns3EssFavaZomckT5Uuw==} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -1156,10 +1137,6 @@ packages: resolution: {integrity: sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw==} engines: {node: '>=18.20'} - cli-truncate@5.2.0: - resolution: {integrity: sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==} - engines: {node: '>=20'} - clipboardy@3.0.0: resolution: {integrity: sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -1178,6 +1155,10 @@ packages: colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + commander@14.0.3: + resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} + engines: {node: '>=20'} + commander@7.2.0: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} engines: {node: '>= 10'} @@ -1186,10 +1167,6 @@ packages: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} - comment-parser@1.4.5: - resolution: {integrity: sha512-aRDkn3uyIlCFfk5NUA+VdwMmMsh8JGhc4hapfV4yxymHGQ3BVskMQfoXGpCo5IoBuQ9tS5iiVKhCpTcB4pW4qw==} - engines: {node: '>= 12.0.0'} - comment-parser@1.4.7: resolution: {integrity: sha512-0h+uSNtQGW3D98eQt3jJ8L06Fves8hncB4V/PKdw/Qb8Hnk19VaKuTr55UNRYiSoVa7WwrFls+rh3ux9agmkeQ==} engines: {node: '>= 12.0.0'} @@ -1298,8 +1275,8 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - electron-to-chromium@1.5.381: - resolution: {integrity: sha512-n9Wa6yB+vDsGuA8AKbl/0z7HbvWqt5jxIdvr1IUicd0ryPrk7/xzwqLv8D9AbbvZ6avVNtXYLTfmgFHkwkyelg==} + electron-to-chromium@1.5.393: + resolution: {integrity: sha512-kiDJdIUawuEIcp9XoICKp1iTYDEbgguIPq526N1Q7jIQDeQ3CqoMx71025PI/7E48Ddtw2HuWsVjY7afEgNxmg==} emoji-regex@10.6.0: resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} @@ -1314,20 +1291,20 @@ packages: resolution: {integrity: sha512-YGRs8knHhKHVShLkFET/rWAU8kmHbOV5LwN938RHI0pljAJ1Gf6SzXsSmRaEzcXTtOOmVqJ5+WtQPL5uigY50Q==} engines: {node: '>=14'} - enhanced-resolve@5.24.1: - resolution: {integrity: sha512-7DdUaTjmNwMcH2gLr1qycesKII3BK4RLy/mdAb7x10Lq7bR4aNKHt1BR1ZALSv0rPM/hF5wYF0PhGop/rJm8vw==} + enhanced-resolve@5.24.2: + resolution: {integrity: sha512-rpsZEGT1jFuve6QlpyRp9ckQ+kN61hvF9BzCPyMdaKTm8UJce96KBn3sorXOFXlzjPrs3Vc4T1NsSroZ3PxlFw==} engines: {node: '>=10.13.0'} entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} - environment@1.1.0: - resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} - engines: {node: '>=18'} + entities@7.0.1: + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} + engines: {node: '>=0.12'} - esbuild@0.28.0: - resolution: {integrity: sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==} + esbuild@0.28.1: + resolution: {integrity: sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==} engines: {node: '>=18'} hasBin: true @@ -1378,10 +1355,9 @@ packages: peerDependencies: eslint: '*' - eslint-plugin-command@3.5.2: - resolution: {integrity: sha512-PA59QAkQDwvcCMEt5lYLJLI3zDGVKJeC4id/pcRY2XdRYhSGW7iyYT1VC1N3bmpuvu6Qb/9QptiS3GJMjeGTJg==} + eslint-plugin-command@3.5.3: + resolution: {integrity: sha512-JIhmUOW2K2Dw1K+p4mtj5potkqTZ4ZaicrTkgCygPZCWErP2+O2F46n7ZwGKapeEjiwcVqoY8u01SxNUUXWPeQ==} peerDependencies: - '@typescript-eslint/rule-tester': '*' '@typescript-eslint/typescript-estree': '*' '@typescript-eslint/utils': '*' eslint: '*' @@ -1398,20 +1374,20 @@ packages: peerDependencies: eslint: ^9.0.0 || ^10.0.0 - eslint-plugin-jsdoc@63.0.10: - resolution: {integrity: sha512-A9UIWsCquaKnit7rasXxYf12hhGIdDRjv65/RUE3AxbT6rdKBvr3MjH37g3gP+g4ipQMXuMn9slFKjO+vqNfkg==} + eslint-plugin-jsdoc@63.1.0: + resolution: {integrity: sha512-Vo0Mvhxi6B63gLIDI86QChkiKE79MxxM0I16gMN/HJn0rvJvMIG/nmn+KPcsx+GWYDQq6X0UfNRjRK1+97NYVg==} engines: {node: ^22.13.0 || >=24} peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 - eslint-plugin-jsonc@3.2.0: - resolution: {integrity: sha512-eQSxJypkpNycQAFE/ph/j+bDD2MiCcojxNb+7nugYzuQZvELYg4YO1Cv1y/8MbjPIEw5u3Lx0VPOTlqJJIhPPw==} + eslint-plugin-jsonc@3.3.0: + resolution: {integrity: sha512-CsTR8aDcShDg6A71ZppLaWiPoSo2J1Ivjm5/c4Mnb9sxgwWq+WG2PgeoAnj7SwzDPJB75tlHvLrGy6ntooIitg==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} peerDependencies: eslint: '>=9.38.0' - eslint-plugin-n@18.2.1: - resolution: {integrity: sha512-aO3C9//yq8JIvYOi/T+jPvcZ9hZzpwzbR8esrYpFtgE9vpbyM8kn42AQOtIqYspVmpaSWr8X+nrlQuAJYxXAaw==} + eslint-plugin-n@18.2.2: + resolution: {integrity: sha512-gOO0lIqwEjZ750kv9/SptCWArUoAZXJoBr0vYWTO2dCBxctHUXlBIigiC8xuxxr/NKqgIT6Ehz1xRcilj8a5cA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} peerDependencies: eslint: '>=8.57.1' @@ -1427,8 +1403,8 @@ packages: resolution: {integrity: sha512-4S3/9Nb7A2tiMcpzEQE9bQSlpeOz6WJkgryBuou/SA8W2x2c8Zf4j0NvTKBjv6qNhF9T79tmkecm/0CHqV0UGg==} engines: {node: '>=5.0.0'} - eslint-plugin-perfectionist@5.9.1: - resolution: {integrity: sha512-30mHLNfEhzwaq5cquyWgnzrNXvT8AzwIwyeH5aj4U5ajhHSF2uiO6i09xpMDLv7koaZVTjLsvYF4m3gK/15tyA==} + eslint-plugin-perfectionist@5.10.0: + resolution: {integrity: sha512-HiqpDrUDbGrMC6iHQbemgDyHJ0366Vyz/qRWmxQcSAkmG25cXr8BdRgx8yAhOKhEfBXn8Rnf/mTCsV4EqUJSxg==} engines: {node: ^20.0.0 || >=22.0.0} peerDependencies: eslint: ^8.45.0 || ^9.0.0 || ^10.0.0 @@ -1479,8 +1455,8 @@ packages: '@typescript-eslint/parser': optional: true - eslint-plugin-yml@3.5.0: - resolution: {integrity: sha512-u2UkSIp/+th1wYCt0QWeCI6agf24dxX6PbFfCCN18gGQHmXh3Cn9D/U5OiP5RNYTEwjXCLusj1OJRK+zwdvFqQ==} + eslint-plugin-yml@3.6.0: + resolution: {integrity: sha512-8lSqBIiOJO8ms1gktdlNaVGm3zXQJiYeKhQmtIG66XzU58kFDOjQae4sufQEMGHC4bP8VxiaH3tjU5PpDB6euw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24.0.0} peerDependencies: eslint: '>=9.38.0' @@ -1507,8 +1483,8 @@ packages: resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@10.6.0: - resolution: {integrity: sha512-6lVbcqSodALYo+4ELD0heG6lFiFxnLMuLkiMi2qV8LMp54N8tE8FT1GMH+ev4Ti00nFjNze2+Su6DsV5OQW3Dg==} + eslint@10.7.0: + resolution: {integrity: sha512-GVTD7s1vdIl6UYvAfriOPeY1Df8LIZjfofLvHwde+erDHGGuHyuM6xoxRxmHiebhYuD2p1vN4wWh0XzPARSGDQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: @@ -1547,9 +1523,6 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - eventemitter3@5.0.4: - resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} - execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} @@ -1572,8 +1545,8 @@ packages: fast-string-width@3.0.2: resolution: {integrity: sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==} - fast-uri@3.1.2: - resolution: {integrity: sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==} + fast-uri@3.1.4: + resolution: {integrity: sha512-8JnbkQ4juDyvYs4mgFGQqg4yCYtFDtUtmp2QIQq11ZZe5CFQ5wcqm1rqDgAh/QdMySuBnPzMUiJUNZG5N/AiQw==} fast-wrap-ansi@0.2.2: resolution: {integrity: sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==} @@ -1682,8 +1655,8 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} - ignore@7.0.5: - resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + ignore@7.0.6: + resolution: {integrity: sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==} engines: {node: '>= 4'} import-cwd@3.0.0: @@ -1725,10 +1698,6 @@ packages: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - is-fullwidth-code-point@5.1.0: - resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} - engines: {node: '>=18'} - is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -1760,10 +1729,6 @@ packages: resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} hasBin: true - jsdoc-type-pratt-parser@7.1.1: - resolution: {integrity: sha512-/2uqY7x6bsrpi3i9LVU6J89352C0rpMk0as8trXxCtvd4kPk1ke/Eyif6wqfSLvoNJqcDG9Vk4UsXgygzCt2xA==} - engines: {node: '>=20.0.0'} - jsdoc-type-pratt-parser@7.2.0: resolution: {integrity: sha512-dh140MMgjyg3JhJZY/+iEzW+NO5xR2gpbDFKHqotCmexElVntw7GjWjt511+C/Ef02RU5TKYrJo/Xlzk+OLaTw==} engines: {node: '>=20.0.0'} @@ -1877,15 +1842,14 @@ packages: resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} engines: {node: '>= 12.0.0'} - lint-staged@17.0.8: - resolution: {integrity: sha512-B2P/d+jVW0UXOQ0MVMLrB/9ydA1P+zz6jYfdrbbEd9ur3S2rcbduFWKiUCC02Sm5hbC8nrm7y24WuYMG54HfxA==} + linkify-it@5.0.2: + resolution: {integrity: sha512-ONTm2jCMAVZjgQa/Fy1kScXsuOoF5NPTsoFBdE1KVIZ2vAh/r9+Bqo+0jINCBYnavTPQZz38QzFTme79ENoN3Q==} + + lint-staged@17.1.0: + resolution: {integrity: sha512-d7UQRu/9ZPgfu4+hu/k0wny5GEaIxo+2jb2LJqQDkE7cHRTm1HGqNUDq5UOwsGPpjpaNAFmgAsYo3TR+i9cSJw==} engines: {node: '>=22.22.1'} hasBin: true - listr2@10.2.2: - resolution: {integrity: sha512-JtNtbZj8q5BnDMR7trpwvwk3RIrANtIVzEUm8w7amp6xelLgyuq+4WZoTH913XaQAoH/cNdYhaNzBPA2U3xbDw==} - engines: {node: '>=22.13.0'} - local-pkg@1.2.1: resolution: {integrity: sha512-++gUqRDEvcnN6Zhqrr+y/CkVEHhlrR96vZn3nZZPYzMcBUyBtTKzB9NadClFIsIVSsu+3i9tfk/erqy9kAmt7Q==} engines: {node: '>=14'} @@ -1894,26 +1858,26 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - log-symbols@7.0.1: resolution: {integrity: sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==} engines: {node: '>=18'} - log-update@6.1.0: - resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} - engines: {node: '>=18'} - longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + lunr@2.3.9: + resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} + magic-regexp@0.10.0: resolution: {integrity: sha512-Uly1Bu4lO1hwHUW0CQeSWuRtzCMNO00CmXtS8N6fyvB3B979GOEEeAkiTUDsmbYLAbvpUS/Kt5c4ibosAzVyVg==} magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + markdown-it@14.3.0: + resolution: {integrity: sha512-RCEsPjR+sr0x+AuYp601tKTkgFG4YEPLCzHST3cQ/fhlJkqAkz1L2/Qbp1j9qw5SBwQHFBoW8+hoN5xssOF0Tw==} + hasBin: true + markdown-table@3.0.4: resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} @@ -1959,6 +1923,9 @@ packages: mdn-data@2.27.1: resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} + mdurl@2.0.0: + resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} + merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -2085,8 +2052,8 @@ packages: mlly@1.8.2: resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==} - module-replacements@3.0.0-beta.8: - resolution: {integrity: sha512-sc8TepP9elxoOBXEpxmhPzKKjTjbswHVcmsKGbgvm3k6jZlLu/WMV/Lfmga6IGMgHU/V3WtY2s6VEgM4nTElUQ==} + module-replacements@3.0.0: + resolution: {integrity: sha512-tHIZqde+RlyNRobAIjfcH5UIgIrEbZbDGRL6J/x+HERX/g8O9mrm0p6knJbsTXmQtDvZ+eFP+xfOP3/9jHk6YA==} mrmime@2.0.1: resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} @@ -2098,8 +2065,8 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - nanoid@3.3.15: - resolution: {integrity: sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==} + nanoid@3.3.16: + resolution: {integrity: sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true @@ -2120,8 +2087,8 @@ packages: node-fetch-native@1.6.7: resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} - node-releases@2.0.50: - resolution: {integrity: sha512-J6l92tKHX6w8Jy5nO1Vuc01NoIiRGi/d6qBKVxh+IQ8Cr3b6HbVNfKiF8ZpFKufTwpwxMmce2W3iQZ861ZRyTg==} + node-releases@2.0.51: + resolution: {integrity: sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==} engines: {node: '>=18'} npm-run-path@4.0.1: @@ -2174,8 +2141,8 @@ packages: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} - package-manager-detector@1.6.0: - resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==} + package-manager-detector@1.7.0: + resolution: {integrity: sha512-xg1eHpwYL/D/HEdWw2goFZP6vV0FH7W+PZ5rFkGjdIDLtxq7EkzBUeT3m+lndYCt8wKbmofUu1MUdMCXkCk9ZQ==} parse-github-url@1.0.4: resolution: {integrity: sha512-CEtCOt55fHmd6DpBc/N7H5NC4vJpcquhzzs9Iw2mRj8bVxo1O5TQI5MXKOMO7+yBOqD+5dKCCRK4Kj1KskZc6Q==} @@ -2215,8 +2182,8 @@ packages: picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - picomatch@4.0.4: - resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + picomatch@4.0.5: + resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==} engines: {node: '>=12'} pkg-types@1.3.1: @@ -2236,14 +2203,18 @@ packages: resolution: {integrity: sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==} engines: {node: '>=4'} - postcss@8.5.16: - resolution: {integrity: sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==} + postcss@8.5.20: + resolution: {integrity: sha512-lW616l85ucIQL+FocMmL7pQFPqBmwejrCMg+iPxyImlrANNJG9NHq/RkyCZopDhd8C3LA03PHRJDjkbGu8vvug==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} + punycode.js@2.3.1: + resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} + engines: {node: '>=6'} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -2308,11 +2279,8 @@ packages: resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} engines: {node: '>=18'} - rfdc@1.4.1: - resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - - rolldown@1.1.3: - resolution: {integrity: sha512-1F1eEtUBtFvcGm1HQ9TiUIUHPQG7mSAODrhIzjxoUEFuo8OcbrGLiVLkevNgj84TE4lnHvnumwFjhJO5Eu135g==} + rolldown@1.1.5: + resolution: {integrity: sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -2326,11 +2294,6 @@ packages: resolution: {integrity: sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==} engines: {node: ^14.0.0 || >=16.0.0} - semver@7.8.3: - resolution: {integrity: sha512-wnilbGyMxzbY7dNOl7jpKbLSjcfeweJWU5j4+u5qW+6/wuGD9KzIGOyZnQVSBM9E7DtWaaH3CyHkppYrKYoxwg==} - engines: {node: '>=10'} - hasBin: true - semver@7.8.5: resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} engines: {node: '>=10'} @@ -2374,14 +2337,6 @@ packages: sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - slice-ansi@7.1.2: - resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} - engines: {node: '>=18'} - - slice-ansi@8.0.0: - resolution: {integrity: sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==} - engines: {node: '>=20'} - source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -2419,8 +2374,8 @@ packages: resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} - string-width@8.2.1: - resolution: {integrity: sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA==} + string-width@8.2.2: + resolution: {integrity: sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==} engines: {node: '>=20'} strip-ansi@6.0.1: @@ -2475,6 +2430,9 @@ packages: resolution: {integrity: sha512-A5F0cM6+mDleacLIEUkmfpkBbnHJFV1d2rprHU2MXNk7mlxHq2zGojA+SRvQD1RoMo9gqjZPWEaKG4v1BQ48lw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} + toml@3.0.0: + resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + totalist@3.0.1: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} @@ -2492,8 +2450,8 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsx@4.22.4: - resolution: {integrity: sha512-X8EX+XV4QR5xCsrgxaED954zTDfY8KqlDtskKEL0cHhyS/P8b4IFOvGDQpsC9Q1XnLq915wEfwwY/zzskCtmhg==} + tsx@4.23.1: + resolution: {integrity: sha512-GQHnkIfxyx1wYCOS/wonik5MVRZU9hi1TEZmzGZSCJB1y9YgoZ8H6itNE/u4suE+yLmOzuE4E5S4TZ/ZX2wcWQ==} engines: {node: '>=18.0.0'} hasBin: true @@ -2508,11 +2466,21 @@ packages: type-level-regexp@0.1.17: resolution: {integrity: sha512-wTk4DH3cxwk196uGLK/E9pE45aLfeKJacKmcEgEOA/q5dnPGNxXt0cfYdFxb57L+sEpf1oJH4Dnx/pnRcku9jg==} + typedoc@0.28.20: + resolution: {integrity: sha512-uSKqkh8Cr48vllnEy+jdaAgOeR6Y+QCBW7usgUsKj7gJEfR7stw9U/fE49LBnj2tPRKPY0c0EBJSWe9Appmplg==} + engines: {node: '>= 18', pnpm: '>= 10'} + hasBin: true + peerDependencies: + typescript: 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x || 5.9.x || 6.0.x + typescript@6.0.3: resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} engines: {node: '>=14.17'} hasBin: true + uc.micro@2.1.0: + resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + ufo@1.6.4: resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==} @@ -2530,9 +2498,6 @@ packages: undici-types@7.24.6: resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==} - undici-types@8.3.0: - resolution: {integrity: sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==} - unist-util-is@6.0.1: resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} @@ -2552,12 +2517,12 @@ packages: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} - unocss@66.7.4: - resolution: {integrity: sha512-a9Aqre6SS036sAO5qo0hrOAfrgWuilNIO3ekwp/tWz0CtsL7SXOA3lAtHi3WP0vtIsWbbYJEEGX4n4VBoQprqA==} + unocss@66.7.5: + resolution: {integrity: sha512-nAdmU8TwnQoiLnQjZ6Hm1GmHy9lTexKsAZNEJtZnxN9wyFRc1eLjQgmh9r7UEGxBQMQLD8OZOgmk5HpwObbh0Q==} peerDependencies: - '@unocss/astro': 66.7.4 - '@unocss/postcss': 66.7.4 - '@unocss/webpack': 66.7.4 + '@unocss/astro': 66.7.5 + '@unocss/postcss': 66.7.5 + '@unocss/webpack': 66.7.5 peerDependenciesMeta: '@unocss/astro': optional: true @@ -2593,8 +2558,8 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} - vite@8.1.0: - resolution: {integrity: sha512-BuJcQK/56NQTWDGn4ABea3q4SSBdNPWwNZKTkkUpcMPnLoquSYH8llRtSUIgoL1KSCpHt5eghLShn50mH36y7Q==} + vite@8.1.5: + resolution: {integrity: sha512-7ULLwsCdYx/nRyrpiEwvqb5TFHrMVZyBt+rg/OAXT7rgj/z+DtTDyKFeLAdDkubDVDKD8jOsndmy7m55XcfUsw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -2661,10 +2626,6 @@ packages: wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - wrap-ansi@10.0.0: - resolution: {integrity: sha512-SGcvg80f0wUy2/fXES19feHMz8E0JoXv2uNgHOu4Dgi2OrCy1lqwFYEJz1BLbDI0exjPMe/ZdzZ/YpGECBG/aQ==} - engines: {node: '>=20'} - wrap-ansi@8.1.0: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} @@ -2681,8 +2642,8 @@ packages: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - yaml-eslint-parser@2.0.0: - resolution: {integrity: sha512-h0uDm97wvT2bokfwwTmY6kJ1hp6YDFL0nRHwNKz8s/VD1FH/vvZjAKoMUE+un0eaYBSG7/c6h+lJTP+31tjgTw==} + yaml-eslint-parser@2.1.0: + resolution: {integrity: sha512-1zo9KRfp6vIAXBEhWAz09ex3hUwh3T+/6dGbGteHvNseA0Uk4FgQnPES55klZ6cDzSy9FpgKS0D/CoLUvCCj4w==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} yaml@2.9.0: @@ -2711,48 +2672,47 @@ packages: snapshots: - '@antfu/eslint-config@9.1.0(@typescript-eslint/rule-tester@8.56.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3))(@typescript-eslint/typescript-estree@8.62.1(typescript@6.0.3))(@typescript-eslint/utils@8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3))(@vue/compiler-sfc@3.5.20)(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3)': + '@antfu/eslint-config@9.1.0(@typescript-eslint/typescript-estree@8.64.0(typescript@6.0.3))(@typescript-eslint/utils@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3))(@vue/compiler-sfc@3.5.40)(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: '@antfu/install-pkg': 1.1.0 - '@clack/prompts': 1.6.0 - '@e18e/eslint-plugin': 0.5.1(eslint@10.6.0(jiti@2.7.0)) - '@eslint-community/eslint-plugin-eslint-comments': 4.7.2(eslint@10.6.0(jiti@2.7.0)) - '@eslint/markdown': 8.0.2 - '@stylistic/eslint-plugin': 5.10.0(eslint@10.6.0(jiti@2.7.0)) - '@typescript-eslint/eslint-plugin': 8.62.1(@typescript-eslint/parser@8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - '@typescript-eslint/parser': 8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - '@vitest/eslint-plugin': 1.6.20(@typescript-eslint/eslint-plugin@8.62.1(@typescript-eslint/parser@8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@clack/prompts': 1.7.0 + '@e18e/eslint-plugin': 0.5.1(eslint@10.7.0(jiti@2.7.0)) + '@eslint-community/eslint-plugin-eslint-comments': 4.7.2(eslint@10.7.0(jiti@2.7.0)) + '@eslint/markdown': 8.0.3 + '@stylistic/eslint-plugin': 5.10.0(eslint@10.7.0(jiti@2.7.0)) + '@typescript-eslint/eslint-plugin': 8.64.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/parser': 8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3) + '@vitest/eslint-plugin': 1.6.23(@typescript-eslint/eslint-plugin@8.64.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3) ansis: 4.3.1 cac: 7.0.0 - eslint: 10.6.0(jiti@2.7.0) - eslint-config-flat-gitignore: 2.3.0(eslint@10.6.0(jiti@2.7.0)) + eslint: 10.7.0(jiti@2.7.0) + eslint-config-flat-gitignore: 2.3.0(eslint@10.7.0(jiti@2.7.0)) eslint-flat-config-utils: 3.2.0 - eslint-merge-processors: 2.0.0(eslint@10.6.0(jiti@2.7.0)) - eslint-plugin-antfu: 3.2.3(eslint@10.6.0(jiti@2.7.0)) - eslint-plugin-command: 3.5.2(@typescript-eslint/rule-tester@8.56.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3))(@typescript-eslint/typescript-estree@8.62.1(typescript@6.0.3))(@typescript-eslint/utils@8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.6.0(jiti@2.7.0)) - eslint-plugin-import-lite: 0.6.0(eslint@10.6.0(jiti@2.7.0)) - eslint-plugin-jsdoc: 63.0.10(eslint@10.6.0(jiti@2.7.0)) - eslint-plugin-jsonc: 3.2.0(eslint@10.6.0(jiti@2.7.0)) - eslint-plugin-n: 18.2.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + eslint-merge-processors: 2.0.0(eslint@10.7.0(jiti@2.7.0)) + eslint-plugin-antfu: 3.2.3(eslint@10.7.0(jiti@2.7.0)) + eslint-plugin-command: 3.5.3(@typescript-eslint/typescript-estree@8.64.0(typescript@6.0.3))(@typescript-eslint/utils@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.7.0(jiti@2.7.0)) + eslint-plugin-import-lite: 0.6.0(eslint@10.7.0(jiti@2.7.0)) + eslint-plugin-jsdoc: 63.1.0(eslint@10.7.0(jiti@2.7.0)) + eslint-plugin-jsonc: 3.3.0(eslint@10.7.0(jiti@2.7.0)) + eslint-plugin-n: 18.2.2(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3) eslint-plugin-no-only-tests: 3.4.0 - eslint-plugin-perfectionist: 5.9.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - eslint-plugin-pnpm: 1.6.1(eslint@10.6.0(jiti@2.7.0)) - eslint-plugin-regexp: 3.1.1(eslint@10.6.0(jiti@2.7.0)) - eslint-plugin-toml: 1.4.0(eslint@10.6.0(jiti@2.7.0)) - eslint-plugin-unicorn: 68.0.0(eslint@10.6.0(jiti@2.7.0)) - eslint-plugin-unused-imports: 4.4.1(@typescript-eslint/eslint-plugin@8.62.1(@typescript-eslint/parser@8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.6.0(jiti@2.7.0)) - eslint-plugin-vue: 10.9.2(@stylistic/eslint-plugin@5.10.0(eslint@10.6.0(jiti@2.7.0)))(@typescript-eslint/parser@8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.6.0(jiti@2.7.0))(vue-eslint-parser@10.4.1(eslint@10.6.0(jiti@2.7.0))) - eslint-plugin-yml: 3.5.0(eslint@10.6.0(jiti@2.7.0)) - eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.20)(eslint@10.6.0(jiti@2.7.0)) + eslint-plugin-perfectionist: 5.10.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3) + eslint-plugin-pnpm: 1.6.1(eslint@10.7.0(jiti@2.7.0)) + eslint-plugin-regexp: 3.1.1(eslint@10.7.0(jiti@2.7.0)) + eslint-plugin-toml: 1.4.0(eslint@10.7.0(jiti@2.7.0)) + eslint-plugin-unicorn: 68.0.0(eslint@10.7.0(jiti@2.7.0)) + eslint-plugin-unused-imports: 4.4.1(@typescript-eslint/eslint-plugin@8.64.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.7.0(jiti@2.7.0)) + eslint-plugin-vue: 10.9.2(@stylistic/eslint-plugin@5.10.0(eslint@10.7.0(jiti@2.7.0)))(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.7.0(jiti@2.7.0))(vue-eslint-parser@10.4.1(eslint@10.7.0(jiti@2.7.0))) + eslint-plugin-yml: 3.6.0(eslint@10.7.0(jiti@2.7.0)) + eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.40)(eslint@10.7.0(jiti@2.7.0)) globals: 17.7.0 local-pkg: 1.2.1 parse-gitignore: 2.0.0 toml-eslint-parser: 1.0.3 - vue-eslint-parser: 10.4.1(eslint@10.6.0(jiti@2.7.0)) - yaml-eslint-parser: 2.0.0 + vue-eslint-parser: 10.4.1(eslint@10.7.0(jiti@2.7.0)) + yaml-eslint-parser: 2.1.0 transitivePeerDependencies: - '@eslint/json' - - '@typescript-eslint/rule-tester' - '@typescript-eslint/typescript-estree' - '@typescript-eslint/utils' - '@vue/compiler-sfc' @@ -2764,7 +2724,7 @@ snapshots: '@antfu/install-pkg@1.1.0': dependencies: - package-manager-detector: 1.6.0 + package-manager-detector: 1.7.0 tinyexec: 1.2.4 '@babel/helper-string-parser@7.29.7': {} @@ -2780,25 +2740,25 @@ snapshots: '@babel/helper-string-parser': 7.29.7 '@babel/helper-validator-identifier': 7.29.7 - '@clack/core@1.4.2': + '@clack/core@1.4.3': dependencies: fast-wrap-ansi: 0.2.2 sisteransi: 1.0.5 - '@clack/prompts@1.6.0': + '@clack/prompts@1.7.0': dependencies: - '@clack/core': 1.4.2 + '@clack/core': 1.4.3 fast-string-width: 3.0.2 fast-wrap-ansi: 0.2.2 sisteransi: 1.0.5 - '@e18e/eslint-plugin@0.5.1(eslint@10.6.0(jiti@2.7.0))': + '@e18e/eslint-plugin@0.5.1(eslint@10.7.0(jiti@2.7.0))': dependencies: empathic: 2.0.1 - module-replacements: 3.0.0-beta.8 + module-replacements: 3.0.0 semver: 7.8.5 optionalDependencies: - eslint: 10.6.0(jiti@2.7.0) + eslint: 10.7.0(jiti@2.7.0) '@emnapi/core@1.10.0': dependencies: @@ -2832,120 +2792,112 @@ snapshots: tslib: 2.8.1 optional: true - '@es-joy/jsdoccomment@0.84.0': + '@es-joy/jsdoccomment@0.88.0': dependencies: '@types/estree': 1.0.9 - '@typescript-eslint/types': 8.62.1 - comment-parser: 1.4.5 - esquery: 1.7.0 - jsdoc-type-pratt-parser: 7.1.1 - - '@es-joy/jsdoccomment@0.87.0': - dependencies: - '@types/estree': 1.0.9 - '@typescript-eslint/types': 8.62.1 + '@typescript-eslint/types': 8.64.0 comment-parser: 1.4.7 esquery: 1.7.0 jsdoc-type-pratt-parser: 7.2.0 '@es-joy/resolve.exports@1.2.0': {} - '@esbuild/aix-ppc64@0.28.0': + '@esbuild/aix-ppc64@0.28.1': optional: true - '@esbuild/android-arm64@0.28.0': + '@esbuild/android-arm64@0.28.1': optional: true - '@esbuild/android-arm@0.28.0': + '@esbuild/android-arm@0.28.1': optional: true - '@esbuild/android-x64@0.28.0': + '@esbuild/android-x64@0.28.1': optional: true - '@esbuild/darwin-arm64@0.28.0': + '@esbuild/darwin-arm64@0.28.1': optional: true - '@esbuild/darwin-x64@0.28.0': + '@esbuild/darwin-x64@0.28.1': optional: true - '@esbuild/freebsd-arm64@0.28.0': + '@esbuild/freebsd-arm64@0.28.1': optional: true - '@esbuild/freebsd-x64@0.28.0': + '@esbuild/freebsd-x64@0.28.1': optional: true - '@esbuild/linux-arm64@0.28.0': + '@esbuild/linux-arm64@0.28.1': optional: true - '@esbuild/linux-arm@0.28.0': + '@esbuild/linux-arm@0.28.1': optional: true - '@esbuild/linux-ia32@0.28.0': + '@esbuild/linux-ia32@0.28.1': optional: true - '@esbuild/linux-loong64@0.28.0': + '@esbuild/linux-loong64@0.28.1': optional: true - '@esbuild/linux-mips64el@0.28.0': + '@esbuild/linux-mips64el@0.28.1': optional: true - '@esbuild/linux-ppc64@0.28.0': + '@esbuild/linux-ppc64@0.28.1': optional: true - '@esbuild/linux-riscv64@0.28.0': + '@esbuild/linux-riscv64@0.28.1': optional: true - '@esbuild/linux-s390x@0.28.0': + '@esbuild/linux-s390x@0.28.1': optional: true - '@esbuild/linux-x64@0.28.0': + '@esbuild/linux-x64@0.28.1': optional: true - '@esbuild/netbsd-arm64@0.28.0': + '@esbuild/netbsd-arm64@0.28.1': optional: true - '@esbuild/netbsd-x64@0.28.0': + '@esbuild/netbsd-x64@0.28.1': optional: true - '@esbuild/openbsd-arm64@0.28.0': + '@esbuild/openbsd-arm64@0.28.1': optional: true - '@esbuild/openbsd-x64@0.28.0': + '@esbuild/openbsd-x64@0.28.1': optional: true - '@esbuild/openharmony-arm64@0.28.0': + '@esbuild/openharmony-arm64@0.28.1': optional: true - '@esbuild/sunos-x64@0.28.0': + '@esbuild/sunos-x64@0.28.1': optional: true - '@esbuild/win32-arm64@0.28.0': + '@esbuild/win32-arm64@0.28.1': optional: true - '@esbuild/win32-ia32@0.28.0': + '@esbuild/win32-ia32@0.28.1': optional: true - '@esbuild/win32-x64@0.28.0': + '@esbuild/win32-x64@0.28.1': optional: true - '@eslint-community/eslint-plugin-eslint-comments@4.7.2(eslint@10.6.0(jiti@2.7.0))': + '@eslint-community/eslint-plugin-eslint-comments@4.7.2(eslint@10.7.0(jiti@2.7.0))': dependencies: escape-string-regexp: 4.0.0 - eslint: 10.6.0(jiti@2.7.0) - ignore: 7.0.5 + eslint: 10.7.0(jiti@2.7.0) + ignore: 7.0.6 - '@eslint-community/eslint-utils@4.9.1(eslint@10.6.0(jiti@2.7.0))': + '@eslint-community/eslint-utils@4.9.1(eslint@10.7.0(jiti@2.7.0))': dependencies: - eslint: 10.6.0(jiti@2.7.0) + eslint: 10.7.0(jiti@2.7.0) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} - '@eslint/compat@2.1.0(eslint@10.6.0(jiti@2.7.0))': + '@eslint/compat@2.1.0(eslint@10.7.0(jiti@2.7.0))': dependencies: '@eslint/core': 1.2.1 optionalDependencies: - eslint: 10.6.0(jiti@2.7.0) + eslint: 10.7.0(jiti@2.7.0) '@eslint/config-array@0.23.5': dependencies: @@ -2967,7 +2919,7 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 - '@eslint/markdown@8.0.2': + '@eslint/markdown@8.0.3': dependencies: '@eslint/core': 1.2.1 '@eslint/plugin-kit': 0.7.2 @@ -2990,6 +2942,14 @@ snapshots: '@eslint/core': 1.2.1 levn: 0.4.1 + '@gerrit0/mini-shiki@3.23.0': + dependencies: + '@shikijs/engine-oniguruma': 3.23.0 + '@shikijs/langs': 3.23.0 + '@shikijs/themes': 3.23.0 + '@shikijs/types': 3.23.0 + '@shikijs/vscode-textmate': 10.0.2 + '@humanfs/core@0.19.2': dependencies: '@humanfs/types': 0.15.0 @@ -3006,14 +2966,14 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} - '@iconify/json@2.2.493': + '@iconify/json@2.2.502': dependencies: '@iconify/types': 2.0.0 pathe: 2.0.3 '@iconify/types@2.0.0': {} - '@iconify/utils@3.1.3': + '@iconify/utils@3.1.4': dependencies: '@antfu/install-pkg': 1.1.0 '@iconify/types': 2.0.0 @@ -3120,7 +3080,7 @@ snapshots: '@oxc-project/types@0.131.0': {} - '@oxc-project/types@0.137.0': {} + '@oxc-project/types@0.139.0': {} '@pkgr/core@0.3.6': {} @@ -3130,68 +3090,88 @@ snapshots: dependencies: quansync: 1.0.0 - '@rolldown/binding-android-arm64@1.1.3': + '@rolldown/binding-android-arm64@1.1.5': optional: true - '@rolldown/binding-darwin-arm64@1.1.3': + '@rolldown/binding-darwin-arm64@1.1.5': optional: true - '@rolldown/binding-darwin-x64@1.1.3': + '@rolldown/binding-darwin-x64@1.1.5': optional: true - '@rolldown/binding-freebsd-x64@1.1.3': + '@rolldown/binding-freebsd-x64@1.1.5': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.1.3': + '@rolldown/binding-linux-arm-gnueabihf@1.1.5': optional: true - '@rolldown/binding-linux-arm64-gnu@1.1.3': + '@rolldown/binding-linux-arm64-gnu@1.1.5': optional: true - '@rolldown/binding-linux-arm64-musl@1.1.3': + '@rolldown/binding-linux-arm64-musl@1.1.5': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.1.3': + '@rolldown/binding-linux-ppc64-gnu@1.1.5': optional: true - '@rolldown/binding-linux-s390x-gnu@1.1.3': + '@rolldown/binding-linux-s390x-gnu@1.1.5': optional: true - '@rolldown/binding-linux-x64-gnu@1.1.3': + '@rolldown/binding-linux-x64-gnu@1.1.5': optional: true - '@rolldown/binding-linux-x64-musl@1.1.3': + '@rolldown/binding-linux-x64-musl@1.1.5': optional: true - '@rolldown/binding-openharmony-arm64@1.1.3': + '@rolldown/binding-openharmony-arm64@1.1.5': optional: true - '@rolldown/binding-wasm32-wasi@1.1.3': + '@rolldown/binding-wasm32-wasi@1.1.5': dependencies: '@emnapi/core': 1.11.1 '@emnapi/runtime': 1.11.1 '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) optional: true - '@rolldown/binding-win32-arm64-msvc@1.1.3': + '@rolldown/binding-win32-arm64-msvc@1.1.5': optional: true - '@rolldown/binding-win32-x64-msvc@1.1.3': + '@rolldown/binding-win32-x64-msvc@1.1.5': optional: true '@rolldown/pluginutils@1.0.1': {} + '@shikijs/engine-oniguruma@3.23.0': + dependencies: + '@shikijs/types': 3.23.0 + '@shikijs/vscode-textmate': 10.0.2 + + '@shikijs/langs@3.23.0': + dependencies: + '@shikijs/types': 3.23.0 + + '@shikijs/themes@3.23.0': + dependencies: + '@shikijs/types': 3.23.0 + + '@shikijs/types@3.23.0': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.5 + + '@shikijs/vscode-textmate@10.0.2': {} + '@sindresorhus/base62@1.0.0': {} - '@stylistic/eslint-plugin@5.10.0(eslint@10.6.0(jiti@2.7.0))': + '@stylistic/eslint-plugin@5.10.0(eslint@10.7.0(jiti@2.7.0))': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0(jiti@2.7.0)) - '@typescript-eslint/types': 8.62.1 - eslint: 10.6.0(jiti@2.7.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0(jiti@2.7.0)) + '@typescript-eslint/types': 8.64.0 + eslint: 10.7.0(jiti@2.7.0) eslint-visitor-keys: 4.2.1 espree: 10.4.0 estraverse: 5.3.0 - picomatch: 4.0.4 + picomatch: 4.0.5 '@tybys/wasm-util@0.10.3': dependencies: @@ -3209,9 +3189,9 @@ snapshots: '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 26.0.1 + '@types/node': 25.9.5 - '@types/hast@3.0.4': + '@types/hast@3.0.5': dependencies: '@types/unist': 3.0.3 @@ -3219,7 +3199,7 @@ snapshots: '@types/jsonfile@6.1.4': dependencies: - '@types/node': 26.0.1 + '@types/node': 25.9.5 '@types/katex@0.16.8': {} @@ -3229,128 +3209,78 @@ snapshots: '@types/ms@2.1.0': {} - '@types/node@25.9.4': + '@types/node@25.9.5': dependencies: undici-types: 7.24.6 - '@types/node@26.0.1': - dependencies: - undici-types: 8.3.0 - '@types/unist@3.0.3': {} - '@typescript-eslint/eslint-plugin@8.62.1(@typescript-eslint/parser@8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3)': + '@typescript-eslint/eslint-plugin@8.64.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - '@typescript-eslint/scope-manager': 8.62.1 - '@typescript-eslint/type-utils': 8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - '@typescript-eslint/utils': 8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - '@typescript-eslint/visitor-keys': 8.62.1 - eslint: 10.6.0(jiti@2.7.0) - ignore: 7.0.5 + '@typescript-eslint/parser': 8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/scope-manager': 8.64.0 + '@typescript-eslint/type-utils': 8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/utils': 8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.64.0 + eslint: 10.7.0(jiti@2.7.0) + ignore: 7.0.6 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@6.0.3) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.56.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3)': + '@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: - '@typescript-eslint/scope-manager': 8.56.1 - '@typescript-eslint/types': 8.56.1 - '@typescript-eslint/typescript-estree': 8.56.1(typescript@6.0.3) - '@typescript-eslint/visitor-keys': 8.56.1 + '@typescript-eslint/scope-manager': 8.64.0 + '@typescript-eslint/types': 8.64.0 + '@typescript-eslint/typescript-estree': 8.64.0(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.64.0 debug: 4.4.3 - eslint: 10.6.0(jiti@2.7.0) + eslint: 10.7.0(jiti@2.7.0) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3)': + '@typescript-eslint/project-service@8.64.0(typescript@6.0.3)': dependencies: - '@typescript-eslint/scope-manager': 8.62.1 - '@typescript-eslint/types': 8.62.1 - '@typescript-eslint/typescript-estree': 8.62.1(typescript@6.0.3) - '@typescript-eslint/visitor-keys': 8.62.1 - debug: 4.4.3 - eslint: 10.6.0(jiti@2.7.0) - typescript: 6.0.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/project-service@8.56.1(typescript@6.0.3)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.62.1(typescript@6.0.3) - '@typescript-eslint/types': 8.62.1 + '@typescript-eslint/tsconfig-utils': 8.64.0(typescript@6.0.3) + '@typescript-eslint/types': 8.64.0 debug: 4.4.3 typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.62.1(typescript@6.0.3)': + '@typescript-eslint/scope-manager@8.64.0': dependencies: - '@typescript-eslint/tsconfig-utils': 8.62.1(typescript@6.0.3) - '@typescript-eslint/types': 8.62.1 + '@typescript-eslint/types': 8.64.0 + '@typescript-eslint/visitor-keys': 8.64.0 + + '@typescript-eslint/tsconfig-utils@8.64.0(typescript@6.0.3)': + dependencies: + typescript: 6.0.3 + + '@typescript-eslint/type-utils@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3)': + dependencies: + '@typescript-eslint/types': 8.64.0 + '@typescript-eslint/typescript-estree': 8.64.0(typescript@6.0.3) + '@typescript-eslint/utils': 8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3) debug: 4.4.3 - typescript: 6.0.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/rule-tester@8.56.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3)': - dependencies: - '@typescript-eslint/parser': 8.56.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - '@typescript-eslint/typescript-estree': 8.56.1(typescript@6.0.3) - '@typescript-eslint/utils': 8.56.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - ajv: 6.15.0 - eslint: 10.6.0(jiti@2.7.0) - json-stable-stringify-without-jsonify: 1.0.1 - lodash.merge: 4.6.2 - semver: 7.8.5 - transitivePeerDependencies: - - supports-color - - typescript - - '@typescript-eslint/scope-manager@8.56.1': - dependencies: - '@typescript-eslint/types': 8.56.1 - '@typescript-eslint/visitor-keys': 8.56.1 - - '@typescript-eslint/scope-manager@8.62.1': - dependencies: - '@typescript-eslint/types': 8.62.1 - '@typescript-eslint/visitor-keys': 8.62.1 - - '@typescript-eslint/tsconfig-utils@8.56.1(typescript@6.0.3)': - dependencies: - typescript: 6.0.3 - - '@typescript-eslint/tsconfig-utils@8.62.1(typescript@6.0.3)': - dependencies: - typescript: 6.0.3 - - '@typescript-eslint/type-utils@8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3)': - dependencies: - '@typescript-eslint/types': 8.62.1 - '@typescript-eslint/typescript-estree': 8.62.1(typescript@6.0.3) - '@typescript-eslint/utils': 8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - debug: 4.4.3 - eslint: 10.6.0(jiti@2.7.0) + eslint: 10.7.0(jiti@2.7.0) ts-api-utils: 2.5.0(typescript@6.0.3) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.56.1': {} + '@typescript-eslint/types@8.64.0': {} - '@typescript-eslint/types@8.62.1': {} - - '@typescript-eslint/typescript-estree@8.56.1(typescript@6.0.3)': + '@typescript-eslint/typescript-estree@8.64.0(typescript@6.0.3)': dependencies: - '@typescript-eslint/project-service': 8.56.1(typescript@6.0.3) - '@typescript-eslint/tsconfig-utils': 8.56.1(typescript@6.0.3) - '@typescript-eslint/types': 8.56.1 - '@typescript-eslint/visitor-keys': 8.56.1 + '@typescript-eslint/project-service': 8.64.0(typescript@6.0.3) + '@typescript-eslint/tsconfig-utils': 8.64.0(typescript@6.0.3) + '@typescript-eslint/types': 8.64.0 + '@typescript-eslint/visitor-keys': 8.64.0 debug: 4.4.3 minimatch: 10.2.5 semver: 7.8.5 @@ -3360,61 +3290,30 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.62.1(typescript@6.0.3)': + '@typescript-eslint/utils@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: - '@typescript-eslint/project-service': 8.62.1(typescript@6.0.3) - '@typescript-eslint/tsconfig-utils': 8.62.1(typescript@6.0.3) - '@typescript-eslint/types': 8.62.1 - '@typescript-eslint/visitor-keys': 8.62.1 - debug: 4.4.3 - minimatch: 10.2.5 - semver: 7.8.5 - tinyglobby: 0.2.17 - ts-api-utils: 2.5.0(typescript@6.0.3) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0(jiti@2.7.0)) + '@typescript-eslint/scope-manager': 8.64.0 + '@typescript-eslint/types': 8.64.0 + '@typescript-eslint/typescript-estree': 8.64.0(typescript@6.0.3) + eslint: 10.7.0(jiti@2.7.0) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.56.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3)': + '@typescript-eslint/visitor-keys@8.64.0': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0(jiti@2.7.0)) - '@typescript-eslint/scope-manager': 8.56.1 - '@typescript-eslint/types': 8.56.1 - '@typescript-eslint/typescript-estree': 8.56.1(typescript@6.0.3) - eslint: 10.6.0(jiti@2.7.0) - typescript: 6.0.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3)': - dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0(jiti@2.7.0)) - '@typescript-eslint/scope-manager': 8.62.1 - '@typescript-eslint/types': 8.62.1 - '@typescript-eslint/typescript-estree': 8.62.1(typescript@6.0.3) - eslint: 10.6.0(jiti@2.7.0) - typescript: 6.0.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/visitor-keys@8.56.1': - dependencies: - '@typescript-eslint/types': 8.56.1 + '@typescript-eslint/types': 8.64.0 eslint-visitor-keys: 5.0.1 - '@typescript-eslint/visitor-keys@8.62.1': - dependencies: - '@typescript-eslint/types': 8.62.1 - eslint-visitor-keys: 5.0.1 - - '@unocss/cli@66.7.4': + '@unocss/cli@66.7.5': dependencies: '@jridgewell/remapping': 2.3.5 - '@unocss/config': 66.7.4 - '@unocss/core': 66.7.4 - '@unocss/preset-wind3': 66.7.4 - '@unocss/preset-wind4': 66.7.4 - '@unocss/transformer-directives': 66.7.4 + '@unocss/config': 66.7.5 + '@unocss/core': 66.7.5 + '@unocss/preset-wind3': 66.7.5 + '@unocss/preset-wind4': 66.7.5 + '@unocss/transformer-directives': 66.7.5 cac: 7.0.0 chokidar: 5.0.0 colorette: 2.0.20 @@ -3425,159 +3324,159 @@ snapshots: tinyglobby: 0.2.17 unplugin-utils: 0.3.2 - '@unocss/config@66.7.4': + '@unocss/config@66.7.5': dependencies: - '@unocss/core': 66.7.4 + '@unocss/core': 66.7.5 colorette: 2.0.20 consola: 3.4.2 unconfig: 7.5.0 - '@unocss/core@66.7.4': {} + '@unocss/core@66.7.5': {} - '@unocss/extractor-arbitrary-variants@66.7.4': + '@unocss/extractor-arbitrary-variants@66.7.5': dependencies: - '@unocss/core': 66.7.4 + '@unocss/core': 66.7.5 - '@unocss/inspector@66.7.4': + '@unocss/inspector@66.7.5': dependencies: - '@unocss/core': 66.7.4 - '@unocss/rule-utils': 66.7.4 + '@unocss/core': 66.7.5 + '@unocss/rule-utils': 66.7.5 colorette: 2.0.20 gzip-size: 6.0.0 sirv: 3.0.2 - '@unocss/preset-attributify@66.7.4': + '@unocss/preset-attributify@66.7.5': dependencies: - '@unocss/core': 66.7.4 + '@unocss/core': 66.7.5 - '@unocss/preset-icons@66.7.4': + '@unocss/preset-icons@66.7.5': dependencies: - '@iconify/utils': 3.1.3 - '@unocss/core': 66.7.4 + '@iconify/utils': 3.1.4 + '@unocss/core': 66.7.5 ofetch: 1.5.1 - '@unocss/preset-mini@66.7.4': + '@unocss/preset-mini@66.7.5': dependencies: - '@unocss/core': 66.7.4 - '@unocss/extractor-arbitrary-variants': 66.7.4 - '@unocss/rule-utils': 66.7.4 + '@unocss/core': 66.7.5 + '@unocss/extractor-arbitrary-variants': 66.7.5 + '@unocss/rule-utils': 66.7.5 - '@unocss/preset-tagify@66.7.4': + '@unocss/preset-tagify@66.7.5': dependencies: - '@unocss/core': 66.7.4 + '@unocss/core': 66.7.5 - '@unocss/preset-typography@66.7.4': + '@unocss/preset-typography@66.7.5': dependencies: - '@unocss/core': 66.7.4 - '@unocss/rule-utils': 66.7.4 + '@unocss/core': 66.7.5 + '@unocss/rule-utils': 66.7.5 - '@unocss/preset-uno@66.7.4': + '@unocss/preset-uno@66.7.5': dependencies: - '@unocss/core': 66.7.4 - '@unocss/preset-wind3': 66.7.4 + '@unocss/core': 66.7.5 + '@unocss/preset-wind3': 66.7.5 - '@unocss/preset-web-fonts@66.7.4': + '@unocss/preset-web-fonts@66.7.5': dependencies: - '@unocss/core': 66.7.4 + '@unocss/core': 66.7.5 ofetch: 1.5.1 - '@unocss/preset-wind3@66.7.4': + '@unocss/preset-wind3@66.7.5': dependencies: - '@unocss/core': 66.7.4 - '@unocss/preset-mini': 66.7.4 - '@unocss/rule-utils': 66.7.4 + '@unocss/core': 66.7.5 + '@unocss/preset-mini': 66.7.5 + '@unocss/rule-utils': 66.7.5 - '@unocss/preset-wind4@66.7.4': + '@unocss/preset-wind4@66.7.5': dependencies: - '@unocss/core': 66.7.4 - '@unocss/extractor-arbitrary-variants': 66.7.4 - '@unocss/rule-utils': 66.7.4 + '@unocss/core': 66.7.5 + '@unocss/extractor-arbitrary-variants': 66.7.5 + '@unocss/rule-utils': 66.7.5 - '@unocss/preset-wind@66.7.4': + '@unocss/preset-wind@66.7.5': dependencies: - '@unocss/core': 66.7.4 - '@unocss/preset-wind3': 66.7.4 + '@unocss/core': 66.7.5 + '@unocss/preset-wind3': 66.7.5 - '@unocss/rule-utils@66.7.4': + '@unocss/rule-utils@66.7.5': dependencies: - '@unocss/core': 66.7.4 + '@unocss/core': 66.7.5 magic-string: 0.30.21 - '@unocss/transformer-attributify-jsx@66.7.4': + '@unocss/transformer-attributify-jsx@66.7.5': dependencies: - '@unocss/core': 66.7.4 + '@unocss/core': 66.7.5 oxc-parser: 0.131.0 oxc-walker: 0.7.0(oxc-parser@0.131.0) - '@unocss/transformer-compile-class@66.7.4': + '@unocss/transformer-compile-class@66.7.5': dependencies: - '@unocss/core': 66.7.4 + '@unocss/core': 66.7.5 - '@unocss/transformer-directives@66.7.4': + '@unocss/transformer-directives@66.7.5': dependencies: - '@unocss/core': 66.7.4 - '@unocss/rule-utils': 66.7.4 + '@unocss/core': 66.7.5 + '@unocss/rule-utils': 66.7.5 css-tree: 3.2.1 - '@unocss/transformer-variant-group@66.7.4': + '@unocss/transformer-variant-group@66.7.5': dependencies: - '@unocss/core': 66.7.4 + '@unocss/core': 66.7.5 - '@unocss/vite@66.7.4(vite@8.1.0(@types/node@25.9.4)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.4)(yaml@2.9.0))': + '@unocss/vite@66.7.5(vite@8.1.5(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0))': dependencies: '@jridgewell/remapping': 2.3.5 - '@unocss/config': 66.7.4 - '@unocss/core': 66.7.4 - '@unocss/inspector': 66.7.4 + '@unocss/config': 66.7.5 + '@unocss/core': 66.7.5 + '@unocss/inspector': 66.7.5 chokidar: 5.0.0 magic-string: 0.30.21 pathe: 2.0.3 tinyglobby: 0.2.17 unplugin-utils: 0.3.2 - vite: 8.1.0(@types/node@25.9.4)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.4)(yaml@2.9.0) + vite: 8.1.5(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0) - '@vitest/eslint-plugin@1.6.20(@typescript-eslint/eslint-plugin@8.62.1(@typescript-eslint/parser@8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3)': + '@vitest/eslint-plugin@1.6.23(@typescript-eslint/eslint-plugin@8.64.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: - '@typescript-eslint/scope-manager': 8.62.1 - '@typescript-eslint/utils': 8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - eslint: 10.6.0(jiti@2.7.0) + '@typescript-eslint/scope-manager': 8.64.0 + '@typescript-eslint/utils': 8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3) + eslint: 10.7.0(jiti@2.7.0) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.62.1(@typescript-eslint/parser@8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/eslint-plugin': 8.64.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@vue/compiler-core@3.5.20': + '@vue/compiler-core@3.5.40': dependencies: '@babel/parser': 7.29.7 - '@vue/shared': 3.5.20 - entities: 4.5.0 + '@vue/shared': 3.5.40 + entities: 7.0.1 estree-walker: 2.0.2 source-map-js: 1.2.1 - '@vue/compiler-dom@3.5.20': + '@vue/compiler-dom@3.5.40': dependencies: - '@vue/compiler-core': 3.5.20 - '@vue/shared': 3.5.20 + '@vue/compiler-core': 3.5.40 + '@vue/shared': 3.5.40 - '@vue/compiler-sfc@3.5.20': + '@vue/compiler-sfc@3.5.40': dependencies: '@babel/parser': 7.29.7 - '@vue/compiler-core': 3.5.20 - '@vue/compiler-dom': 3.5.20 - '@vue/compiler-ssr': 3.5.20 - '@vue/shared': 3.5.20 + '@vue/compiler-core': 3.5.40 + '@vue/compiler-dom': 3.5.40 + '@vue/compiler-ssr': 3.5.40 + '@vue/shared': 3.5.40 estree-walker: 2.0.2 magic-string: 0.30.21 - postcss: 8.5.16 + postcss: 8.5.20 source-map-js: 1.2.1 - '@vue/compiler-ssr@3.5.20': + '@vue/compiler-ssr@3.5.40': dependencies: - '@vue/compiler-dom': 3.5.20 - '@vue/shared': 3.5.20 + '@vue/compiler-dom': 3.5.40 + '@vue/shared': 3.5.40 - '@vue/shared@3.5.20': {} + '@vue/shared@3.5.40': {} '@zeit/schemas@2.36.0': {} @@ -3597,7 +3496,7 @@ snapshots: ajv@8.18.0: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.1.2 + fast-uri: 3.1.4 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 @@ -3605,10 +3504,6 @@ snapshots: dependencies: string-width: 4.2.3 - ansi-escapes@7.3.0: - dependencies: - environment: 1.1.0 - ansi-regex@5.0.1: {} ansi-regex@6.2.2: {} @@ -3627,6 +3522,8 @@ snapshots: arg@5.0.2: {} + argparse@2.0.1: {} + auto-changelog-plus@1.3.0: dependencies: auto-changelog: 2.6.0 @@ -3637,13 +3534,13 @@ snapshots: handlebars: 4.7.9 import-cwd: 3.0.0 parse-github-url: 1.0.4 - semver: 7.8.3 + semver: 7.8.5 balanced-match@1.0.2: {} balanced-match@4.0.4: {} - baseline-browser-mapping@2.10.40: {} + baseline-browser-mapping@2.10.43: {} boolbase@1.0.0: {} @@ -3651,14 +3548,14 @@ snapshots: dependencies: ansi-align: 3.0.1 camelcase: 7.0.1 - chalk: 5.6.2 + chalk: 5.0.1 cli-boxes: 3.0.0 string-width: 5.1.2 type-fest: 2.19.0 widest-line: 4.0.1 wrap-ansi: 8.1.0 - brace-expansion@1.1.15: + brace-expansion@1.1.16: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 @@ -3667,13 +3564,13 @@ snapshots: dependencies: balanced-match: 4.0.4 - browserslist@4.28.4: + browserslist@4.28.6: dependencies: - baseline-browser-mapping: 2.10.40 - caniuse-lite: 1.0.30001799 - electron-to-chromium: 1.5.381 - node-releases: 2.0.50 - update-browserslist-db: 1.2.3(browserslist@4.28.4) + baseline-browser-mapping: 2.10.43 + caniuse-lite: 1.0.30001806 + electron-to-chromium: 1.5.393 + node-releases: 2.0.51 + update-browserslist-db: 1.2.3(browserslist@4.28.6) builtin-modules@5.3.0: {} @@ -3685,7 +3582,7 @@ snapshots: camelcase@7.0.1: {} - caniuse-lite@1.0.30001799: {} + caniuse-lite@1.0.30001806: {} ccount@2.0.1: {} @@ -3720,11 +3617,6 @@ snapshots: cli-spinners@3.4.0: {} - cli-truncate@5.2.0: - dependencies: - slice-ansi: 8.0.0 - string-width: 8.2.1 - clipboardy@3.0.0: dependencies: arch: 2.2.0 @@ -3745,12 +3637,12 @@ snapshots: colorette@2.0.20: {} + commander@14.0.3: {} + commander@7.2.0: {} commander@8.3.0: {} - comment-parser@1.4.5: {} - comment-parser@1.4.7: {} compressible@2.0.18: @@ -3790,7 +3682,7 @@ snapshots: core-js-compat@3.49.0: dependencies: - browserslist: 4.28.4 + browserslist: 4.28.6 cross-spawn@7.0.6: dependencies: @@ -3841,7 +3733,7 @@ snapshots: eastasianwidth@0.2.0: {} - electron-to-chromium@1.5.381: {} + electron-to-chromium@1.5.393: {} emoji-regex@10.6.0: {} @@ -3851,43 +3743,43 @@ snapshots: empathic@2.0.1: {} - enhanced-resolve@5.24.1: + enhanced-resolve@5.24.2: dependencies: graceful-fs: 4.2.11 tapable: 2.3.3 entities@4.5.0: {} - environment@1.1.0: {} + entities@7.0.1: {} - esbuild@0.28.0: + esbuild@0.28.1: optionalDependencies: - '@esbuild/aix-ppc64': 0.28.0 - '@esbuild/android-arm': 0.28.0 - '@esbuild/android-arm64': 0.28.0 - '@esbuild/android-x64': 0.28.0 - '@esbuild/darwin-arm64': 0.28.0 - '@esbuild/darwin-x64': 0.28.0 - '@esbuild/freebsd-arm64': 0.28.0 - '@esbuild/freebsd-x64': 0.28.0 - '@esbuild/linux-arm': 0.28.0 - '@esbuild/linux-arm64': 0.28.0 - '@esbuild/linux-ia32': 0.28.0 - '@esbuild/linux-loong64': 0.28.0 - '@esbuild/linux-mips64el': 0.28.0 - '@esbuild/linux-ppc64': 0.28.0 - '@esbuild/linux-riscv64': 0.28.0 - '@esbuild/linux-s390x': 0.28.0 - '@esbuild/linux-x64': 0.28.0 - '@esbuild/netbsd-arm64': 0.28.0 - '@esbuild/netbsd-x64': 0.28.0 - '@esbuild/openbsd-arm64': 0.28.0 - '@esbuild/openbsd-x64': 0.28.0 - '@esbuild/openharmony-arm64': 0.28.0 - '@esbuild/sunos-x64': 0.28.0 - '@esbuild/win32-arm64': 0.28.0 - '@esbuild/win32-ia32': 0.28.0 - '@esbuild/win32-x64': 0.28.0 + '@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: {} @@ -3895,63 +3787,62 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-compat-utils@0.5.1(eslint@10.6.0(jiti@2.7.0)): + eslint-compat-utils@0.5.1(eslint@10.7.0(jiti@2.7.0)): dependencies: - eslint: 10.6.0(jiti@2.7.0) + eslint: 10.7.0(jiti@2.7.0) semver: 7.8.5 - eslint-config-flat-gitignore@2.3.0(eslint@10.6.0(jiti@2.7.0)): + eslint-config-flat-gitignore@2.3.0(eslint@10.7.0(jiti@2.7.0)): dependencies: - '@eslint/compat': 2.1.0(eslint@10.6.0(jiti@2.7.0)) - eslint: 10.6.0(jiti@2.7.0) + '@eslint/compat': 2.1.0(eslint@10.7.0(jiti@2.7.0)) + eslint: 10.7.0(jiti@2.7.0) eslint-flat-config-utils@3.2.0: dependencies: '@eslint/config-helpers': 0.5.5 pathe: 2.0.3 - eslint-json-compat-utils@0.2.3(eslint@10.6.0(jiti@2.7.0))(jsonc-eslint-parser@3.1.0): + eslint-json-compat-utils@0.2.3(eslint@10.7.0(jiti@2.7.0))(jsonc-eslint-parser@3.1.0): dependencies: - eslint: 10.6.0(jiti@2.7.0) + eslint: 10.7.0(jiti@2.7.0) esquery: 1.7.0 jsonc-eslint-parser: 3.1.0 - eslint-merge-processors@2.0.0(eslint@10.6.0(jiti@2.7.0)): + eslint-merge-processors@2.0.0(eslint@10.7.0(jiti@2.7.0)): dependencies: - eslint: 10.6.0(jiti@2.7.0) + eslint: 10.7.0(jiti@2.7.0) - eslint-plugin-antfu@3.2.3(eslint@10.6.0(jiti@2.7.0)): + eslint-plugin-antfu@3.2.3(eslint@10.7.0(jiti@2.7.0)): dependencies: - eslint: 10.6.0(jiti@2.7.0) + eslint: 10.7.0(jiti@2.7.0) - eslint-plugin-command@3.5.2(@typescript-eslint/rule-tester@8.56.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3))(@typescript-eslint/typescript-estree@8.62.1(typescript@6.0.3))(@typescript-eslint/utils@8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.6.0(jiti@2.7.0)): + eslint-plugin-command@3.5.3(@typescript-eslint/typescript-estree@8.64.0(typescript@6.0.3))(@typescript-eslint/utils@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.7.0(jiti@2.7.0)): dependencies: - '@es-joy/jsdoccomment': 0.84.0 - '@typescript-eslint/rule-tester': 8.56.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - '@typescript-eslint/typescript-estree': 8.62.1(typescript@6.0.3) - '@typescript-eslint/utils': 8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - eslint: 10.6.0(jiti@2.7.0) + '@es-joy/jsdoccomment': 0.88.0 + '@typescript-eslint/typescript-estree': 8.64.0(typescript@6.0.3) + '@typescript-eslint/utils': 8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3) + eslint: 10.7.0(jiti@2.7.0) - eslint-plugin-es-x@7.8.0(eslint@10.6.0(jiti@2.7.0)): + eslint-plugin-es-x@7.8.0(eslint@10.7.0(jiti@2.7.0)): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0(jiti@2.7.0)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0(jiti@2.7.0)) '@eslint-community/regexpp': 4.12.2 - eslint: 10.6.0(jiti@2.7.0) - eslint-compat-utils: 0.5.1(eslint@10.6.0(jiti@2.7.0)) + eslint: 10.7.0(jiti@2.7.0) + eslint-compat-utils: 0.5.1(eslint@10.7.0(jiti@2.7.0)) - eslint-plugin-import-lite@0.6.0(eslint@10.6.0(jiti@2.7.0)): + eslint-plugin-import-lite@0.6.0(eslint@10.7.0(jiti@2.7.0)): dependencies: - eslint: 10.6.0(jiti@2.7.0) + eslint: 10.7.0(jiti@2.7.0) - eslint-plugin-jsdoc@63.0.10(eslint@10.6.0(jiti@2.7.0)): + eslint-plugin-jsdoc@63.1.0(eslint@10.7.0(jiti@2.7.0)): dependencies: - '@es-joy/jsdoccomment': 0.87.0 + '@es-joy/jsdoccomment': 0.88.0 '@es-joy/resolve.exports': 1.2.0 are-docs-informative: 0.0.2 comment-parser: 1.4.7 debug: 4.4.3 escape-string-regexp: 4.0.0 - eslint: 10.6.0(jiti@2.7.0) + eslint: 10.7.0(jiti@2.7.0) espree: 11.2.0 esquery: 1.7.0 html-entities: 2.6.0 @@ -3963,27 +3854,27 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-jsonc@3.2.0(eslint@10.6.0(jiti@2.7.0)): + eslint-plugin-jsonc@3.3.0(eslint@10.7.0(jiti@2.7.0)): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0(jiti@2.7.0)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0(jiti@2.7.0)) '@eslint/core': 1.2.1 '@eslint/plugin-kit': 0.7.2 '@ota-meshi/ast-token-store': 0.3.0 diff-sequences: 29.6.3 - eslint: 10.6.0(jiti@2.7.0) - eslint-json-compat-utils: 0.2.3(eslint@10.6.0(jiti@2.7.0))(jsonc-eslint-parser@3.1.0) + eslint: 10.7.0(jiti@2.7.0) + eslint-json-compat-utils: 0.2.3(eslint@10.7.0(jiti@2.7.0))(jsonc-eslint-parser@3.1.0) jsonc-eslint-parser: 3.1.0 natural-compare: 1.4.0 synckit: 0.11.13 transitivePeerDependencies: - '@eslint/json' - eslint-plugin-n@18.2.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3): + eslint-plugin-n@18.2.2(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0(jiti@2.7.0)) - enhanced-resolve: 5.24.1 - eslint: 10.6.0(jiti@2.7.0) - eslint-plugin-es-x: 7.8.0(eslint@10.6.0(jiti@2.7.0)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0(jiti@2.7.0)) + enhanced-resolve: 5.24.2 + eslint: 10.7.0(jiti@2.7.0) + eslint-plugin-es-x: 7.8.0(eslint@10.7.0(jiti@2.7.0)) get-tsconfig: 4.14.0 globals: 15.15.0 globrex: 0.1.2 @@ -3994,58 +3885,58 @@ snapshots: eslint-plugin-no-only-tests@3.4.0: {} - eslint-plugin-perfectionist@5.9.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3): + eslint-plugin-perfectionist@5.10.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3): dependencies: - '@typescript-eslint/utils': 8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - eslint: 10.6.0(jiti@2.7.0) + '@typescript-eslint/utils': 8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3) + eslint: 10.7.0(jiti@2.7.0) natural-orderby: 5.0.0 transitivePeerDependencies: - supports-color - typescript - eslint-plugin-pnpm@1.6.1(eslint@10.6.0(jiti@2.7.0)): + eslint-plugin-pnpm@1.6.1(eslint@10.7.0(jiti@2.7.0)): dependencies: empathic: 2.0.1 - eslint: 10.6.0(jiti@2.7.0) + eslint: 10.7.0(jiti@2.7.0) jsonc-eslint-parser: 3.1.0 pathe: 2.0.3 pnpm-workspace-yaml: 1.6.1 tinyglobby: 0.2.17 yaml: 2.9.0 - yaml-eslint-parser: 2.0.0 + yaml-eslint-parser: 2.1.0 - eslint-plugin-regexp@3.1.1(eslint@10.6.0(jiti@2.7.0)): + eslint-plugin-regexp@3.1.1(eslint@10.7.0(jiti@2.7.0)): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0(jiti@2.7.0)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0(jiti@2.7.0)) '@eslint-community/regexpp': 4.12.2 comment-parser: 1.4.7 - eslint: 10.6.0(jiti@2.7.0) + eslint: 10.7.0(jiti@2.7.0) jsdoc-type-pratt-parser: 7.2.0 refa: 0.12.1 regexp-ast-analysis: 0.7.1 scslre: 0.3.0 - eslint-plugin-toml@1.4.0(eslint@10.6.0(jiti@2.7.0)): + eslint-plugin-toml@1.4.0(eslint@10.7.0(jiti@2.7.0)): dependencies: '@eslint/core': 1.2.1 '@eslint/plugin-kit': 0.7.2 '@ota-meshi/ast-token-store': 0.3.0 debug: 4.4.3 - eslint: 10.6.0(jiti@2.7.0) + eslint: 10.7.0(jiti@2.7.0) toml-eslint-parser: 1.0.3 transitivePeerDependencies: - supports-color - eslint-plugin-unicorn@68.0.0(eslint@10.6.0(jiti@2.7.0)): + eslint-plugin-unicorn@68.0.0(eslint@10.7.0(jiti@2.7.0)): dependencies: '@babel/helper-validator-identifier': 7.29.7 - '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0(jiti@2.7.0)) - browserslist: 4.28.4 + '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0(jiti@2.7.0)) + browserslist: 4.28.6 change-case: 5.4.4 ci-info: 4.4.0 core-js-compat: 3.49.0 detect-indent: 7.0.2 - eslint: 10.6.0(jiti@2.7.0) + eslint: 10.7.0(jiti@2.7.0) find-up-simple: 1.0.1 globals: 17.7.0 indent-string: 5.0.0 @@ -4056,41 +3947,41 @@ snapshots: semver: 7.8.5 strip-indent: 4.1.1 - eslint-plugin-unused-imports@4.4.1(@typescript-eslint/eslint-plugin@8.62.1(@typescript-eslint/parser@8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.6.0(jiti@2.7.0)): + eslint-plugin-unused-imports@4.4.1(@typescript-eslint/eslint-plugin@8.64.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.7.0(jiti@2.7.0)): dependencies: - eslint: 10.6.0(jiti@2.7.0) + eslint: 10.7.0(jiti@2.7.0) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.62.1(@typescript-eslint/parser@8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/eslint-plugin': 8.64.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3) - eslint-plugin-vue@10.9.2(@stylistic/eslint-plugin@5.10.0(eslint@10.6.0(jiti@2.7.0)))(@typescript-eslint/parser@8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.6.0(jiti@2.7.0))(vue-eslint-parser@10.4.1(eslint@10.6.0(jiti@2.7.0))): + eslint-plugin-vue@10.9.2(@stylistic/eslint-plugin@5.10.0(eslint@10.7.0(jiti@2.7.0)))(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.7.0(jiti@2.7.0))(vue-eslint-parser@10.4.1(eslint@10.7.0(jiti@2.7.0))): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0(jiti@2.7.0)) - eslint: 10.6.0(jiti@2.7.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0(jiti@2.7.0)) + eslint: 10.7.0(jiti@2.7.0) natural-compare: 1.4.0 nth-check: 2.1.1 postcss-selector-parser: 7.1.4 semver: 7.8.5 - vue-eslint-parser: 10.4.1(eslint@10.6.0(jiti@2.7.0)) + vue-eslint-parser: 10.4.1(eslint@10.7.0(jiti@2.7.0)) xml-name-validator: 4.0.0 optionalDependencies: - '@stylistic/eslint-plugin': 5.10.0(eslint@10.6.0(jiti@2.7.0)) - '@typescript-eslint/parser': 8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@stylistic/eslint-plugin': 5.10.0(eslint@10.7.0(jiti@2.7.0)) + '@typescript-eslint/parser': 8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3) - eslint-plugin-yml@3.5.0(eslint@10.6.0(jiti@2.7.0)): + eslint-plugin-yml@3.6.0(eslint@10.7.0(jiti@2.7.0)): dependencies: '@eslint/core': 1.2.1 '@eslint/plugin-kit': 0.7.2 '@ota-meshi/ast-token-store': 0.3.0 diff-sequences: 29.6.3 escape-string-regexp: 5.0.0 - eslint: 10.6.0(jiti@2.7.0) + eslint: 10.7.0(jiti@2.7.0) natural-compare: 1.4.0 - yaml-eslint-parser: 2.0.0 + yaml-eslint-parser: 2.1.0 - eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.20)(eslint@10.6.0(jiti@2.7.0)): + eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.40)(eslint@10.7.0(jiti@2.7.0)): dependencies: - '@vue/compiler-sfc': 3.5.20 - eslint: 10.6.0(jiti@2.7.0) + '@vue/compiler-sfc': 3.5.40 + eslint: 10.7.0(jiti@2.7.0) eslint-scope@9.1.2: dependencies: @@ -4105,9 +3996,9 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.6.0(jiti@2.7.0): + eslint@10.7.0(jiti@2.7.0): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0(jiti@2.7.0)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0(jiti@2.7.0)) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.23.5 '@eslint/config-helpers': 0.6.0 @@ -4172,8 +4063,6 @@ snapshots: esutils@2.0.3: {} - eventemitter3@5.0.4: {} - execa@5.1.1: dependencies: cross-spawn: 7.0.6 @@ -4200,7 +4089,7 @@ snapshots: dependencies: fast-string-truncated-width: 3.0.3 - fast-uri@3.1.2: {} + fast-uri@3.1.4: {} fast-wrap-ansi@0.2.2: dependencies: @@ -4210,9 +4099,9 @@ snapshots: dependencies: format: 0.2.2 - fdir@6.5.0(picomatch@4.0.4): + fdir@6.5.0(picomatch@4.0.5): optionalDependencies: - picomatch: 4.0.4 + picomatch: 4.0.5 file-entry-cache@8.0.0: dependencies: @@ -4288,7 +4177,7 @@ snapshots: ignore@5.3.2: {} - ignore@7.0.5: {} + ignore@7.0.6: {} import-cwd@3.0.0: dependencies: @@ -4316,10 +4205,6 @@ snapshots: is-fullwidth-code-point@3.0.0: {} - is-fullwidth-code-point@5.1.0: - dependencies: - get-east-asian-width: 1.6.0 - is-glob@4.0.3: dependencies: is-extglob: 2.1.1 @@ -4340,8 +4225,6 @@ snapshots: jiti@2.7.0: {} - jsdoc-type-pratt-parser@7.1.1: {} - jsdoc-type-pratt-parser@7.2.0: {} jsesc@3.1.0: {} @@ -4428,23 +4311,18 @@ snapshots: lightningcss-win32-arm64-msvc: 1.32.0 lightningcss-win32-x64-msvc: 1.32.0 - lint-staged@17.0.8: + linkify-it@5.0.2: dependencies: - listr2: 10.2.2 - picomatch: 4.0.4 + uc.micro: 2.1.0 + + lint-staged@17.1.0: + dependencies: + picomatch: 4.0.5 string-argv: 0.3.2 tinyexec: 1.2.4 optionalDependencies: yaml: 2.9.0 - listr2@10.2.2: - dependencies: - cli-truncate: 5.2.0 - eventemitter3: 5.0.4 - log-update: 6.1.0 - rfdc: 1.4.1 - wrap-ansi: 10.0.0 - local-pkg@1.2.1: dependencies: mlly: 1.8.2 @@ -4455,23 +4333,15 @@ snapshots: dependencies: p-locate: 5.0.0 - lodash.merge@4.6.2: {} - log-symbols@7.0.1: dependencies: is-unicode-supported: 2.1.0 yoctocolors: 2.1.2 - log-update@6.1.0: - dependencies: - ansi-escapes: 7.3.0 - cli-cursor: 5.0.0 - slice-ansi: 7.1.2 - strip-ansi: 7.2.0 - wrap-ansi: 9.0.2 - longest-streak@3.1.0: {} + lunr@2.3.9: {} + magic-regexp@0.10.0: dependencies: estree-walker: 3.0.3 @@ -4486,6 +4356,15 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 + markdown-it@14.3.0: + dependencies: + argparse: 2.0.1 + entities: 4.5.0 + linkify-it: 5.0.2 + mdurl: 2.0.0 + punycode.js: 2.3.1 + uc.micro: 2.1.0 + markdown-table@3.0.4: {} mdast-util-find-and-replace@3.0.2: @@ -4582,7 +4461,7 @@ snapshots: mdast-util-math@3.0.0: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/mdast': 4.0.4 devlop: 1.1.0 longest-streak: 3.1.0 @@ -4615,6 +4494,8 @@ snapshots: mdn-data@2.27.1: {} + mdurl@2.0.0: {} + merge-stream@2.0.0: {} micromark-core-commonmark@2.0.3: @@ -4843,7 +4724,7 @@ snapshots: minimatch@3.1.5: dependencies: - brace-expansion: 1.1.15 + brace-expansion: 1.1.16 minimist@1.2.8: {} @@ -4854,7 +4735,7 @@ snapshots: pkg-types: 1.3.1 ufo: 1.6.4 - module-replacements@3.0.0-beta.8: {} + module-replacements@3.0.0: {} mrmime@2.0.1: {} @@ -4862,7 +4743,7 @@ snapshots: ms@2.1.3: {} - nanoid@3.3.15: {} + nanoid@3.3.16: {} natural-compare@1.4.0: {} @@ -4874,7 +4755,7 @@ snapshots: node-fetch-native@1.6.7: {} - node-releases@2.0.50: {} + node-releases@2.0.51: {} npm-run-path@4.0.1: dependencies: @@ -4920,7 +4801,7 @@ snapshots: is-unicode-supported: 2.1.0 log-symbols: 7.0.1 stdin-discarder: 0.3.2 - string-width: 8.2.1 + string-width: 8.2.2 oxc-parser@0.131.0: dependencies: @@ -4960,7 +4841,7 @@ snapshots: dependencies: p-limit: 3.1.0 - package-manager-detector@1.6.0: {} + package-manager-detector@1.7.0: {} parse-github-url@1.0.4: {} @@ -4986,7 +4867,7 @@ snapshots: picocolors@1.1.1: {} - picomatch@4.0.4: {} + picomatch@4.0.5: {} pkg-types@1.3.1: dependencies: @@ -5011,14 +4892,16 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss@8.5.16: + postcss@8.5.20: dependencies: - nanoid: 3.3.15 + nanoid: 3.3.16 picocolors: 1.1.1 source-map-js: 1.2.1 prelude-ls@1.2.1: {} + punycode.js@2.3.1: {} + punycode@2.3.1: {} quansync@0.2.11: {} @@ -5073,28 +4956,26 @@ snapshots: onetime: 7.0.0 signal-exit: 4.1.0 - rfdc@1.4.1: {} - - rolldown@1.1.3: + rolldown@1.1.5: dependencies: - '@oxc-project/types': 0.137.0 + '@oxc-project/types': 0.139.0 '@rolldown/pluginutils': 1.0.1 optionalDependencies: - '@rolldown/binding-android-arm64': 1.1.3 - '@rolldown/binding-darwin-arm64': 1.1.3 - '@rolldown/binding-darwin-x64': 1.1.3 - '@rolldown/binding-freebsd-x64': 1.1.3 - '@rolldown/binding-linux-arm-gnueabihf': 1.1.3 - '@rolldown/binding-linux-arm64-gnu': 1.1.3 - '@rolldown/binding-linux-arm64-musl': 1.1.3 - '@rolldown/binding-linux-ppc64-gnu': 1.1.3 - '@rolldown/binding-linux-s390x-gnu': 1.1.3 - '@rolldown/binding-linux-x64-gnu': 1.1.3 - '@rolldown/binding-linux-x64-musl': 1.1.3 - '@rolldown/binding-openharmony-arm64': 1.1.3 - '@rolldown/binding-wasm32-wasi': 1.1.3 - '@rolldown/binding-win32-arm64-msvc': 1.1.3 - '@rolldown/binding-win32-x64-msvc': 1.1.3 + '@rolldown/binding-android-arm64': 1.1.5 + '@rolldown/binding-darwin-arm64': 1.1.5 + '@rolldown/binding-darwin-x64': 1.1.5 + '@rolldown/binding-freebsd-x64': 1.1.5 + '@rolldown/binding-linux-arm-gnueabihf': 1.1.5 + '@rolldown/binding-linux-arm64-gnu': 1.1.5 + '@rolldown/binding-linux-arm64-musl': 1.1.5 + '@rolldown/binding-linux-ppc64-gnu': 1.1.5 + '@rolldown/binding-linux-s390x-gnu': 1.1.5 + '@rolldown/binding-linux-x64-gnu': 1.1.5 + '@rolldown/binding-linux-x64-musl': 1.1.5 + '@rolldown/binding-openharmony-arm64': 1.1.5 + '@rolldown/binding-wasm32-wasi': 1.1.5 + '@rolldown/binding-win32-arm64-msvc': 1.1.5 + '@rolldown/binding-win32-x64-msvc': 1.1.5 rxjs@7.8.2: dependencies: @@ -5108,8 +4989,6 @@ snapshots: refa: 0.12.1 regexp-ast-analysis: 0.7.1 - semver@7.8.3: {} - semver@7.8.5: {} serve-handler@6.1.7: @@ -5160,16 +5039,6 @@ snapshots: sisteransi@1.0.5: {} - slice-ansi@7.1.2: - dependencies: - ansi-styles: 6.2.3 - is-fullwidth-code-point: 5.1.0 - - slice-ansi@8.0.0: - dependencies: - ansi-styles: 6.2.3 - is-fullwidth-code-point: 5.1.0 - source-map-js@1.2.1: {} source-map@0.6.1: {} @@ -5205,7 +5074,7 @@ snapshots: get-east-asian-width: 1.6.0 strip-ansi: 7.2.0 - string-width@8.2.1: + string-width@8.2.2: dependencies: get-east-asian-width: 1.6.0 strip-ansi: 7.2.0 @@ -5240,8 +5109,8 @@ snapshots: tinyglobby@0.2.17: dependencies: - fdir: 6.5.0(picomatch@4.0.4) - picomatch: 4.0.4 + fdir: 6.5.0(picomatch@4.0.5) + picomatch: 4.0.5 to-valid-identifier@1.0.0: dependencies: @@ -5252,6 +5121,8 @@ snapshots: dependencies: eslint-visitor-keys: 5.0.1 + toml@3.0.0: {} + totalist@3.0.1: {} tree-kill@1.2.2: {} @@ -5262,9 +5133,9 @@ snapshots: tslib@2.8.1: {} - tsx@4.22.4: + tsx@4.23.1: dependencies: - esbuild: 0.28.0 + esbuild: 0.28.1 optionalDependencies: fsevents: 2.3.3 @@ -5276,8 +5147,19 @@ snapshots: type-level-regexp@0.1.17: {} + typedoc@0.28.20(typescript@6.0.3): + dependencies: + '@gerrit0/mini-shiki': 3.23.0 + lunr: 2.3.9 + markdown-it: 14.3.0 + minimatch: 10.2.5 + typescript: 6.0.3 + yaml: 2.9.0 + typescript@6.0.3: {} + uc.micro@2.1.0: {} + ufo@1.6.4: {} uglify-js@3.19.3: @@ -5298,8 +5180,6 @@ snapshots: undici-types@7.24.6: {} - undici-types@8.3.0: {} - unist-util-is@6.0.1: dependencies: '@types/unist': 3.0.3 @@ -5326,43 +5206,43 @@ snapshots: universalify@2.0.1: {} - unocss@66.7.4(vite@8.1.0(@types/node@25.9.4)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.4)(yaml@2.9.0)): + unocss@66.7.5(vite@8.1.5(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0)): dependencies: - '@unocss/cli': 66.7.4 - '@unocss/core': 66.7.4 - '@unocss/preset-attributify': 66.7.4 - '@unocss/preset-icons': 66.7.4 - '@unocss/preset-mini': 66.7.4 - '@unocss/preset-tagify': 66.7.4 - '@unocss/preset-typography': 66.7.4 - '@unocss/preset-uno': 66.7.4 - '@unocss/preset-web-fonts': 66.7.4 - '@unocss/preset-wind': 66.7.4 - '@unocss/preset-wind3': 66.7.4 - '@unocss/preset-wind4': 66.7.4 - '@unocss/transformer-attributify-jsx': 66.7.4 - '@unocss/transformer-compile-class': 66.7.4 - '@unocss/transformer-directives': 66.7.4 - '@unocss/transformer-variant-group': 66.7.4 - '@unocss/vite': 66.7.4(vite@8.1.0(@types/node@25.9.4)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.4)(yaml@2.9.0)) + '@unocss/cli': 66.7.5 + '@unocss/core': 66.7.5 + '@unocss/preset-attributify': 66.7.5 + '@unocss/preset-icons': 66.7.5 + '@unocss/preset-mini': 66.7.5 + '@unocss/preset-tagify': 66.7.5 + '@unocss/preset-typography': 66.7.5 + '@unocss/preset-uno': 66.7.5 + '@unocss/preset-web-fonts': 66.7.5 + '@unocss/preset-wind': 66.7.5 + '@unocss/preset-wind3': 66.7.5 + '@unocss/preset-wind4': 66.7.5 + '@unocss/transformer-attributify-jsx': 66.7.5 + '@unocss/transformer-compile-class': 66.7.5 + '@unocss/transformer-directives': 66.7.5 + '@unocss/transformer-variant-group': 66.7.5 + '@unocss/vite': 66.7.5(vite@8.1.5(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0)) transitivePeerDependencies: - vite unplugin-utils@0.3.2: dependencies: pathe: 2.0.3 - picomatch: 4.0.4 + picomatch: 4.0.5 unplugin@2.3.11: dependencies: '@jridgewell/remapping': 2.3.5 acorn: 8.17.0 - picomatch: 4.0.4 + picomatch: 4.0.5 webpack-virtual-modules: 0.6.2 - update-browserslist-db@1.2.3(browserslist@4.28.4): + update-browserslist-db@1.2.3(browserslist@4.28.6): dependencies: - browserslist: 4.28.4 + browserslist: 4.28.6 escalade: 3.2.0 picocolors: 1.1.1 @@ -5379,25 +5259,25 @@ snapshots: vary@1.1.2: {} - vite@8.1.0(@types/node@25.9.4)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.4)(yaml@2.9.0): + vite@8.1.5(@types/node@25.9.5)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0): dependencies: lightningcss: 1.32.0 - picomatch: 4.0.4 - postcss: 8.5.16 - rolldown: 1.1.3 + picomatch: 4.0.5 + postcss: 8.5.20 + rolldown: 1.1.5 tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 25.9.4 - esbuild: 0.28.0 + '@types/node': 25.9.5 + esbuild: 0.28.1 fsevents: 2.3.3 jiti: 2.7.0 - tsx: 4.22.4 + tsx: 4.23.1 yaml: 2.9.0 - vue-eslint-parser@10.4.1(eslint@10.6.0(jiti@2.7.0)): + vue-eslint-parser@10.4.1(eslint@10.7.0(jiti@2.7.0)): dependencies: debug: 4.4.3 - eslint: 10.6.0(jiti@2.7.0) + eslint: 10.7.0(jiti@2.7.0) eslint-scope: 9.1.2 eslint-visitor-keys: 5.0.1 espree: 11.2.0 @@ -5420,12 +5300,6 @@ snapshots: wordwrap@1.0.0: {} - wrap-ansi@10.0.0: - dependencies: - ansi-styles: 6.2.3 - string-width: 8.2.1 - strip-ansi: 7.2.0 - wrap-ansi@8.1.0: dependencies: ansi-styles: 6.2.3 @@ -5442,7 +5316,7 @@ snapshots: y18n@5.0.8: {} - yaml-eslint-parser@2.0.0: + yaml-eslint-parser@2.1.0: dependencies: eslint-visitor-keys: 5.0.1 yaml: 2.9.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index b20b98c6..23e15b0a 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -7,5 +7,6 @@ packages: - packages/* allowBuilds: '@parcel/watcher': true + core-js: true esbuild: true simple-git-hooks: true diff --git a/typedoc.json b/typedoc.json new file mode 100644 index 00000000..4ec6daa8 --- /dev/null +++ b/typedoc.json @@ -0,0 +1,28 @@ +{ + "$schema": "https://typedoc.org/schema.json", + "entryPoints": [ + "assets/js" + ], + "entryPointStrategy": "expand", + "tsconfig": "assets/tsconfig.json", + "out": "../fixit-docs/static/references/javascript", + "skipErrorChecking": true, + "excludePrivate": true, + "excludeInternal": true, + "exclude": [ + "assets/js/types/index.ts", + "assets/js/utils/index.ts", + "**/main.ts", + "**/head/**", + "**/lib/**", + "**/pages/**" + ], + "name": "FixIt JavaScript API", + "navigationLinks": { + "FixIt Documentation": "https://fixit.lruihao.cn", + "GitHub": "https://github.com/hugo-fixit/FixIt" + }, + "categorizeByGroup": true, + "readme": "none", + "sourceLinkTemplate": "https://github.com/hugo-fixit/FixIt/blob/{gitRevision}/{path}#L{line}" +}